1

我正在开发一个小程序,它必须AESKey与不同的终端共享一些类型的键。问题是我事先不知道它需要处理多少个终端。

由于没有像HashTableJava Card 那样的结构,它变得越来越复杂。我仍然可以修复上限并实例化尽可能多的对象AESKey,但我想寻找另一种方法。

我以为我可以用字节数组做点什么,但是将键存储在中是一种不好的做法byte[]吗?

我认为答案是肯定的,并且只建议将其存储在瞬态数组中以进行计算。否则,我不明白AESKey对象的作用。只是想确定一下。

4

3 回答 3

2

重要的安全相关数据(如密钥和 PIN)应始终存储在 Javacard API 指定的对象中,例如AESKey.
智能卡操作系统将执行额外的内部操作来保护那里的值不被泄露。
如果您不知道卡片会遇到多少个终端,您可以将 Keys 封装在一个 Object 中,该 Object 是链表的一部分:

class KeyElement{
   KeyElement next;
   AESKey key;
}
于 2015-09-11T18:39:06.380 回答
1

从技术上讲,可以使用以下方案将键值存储在byte[]具有某种“未知安全级别”的 a 中:

使用一些持久性包装密钥将密钥的包装(即加密)值存储在持久性字节数组中。

在使用密钥之前,使用相同的包装密钥将所需的密钥解包到一个临时密钥对象中。然后随意使用。

优点:可能比“多AESKey对象方法”更节省内存。

缺点:这很奇怪。我会尽力不以这种方式实现它。

免责声明:我不是加密专家,所以请验证我的想法。

免责声明 2:当然,最合理的方法是使用 Maarten Bodewes 指出的密钥推导......

于 2015-09-22T15:06:44.067 回答
0

事实上,AESKey在 Java Card 中创建数组是可能的。我认为只有字节数组(byte[])被授权但没有。

因此,如果我认为我必须修复一个上限以限制我的小程序中的键数,那么没有什么能阻止我声明一个AESKey数组 ( )。AESKey[]

于 2015-09-22T14:38:36.960 回答