使い捨てパッド暗号
使い捨てパッド(one time pad)について
使い捨てパッドとは
使い捨てパッドとは、平文と乱数(ランダムはビット列)でXOR論理演算をするだけの暗号です。
ただし、乱数は平文と同じ文字列長を使用し、1回使った乱数表は捨てることが条件となります。
総当たり(ブルートフォースアタック)で解読を試みたとしても、現実的には解読できないことが証明されている暗号方式です。
「Vernam's One-time Pad(バーナム使い捨て鍵方式あるいはバーナム使い捨て鍵暗号)」や「バーナム暗号」とも呼ばれます。
使い捨てパッドが解読できない理由
使い捨てパッドが解読できない理由は、復号化した平文が正しいか証明できない点にあります。
解読を試みても、解読した文章の中には本来秘匿された文章以外にも意味を読み取れる文字列が生成されてしまう可能性が生まれます
これにより、暗号化された目的の文章がどれであるかを判定することができなくなります。
例えば「str」という三文字を暗号化した暗号文を解読しても、「abc」や「wto」などといった一般的に意味を持つ文字列に復号できてしまうと、平文としての正当性を証明することができなくなります。
つまり、正しく復号する鍵を判定することが不可能となってしまいます。
使い捨てパッドの仕組み
平文をasciiコードのビット列として、乱数を鍵として用います。
乱数の秘匿だけで暗号強度を保てるので、暗号化/復号が手作業でも処理できるほど単純といえます。
暗号化はXOR演算を行い、暗号文を作成します。
平文 :s(115) t(116) r(114)
01110011 01110100 01110010
乱数鍵 : 01100010 01001010 11011010
----------------------------------------- XOR演算
暗号文 : 00010001 00111110 10101000
復号化は暗号文と乱数で生成した鍵とします。
暗号文 : 00010001 00111110 10101000
乱数鍵 : 01100010 01001010 11011010
----------------------------------------- XOR演算
平文 :s(115) t(116) r(114)
01110011 01110100 01110010
使い捨てパッドの欠点
使い捨てパッドは鍵となる乱数の秘匿で暗号強度を保っています。
暗号の運用方法を徹底できない場合、暗号強度は保証されなくなります。
以下の問題を考慮する必要があります。
- 鍵の保管
- 使い捨てパッドでは鍵が平文と同じデータ長となります。つまり、暗号に際してデータ量は2倍以上(ファイルに関するメタデータなどを含めた場合)になります。暗号文が多くなるほど鍵データは膨大となるため、保管方法に工夫が必要となります。また、漏洩しないように適切に保管する必要があります。
- 鍵の配送
- 暗号化と復号化に利用する鍵は共通です。暗号文を通信で送付する場合には鍵を配送しなければなりません。鍵が漏洩してしまうと、暗号強度が無くなります。配送時に鍵が漏洩しないように工夫する必要があります。
- 鍵は平文と同量のデータ量となります。巨大なデータである場合、データの同期確認を厳重にする必要があります。通信エラーで1ビットでも誤りが発生しては、暗号文の復号は不可能となります。
- 鍵の生成
- 鍵の生成は乱数で完全なランダムとする必要があります。鍵の生成パターンが存在した場合、解読の手がかりとなり解読不可能の暗号方式ではなくなってしまいます。また、過去に使用した鍵を再利用してしまうことも暗号強度を弱める要因となります。