Kri*_*lci 5 encryption objective-c ios commoncrypto
我有一些代码用于加密和解密ios应用程序中的某些字符串.该代码涉及CCCrypt的使用.有没有一种可靠的方法来测试所使用的密钥的有效性而无需将密钥实际存储在任何地方?根据我的研究,似乎接近告知密钥是否有效的唯一方法是使用密钥长度和密钥哈希.任何人都可以指导我正确的方向吗?
得到答案需要一些关于正确加密的背景知识.你可能已经知道了这一点,但是大多数人都这样做了,所以我要覆盖它.(如果您使用密码加密并且至少不编码HMAC,两种盐和IV,那么您做错了.)
首先,只要使用CCHmac()未经身份验证的模式(例如AES-CBC)进行加密,就必须使用HMAC(请参阅参考资料).否则,攻击者可以修改您的密文,使其解密为不同的消息.有关此攻击的示例,请参阅modaes.HMAC是基于密钥的加密安全散列.
其次,如果您使用的是基于密码的加密,则必须使用KDF将其转换为密钥.最常见的是PBKDF2.您不能只将密码字节复制到密钥中.
假设您以这种方式使用密码,通常会生成两个密钥,一个用于加密,一个用于HMAC.
好的,有了这些部件,您可以验证密码是否正确,因为如果不是,HMAC将会失败.这就是RNCryptor如何做到的.
这种简单方法存在两个问题:您必须先处理整个文件,然后才能验证密码,并且无法检测文件损坏与密码错误.
要在某种程度上解决这些问题,您可以分别添加一小块额外数据,这些数据与HMAC分开.然后验证小块而不是整个文件.这基本上就是aescrypt的做法.具体来说,它们生成用于加密整个文件的"真实"密钥,然后分别使用PBKDF2生成的密钥和HMAC加密该密钥.某些形式的腐败仍然看起来像是不好的密码,但通过这种方式区分它们要容易一些.
| 归档时间: |
|
| 查看次数: |
1510 次 |
| 最近记录: |