在JavaCard侧通道上有Util。*功能吗?

时间:2017-05-23 05:15:44

标签: javacard

我想知道JavaCard中的Util。*函数是否通常是侧通道阻抗 是否存在一些具有侧通道抵抗Util。*功能的JavaCards?
我查看了几个公共JavaCard安全目标。但是没有一个人对所列出的Util。*函数有安全要求。

如果没有本机代码的帮助,在Java本身实现侧通道阻力似乎很难,如果不是不可能的话。因此,JavaCard应该具有侧通道抗性Util。*功能,对吗?

1 个答案:

答案 0 :(得分:3)

不,我认为我没见过这样的东西。但似乎没有什么需要:

  • arrayCopy(byte[] src, short srcOff, byte[] dest, short destOff, short length)
  • arrayCopyNonAtomic(byte[] src, short srcOff, byte[] dest, short destOff, short length)
  • arrayFill(byte[] bArray, short bOff, short bLen, byte bValue)
  • arrayFillNonAtomic(byte[] bArray, short bOff, short bLen, byte bValue)

复制和填充操作通常不会对数组中的位执行任何操作。它们复制或替换字节,但无论字节的内容如何,它们都会执行。只有在EEPROM或闪存级别才会发生泄漏 - 这在Java Card级别上不太可能得到解决。

警告:仍应避免虚假复制数据,写入持久性内存尤其可能会泄露信息。

  • getShort(byte[] bArray, short bOff)
  • makeShort(byte b1, byte b2)
  • setShort(byte[] bArray, short bOff, short sValue)

现在这些函数基本上不考虑字节的内容。他们只是将内存的值复制或移位到正确的位置,再次,无论内容是什么

对于复制和短处理函数,理论上你可以创建一个对侧通道攻击不安全的函数,但一般来说你应该是安全的:让它们不安全实际上比使它们安全更难。

  • arrayCompare(byte[] src, short srcOff, byte[] dest, short destOff, short length)

现在这个需要特定的编程来避免边信道攻击。

目前似乎没有arrayCompare的通道安全版本。这有点令人讨厌,因为在3.0.5中它可以提供使用SensitiveResult保护数组比较结果的功能。

这是应该在规范中修改的东西,但是现在你可能会被自己编程所困扰。

当然,特定供应商可以确保此次通话;这是有道理的。但是,依赖于特定的供应商功能会使您的applet在各种实现中的可移植性降低。

检查您的平台文档,了解数据访问是否以及如何容易受到攻击和特定于平台的缓解。