オートキー暗号
短い起動キーワードがキーを始め、メッセージ自身がそれを続けていくため、キーが二度と繰り返されない、より強力なヴィジュネル暗号の変種であるオートキー暗号を暗号化・復号しましょう。暗号化と復号を切り替え、計算過程がリアルタイムで組み上がっていく様子を眺められます。すべての処理はブラウザ上で実行されます。
キーワード
QUEENLY のような短い起動キーワードを入力します。これがキーストリームを始め、そのあとはメッセージ自身で続いていくため、キーは二度と繰り返されません。使われるのは文字だけで、大文字・小文字は同じものとして扱われ、キーワード中のスペース・数字・句読点は無視されます。
上にテキストを入力すると、オートキー暗号の結果がここに表示されます。
オートキー暗号 の使い方
- 1
暗号化か復号かを選ぶ
平文をオートキー暗号文に変えるには暗号化を、暗号文から平文を復元するには復号を選びます。どちらの向きにも同じ起動キーワードが使われます。
- 2
起動キーワードを入力する
QUEENLY のような短いキーワードを入力します。これがキーストリームを始め、そのあとはメッセージ自身で続いていきます。使われるのは文字だけで、キーワード中の大文字・小文字・スペース・句読点は無視されます。
- 3
テキストを入力または貼り付ける
変換したいメッセージを入力します。入力すると同時に暗号が自動で実行され、1文字ずつの計算過程が下にリアルタイムで更新されて、どのキー文字がキーワード由来でどれがメッセージ由来かを示します。
- 4
確認し、コピーし、共有する
結果を確認し、それをコピーしたり、テキストファイルとしてダウンロードしたり、あなたの正確なキーワード・向き・テキストとともにツールを開き直すリンクで共有したりできます。すべてはブラウザ内に留まります。
オートキー暗号を理解する
オートキー暗号とは何ですか?
オートキー暗号は、オートクレーブ暗号とも呼ばれ、メッセージ自身がキーの一部となる多表式換字暗号です。短い起動キーワードがキーストリームを始め、それらの文字が尽きると、キーは単純に平文の文字でそのまま続いていきます。この走るキーはメッセージと同じ長さがあり、二度と繰り返されないため、オートキー暗号は、ふつうの繰り返しキー暗号を破りやすくする規則的で周期的なパターンを避けられます。
この暗号は、フランスの外交官ブレーズ・ド・ヴィジュネル (Vigenère) が1586年に発表したもので、ジョヴァン・バッティスタ・ベラーゾ (Bellaso) の先行する着想に基づいています。ここにはよく知られた皮肉があります: 世界が今ヴィジュネル暗号と呼ぶ単純な繰り返しキー暗号は、実はベラーゾ (Bellaso) のものであり、一方でヴィジュネル (Vigenère) 自身の、より強力な発明こそがこのオートキーだったのです。平文をキーへ送り返すことで、オートキー暗号は、のちにカシスキー (Kasiski) やフリードマン (Friedman) のような暗号解読者が繰り返しキーを破るために突いた周期性を取り除きます。
オートキー暗号の仕組み
アルファベットに A を 0 から Z を 25 まで番号を振ります。まず起動キーワードを書き、そのあと平文の文字を順に続けることでキーストリームを組み立てます。そのストリームをメッセージの下に並べ、すべての平文の文字の下に1つずつキー文字が来るようにします。暗号化するには、各キー文字をその上の文字に足し、26 で割った余りでアルファベットを循環させます。そうすると暗号文の文字は C = (P + K) mod 26 になります。
復号は左から右へ進めなければなりません。起動キーワードは分かっているので、P = (C − K) mod 26 で最初の数文字を復元できます。復元した各平文の文字はそのままキーストリームに追加され、次の文字を復号するのに使われ、これを最後まで繰り返します。ヴィジュネル (Vigenère) 暗号と同じく、変換されるのは26文字だけです。スペース・句読点・数字はそのまま通り抜けてキー文字を消費せず、大文字・小文字も保たれます。
実例で見る
メッセージ HELLO を起動キーワード KEY で暗号化しましょう。キーストリームはキーワードのあとに平文が続くので、5文字に対して K、E、Y、H、E となります。各文字をメッセージに足すと、H に K を足して R、E に E を足して I、L に Y を足して J、L に H を足して S、O に E を足して S となります。暗号文は RIJSS で、最後の2つのキー文字 H と E が、まさにメッセージ自身の最初の2文字であることに注目してください。
RIJSS を復号するには、キーワード KEY から始めます。R から K を引いて H、I から E を引いて E、J から Y を引いて L となり、HEL が復元されます。これら復元された文字が今度はキーを延ばすので、次のキー文字は H となり、S から H を引いて L、続いてキー文字 E により S から E を引いて O となって、HELLO が完成します。復元した各文字が次を解き明かす——これがオートキー暗号を読み解く核心です。
オートキー 対 繰り返しキーのヴィジュネル
ふつうのヴィジュネル (Vigenère) 暗号は、そのキーワードを何度も繰り返します: キー KEY なら、ストリームは KEYKEYKEY というふうに続きます。この繰り返しこそが致命的な弱点です。なぜなら、キーの長さがカシスキー (Kasiski) 検査や一致指数で見つけられ、そのあと各列が単純なシーザーシフトになるからです。オートキー暗号は同じ足し算の規則を使いますが、キーを決して繰り返さないため、これらの古典的な検査は当てはまりません。
その違いは実例で見て取れます。キー KEY では、繰り返すヴィジュネルは HELLO を RIJVS と暗号化しますが、オートキーは RIJSS を生み出します——両者はキーワードが続く間だけ一致し、そのあとは食い違います。オートキーが平文へと移っているからです。メッセージをキーへ送り返すというそのただ一つの変更こそが、ヴィジュネル (Vigenère) の真の貢献であり、彼の暗号を、今その名を冠する暗号よりも著しく強力にしたのです。
オートキー 対 ランニングキー暗号
オートキー暗号は、ランニングキー暗号と密接に関係しています。どちらも何も繰り返さないようメッセージと同じ長さのキーを使いますが、その長いキーがどこから来るかが異なります。ランニングキー暗号は、取り決めた本のページのような、共有された外部のテキストからキーを取りますが、オートキー暗号は、短い起動部分に平文自身を足したものから、その長いキーを生成します。
それぞれのやり方に落とし穴があります。自然言語から取ったランニングキーは、それ自体が攻撃されうる統計的構造を抱えていますが、平文のフィードバックは必要としません。オートキーはごく小さな共有秘密、すなわち起動キーワードだけで済みますが、キーの一部が平文であるために、よくある単語を当てた攻撃者は、それをキーであるかのようにメッセージ上で滑らせて試すことができます。これがオートキー暗号を破る主な手口です。
オートキー暗号を破る方法
キーが二度と繰り返されないため、繰り返しキー暗号に対する標準的な道具であるカシスキー (Kasiski) 検査と一致指数は、オートキー暗号文には直接は効きません。そのため、これはヴィジュネル (Vigenère) より目立って手ごわくなりますが、それでも安全からは程遠いものです。よくある攻撃は、この暗号を定義づけるまさにその特徴を突きます: キーの大部分は平文であり、それはふつうの言語なのです。
解析者は、THE やありそうな名前といった見込みのある単語を当て、それをキーであるかのように引きながら暗号文の上を引きずります。当てが正しいところでは、この操作がさらなる平文の断片を明らかにし、それを両方向へ延ばしていけます。短い起動キーワードの総当たりと組み合わせれば、このクリブドラッグ (crib-dragging) は手作業でオートキーのメッセージを復元します。したがってこの暗号は、安全な選択肢というよりも、巧妙な歴史的前進と見るのが最もよいでしょう。
オートキー暗号は安全ですか?
いいえ。オートキー暗号は素朴な繰り返しキーのヴィジュネル (Vigenère) より強力ではありますが、現代の基準では実質的な保護をまったく提供しません。キーとして平文に頼ることがクリブドラッグへの扉を開き、短い起動部分は総当たりされうるため、本気の解析者なら鉛筆と紙でこれを破れます。これは安全な手法のどんな一覧でもなく、古典暗号の歴史に属するものです。
今日、オートキー暗号は学習と娯楽のために重んじられています。メッセージをキーへ送り返すことが、より単純な暗号を破る周期性攻撃をどのように打ち負かすかを見る、洗練された方法であり、パズルハント・脱出ゲーム・キャプチャー・ザ・フラッグの課題に登場します。本物の情報を守るためには、代わりに AES のような現代的で十分に検証されたアルゴリズムに頼るべきです。
よくある質問
オートキー暗号とは何ですか?
オートキー暗号はどう動きますか?
オートキー暗号はヴィジュネル暗号とどう違いますか?
オートキー暗号の例を見せてもらえますか?
どんなキーワードを使えばよいですか?
オートキー暗号はどうやって復号しますか?
オートキー暗号とランニングキー暗号の違いは何ですか?
この暗号はスペース・数字・句読点を変えますか?
キーワードは大文字・小文字を区別しますか?
オートキー暗号はどうやって破りますか?
オートキー暗号は安全ですか?
入力したテキストはサーバーに送信されますか?
関連ツール
こちらの便利なツールもどうぞ