3

Web ベースのファイル ストレージ サービス (C#) を実装しています。ファイルはサーバーに保存されるときに暗号化されますが、課題は復号化機能をどのように実装するかです。

ファイルは、数 KB から数 GB まで、任意のサイズにすることができます。データ転送はチャンク単位で行われるため、ユーザーはオフセット 50000、75000 などからデータをダウンロードします。これは暗号化されていないファイルでは問題なく機能しますが、暗号化が使用されている場合は、各チャンクがオフセットから読み取られる前にファイル全体を復号化する必要があります。 .

だから、私はこれを解決する方法を見ています。これまでの私の調査では、ECB と CBC を使用できることが示されています。ECB は最も基本的な (そして最も安全でない) ブロックで、各ブロックが個別に暗号化されます。ECB が機能する方法は、私が探しているものとほとんど同じですが、セキュリティが懸念事項です。CBC も同様ですが、現在のブロックを復号化する前に前のブロックを復号化する必要があります。これは、ファイルが最初から最後まで読み取られ、サーバー上で復号化するときにデータを保持する限り問題ありませんが、結局のところ、転送前にサーバー側のファイル全体を復号化するよりもはるかに優れているわけではありません。

私が考慮すべき他の選択肢を知っている人はいますか?私はまだ理論的な研究を行っているだけなので、この時点ではコードはありません。

4

1 に答える 1

2

ECB (電子コードブック) は使用しないでください。平文のパターンはすべて、暗号文のパターンとして表示されます。CBC (Cipher Block Chaining) にはランダム読み取りアクセスがあります (呼び出しコードはキーを認識しており、IV は前のブロックの結果です) が、ブロックを書き込むには後続のすべてのブロックを書き換える必要があります。

より良いモードはCounter (CTR)です。実際には、各ブロックは同じキーを使用し、各ブロックの IV は、定義された開始点と初期 IV からのそのブロックのオフセットの合計です。たとえば、ブロック n の IV は IV + n です。CTR モードについては、 NIST SP800-38aの 15 ページで詳しく説明されています。キーと IV の導出に関するガイダンスは、NIST SP800-108に記載されています。

(Galois Counter Mode) GCMなど、他にもいくつかの同様のモードがあります。

于 2012-09-06T12:12:46.860 に答える