こんにちは私は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(暗号化に使用されるものと同じ)を安全に保存する方法です。
注: いくつかの商用暗号化製品が、このための一種のキーストアを作成するのを見てきました。
このために従うガイドラインのセットはありますか?
任意の提案をいただければ幸いです。
どうもありがとう