2

入力に関係なく、出力が特定の長さになることを保証することはできますか?

たとえば、文字列を渡して、その暗号化された同等物に45文字が含まれることを保証したいと思います。これらの45文字は、入力が不思議の国のアリスの1文字であるかどうかに関係なく存在する必要があります。

:45は明らかに例です。要点は、出力文字の数を何らかの方法で制御する必要があるということです(正確な数、または5で割り切れる、あるいは)

4

2 に答える 2

3

いいえ - 固定の結果の長さを指定することはできません。データが十分に長い場合、固定された短い任意の長さに暗号化することはできません (これは驚くべき圧縮です)。hashおそらくそのような性質のものを考案することは可能でしょう。ただし、ハッシュは異なります (これは一方向です。ハッシュから元のデータを抽出することはできません)。

ただし、パディングを使用して長さを制御することは可能です。

于 2012-12-06T05:11:00.177 に答える
2

制限を「十分に高く」設定すると、はい、パディングとストリーム暗号を使用して、必要なことを簡単に行うことができます。

たとえば、ブロック暗号の操作の CTR (カウンター) モードを見てみましょう: http://en.wikipedia.org/wiki/Block_cipher_modes_of_operation#Counter_.28CTR.29

AES-128 を CTR モードで使用し、ランダムな IV を使用して暗号文の先頭に挿入すると、暗号文のサイズがちょうど 16 バイト + プレーン テキストのサイズになることがわかります。したがって、たとえば暗号文の長さを 100 バイトに固定すると、最大 84 バイトのプレーン テキストを暗号化できます。短いプレーンテキストをパディングする必要があります。たとえば、ASCII テキストを暗号化する場合、バイト 0x00 を文字列の末尾のマーカーとして (C の「ヌル終了文字列」と同様に) 使用し、84 になるまでランダムなガベージを埋め込むことができます。バイト。

他にも多くの一般的なパディング スキームを使用できます: http://en.wikipedia.org/wiki/Padding_(cryptography)

別の可能性について考えてみました。ガロア/カウンター モード (GCM) など、ある種の認証済み暗号化を使用できます。ランダムな IV を暗号テキストと連結し、これをランダムなバイトと連結して、目的のサイズにパディングします。次に、復号化するには、暗号文のすべての部分文字列を試すだけです。正しい部分文字列を取得した場合、復号化アルゴリズムはプレーン テキストを出力します。そうでない場合、「エラー」が出力されます。これを使用すると、スキームにタイミング攻撃が導入される可能性があることに注意してください。また、プレーンテキストのサイズが大きく異なる場合、暗号テキストを復号化するために非常に多くの計算を行う可能性があることに注意してください。

いずれにせよ、暗号化の専門家によるスキームのレビューを必ず受けてください (たとえば、スキームを考案した後、https://crypto.stackexchange.com/で質問してください)。攻撃の可能性。

于 2012-12-06T05:12:54.310 に答える