ランニングキー暗号
キーが短い繰り返しの単語ではなく長い文章であるヴィジュネル暗号、ランニングキー暗号を暗号化・復号しましょう。キーがメッセージと同じ長さで二度と繰り返されないため、ふつうのヴィジュネル暗号を破る周期的なパターンが消え去ります。暗号化と復号を切り替え、計算過程がリアルタイムで組み上がっていく様子を眺められます。すべての処理はブラウザ上で実行されます。
長いキーの文章を貼り付けます。伝統的には取り決めた本のページです。真のランニングキーとするには、少なくともメッセージと同じ長さが必要です。ずらしに使われるのは文字だけで、大文字・小文字は同じものとして扱われ、キー中のスペース・数字・句読点は無視されます。
上にテキストを入力すると、ランニングキー暗号の結果がここに表示されます。
ランニングキー暗号 の使い方
- 1
暗号化か復号かを選ぶ
平文をランニングキー暗号文に変えるには暗号化を、暗号文から平文を復元するには復号を選びます。どちらの向きにも同じランニングキーが使われます。
- 2
ランニングキーを貼り付ける
キーとして使う長い文章を貼り付けます。伝統的には取り決めた本のページです。真のランニングキーとするには、少なくともメッセージと同じ長さであるべきです。使われるのはその文字だけで、大文字・小文字・スペース・句読点は無視されます。
- 3
テキストを入力または貼り付ける
変換したいメッセージを入力します。入力すると同時に暗号が自動で実行され、1文字ずつの計算過程が下にリアルタイムで更新されて、短いキーが巻き戻って繰り返さなければならなかった箇所をすべて強調します。
- 4
確認し、コピーし、共有する
結果を確認し、それをコピーしたり、テキストファイルとしてダウンロードしたり、あなたの正確なキー・向き・テキストとともにツールを開き直すリンクで共有したりできます。すべてはブラウザ内に留まります。
ランニングキー暗号を理解する
ランニングキー暗号とは何ですか?
ランニングキー暗号は多表式換字暗号であり、キーが短い繰り返しのキーワードではなく長い普通のテキストの文章であるヴィジュネル暗号の一種です。送信者と受信者はあらかじめキーとなるテキストを取り決めます。古典的には特定の本の特定の版を特定のページで開いたもので、その文字を順に使ってメッセージをずらします。キーが少なくともメッセージと同じ長さであるため、繰り返す必要が一切なく、繰り返しキー暗号を破りやすくしている規則的で周期的な構造が単純に消え去ります。
この長く繰り返さないキーこそが、ランニングキー暗号を際立たせるものです。ふつうのヴィジュネル暗号は周期性によって正体を現します: その短いキーワードが循環し、そのリズムが検出されてほどかれてしまうのです。ランニングキーはそのリズムを完全に取り除きます。その代償は、キーが今や自然言語であり、英語のテキストが帯びるあらゆる統計的な偏りを抱えていることで、その偏りこそが、攻撃者が代わりに突く糸口になるのです。
ランニングキー暗号の仕組み
アルファベットに A を 0 から Z を 25 まで番号を振ります。キーのテキストをメッセージの下に書き出し、平文のすべての文字の下に1つずつキー文字が来るようにします。暗号化するには、各キー文字をその上の文字に足し、26 で割った余りでアルファベットを循環させると、暗号文の文字 C = (P + K) mod 26 が得られます。この計算はまさにヴィジュネルの換字表そのもので、変わったのはキーの出所だけです。
復号するには、受信者が暗号文の下に同じキーのテキストを書いて引き、P = (C − K) mod 26 で各平文の文字を復元します。あらゆるヴィジュネルの変種と同じく、変換されるのは26文字だけです。スペース・句読点・数字はそのまま通り抜けてキー文字を消費しないため、キーはメッセージの文字と並んだままになります。大文字・小文字も保たれるので、出力は元のテキストの形を保ちます。
実例で見る
メッセージ HELLO をランニングキー KEYBOARD で暗号化しましょう。最初の5文字 K、E、Y、B、O をメッセージの下に並べて足します: H に K を足して R、E に E を足して I、L に Y を足して J、L に B を足して M、O に O を足して C。暗号文は RIJMC です。オートキー暗号とは違い、キー文字は純粋に取り決めたキーのテキストから来るもので、平文とは何の関係もないことに注目してください。
RIJMC を復号するには、その下に同じキー KEYBOARD を書いて引きます: R から K を引いて H、I から E を引いて E、J から Y を引いて L、M から B を引いて L、C から O を引いて O となり、HELLO が復元されます。キーが最初から完全に分かっているため、1文字ずつのフィードバックを待つことなく、メッセージ全体を一度の処理で読み取れます。
ランニングキー 対 繰り返しキーのヴィジュネル
標準的なヴィジュネル暗号は、短いキーワードをメッセージ全体にわたって繰り返します: キー KEY ならストリームは KEYKEYKEY というふうに続きます。この繰り返しこそが致命的な弱点です。なぜなら、キーの長さがカシスキー検査や一致指数で復元でき、そのあと各列が単純なシーザーシフトとなって頻度分析で解かれてしまうからです。ランニングキー暗号は同一の足し算の規則を使いますが、メッセージと同じ長さのキーを使うため、見つけるべき周期がなく、これらの古典的な検査は直接は当てはまりません。
危険なのは、短すぎるキーを使うことです。ランニングキーがメッセージより短ければ先頭に巻き戻らなければならず、その瞬間に、ふつうの繰り返しキーのヴィジュネルへと、その暗号のあらゆる弱点もろとも成り下がります。例えば HELLO を3文字のキー KEY で暗号化すると、巻き戻って RIJVS が得られます——これはまさに繰り返しヴィジュネルの結果です。このツールは再利用されたキー文字をすべて示すので、暗号が劣化していく様子を見て取れます。そして適切なランニングキーは、常に少なくともテキストと同じ長さであるべきです。
ランニングキー 対 オートキー暗号
ランニングキー暗号とオートキー暗号は近い親戚です: どちらも何も繰り返さないようメッセージと同じ長さのキーを使い、どちらも同じ剰余の足し算に帰着します。違いは、その長いキーがどこから来るかです。ランニングキー暗号は、取り決めた本のページのような共有された外部のテキストからキーを引きますが、オートキー暗号は短い起動キーワードに平文自身を続けたものから、その長いキーを組み立てます。
その区別が、それぞれの攻撃のされ方を形づくります。オートキー暗号はごく小さな共有秘密、すなわち起動部分だけで済みますが、キーの一部が平文であるため、よくある単語を当ててメッセージ上を引きずると、より多くのテキストが露わになります。ランニングキー暗号は両者が同じキーのテキストを持つ必要がありますが、その弱点は統計的なものです: メッセージもキーも自然言語であるため、解析者は、一貫した分割が現れるまで、ありそうな単語をありそうな単語にぶつけて試すことができます。
ランニングキー暗号を破る方法
キーが二度と繰り返されないため、カシスキー検査と一致指数は、繰り返しヴィジュネルに対して効くようには噛みつきません。代わりに古典的な攻撃は、各暗号文の文字が、どちらも普通の言語から取られた2つの文字の和であるという事実を突きます。英語は冗長性が高いため、どの暗号文の文字に対しても、もっともらしい平文とキーの文字の組はごくわずかしかなく、どちらのストリームのよくある単語も検出可能な痕跡を残します。
実用的な手法は、しばしばウィリアム・フリードマン (Friedman) の功績とされるもので、見込みのある単語を当て、それをキーであるかのように暗号文の一区間から引き、もう一方のストリームが言語らしく出てくるかどうかを見るというものです。キーの当てが正しければ平文の断片が明らかになり、平文の当てが正しければキーの断片が明らかになります。各断片はそこから外側へ延ばしていけて、2つのストリームを互いにほどき合わせられます。同じキーのテキストを2つ以上のメッセージに再利用するのは致命的です。なぜなら、2つの暗号文を引き算すると共有のキーが打ち消され、2つの平文が組み合わさったものが残るからです。
ランニングキーからワンタイムパッドへ
ランニングキー暗号は、唯一解読不能と証明されている暗号、ワンタイムパッドの直接の概念上の祖先です。やり方はほとんど同じです: メッセージと同じ長さのキーを取り、1文字ずつ足すのです。ワンタイムパッドは3つの厳格な条件を加えます——キーは真にランダムで、少なくともメッセージと同じ長さで、決して再利用されないこと。この3つすべてを満たせば、ありうるすべての平文が暗号文と等しく整合するため、どんな解析も本物の平文を有利にできなくなります。
ランニングキーは、まさにそれらの条件を満たせません。本の文章はランダムではなく、構造を持った英語であり、その文字頻度やよくある単語が、上で述べた足がかりを解析者に与えてしまいます。ですから、ランニングキー暗号は繰り返しヴィジュネルより有意に強力ではあるものの、現代の基準では実質的な安全性をまったく提供せず、本物の秘密を守るために使ってはなりません。これは暗号史の鮮やかな教訓として、またパズルハント・脱出ゲーム・キャプチャー・ザ・フラッグの課題の定番として楽しむのが最もよいでしょう。本物の保護のためには、AES のような現代的で十分に検証されたアルゴリズムを使ってください。
よくある質問
ランニングキー暗号とは何ですか?
ランニングキー暗号はどう動きますか?
ランニングキー暗号はヴィジュネル暗号とどう違いますか?
ランニングキー暗号の例を見せてもらえますか?
ランニングキーには何を使えばよいですか?
キーがメッセージより短いとどうなりますか?
ランニングキー暗号とオートキー暗号の違いは何ですか?
ランニングキー暗号はブック暗号と同じですか?
この暗号はスペース・数字・句読点を変えますか?
ランニングキー暗号はどうやって破りますか?
ランニングキー暗号はワンタイムパッドと関係がありますか?
ランニングキー暗号は安全ですか? また、入力したテキストはアップロードされますか?
関連ツール
こちらの便利なツールもどうぞ