ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Flet SecureStorage 的 KeyCipherAlgorithm 详解:Android KeyStore 密钥加密算法选择指南

Flet SecureStorage 的 KeyCipherAlgorithm 详解:Android KeyStore 密钥加密算法选择指南 Flet SecureStorage 的 KeyCipherAlgorithm 详解Android KeyStore 密钥加密算法选择指南【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/fletKeyCipherAlgorithm是 Fletflet-secure-storage扩展中用于控制Android KeyStore 密钥加密Key Wrapping算法的枚举类型它决定了敏感数据在 Android 设备上加密时的密钥保护策略。本文将围绕该枚举的三个成员展开结合仓库源码解析其安全语义、生物识别兼容性差异并给出在AndroidOptions中实际配置的完整示例帮助你为不同安全需求的应用场景选择正确的算法。KeyCipherAlgorithm 是什么在 Flet 的 Android 安全存储体系里存储链路分为两层加密一层是「数据加密」——使用StorageCipherAlgorithm加密实际存储的内容另一层是「密钥加密」——使用KeyCipherAlgorithm加密/包裹wrap那把用于加密数据的对称密钥secret key。后者之所以必要是因为 Android KeyStore 本身不直接暴露密钥明文需要通过指定的密码学算法把密钥安全地「包裹」起来再持久化。KeyCipherAlgorithm枚举定义于 sdk/python/packages/flet-secure-storage/src/flet_secure_storage/types.pyclass KeyCipherAlgorithm(Enum): Algorithm used to encrypt/wrap the secret key in Android KeyStore. Different algorithms provide different security guarantees and compatibility levels: - RSA algorithms wrap the AES encryption key with RSA (no biometric support) - AES algorithm stores the key directly in Android KeyStore (supports biometric authentication) See the [AndroidOptions] class for usage examples and combinations. RSA_ECB_PKCS1_PADDING RSA_ECB_PKCS1Padding RSA_ECB_OAEP_WITH_SHA256_AND_MGF1_PADDING RSA_ECB_OAEPwithSHA_256andMGF1Padding AES_GCM_NO_PADDING AES_GCM_NoPadding从源码 docstring 可以提炼出核心分类逻辑RSA 系列算法用 RSA 公钥去包裹 AES 加密密钥不支持生物识别AES 算法则把密钥直接存放在 Android KeyStore 中支持生物识别认证。三个枚举成员的语义与适用场景枚举成员底层算法API 要求生物识别定位RSA_ECB_PKCS1_PADDINGRSA/ECB/PKCS1Padding无特殊要求不支持旧版向后兼容RSA_ECB_OAEP_WITH_SHA256_AND_MGF1_PADDINGRSA/ECB/OAEPWithSHA-256AndMGF1PaddingAPI 23不支持默认且推荐的 RSA 方案AES_GCM_NO_PADDINGAES/GCM/NoPaddingAPI 23 基础使用API 28 强制生物识别支持需要生物识别认证时使用RSA_ECB_PKCS1_PADDING旧版兼容方案源码注释将其描述为 “Legacy RSA/ECB/PKCS1Padding for backwards compatibility”即用于向后兼容的历史方案。PKCS1 v1.5 padding 属于较早期的 RSA 填充标准虽然实现简单、兼容面广但相比 OAEP 在安全性设计上更为陈旧。仅在需要兼容旧版本应用写入的数据时才应考虑新项目不建议主动选择。RSA_ECB_OAEP_WITH_SHA256_AND_MGF1_PADDING默认推荐方案源码注释明确给出了两条关键信息RSA/ECB/OAEPWithSHA-256AndMGF1Padding (API 23). This is the default and recommended algorithm for most use cases. Provides strong authenticated encryption without biometrics.它是AndroidOptions.key_cipher_algorithm的默认值这一点在 types.py 中通过字段默认值直接体现key_cipher_algorithm: KeyCipherAlgorithm ( KeyCipherAlgorithm.RSA_ECB_OAEP_WITH_SHA256_AND_MGF1_PADDING )OAEPOptimal Asymmetric Encryption Padding配合 SHA-256 与 MGF1 掩码生成函数提供了经过认证的强加密能力是 RSA 系中兼顾安全与兼容的均衡选择。由于使用 RSA 包裹密钥无法与生物识别认证联动。AES_GCM_NO_PADDING支持生物识别的方案源码注释说明AES/GCM/NoPadding for KeyStore-based key wrapping (supports biometrics). Use this algorithm when you need biometric authentication support. Requires API 23 for basic use, API 28 for enforced biometric authentication.该方案直接把 AES 密钥存储在 Android KeyStore 中绕开了 RSA 的包裹步骤因此能够与系统生物识别指纹/面容/PIN认证机制协同工作。API 23Android 6.0以上可用于基础场景若要强制生物识别认证则需要 API 28Android 9及以上。GCM 模式属于 AEAD带关联数据的认证加密同时提供机密性与完整性保护。在 AndroidOptions 中配置 KeyCipherAlgorithmKeyCipherAlgorithm并非独立使用而是作为 AndroidOptions 的key_cipher_algorithm字段被消费。完整可用的AndroidOptions字段如下源自 types.py字段默认值说明reset_on_errorTrue检测到错误时自动重置全部数据防止未知密钥导致致命错误注意数据会被永久清除migrate_on_algorithm_changeTrue加密算法变更时自动把存量数据迁移到新算法保护数据不丢失enforce_biometricsFalse是否强制生物识别/PIN 认证为True时若设备未录入生物信息会抛异常key_cipher_algorithmRSA_ECB_OAEP_WITH_SHA256_AND_MGF1_PADDING密钥加密包裹算法即本文主题storage_cipher_algorithmAES_GCM_NO_PADDING数据加密算法shared_preferences_nameNoneSharedPreferences 数据库名称preferences_key_prefixNone存储键前缀自动追加下划线改变后无法访问旧数据biometric_prompt_titleAuthenticate to access生物识别弹窗标题biometric_prompt_subtitleUse biometrics or device credentials生物识别弹窗副标题仓库自带的官方示例 sdk/python/examples/extensions/secure_storage/secure_storage/main.py 展示了一套「AES-GCM 生物识别」的完整配置import flet as ft import flet_secure_storage as fss storage fss.SecureStorage( web_optionsfss.WebOptions( db_namecustomstorage, public_keypublickey, wrap_keybase64.urlsafe_b64encode(os.urandom(32)).decode(), wrap_key_ivbase64.urlsafe_b64encode(os.urandom(16)).decode(), ), android_optionsfss.AndroidOptions( reset_on_errorTrue, migrate_on_algorithm_changeTrue, enforce_biometricsTrue, key_cipher_algorithmfss.KeyCipherAlgorithm.AES_GCM_NO_PADDING, storage_cipher_algorithmfss.StorageCipherAlgorithm.AES_GCM_NO_PADDING, ), )这里key_cipher_algorithmAES_GCM_NO_PADDING与enforce_biometricsTrue是配套组合只有当密钥直接存放于 KeyStoreAES 方案时生物识别认证才能约束密钥的解锁使用。算法选择的决策要点不需要生物识别优先用默认 RSA-OAEP对于大多数普通敏感数据如 token、会话凭据使用默认的RSA_ECB_OAEP_WITH_SHA256_AND_MGF1_PADDING即可。它无需额外依赖用户录入生物信息在 API 23 设备上提供强认证加密且是经过广泛验证的默认路径。需要生物识别保护切换为 AES-GCM当业务要求读取敏感数据前必须通过指纹/面容认证例如支付凭据、私密笔记时应改用AES_GCM_NO_PADDING并同时设置enforce_biometricsTrue。需要留意设备 API 版本必须 ≥ 23强制生物识别场景需 ≥ 28。若enforce_biometricsTrue而设备未录入任何生物信息/PIN插件会抛出异常而不会静默降级。算法切换与存量数据迁移修改key_cipher_algorithm会影响已写入数据的可读性仓库为此提供了两个配套开关migrate_on_algorithm_changeTrue默认算法变更后自动把存量密文迁移到新算法保障升级平滑reset_on_errorTrue默认若迁移失败或遇到无法识别的密钥自动重置全部数据以避免致命错误——代价是数据被永久清除。如果你的应用禁止数据丢失应在切换算法前做好备份或评估迁移行为若允许清空重来保持两个开关为默认值即可获得最省心的体验。底层实现链路Python 枚举如何驱动 Dart 插件KeyCipherAlgorithm不是凭空生效的Python 侧的枚举值最终会经过序列化传递到 Flutter 插件层执行真正的 KeyStore 操作。在 Dart 侧secure_storage.dart 提供了对应的解析函数KeyCipherAlgorithm? parseKeyCipherAlgorithm(String? value, [KeyCipherAlgorithm? defaultValue]) { if (value null) return defaultValue; return KeyCipherAlgorithm.values.firstWhereOrNull( (e) e.name.toLowerCase() value.toLowerCase() ) ?? defaultValue; }而 parseAndroidOptions 在构造 Flutter 插件选项时会读取key_cipher_algorithm字段并在 Python 侧未显式指定时回落到默认值RSA_ECB_OAEPwithSHA_256andMGF1Padding——这与 Python 端AndroidOptions字段的默认值保持一致两端默认策略是对齐的。解析采用大小写不敏感匹配因此从 Python 传入的枚举字符串如RSA_ECB_OAEPwithSHA_256andMGF1Padding能够被正确识别。与 StorageCipherAlgorithm 的分工容易混淆的是 StorageCipherAlgorithm它控制的是数据本身的加密算法默认AES_GCM_NO_PADDING另有旧版AES_CBC_PKCS7_PADDING仅作向后兼容。两者分工如下key_cipher_algorithm决定「加密数据所用的密钥」如何被 KeyStore 包裹与保护本文主题storage_cipher_algorithm决定「落盘数据」用什么算法加密。它们可以独立配置但现代应用应同时优先选择 AES-GCM 系数据侧用AES_GCM_NO_PADDING密钥侧在需要生物识别时同样用AES_GCM_NO_PADDING如官方示例所示。使用前提与平台提醒KeyCipherAlgorithm仅作用于 Android 平台。整个flet-secure-storage服务支持 Windows、macOS、Linux、iOS、Android 与 Web 全平台详见 securestorage/index.md其他平台分别使用 KeychainiOS/macOS、Windows Credential Manager、libsecretLinux等原生机制与本枚举无关。另外在 Linux 上构建需要libsecret-1-dev、运行需要libsecret-1-0以及一个 keyring 服务如 gnome-keyring 或 kwalletmanager这是使用该扩展在 Linux 桌面端的先决条件。总而言之在 Flet 的 Android 安全存储方案中KeyCipherAlgorithm是一把决定密钥保护策略的「钥匙」默认的 RSA-OAEP 方案安全均衡、开箱即用AES-GCM 方案则是启用生物识别认证的必经之路。结合AndroidOptions中的enforce_biometrics、migrate_on_algorithm_change与reset_on_error三个开关即可在安全强度、兼容性与数据迁移之间做出适合自己应用的选择。【免费下载链接】fletBuild realtime web, mobile and desktop apps in Python only. No frontend experience required.项目地址: https://gitcode.com/gh_mirrors/fl/flet创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表