質問: TwoFishで平文ブロックを埋め込む TwoFishで暗号化を使用する場合、最後のプレーンテキストブロックが128ビット未満の状況になることは避けられません。その場合、パディングはどのように処理されますか?例えば、最後のブロックが112ビット(14バイト)だけであるとします。あなたはちょうどランダムなビットでバイト15を記入し、どのくらいのパディングがブロックに含まれているかを知るために16番目のバイトを使用しますか?この場合、ブロックの16ビットがパディングであることを示すために、最後のバイトが00010000を含むことができる。
回答: 現在一般的に使用されているパディングメカニズムがいくつかあります。どちらが選択されるかは、主にプロトコル設計者が1つを選択し、それがそのプロトコルの標準であると言います。 (私は他のものよりも一つを選ぶ魅力的な理由を知らない。) 私が知っている最も一般的なもので、サブバイト(ビットレベル)パディングを可能にするために働くのは、 `1` ビットの後ろに `0` ブロックを終了するのに必要なもの。 私が知っている最も普及しているのは、ゼロまたはランダムなデータを埋め込み、ブロック内の最後のバイトを使用して、パディングに使用されたバイト数を示すことです。 また、バイト値として使用することもできますが、パディングに使用する必要があるバイト数は多くなります。 1バイトを追加する必要がある場合は `0x01` 、4バイトを埋め込む必要がある場合は `0x04 0x04 0x04 0x04` ちょっとした工夫が必要なのは、ほとんどの場合、パディングブロックを追加する必要があるということです。ブロック全体がパディングであっても、リバーシブル変換が可能です。メッセージがブロックサイズの倍数のときにパディングブロックを追加することを怠った場合は、正当なメッセージの内容をパディングとして取り除こうとする可能性があります。あなたは、他の何らかの仕組みによってパディングの欠如を知らせることもできますし、常にパディングを追加することもできます。 (これはしばしば簡単です)。