4

それで、stackoverflowの天才に対する私の質問は次のとおりです。強力な認証済み暗号化アルゴリズムを使用してAES(できれば128ですが、256でもよい)でデータを暗号化する方法(ネイティブ、ライブラリ、フレームワークなど)がある場合、 GCMモードとしましょう?

質問は短く、私はいくつかの調査を行ったところ、それをサポートしていると思われるライブラリを1つだけ見つけました(RNCryptor)が、キーの代わりにパスワードを使用して暗号化しているようです(パスワードを提供し、ライブラリがキーを作成したように)そして私それはあまり好きではありません。私は自分の鍵を自分で管理することを好みます

CommonCryptor.hも調べたところ、commoncryptor ソース コードで GCM の唯一の参照と思われる行が見つかりました (ただし、間違っている可能性があります。実際には間違っている可能性があります)。

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

よろしくお願いします!

4

3 に答える 3

2

RNCryptor は HMAC を使用します。これは、認証タグを作成するための暗号的に強力な方法と考えられています。オープンソースでもあります。したがって、私はこのために RNCryptor コードのクローンを作成することを真剣に検討します (ヘッダーの著作権はそのままにしておいてください!)。

パスワードベースの暗号化は、キー (および場合によっては IV) を導出し、暗号化と認証を実行することで構成されます。したがって、キー派生部分を削除するだけで、長い道のりを歩むことができます。

これが機能しないのは、暗号化/認証を行う部分にキー派生用のコードが組み込まれている場合のみですが、RNCryptor には当てはまらないようです。

于 2014-05-15T15:34:28.963 に答える
2

owlstead のおかげで、RNCryptor を詳しく調べて解決策を見つけました。

まず第一に、多くのグーグル検索の後、Zaph は正しかったようで、iOS は GCM を提供していませんが、iOS で使用しています。参照先: iOS セキュリティ 2014 年 2 月

第 2 に、RNCryptor は GCM を使用せず、CBC モード (Cipher Block Chaining) で 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 の記事ですが、ドラマはありません。また、AES256 に関する別の観点からも長所があります: Colin Percival の記事

于 2014-05-16T13:11:18.800 に答える
1

CommonCrypto に GCM がありません。興味深いことに、Apple は iOS5 以降、キーチェーンに GCM を使用しています。

于 2014-05-15T14:59:49.213 に答える