4

こんにちは私はopensslevpapiを使用して、AES256CBCを使用してファイルを暗号化/復号化します。

ファイルはキー'k'iv'v'EVP_BytesToKey()で暗号化されます(これらは、取得したソルトとしてランダムなバイトのデータとユーザーが提供したパスワードを提供する関数を使用して生成RAND_bytes()され、これら2つを使用して暗号化コンテキストを初期化しますコンテキストを復号化します。

初期化の機能は次のとおりです。

int aes_init(unsigned char* pwd, unsigned int pwd_len,EVP_CIPHER_CTX *e_ctx, EVP_CIPHER_CTX *d_ctx)             /* return 0:SUCCESS 1: ERROR */
   {
    int i, rounds =5;                                       /* rounds */
    unsigned char key[32], iv[32], salt[8];

    if(!(RAND_bytes(salt,8))) //Writes cryptographically secure random bytes in salt[]
    {   
            perror("\n ERROR,SALT::");
            return 1;
    }   

    i = EVP_BytesToKey(EVP_aes_256_cbc(),EVP_sha1(),salt,pwd,pwd_len,rounds,key,iv);
   }

私が実装しようとしているのは、このシナリオです。

ユーザーはファイルAをキーkで暗号化し、IV v。プログラムは正常に終了します。次に、ユーザーが暗号化されたファイルAを復号化する場合、同じ暗号コンテキスト、つまり同じキーk、同じIVが必要になります。

だから私の問題は、後でファイルを復号化するためにそれを使用できるように、キーとiv(暗号化に使用されるものと同じ)を安全に保存する方法です。

注: いくつかの商用暗号化製品が、このための一種のキーストアを作成するのを見てきました。

このために従うガイドラインのセットはありますか?

任意の提案をいただければ幸いです。

どうもありがとう

4

3 に答える 3

3

If I understand your question correctly, you can't.

Sooner or later someone has to unlock the keystore. That requires a key. You can't store the keystore unlocking key because it needs to be retrieved in the clear so the keystore can be unlocked. Okay, you could store the keystore unlocking key somewhere, but now you've got the same problem all over again.

The "standard" solution requires that you rely on operating system security to make the keystore unlocking key inaccessible to any user other than the keystore owner or a super-user (assuming a UNIX-like system).

于 2012-05-06T17:43:05.293 に答える
2

これらの「解決策」はどれも本当に安全ではありません。対称キーをシステムに安全に保存する場合は、ハードウェア セキュリティ モジュール (HSM) に保存する必要があります。比較的安価なオプションの 1 つは、FIPS 140-2 レベル 3 で検証済みの Apricorn Aegis 暗号化フラッシュ ドライブです。

詳細については、 http://www.apricorn.com/products/hardware-encrypted-drives/aegis-secure-key.htmlを参照してください。

于 2013-12-01T17:23:31.577 に答える
1

キーを保存する代わりに、ユーザーにパスワードを要求することもできます。最初に、完全にランダムな (セッション) キーを使用してファイルを暗号化します。そのキーは、たとえば PBKDF2 などの関数を使用して、パスワードから派生したキーで暗号化されます (これに関する多くのスタックオーバーフローの記事を参照してください)。暗号化されたキーをファイルと共に保存します (ファイルの前に置くと、復号化が容易になります。ファイルを暗号化する前に、キーを暗号化して書き込むこともできます)。

于 2012-05-07T22:22:26.077 に答える