誰かが.NETのCryptoStreamの代替候補を知っていますか?.NETのCryptoStreamの代替可能性を探求していますか?
代替が「読み取り」モードでのみシークをサポートしている場合や、「読み取り」モードに限定されている場合は問題ありません。 AES256。
誰かが.NETのCryptoStreamの代替候補を知っていますか?.NETのCryptoStreamの代替可能性を探求していますか?
代替が「読み取り」モードでのみシークをサポートしている場合や、「読み取り」モードに限定されている場合は問題ありません。 AES256。
Seek
の操作は、ECBスタイルの連鎖(つまり、ブロックを別々に暗号化する)で一定時間(アルゴリズムによっては比較的)実行でき、highly unrecommended - see the image in this Wikipedia article for a startling example of insecurityだからこそ有用ではないと思います。
私には、MemoryStream
または類似のラッピングテクニックに/からコピーする方が良いと思われます。
ブロック単位の暗号化は完全に安全です。問題はECBだけです。インプリメンテーションは、おそらくOFBモードまたはCTRモードのいずれかを使用して記述することができます。しかし、私はそれを見つけることが決してなかった。弾丸をかむと、それを書くことがあります...
UPDATE:
だから私はこれの実装を書きました。いろいろな理由で私は今ここに投稿するつもりはありませんが(私はいつかしようとしますが)、これを行う人のためのいくつかの指針があります:
RijndaelManagedトランスフォームをCBCモードで使用してください。あなたはブロックごとに暗号ストリームを計算するつもりです。これを行うには、変換でキーと空の(すべてゼロ)ivを初期化します。実際のivはブロック単位で計算されます。
nonce plus iv plus counterを連結または計算することによって、現在のブロックへの入力を計算する方法が必要です。 nonce &を事前に計算するなど、いくつかの最適化を行うことができます(このメソッドは何度も呼び出されるため、おそらくそれに相当します)。
(注:ここで「iv」とは、NISTがIVと呼ぶ、ブロック全体の中央部分で、他の人が呼び出すものを意味します。
このメソッドは、データを暗号化しているループ内で使用します。これを初めて呼び出すとブロックの境界で呼び出し、現在の暗号ストリームを更新します。このメソッドは、トランスフォームのTransformBlockメソッドへの入力を提供します。トランスフォームからの出力を取り出し、その結果を現在のデータブロックとXORします。各ブロックが暗号化されたら、transform.Reset()を使用してください!それ以外の場合、CBCはトランスフォームからの出力を次の入力への入力として使用しようとします。 .NETでこれを行うより巧妙な方法があるかもしれませんが、私はそれを理解することはできません。私はBouncyCastleがOFBを "ネイティブ"にサポートしているので、より良い選択肢かもしれませんが、これは外部デープなしで再利用可能な暗号ストリームを得る素早い方法です。
とにかく、この全メソッド(私はそれをAesCtr256.Processと呼んでいますが、より一般的である可能性があります)は、暗号ストリーム内の任意の範囲のデータで機能します。このメソッドは、カスタムStreamクラス内で簡単に使用できます。これにより、読み込みと書き込みの両方でストリーム内の任意の場所にシークできるようになり、実際のデータ長を実際に報告する暗号ストリームを持つことができるようになります。
別の言い方をすれば、ストリームの任意の部分の暗号ストリームを計算し、単純に暗号または平文に対してxorまたは暗号化/復号化することができます。
2つの最後のもの:1。)私はストリームの生活のためにトランスフォームを再利用することを強くお勧めします - これらは高価です。あなたがこれを実装しようとしている場合は、NISTベクトルまたは同様のに対してユニットテストを書いてください。あなたがこの権利を持っていると仮定しないでください。出力がランダムに見えるので、正しく暗号化されているわけではありません。
誰かがより良いアプローチについて考えているか、本当に重要なコードを手に入れたことがあれば、ありがとう!
重複した質問です。私は答えを入れました: How to add seek and position capabilities to CryptoStream
でも、他のアルゴリズムを使用することもできます。ところで、Barry KellyがECBを別の方法で使用しているため、ECBの問題点はありません。
問題が表示されます。しかし、TrueCryptで使用されているような、ブロック単位の安全な暗号化を可能にするいくつかのアプローチがあります。たとえばhttp://en.wikipedia.org/wiki/Disk_encryption_theory#XTSです。 –
ディスク暗号化は、各ブロックを独立して暗号化します。つまり、ランダムにシークする方法です。 –