T

Text Machine

強力なテキストツールを、ブラウザで

ランニングキー暗号

キーが短い繰り返しの単語ではなく長い文章であるヴィジュネル暗号、ランニングキー暗号を暗号化・復号しましょう。キーがメッセージと同じ長さで二度と繰り返されないため、ふつうのヴィジュネル暗号を破る周期的なパターンが消え去ります。暗号化と復号を切り替え、計算過程がリアルタイムで組み上がっていく様子を眺められます。すべての処理はブラウザ上で実行されます。

ランニングキー

長いキーの文章を貼り付けます。伝統的には取り決めた本のページです。真のランニングキーとするには、少なくともメッセージと同じ長さが必要です。ずらしに使われるのは文字だけで、大文字・小文字は同じものとして扱われ、キー中のスペース・数字・句読点は無視されます。

平文
暗号文

上にテキストを入力すると、ランニングキー暗号の結果がここに表示されます。

ランニングキー暗号 の使い方

  1. 1

    暗号化か復号かを選ぶ

    平文をランニングキー暗号文に変えるには暗号化を、暗号文から平文を復元するには復号を選びます。どちらの向きにも同じランニングキーが使われます。

  2. 2

    ランニングキーを貼り付ける

    キーとして使う長い文章を貼り付けます。伝統的には取り決めた本のページです。真のランニングキーとするには、少なくともメッセージと同じ長さであるべきです。使われるのはその文字だけで、大文字・小文字・スペース・句読点は無視されます。

  3. 3

    テキストを入力または貼り付ける

    変換したいメッセージを入力します。入力すると同時に暗号が自動で実行され、1文字ずつの計算過程が下にリアルタイムで更新されて、短いキーが巻き戻って繰り返さなければならなかった箇所をすべて強調します。

  4. 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 のような現代的で十分に検証されたアルゴリズムを使ってください。

よくある質問

ランニングキー暗号とは何ですか?
ランニングキー暗号は、キーが短い繰り返しのキーワードではなく、取り決めた本のページのような長い文章であるヴィジュネル暗号です。キーがメッセージと同じ長さで二度と繰り返されないため、ふつうのヴィジュネル暗号を破りやすくする周期的なパターンを避けられます。キーが本から取られる場合、これはブック暗号と呼ばれることがあります。
ランニングキー暗号はどう動きますか?
アルファベットに A を 0 から Z を 25 まで番号を振り、キーのテキストをメッセージの下に、メッセージの1文字につき1つずつキー文字が来るように書きます。暗号化するには、各キー文字をメッセージの文字に 26 を法として足します: C = (P + K) mod 26。復号するには同じキーで引きます: P = (C − K) mod 26。変えられるのは文字だけで、スペース・数字・句読点はそのまま通り抜けます。
ランニングキー暗号はヴィジュネル暗号とどう違いますか?
同じ足し算の規則を使いますが、ヴィジュネル暗号は短いキーワードをメッセージ全体にわたって繰り返すのに対し、ランニングキー暗号はメッセージと同じ長さの、二度と繰り返さないキーを使います。これがカシスキー検査や一致指数が見つける周期を取り除きます。ランニングキーが短すぎて繰り返さなければならない場合、ふつうの繰り返しキーのヴィジュネルへと劣化します。
ランニングキー暗号の例を見せてもらえますか?
HELLO をランニングキー KEYBOARD で暗号化すると RIJMC になります。キー文字 K、E、Y、B、O をメッセージの下に並べると: H に K を足して R、E に E を足して I、L に Y を足して J、L に B を足して M、O に O を足して C。RIJMC を同じキー KEYBOARD で復号すると HELLO が一度の処理で復元されます。
ランニングキーには何を使えばよいですか?
あなたと受信者の両方が持っている任意の長い文章を使います。古典的には特定の本の取り決めたページです。キーは少なくともメッセージと同じ長さで、二度と繰り返す必要がないようにすべきです。使われるのは文字だけで、大文字・小文字は同じものとして扱われるため、キー中の句読点やスペースは関係ありません。
キーがメッセージより短いとどうなりますか?
キーは先頭に巻き戻って繰り返しを始め、これがランニングキー暗号をふつうの繰り返しキーのヴィジュネルに変え、いつもの攻撃にさらします。このツールは再利用されたキー文字を強調するので、それがどこで起こるかを正確に見て取れます。真のランニングキーのためには、常に暗号化するメッセージと少なくとも同じ長さのテキストを使ってください。
ランニングキー暗号とオートキー暗号の違いは何ですか?
どちらもメッセージと同じ長さの、繰り返さないキーを使いますが、キーがどこから来るかが異なります。ランニングキー暗号は本のような共有された外部テキストからキーを取りますが、オートキー暗号は短い起動キーワードに平文自身を続けたものからキーを組み立てます。オートキーはごく小さな共有秘密だけで済みますが、ランニングキーは両者が同じキーのテキストを持つ必要があります。
ランニングキー暗号はブック暗号と同じですか?
それは一種のブック暗号です。長いキーのテキストが取り決めた本から取られる場合、ランニングキー暗号はしばしばブック暗号と呼ばれます。ブック暗号という名前は、単語をページ・行・語の番号で置き換える別の方式にも使われるため、この用語はどちらの意味にもなりえますが、ここでは本のテキストをヴィジュネルのランニングキーとして使うことを指します。
この暗号はスペース・数字・句読点を変えますか?
いいえ。変換されるのは26文字だけです。スペース・句読点・メッセージ中の数字はそのまま通り抜け、キー文字を消費しないため、キーは文字と並んだままになります。大文字・小文字は保たれるので、出力は元のテキストの形を保ちます。
ランニングキー暗号はどうやって破りますか?
キーが二度と繰り返されないため、繰り返しキーの道具は当てはまりません。代わりに解析者は、メッセージもキーも普通の言語であるという事実を突きます: 各暗号文の文字は偏った2つの文字の和なので、どちらかのストリームで見込みのある単語を推測してテキスト上を滑らせると、延ばせる一致した断片が明らかになります。1つのキーのテキストを複数のメッセージに再利用すると、暗号は完全に破られます。
ランニングキー暗号はワンタイムパッドと関係がありますか?
はい、密接に。ワンタイムパッドはメッセージと同じ長さのキーを使い、同じように足しますが、キーが真にランダムで決して再利用されないことを要求し、これがそれを解読不能にします。ランニングキーはランダムな文字ではなく構造を持った本のテキストを使い、その統計的構造こそが、まさにそれを攻撃させる原因なので、ワンタイムパッドの完全秘匿性には及びません。
ランニングキー暗号は安全ですか? また、入力したテキストはアップロードされますか?
繰り返しキーのヴィジュネルより強力ですが、それでも安全ではありません: 自然言語のキーは統計的に攻撃されうるので、本物の秘密には AES のような現代的なアルゴリズムを使ってください。いずれにせよ、あなたのデータはここでは非公開のまま保たれます——すべての暗号化と復号はブラウザ内で実行され、共有リンクでさえ、あなたのテキストを URL のハッシュ以降の部分に保持しますが、ブラウザはこの部分をサーバーに決して送信しません。

関連ツール

こちらの便利なツールもどうぞ

ヴィジュネル暗号

ボーフォート暗号

グロンスフェルト暗号

オートキー暗号

ポルタ暗号

トリテミウス暗号