2

AESで暗号化された公開鍵/秘密鍵を作成する方法を理解しようとしています。私はそれを次のように使用できるようにしたいと思います:

byte[] BytesToEncrypt = { 0x01, 0x02, 0x03, 0x04, 0x05 };
byte[] PublicKey;
byte[] PrivateKey;
byte[] EncryptedBytes;
byte[] UnencryptedBytes;

PrivateKey = CreatePrivateKey();
PublicKey = CreatePublicKey(PrivateKey);
EncryptedBytes = EncryptBytes(PrivateKey);
// This line should return unencrypted bytes
UnencryptedBytes = UnencryptBytes(EncryptedBytes, PrivateKey);
// This line should also return the unencrypted bytes
UnencryptedBytes = UnencryptBytes(EncryptedBytes, PublicKey);

どうすればこのようなものを実装できますか?パブリック/プライベート暗号化を見てきましたが、私が見たすべての例はRSA暗号化を使用しているようです。AESを使いたい。これは可能ですか?

4

2 に答える 2

7

AESは対称鍵暗号化のアルゴリズムであるため、公開鍵と秘密鍵について話すのは意味がありません。AESキーが公開されている場合、セキュリティはまったくありません。

必要に応じて、AES暗号化を使用してRSA公開鍵を暗号化できますが、秘密にする必要がないため、不要です。

AES暗号化を使用してRSA秘密鍵を暗号化できます。これは、キーをパスワードで保護して、コンピューターが盗まれた場合にキーを使用できないようにする場合に役立ちます。

また、非対称暗号化を使用して対称鍵を別の当事者に転送し、その後、対称暗号化を使用してそれらの当事者と通信することもできます。 TLSはこの原則を使用します。対称アルゴリズムの計算は高速になる可能性があるため便利ですが、プレーンテキストで誰かに対称鍵を送信するのは安全ではないため、対称鍵を安全に保つには非対称暗号化が必要です。

于 2010-09-08T21:30:52.977 に答える
2

AES暗号化は対称的ですが、あなたの目標はデータを暗号化し(そして、何らかの理由でAESを使用する必要があります)、そのデータを他の人に渡して、他の人に読み取らせることですが、公開鍵を持っている場合に限ります。

このワークフローを検討できます。

  1. AES暗号化キーを生成します。
  2. AES暗号化キーを使用してデータを暗号化します。
  3. 公開鍵と秘密鍵を生成します。
  4. 秘密鍵を使用して、AES暗号化鍵を暗号化します。
  5. AES暗号化データ、公開鍵、および秘密鍵で暗号化されたAES鍵を配布します。

これはSSLが行うことと似ていますが(秘密鍵ではなく公開鍵を使用してデータを暗号化するハンドシェイク手順があるためではありません)、ニーズを満たす可能性があります。

このワークフローにより、誰かが公開鍵を持っている場合にのみAES鍵を検出できますが、正しいAES鍵を持っていれば、誰かが元のデータを他のデータに置き換えることを妨げることはありません。それが公開/秘密鍵データ署名の目的です。

于 2010-09-08T21:40:38.413 に答える