-1

アプリケーションに保存されているデータの暗号化を組み込む作業を行っています。私はデータの暗号化と復号化をかなり進めましたが、私の問題は、間違ったキーが使用されたときに明らかな復号化エラーを強制できないように見えることです. 私の復号化機能:

+ (NSData *)decryptedDataForData:(NSData *)data
                    password:(NSString *)password
                          iv:(NSData *)iv
                        salt:(NSData *)salt
                       error:(NSError **)error {
NSAssert(iv, @"IV must not be NULL");
NSAssert(salt, @"salt must not be NULL");

NSData *key = [self AESKeyForPassword:password salt:salt];

size_t outLength;
NSMutableData *
decryptedData = [NSMutableData dataWithLength:data.length];

CCCryptorStatus
result = CCCrypt(kCCDecrypt,
                 kAlgorithm,
                 kCCOptionPKCS7Padding,
                 key.bytes,
                 key.length,
                 iv.bytes,
                 data.bytes,
                 data.length,
                 decryptedData.mutableBytes,
                 decryptedData.length,
                 &outLength);

if (result == kCCSuccess) {
    decryptedData.length = outLength;
}
else {
    if (error) {
        *error = [NSError errorWithDomain:kRNCryptManagerErrorDomain
                                     code:result
                                 userInfo:nil];
    }
    return nil;
}

return decryptedData;

}

これは、参照用にhttp://robnapier.net/aes-commoncryptoから取得したものです。

CCCrypt のドキュメントによると、データが適切に復号化されていない場合、kCCDecodeError を受け取る必要があるため、復号化操作が成功したと仮定し、間違ったキーのためにガベージ データを提供しただけです。

では、データの復号化に正しいキーが使用されたかどうかを判断するためのベスト プラクティスは何ですか?

4

1 に答える 1

0

kCCDecodeError重大なエラーがある場合でも、正しいキーが使用されているかどうかの情報は提供されません。

キーが正しいかどうかを知る唯一の方法は、出力を確認することです。出力は、全体で検証することも、ハッシュやその他の検証を使用して検証することもできます。

キーが正しいかどうかを判断するためのベスト プラクティスへの回答:

  1. これは暗号化の機能ではなく、そのような方法を使用すると、本質的に攻撃者にクリブを提供することになり、セキュリティが低下します。既知平文攻撃を参照してください。

  2. 攻撃を開始する以外に、正しい鍵を知っており、それを使用します。

  3. 復号化が正しいかどうかを判断できるようにする必要がある場合は、データのハッシュやマジック値などのチェックできるものを追加し、復号化時にそれを検証します。上記の 1. を参照してください。

  4. 安全な認証については、Bruce Schneier によるApplied Cryptography 、Niels Ferguson によるPractical Cryptography、Bruce Schneier、Handbook of Applied Cryptographyなどの参考文献のいずれかを参照してください。

一般に、真のセキュリティが必要な場合は、暗号化ドメインの専門家を雇ってください。

于 2014-12-31T01:25:38.223 に答える