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

代码参考:

另外,已经观察到在 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 (将#修改为@)