我想知道JavaCard中的Util。*函数是否通常是侧通道阻抗
是否存在一些具有侧通道抵抗Util。*功能的JavaCards?
我查看了几个公共JavaCard安全目标。但是没有一个人对所列出的Util。*函数有安全要求。
如果没有本机代码的帮助,在Java本身实现侧通道阻力似乎很难,如果不是不可能的话。因此,JavaCard应该具有侧通道抗性Util。*功能,对吗?
答案 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在各种实现中的可移植性降低。
检查您的平台文档,了解数据访问是否以及如何容易受到攻击和特定于平台的缓解。