我正在开发一个小程序,它必须AESKey
与不同的终端共享一些类型的键。问题是我事先不知道它需要处理多少个终端。
由于没有像HashTable
Java Card 那样的结构,它变得越来越复杂。我仍然可以修复上限并实例化尽可能多的对象AESKey
,但我想寻找另一种方法。
我以为我可以用字节数组做点什么,但是将键存储在中是一种不好的做法byte[]
吗?
我认为答案是肯定的,并且只建议将其存储在瞬态数组中以进行计算。否则,我不明白AESKey
对象的作用。只是想确定一下。
我正在开发一个小程序,它必须AESKey
与不同的终端共享一些类型的键。问题是我事先不知道它需要处理多少个终端。
由于没有像HashTable
Java Card 那样的结构,它变得越来越复杂。我仍然可以修复上限并实例化尽可能多的对象AESKey
,但我想寻找另一种方法。
我以为我可以用字节数组做点什么,但是将键存储在中是一种不好的做法byte[]
吗?
我认为答案是肯定的,并且只建议将其存储在瞬态数组中以进行计算。否则,我不明白AESKey
对象的作用。只是想确定一下。
重要的安全相关数据(如密钥和 PIN)应始终存储在 Javacard API 指定的对象中,例如AESKey
.
智能卡操作系统将执行额外的内部操作来保护那里的值不被泄露。
如果您不知道卡片会遇到多少个终端,您可以将 Keys 封装在一个 Object 中,该 Object 是链表的一部分:
class KeyElement{
KeyElement next;
AESKey key;
}
从技术上讲,可以使用以下方案将键值存储在byte[]
具有某种“未知安全级别”的 a 中:
使用一些持久性包装密钥将密钥的包装(即加密)值存储在持久性字节数组中。
在使用密钥之前,使用相同的包装密钥将所需的密钥解包到一个临时密钥对象中。然后随意使用。
优点:可能比“多AESKey
对象方法”更节省内存。
缺点:这很奇怪。我会尽力不以这种方式实现它。
免责声明:我不是加密专家,所以请验证我的想法。
免责声明 2:当然,最合理的方法是使用 Maarten Bodewes 指出的密钥推导......
事实上,AESKey
在 Java Card 中创建数组是可能的。我认为只有字节数组(byte[]
)被授权但没有。
因此,如果我认为我必须修复一个上限以限制我的小程序中的键数,那么没有什么能阻止我声明一个AESKey
数组 ( )。AESKey[]