在Java Card中存储对称密钥



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

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

我想我可以用字节数组做一些事情,但是在byte[]中存储键是一种不好的做法吗?

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

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

class KeyElement{
   KeyElement next;
   AESKey key;
}

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

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

在使用键之前,使用相同的封装键将所需的键展开到瞬态键对象中。然后随意使用

优势:可能比"许多AESKey对象方法"更节省内存。

缺点:很奇怪。我将尽我最大的努力不这样实现

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

声明2:当然最合理的方法是使用密钥派生,正如Maarten Bodewes所指出的…

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

因此,如果我认为我必须固定一个上限来限制applet中键的数量,那么没有什么可以禁止我声明AESKey数组(AESKey[])。

相关内容

  • 没有找到相关文章

最新更新