2014-05-15 32 views
4

所以我的问题为你stackoverflow天才是:如果有一种方式(本机,库,框架,无论..)加密数据与AES(最好是128,但也可能是256)使用强认证加密算法 ,让我们说GCM模式在iOS上可以使用AES128和GCM模式吗?

问题是短暂的,我做了一些研究,我只找到一个库,似乎支持它(RNCryptor),但它似乎也使用密码隐窝代替键(像你提供密码和库取得了关键的),我不喜欢很多,我喜欢来管理我的钥匙自己

我也看CommonCryptor.h,我发现这条线,这在我看来,GCM的commoncryptor源代码的唯一引用(但我可能是错的,其实我可能是错的):

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

提前致谢!

+0

我们SecureBlackbox支持AES-GCM是适用于iOS。但这是没有记录的功能,因此您需要在我们的论坛上索要样品。 –

回答

2

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

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

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

要使用一键加密和跳过密码导出部分,RNCryptor提供这个功能:

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时要小心,关键时间表可能很弱:Schneier article但没有戏剧和有上AES256是利弊等观点:Colin Percival article

1

GCM从CommonCrypto丢失。有趣的是,自ios5以来,苹果正在使用GCM作为钥匙串。

+0

我对CommonCrypto中可用模式/方法的缺乏感到惊讶,同时发现iOS中大多数(或至少很多)苹果都使用它(http://images.apple.com/ipad/business/ docs/iOS_Security_Feb14.pdf) – tanou

2

RNCryptor使用HMAC,它被认为是创建认证标签的一种密码强的方法。它也是开源的。所以我会认真考虑为此克隆RNCryptor代码(保持头部中的版权完好无损!)。

基于密码的加密包括派生密钥(也可能是IV),然后执行加密和验证。所以你应该通过简单地删除密钥派生部分来获得很长的路。

唯一的一次,这不起作用的是,如果钥匙派生的代码编织到做加密/认证的部分,但这似乎并不是RNCryptor的情况。

+0

谢谢队友!我遵循你的建议,实际上在RNCryptor中可以使用密钥并跳过密钥派生。但是RNCryptor不使用GCM,而是使用CBC,然后使用HMAC + SHA1,但这符合我的要求。感谢您的指导! – tanou

+0

不客气,tanou,很高兴能有所帮助。 –

相关问题