将对称密钥存储在 Java 卡中
Store symmetric keys in Java Card
我正在开发一个小程序,它必须与不同的终端共享一些 AESKey
类型的键。问题是我事先不知道它需要处理多少个终端。
由于Java卡中没有HashTable
这样的结构,所以比较复杂。我仍然可以修复上限并实例化尽可能多的对象 AESKey
但我想寻找另一种方法。
我想我可以用字节数组做一些事情,但是在 byte[]
中存储键是一种不好的做法吗?
我认为答案是肯定的,只是建议将其存储在瞬态数组中以进行计算。否则,我不明白 AESKey
对象的作用。只是想确定一下。
密钥和 PIN 等重要的安全相关数据应始终存储在 Javacard API 中指定的对象中,例如AESKey
.
智能卡操作系统将执行额外的内部操作来保护那里的值不被泄露。
如果你不知道卡会遇到多少终端,你可以封装密钥在作为链表一部分的对象中:
class KeyElement{
KeyElement next;
AESKey key;
}
事实上,在 Java 卡中创建 AESKey
数组是可能的。我以为只有字节数组(byte[]
)被授权但没有。
因此,如果我认为我必须修复上限以限制我的小程序中的键数,我就可以声明一个 AESKey
数组 (AESKey[]
)。
从技术上讲,可以使用以下方案将键值存储在 byte[]
和一些 'unknown level of security' 中:
使用一些持久包装密钥.
仅将密钥的包装(即加密)值存储在持久字节数组中
在使用密钥之前,使用相同的包装密钥将所需密钥解包到临时密钥对象中。那就随意使用吧。
优势:可能比 'many AESKey
objects approach'.
的内存效率更高
缺点:比较奇怪。 我尽量不要这样实现。
免责声明:我不是加密专家,所以请验证我的想法。
免责声明 2:当然,最合理的方法是使用 Maarten Bodewes 指出的密钥派生...
我正在开发一个小程序,它必须与不同的终端共享一些 AESKey
类型的键。问题是我事先不知道它需要处理多少个终端。
由于Java卡中没有HashTable
这样的结构,所以比较复杂。我仍然可以修复上限并实例化尽可能多的对象 AESKey
但我想寻找另一种方法。
我想我可以用字节数组做一些事情,但是在 byte[]
中存储键是一种不好的做法吗?
我认为答案是肯定的,只是建议将其存储在瞬态数组中以进行计算。否则,我不明白 AESKey
对象的作用。只是想确定一下。
密钥和 PIN 等重要的安全相关数据应始终存储在 Javacard API 中指定的对象中,例如AESKey
.
智能卡操作系统将执行额外的内部操作来保护那里的值不被泄露。
如果你不知道卡会遇到多少终端,你可以封装密钥在作为链表一部分的对象中:
class KeyElement{
KeyElement next;
AESKey key;
}
事实上,在 Java 卡中创建 AESKey
数组是可能的。我以为只有字节数组(byte[]
)被授权但没有。
因此,如果我认为我必须修复上限以限制我的小程序中的键数,我就可以声明一个 AESKey
数组 (AESKey[]
)。
从技术上讲,可以使用以下方案将键值存储在 byte[]
和一些 'unknown level of security' 中:
使用一些持久包装密钥.
仅将密钥的包装(即加密)值存储在持久字节数组中在使用密钥之前,使用相同的包装密钥将所需密钥解包到临时密钥对象中。那就随意使用吧。
优势:可能比 'many AESKey
objects approach'.
缺点:比较奇怪。 我尽量不要这样实现。
免责声明:我不是加密专家,所以请验证我的想法。
免责声明 2:当然,最合理的方法是使用 Maarten Bodewes 指出的密钥派生...