代码之家  ›  专栏  ›  技术社区  ›  Raoul722

在Java卡中存储对称密钥

  •  1
  • Raoul722  · 技术社区  · 9 年前

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

    由于没有类似的结构 HashTable 在Java卡中,它变得越来越复杂。我仍然可以修复一个上限,并实例化尽可能多的对象 AES密钥 但我想寻找另一种方法。

    我想我可以用字节数组做点什么,但是在 byte[] ?

    我认为答案是肯定的,只建议将其存储在瞬态数组中进行计算。否则,我不理解 AES密钥 物体。只是想确定一下。

    3 回复  |  直到 9 年前
        1
  •  2
  •   Paul Bastian    9 年前

    重要的安全相关数据(如密钥和PIN)应始终存储在Javacard API中指定的对象中,例如。 AESKey .
    智能卡操作系统将执行额外的内部操作,以防止这些值泄漏。
    如果你不知道卡会遇到多少终端,你可以将密钥封装在一个对象中,该对象是链接列表的一部分:

    class KeyElement{
       KeyElement next;
       AESKey key;
    }
    
        2
  •  1
  •   vlp    9 年前

    从技术上讲,可以在 byte[] 通过使用以下方案,具有某种“未知安全级别”:

    使用一些 持久换行键 .

    在使用钥匙之前,使用相同的钥匙打开所需的钥匙 包装键 进入 瞬时键对象 。然后随意使用。

    优点:可能比“许多”更有效 AESKey 对象方法”。

    缺点:这很奇怪。 我会尽我所能不以这种方式实施它。

    描述者:我不是加密专家,所以请验证我的想法。

    描述者2:当然,最合理的方法是使用Maarten Bodewes指出的密钥推导。。。

        3
  •  0
  •   Raoul722    9 年前

    事实上 AESKey 阵列在Java卡中是可能的。我以为只有字节数组( byte[] )获得授权,但没有。

    所以没有什么能阻止我宣布 AES密钥 阵列( AESKey[] )如果我认为必须修正上限以限制小程序中的键数。