2014-05-15 36 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,很高興能有所幫助。 –

相關問題