1

RNEncryptor次のように、暗号化と復号化にandクラスを使用してRNDecryptorいます。

NSData *encryptedData = [RNEncryptor encryptData:input
                                    withSettings:kRNCryptorAES256Settings
                                        password:thePassword
                                           error:nil];

NSData *output = [RNDecryptor decryptData:encryptedData
                             withSettings:kRNCryptorAES256Settings
                                 password:thePassword
                                    error:nil];

アプリで初めてデータを暗号化する必要があるときは、RNCryptor次のようにクラスを使用してパスワードを生成します。

NSData *thePasswordData = [RNCryptor randomDataOfLength:32];
NSString *thePassword = [aesPasswordData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];

この生成されたパスワードをアプリのキーチェーンに保存し、その後のすべての暗号化と復号化に使用します。

これは暗号化/復号化の良い戦略ですか、それとも誰かがそれに欠陥を見ることができますか? 代わりに、AES キーを生成してキーチェーンに保存し、パスワードではなくそれを使用する必要がありますか?

編集: Rob Napierの回答に基づいNSProcessInfoて、クラスの使用からクラスの使用にパスワードを生成する方法を上記で変更しました。RNCryptorそれはさておき、AESキーではなくパスワードを使用するという一般的な戦略が正しく安全であるかどうかを知りたいと思っています。

4

2 に答える 2

1

これらのライブラリで使用される実際の暗号化キーは、パスワードを使用する場合はパスワードから派生しますが、IIRC はソルト化されているため、本質的に安全性が低下することはありません。

これらのライブラリによって提供される理論上のセキュリティ レベルに関しては懸念がありますが (「PHP で AES-256-CBC を使用して適切な認証を使用してデータを正しく暗号化する方法」を参照)、それについて判断を下す必要があります。RNCryptor は一連のライブラリ (さまざまな実装で攻撃ベクトルを公開している可能性があります) であり、プラットフォーム間で暗号化されたデータを移動する場合に役立つ一貫した形式であることに注意してください。

個人的には、暗号化ごとに一意のランダム AES キーを使用し、そのキーを RSA で暗号化してキーチェーンに格納する方が快適だと思います。

于 2016-02-22T12:20:43.533 に答える