-1

.NET Remoting 接続を介して配信するためにオブジェクトを送信するために、オブジェクトを暗号化する必要があるケースに遭遇しました。コードにはすでに文字列の暗号化を実装しているので、同様の設計を使用してオブジェクトを暗号化します。

public static byte[] Encrypt(object obj)
    {
        byte[] bytes = ToByteArray(toEncrypt); // code below
        using (SymmetricAlgorithm algo = SymmetricAlgorithm.Create())
        {
           using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
           {
              byte[] key = Encoding.ASCII.GetBytes(KEY);
              byte[] iv = Encoding.ASCII.GetBytes(IV);
              using (CryptoStream cs = new CryptoStream(ms, algo.CreateEncryptor(key, iv), CryptoStreamMode.Write))
              {
                 cs.Write(bytes, 0, bytes.Length);
                 cs.Close();
                 return ms.ToArray();
              }
           }
        }
    }

private static byte[] ToByteArray(object obj)
      {
         byte[] bytes = null;
         if (obj != null)
         {
            using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
            {
               BinaryFormatter bf = new BinaryFormatter();
               bf.Serialize(ms, obj);
               bytes = ms.ToArray();
            }
         }
         return bytes;
      }

このようにオブジェクトをシリアル化および暗号化することで、注意する必要があることはありますか?

4

2 に答える 2

1

私が考えることができる唯一のことは、通常、データを暗号化した後、プレーンテキスト配列を NULL で上書きする必要があるということです。これは、平文がメモリ内で回復できないようにするためであり、ページ ファイルまたはスワップでディスクに書き出された場合、悪意のあるプログラム/ユーザーによって回復できなくなります。ただし、データの機密性が問題にならない場合は、これは必要ないかもしれませんが、慣れておくとよいでしょう。

編集:

ただし、必要がない場合は、自分でロールしないでください (これはめったに行いません)。自分が何をしているのかを本当に理解していない限り、それを台無しにして攻撃に対して脆弱にする可能性が非常に高い. 組み込み API を理解していない、または気に入らない場合は、Bouncy Castleの紳士が、使用できるライブラリをさまざまな言語で作成するという優れた作業を行っています。

于 2013-04-19T18:52:46.843 に答える