0

大量の機密データを含む大きな xml ドキュメントがあります。このデータを Rijndael で暗号化するアルゴリズムがあります。

byte[] encrypted;
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
  rijAlg.Key = EncyptionManager.RijndaelKey;
  rijAlg.IV = EncyptionManager.RijndaelIV;
  rijAlg.Padding = PaddingMode.PKCS7;

  ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
  using (MemoryStream msEncrypt = new MemoryStream())
  {
    using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
     {
        using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
        {
          swEncrypt.Write(plainText);
        }
        encrypted = msEncrypt.ToArray();
     }
  }
}
return encrypted;

ファイルの大部分を暗号化して保存する必要があると仮定すると、xml ドキュメントを作成してファイルの内容全体を暗号化するか、xml スキーマをそのままにして特定のフィールドのみを暗号化する方が効率的ですか?

4

2 に答える 2

2

もちろん、ファイル全体 (XML バイトストリーム全体) を暗号化する方がはるかに安全です。XML ドキュメントの特定のノードのみをエンコードすると、見たい人は誰でも、どのタイプの要素がいくつ存在するかなど、ドキュメントの構造全体をはっきりと見ることができます。

他のことを検討する必要がある唯一の理由は、ドキュメントの構造を可視化し、解読せずにコードで操作できるようにする必要がある場合です。つまり、オブジェクトを操作するコードは暗号化キーにアクセスできません。

ドキュメント全体を暗号化すると、キー管理、ファイル処理ロジックの点でもはるかに効率的になります。さらに、IV またはブロック サイズまでのパディングを使用する多くの暗号化モードでは、ファイル全体を暗号化する方がはるかに効率的です。

それでも、パフォーマンスではなく、セキュリティ要件が主な関心事であるべきです。

于 2013-06-23T21:48:56.387 に答える
2

静的な回答はありません。最適なポイントは、ブロックの正確な数とサイズによって異なります。これは、アルゴリズムのセットアップ コストが固定されているためです。2 つのブロックを暗号化するコストは、1 つのブロックを暗号化するコストの 2 倍未満です。

唯一の有効な答えは、ベンチマークを行ってカットオフ ポイントを見つけることです。

于 2013-06-23T21:49:16.303 に答える