在JavaCard 2.2.2 API中,我可以看到一些对称密码是通过填充模式实现的,例如:
密码算法
ALG_DES_CBC_ISO9797_M1
使用CBC模式下的DES或外部CBC模式下的三重DES提供密码,并根据ISO 9797方法1方案填充输入数据。
但是对于AES密码,没有可用的填充模式(ALG_AES_BLOCK_128_ECB_NOPAD
和ALG_AES_BLOCK_128_CBC_NOPAD
)。
那么如何解释该算法不支持它呢?
这些填充方法是否容易受到使用AES的已知攻击的影响?
如果其他填充模式可用,则取决于您使用的Java Card API以及特定Java Card的实现细节。
以后的API有:
getInstance
可以用于的新方法PAD_PKCS5
;ALG_AES_CBC_PKCS5
。getInstance
由于模式和填充方法的爆炸式增长,添加了特殊方法。
较旧的API实现可能确实没有这些方法,但是请再次检查可用性。
AES本身是一个分组密码。诸如CBC之类的不同模式使用密码和填充-因此CBC_AES_PKCS7PADDING
在某种意义上将更加合乎逻辑。因此,作为分组密码,AES不容易受到填充oracle攻击的攻击。
CBC,另一方面是对填充甲骨文脆弱-和其他明文甲骨文-攻击。因此,如果您需要针对这些攻击的防护措施,则应使用AES-CMAC身份验证标签保护IV和密文。
但是,这不是不包括填充模式的原因。现在肯定存在不同的填充模式。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句