如何解决AES-GCM 非法块大小异常在加密时抛出负错误代码 (-65520) - 设备特定
在使用 AES-GCM 模式加密算法对文本进行加密时,在一种特定设备类型中观察到了非法块大小异常问题(之前使用 AES-ECB 模式未发现同样的问题,但我需要将 GCM 用于我的用例)。抛出的错误代码未列在 KeyMasterDef 文件 http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/android/security/keymaster/KeymasterDefs.java#159 中。
堆栈跟踪:
Error preparing data due toIllegalBlockSizeException
Caused by: android.security.KeyStoreException: -65520
at android.security.KeyStore.getKeyStoreException(KeyStore.java:858)
at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.update(KeyStoreCryptoOperationChunkedStreamer.java:132)
at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:217)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:506)
语言:Java8
操作系统版本:基于 Android 9、API 级别 28 https://developer.amazon.com/docs/fire-tablets/fire-os-7.html
的 FOS-7使用信息:
- 算法模式 => AES/GCM/NoPadding
- IV_BYTES_LENGTH => 12 个字节
- GCM_AUTH_TAG_LENGTH => 128 位
- IV_SPEC => GCMParamterSpec
在检查android资源时,得到以下详细信息:
导致:android.security.KeyStoreException:-65520
- 错误原因:IllegalBlockSizeException
- 错误代码:-65520
代码参考:
- 错误代码列表:http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/android/security/keymaster/KeymasterDefs.java#159(其中不存在 -65520)
- 抛出异常的点:http://androidxref.com/9.0.0_r3/xref/frameworks/base/keystore/java/android/security/keystore/KeyStoreCryptoOperationChunkedStreamer.java#132
- 封装和设置密钥库异常的方法:http://androidxref.com/9.0.0_r3/xref/frameworks/base/keystore/java/android/security/KeyStore.java#806
- 从 Keystore.java java doc 来看,有 2 层错误,Keystore 层错误(>0 error-code) 和 Keymaster 层错误(http://androidxref.com/9.0.0_r3/xref/frameworks/base/keystore/java/android/security/KeyStore.java#829。由此可见,上述异常(-65520)是由Keymaster层引起的。
- 根据错误消息流,如果与错误代码相关的错误消息在已知列表中不可用,则错误代码值按原样发送http://androidxref.com/9.0.0_r3/xref/frameworks/base/core/java/android/security/keymaster/KeymasterDefs.java#281。这就是日志跟踪中没有类似于早期实例的可读或可理解的错误消息的原因
另外,已经观察到在 Keymaster 版本 4(在 android-9 中使用)文件中有一些 GCM 标签长度为 96 位 https://android.googlesource.com/platform/hardware/interfaces/+/master/keymaster/4.0/IKeymasterDevice.hal#90 的参考,但是当我尝试将 96 位用于 GCM 时它可以正常工作标签。
问题:
- 对上述错误代码及其发生原因有任何想法吗?
- 如何理解或调试上述不属于 KeyMasterDef 列表的错误代码?
- 我正在观察与 AES-GCM 相关的设备特定问题,这是第二个实例,尤其是 Android-9,不知道为什么会发生这种情况。 Android Keystore 是否有任何常见的实例?如果是这样,对加密算法的使用有什么建议吗?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。