2

RSACypthyServiceProviderを検索しているときに、MSDNで次のコードサンプルを見つけました。コメントの助けを借りて、コードの一部を理解できませんでした。

  1. モジュラスと指数とは何ですか?

  2. IVとは何ですか?

  3. なぜ彼らは非対称暗号化を行うためにRijndaelManagedclassを使用しているのですか?私の検索に基づいて、RSACryptoServiceProviderは非対称暗号化機能を提供し、オブジェクトを作成するときに秘密鍵と公開鍵を自動的に作成します。ここでRijndaelManagedインスタンスの目的は何ですか?

誰か説明してもらえますか?

コードサンプル:

class Class1
{

   static void Main()
   {

     //Initialize the byte arrays to the public key information.
      byte[] PublicKey = {Somethink in byte}

      byte[] Exponent = {1,0,1};

      //Create values to store encrypted symmetric keys.
      byte[] EncryptedSymmetricKey;
      byte[] EncryptedSymmetricIV;

      //Create a new instance of the RSACryptoServiceProvider class.
      RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();

      //Create a new instance of the RSAParameters structure.
      RSAParameters RSAKeyInfo = new RSAParameters();

      //Set RSAKeyInfo to the public key values. 
      RSAKeyInfo.Modulus = PublicKey;
      RSAKeyInfo.Exponent = Exponent;

      //Import key parameters into RSA.
      RSA.ImportParameters(RSAKeyInfo);

      //Create a new instance of the RijndaelManaged class.
      RijndaelManaged RM = new RijndaelManaged();

      //Encrypt the symmetric key and IV.
      EncryptedSymmetricKey = RSA.Encrypt(RM.Key, false);
      EncryptedSymmetricIV = RSA.Encrypt(RM.IV, false);
    }
}
4

1 に答える 1

1

RSAは非常に遅く、パディングのオーバーヘッドがあります。したがって、ランダムな対称鍵を生成し、RSAで暗号化し、メッセージを対称鍵で暗号化するのが一般的です。このアプローチは、ハイブリッド暗号システムとして知られています。

単一のキーを使用して複数のメッセージを暗号化する場合、IVは重要ですが、このコードはメッセージごとに新しいキーを作成するため、ここではIVはそれほど重要ではありません。IVを引き続き使用すると、マルチターゲット攻撃を防ぐことができるため、特にキーに128ビットしかない場合は、一意のキーで完全に役に立たないわけではありません。

このコードもかなり非効率的です。IVとキーを連結するのではなく、別々に暗号化します。これにより、RSAオーバーヘッドが2倍になります。

モジュラスと指数は、RSA公開鍵の2つの部分です。詳細については、ウィキペディアを参照してください。多くの場合、指数は、このコード2^16 + 1 = 65537のに対応するように選択されます。{1,0,1}

于 2012-05-23T17:00:49.803 に答える