是否可以在iOS上使用带有GCM模式的AES128?

所以我对你的stackoverflow天才的问题是:如果有一种方法(本机,库,框架,等等……) 用AES加密数据 (最好是128但也可能是256)使用强大的Authenticated加密算法 ,让我们说GCM模式

问题很简短,我做了一些研究,我只发现了一个似乎支持它的库( RNCryptor )但它似乎也使用密码来代替密钥 (就像你提供密码而图书馆成了密钥)而我我不喜欢那么多,我更喜欢自己管理我的钥匙

我也看看CommonCryptor.h ,我发现这行,在我看来是commoncryptor源代码中GCM的唯一引用(但我可能是错的,实际上我可能错了):

case kCCModeGCM: if((ref->symMode[direction].gcm = getCipherMode(cipher, mode, direction).gcm) == NULL) return kCCUnimplemented; 

谢谢提前!

RNCryptor使用HMAC,它被认为是一种创建身份validation标记的加密方法。 它也是开源的。 所以我会认真考虑为此克隆RNCryptor代码(保持标题中的版权完整!)。

基于密码的加密包括导出密钥(可能还有IV),然后执行加密和身份validation。 所以你应该通过简单地删除密钥派生部分来获得很长的路要走。

只有当密钥派生的代码被编织到执行加密/身份validation的部分时才会出现这种情况,但这种情况似乎并不适用于RNCryptor。

感谢owlstead建议我深入了解RNCryptor并找到解决方案。

首先,经过大量的谷歌搜索,似乎Zaph是正确的,iOS不提供GCM,但在iOS中使用它。 ref那里: iOS Security feb 2014

其次,RNCryptor不使用GCM,而是在CBC模式下使用AES256(密码块链接),这很好,然后使用HMAC + SHA1进行身份validation。 这符合我的要求。

要使用密钥加密并跳过密码派生部分,RNCryptor提供此function:

 NSData *encryptedData = [RNEncryptor encryptData:yourData withSettings:kRNCryptorAES256Settings encryptionKey:encryptionKey HMACKey:HMACKey error:&error]; 

然后解密

 NSData *decryptedData = [RNDecryptor decryptData:encryptedData withEncryptionKey:encryptionKey HMACKey:HMACKey error:&decryptionError]; 

RNCryptor还为密钥提供随机生成方法。

注意:使用AES256时要小心,关键时间表可能很弱: 施奈尔文章但没有戏剧性,而AES256则有其他观点:专业: Colin Percival文章

CommonCrypto缺少GCM。 有趣的是,自ios5以来,Apple正在使用GCM作为钥匙串。