ネットワーク経由でパケットを受信しています。ただし、これらのパケットの一部は動的な長さを持っているため、2 番目のバイトには、長さを含む 2 バイト長の WORD があります。そのため、最初にパケット番号を受け取り、次に長さに応じてすべて受け取ります。暗号化がない場合、ここではすべて問題ありません。twofish やフグの暗号化を使用しても同じでしょうか? つまり、「A」は「B」として暗号化されますが、「AA」は「BB」として暗号化されますか? TF/BF で暗号化されたパケット全体から 1 バイトを抽出して復号化できますか?
3 に答える
一般的に、答えは暗号化されたデータを埋めることです。ただし、ブロックの長さに達するまで0を追加してパディングしないでください。パディングは、少し多くの情報を提供する可能性があります。
バイトを抽出する限り、使用される暗号モード(ブロック間で暗号がどのように変更されるか)によっては、これを実行できないはずです。読み取りたいバイトバイトまで復号化する必要があります。暗号化は「透過的」であることが一般的です。つまり、ネットワークプログラミングを行い、SSLをその上にスラップして、SSLがすべての暗号化、可変長の処理などを処理し、単純な古いデータを処理できるようにします。 。
SSLを投入するのが良いアイデアかどうかはわかりませんが、使用することはできます。
Twofish は、基本レベルで 16 バイトのブロックをエンコードします。したがって、保持できる Twofish 暗号化データの最小部分は 16 バイト長です。データに長さが含まれている場合は、それを復号化して、最後のブロックの余分なバイトを破棄できます。
したがって、「A」を暗号化するには、それを 16 バイトにパディングする必要があります (どういうわけか - さまざまな方法があります - すべてゼロにするのは明らかに最善の方法ではありません)。次に、1 バイトのデータと不要な 15 バイトを暗号化します。16 バイトの暗号化ブロックを取得します。復号化すると、余分なバイトを捨てることができます。
以下のウィキペディアの記事を 30 分ほど読むことをお勧めします。
http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation
http://en.wikipedia.org/wiki/Padding_%28cryptography%29
どちらも私にとっては役に立ちました。
つまり、「A」は「B」として暗号化されますが、「AA」は「BB」として暗号化されますか?
賢明な暗号化アルゴリズムはこれを行うことはありません。そうしないと、暗号化された情報が周波数分析によって簡単に破られる可能性があります。(ちなみに、これは置換暗号として知られています)。これはもちろん、blowfishとtwofishにも当てはまります。
途中のバイトを抽出したい場合でも、最初にパケット全体を復号化する必要があります。
*: 弱いECB モードを使用しない限り、2 つの暗号化アルゴリズムを 64 ビット/128 ビット ブロックの置換暗号にのみ削減します)。