うーん、これは実際には2部構成です...
まず私がする必要がある
- ファイルの内容を読む
- それらを暗号化して
byte[]
- ファイルなどに書き込み
byte[]
ます...
次に、#2 または #3 の結果が別のプロジェクトに入ります。PEM/DER キーを保護しようとしています。
復号化のために、私はする必要があります
- 暗号化されたファイルの内容を
byte[]
- それらを復号化して
byte[]
- 復号化されたデータをファイルに書き込むか、ファイルの代わりに使用します
今、私はいくつかの基本的な暗号化コードを持っています
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(128); // 192 and 256 bits may not be available
SecretKey secretKey = keyGenerator.generateKey();
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// By initializing the cipher in CBC mode, an "initialization vector" has been randomly
// generated. This initialization vector will be necessary to decrypt the encrypted data.
// It is safe to store the initialization vector in plain text for later use. You can obtain
// it's bytes by calling iv.getIV().
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
IvParameterSpec iv = cipher.getParameters().getParameterSpec(IvParameterSpec.class);
// IvParameterSpec iv = new IvParameterSpec(IV); //used for the hardcoded one
byte[] encryptedData = cipher.doFinal(data);
そして復号化も
cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
byte[] decryptedData = cipher.doFinal(encryptedData);
System.out.println("decrypted: " + new String(decryptedData));
質問は次のとおりです。
何かを暗号化することはめったになく、実行時に復号化される暗号化されたキーを配布するユースケース シナリオを考えると、暗号文とは別に何を保存する必要がありますか?
IVを保存する必要があることはわかっていますが、復号化を行ったときはあまりうまくいきませんでした.secretKeyも保存する必要があると思います。
より良い解決策へのヒント、指針、または一般的なセキュリティのヒントを教えてもらえますか? キー、IV、および暗号化されたデータを保存する必要がある場合、どこに保存すればよいですか? キーをハードコーディングして、暗号化されたデータとともに IV を保存することはできますか? おそらく、IV とキーの両方をハードコーディングして、暗号化されたデータをファイルに保存するだけでしょうか?
これは理論上の安全性に関するものではありません。これは、鍵を盗もうとしている人に引き起こす可能性のある最大の迷惑と不便と考えてください。それらを完全に隠すことはできないことを、私たちは皆知っています。
この男が暗号化されたファイルを復号化し、Java で実行することから始めたことが必要です。
ただし、安全なデータを PemKeyReader に供給するより良い方法があれば、私はすべて耳にします。