T

Text Machine

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

ヒル暗号

線形代数の上に築かれた古典的なポリグラフ暗号、ヒル暗号を暗号化・復号しましょう。文字はブロックにまとめられ、数のベクトルに変換され、26 を法としてキー行列と掛け合わされます: 暗号化は C = K·P、復号は P = K⁻¹·C です。2×2 または 3×3 のキーを選び、リアルタイムの行列・その行列式・そのモジュラー逆行列を眺めながら、ブロックごとの計算過程を追えます。すべての処理はブラウザ上で実行されます。

キー行列

キー (文字)

キーは 4 文字 (A=0 … Z=25) で、行列を行ごとに埋めていきます。 2×2 のキーは文字をペア (ダイグラフ) 単位で暗号化します。

平文
暗号文

上にテキストを入力すると、結果がここに表示されます。

キー行列

文字の各ブロックはベクトル (A=0 … Z=25) になり、26 を法としてキー行列と掛け合わされます。キーは、その行列式が mod 26 で可逆なときにのみ機能します。

C = K · P (mod 26)

キー行列を埋めるために、ちょうど 4 文字 (A–Z) を入力してください。

ヒル暗号 の使い方

  1. 1

    暗号化か復号か、そして行列のサイズを選ぶ

    暗号化するなら暗号化を、復号するなら復号を選び、続いて 2×2 のキー (ペア単位の文字) か 3×3 のキー (3つ組単位の文字) を選びます。

  2. 2

    キーを文字で入力する

    行列を行ごとに埋める文字を入力します — 2×2 のキーには4文字、3×3 には9文字です。リアルタイムの行列が行列式を表示し、キーが mod 26 で可逆かどうかを教えてくれます。

  3. 3

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

    メッセージを入力すると、入力すると同時に変換されます。計算過程パネルが、各ブロックをベクトルとして、行列の掛け算、そして結果のブロックを示します。

  4. 4

    キー行列と逆行列を確認する

    キー行列パネルを開くと、キー・その行列式・そして — キーが有効なときは — 復号に使われるモジュラー逆行列を見られます。

  5. 5

    コピー・ダウンロード・共有する

    結果をコピーしたり、テキストファイルとしてダウンロードしたり、あなたのテキスト・キー・サイズ・方向をそのまま整えてツールを開き直すリンクで共有したりできます。

ヒル暗号を理解する

ヒル暗号とは何ですか?

ヒル暗号は、アメリカの数学者 Lester S. Hill によって 1929 年に考案された古典的なポリグラフ換字式暗号です。1文字ずつ置き換えるのではなく、文字のブロック全体をひとまとめに暗号化します — ブロックを数のベクトルとして扱い、それを秘密のキー行列と、26 を法として掛け合わせるのです。これは一度に3つを超える記号を扱える初めての実用的な暗号であり、線形代数を暗号学の真ん中へと持ち込みました。

出力の各文字がそのブロック内のすべての入力文字に依存するため、ヒル暗号は、より単純な暗号を裏切る単一文字の頻度を隠します。2×2 のキーは文字をペアでかき混ぜ、3×3 のキーは3つ組でかき混ぜ、より大きな行列はさらに大きなブロックをかき混ぜます。この拡散は現代のブロック暗号の基礎にあるのと同じ考え方であり、それゆえヒル暗号は格好の教材になっています — もっとも、線形な暗号であるがゆえに、少しの既知平文があれば簡単に破られてしまいますが。

ヒル暗号の仕組み

まず、A=0、B=1、… Z=25 として文字を数に変換します。キーはそうした数からなる n×n の行列で、ここでは行列を行ごとに埋めていく文字の並びとして入力するため、2×2 のキーは4文字、3×3 のキーは9文字を必要とします。平文は n 文字のブロックに分割され、それぞれが列ベクトルとして書かれます。

ブロック P を暗号化するには、C = K · P (mod 26) を計算します: キー行列をベクトルに掛け、各要素を 26 を法として簡約し、その数を文字として読み戻します。復号するには、キー行列のモジュラー逆行列 K⁻¹ が必要で、P = K⁻¹ · C (mod 26) を計算します。逆行列は、行列式が 26 を法として可逆なとき — つまり 26 と共通因数を持たないとき — にのみ存在し、これがキーを選ぶ際の最も重要な唯一の規則です。

有効なキー行列を選ぶ

どんな行列でもヒル暗号のキーになれるわけではありません。復号が機能するには、キーの行列式を 26 を法として取ったものが、26 と互いに素でなければなりません。26 = 2 × 13 なので、行列式は奇数で、かつ 13 の倍数であってはなりません。許される値は、1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25 という12個の数です。行列式が偶数か 13 に等しい場合、モジュラー逆行列は存在せず、暗号文を一意に復号できません。

このツールはあなたの代わりに行列式を計算し、キーが可逆なときは緑のバッジを、そうでないときは赤のバッジを、復号に使う逆行列とともに表示します。キーが拒否されたら、1文字か2文字を変えて、行列式が有効な値に落ち着くまでその更新を眺めてください。このリアルタイムのフィードバックは、本来は手間のかかるヒルのキーを手で選ぶ作業を、素早く視覚的な演習へと変えてくれます。

2×2 の実例で見る

キー DDCF を取り上げましょう。これは 2×2 の行列を、上の行に 3, 3、下の行に 2, 5 という数で埋めます。その行列式は 3×5 − 3×2 = 9 であり、9 は 26 と互いに素なのでこのキーは有効です。では HELP を暗号化しましょう。最初のブロック HE はベクトル (7, 4) です: 掛け合わせると (3×7 + 3×4, 2×7 + 5×4) = (33, 34) となり、mod 26 で簡約すると (7, 8) = HI になります。

2番目のブロック LP は (11, 15) で、(3×11 + 3×15, 2×11 + 5×15) = (78, 97) = (0, 19) = AT を与えます。こうして HELP は HIAT に暗号化されます。復号するには、ツールがキーを (15, 17 / 20, 9) に反転させ、各暗号ブロックにそれを掛けて HELP を復元します。上でキーとして DDCF を入力すると、すべての手順がリアルタイムの計算過程パネルに現れるのを見られます。

3×3 の実例で見る

古典的な 3×3 の例はキー GYBNQKURP を使い、行列を1行目に 6, 24, 1、2行目に 13, 16, 10、3行目に 20, 17, 15 で埋めます。トリグラフ ACT — ベクトル (0, 2, 19) — を暗号化すると、簡約前は (67, 222, 319) となり、これが 26 を法として (15, 14, 7)、すなわち POH になります。

この行列の行列式は 26 を法として 25 であり、これは 26 と互いに素なので有効なキーであり、そのモジュラー逆行列は行列 (8, 5, 10 / 21, 8, 21 / 21, 12, 8) です。暗号ブロック POH にその逆行列を掛けると ACT が返ってきます。サイズ選択を 3×3 に切り替えて GYBNQKURP を入力すると、この教科書的な例を再現し、ツールが導く逆行列を確認できます。

埋め草・文字・書式

ヒル暗号は A–Z の26文字しか知らないため、スペース・数字・句読点は暗号化の前に取り除かれ、復号しても戻ってきません。メッセージは固定されたブロックで処理されるため、長さがブロックサイズの倍数でない平文は、最後のブロックを完成させるために文字 X で埋められます。したがって、復号されたメッセージは1文字か2文字の余分な文字で終わることがあります。

文字の大小は保たれません — すべてが大文字として扱われます。これらの制約はこのツールではなく古典的な暗号そのものに固有のものであり、ヒル暗号がその同時代の暗号と同様に、自由に流れる文章ではなく短い戦術的なメッセージに使われた理由の一部でもあります。リアルタイムの内訳は、あなたのテキストがどのようにブロックへとまとめられ、埋められるかを正確に示します。

安全性と暗号解読

ヒル暗号の強みは、同時に致命的な弱点でもあります: それが線形だということです。各暗号ブロックは平文ブロックの固定された線形関数なので、十分な数の平文・暗号文のブロックの組を手に入れた攻撃者は、線形方程式の系を立てて解き、キー行列を直接復元できます。n×n のキーに対しては、およそ n 個の既知ブロックがあれば普通は十分であり、これにより暗号は既知平文攻撃に素早く陥落します。

また、ブロック間の拡散も、線形なかき混ぜを超える撹乱も提供しないため、同一の平文ブロックは常に同一の暗号ブロックに暗号化されます。現代の基準では安全ではなく、本当の情報を守るのに決して使ってはいけません — 代わりに AES のような査読を経たアルゴリズムを頼ってください。とはいえ、行列・モジュラー算術・ブロック暗号化がどう組み合わさるかを明快に手を動かして示す例として、ヒル暗号は学ぶに値する最良の古典暗号の一つであり続けています。

よくある質問

ヒル暗号とは何ですか?
ヒル暗号は、1929 年に Lester S. Hill によって生み出された古典的なポリグラフ換字式暗号です。文字をブロック単位で暗号化します — 各ブロックを数のベクトルに変え、26 を法として秘密のキー行列と掛け合わせるのです。出力の各文字がブロック全体に依存するため、単一文字の頻度を隠し、線形代数を実用的な形で暗号化に応用した初めての暗号でした。
ヒル暗号はどう動きますか?
文字は数になります (A=0 … Z=25)。平文は n 文字のブロックに分割され、それぞれがベクトルとして書かれ、n×n のキー行列 K を使って C = K·P (mod 26) で暗号化されます。復号にはキーのモジュラー逆行列を使います: P = K⁻¹·C (mod 26)。2×2 のキーは文字のペアを、3×3 のキーは3つ組を扱います。
有効なヒル暗号のキーはどう選べばよいですか?
キー行列は、その行列式を 26 を法として取ったものが 26 と互いに素なときにのみ復号可能です。26 = 2 × 13 なので、行列式は奇数で、かつ 13 の倍数であってはなりません — 1, 3, 5, 7, 9, 11, 15, 17, 19, 21, 23, 25 のいずれかです。このツールは行列式をリアルタイムに表示し、キーが可逆かどうかを示すので、有効になるまで文字を調整できます。
ヒル暗号の実例を見せてもらえますか?
2×2 のキー DDCF (行は 3,3 と 2,5、行列式 9) を使うと、単語 HELP は HIAT に暗号化されます: HE = (7,4) は (7,8) = HI に、LP = (11,15) は (0,19) = AT に対応します。3×3 のキー GYBNQKURP を使うと、トリグラフ ACT は POH に暗号化されます。上でいずれかのキーを入力すると、各ブロックと行列の掛け算が一歩ずつ現れるのを見られます。
ヒル暗号はどうやって復号しますか?
復号では、各暗号ブロックにキー行列のモジュラー逆行列を掛けます。P = K⁻¹·C (mod 26) です。このツールでは、復号を選び、同じ行列のサイズを設定し、暗号化に使われたのと同じキーを入力すると、逆行列を計算して平文を組み立て直します。キーは mod 26 で可逆でなければならず、そうでなければ逆行列が — したがって一意の復号も — 存在しません。
2×2 と 3×3 のヒル暗号の違いは何ですか?
行列のサイズがブロックの長さを定めます。2×2 のキーは文字を2つずつ暗号化し、4文字のキーを必要とします。3×3 のキーは3つずつ暗号化し、9文字のキーを必要とします。より大きな行列は1ブロックあたりより多くの文字をかき混ぜ、頻度分析にいくらかよく耐えますが、設定が難しく、それでも既知平文攻撃には陥落します。
なぜキーが可逆ではないと表示されるのですか?
ヒルのキーは、その行列の行列式が 26 と互いに素なときにのみ復号できます。行列式が偶数か 13 の倍数の場合、その行列には mod 26 の逆行列が存在せず、暗号文を一意に復号できません。キーの文字を1つか2つ変えて、ツールがキーを可逆だと示すまで行列式の更新を眺めてください。
スペース・数字・句読点はどうなりますか?
ヒル暗号には A–Z の文字しか存在しないので、スペース・数字・句読点は暗号化の前に取り除かれ、復号しても再び現れることはありません。メッセージの長さがブロックサイズの倍数でない場合は、最後のブロックを埋めるために文字 X で埋められるので、復号されたメッセージは1文字か2文字の余分な文字で終わることがあります。
ヒル暗号は安全ですか?
いいえ。ヒル暗号は線形なので、十分な数の平文・暗号文のブロックの組を入手した攻撃者は、線形方程式の系を解いてキー行列を復元できます。n×n のキーに対しては、およそ n 個の既知ブロックがあれば普通は十分です。行列とモジュラー算術がどうブロック暗号を築くかを学ぶには優れていますが、本当の保護には AES のような現代的なアルゴリズムを常に使うべきです。
ヒル暗号は誰が考案しましたか?
ヒル暗号はアメリカの数学者 Lester S. Hill によって考案され、1929 年に学術誌 The American Mathematical Monthly に発表されました。3文字を超えるブロックを実用的な規模で暗号化できた初めての暗号として注目に値し、行列代数とモジュラー算術を暗号化の道具として導入しました — それは現代のブロック暗号の設計に響く考え方です。
行列のモジュラー逆行列とは何ですか?
それは、キーと 26 を法として掛け合わせると単位行列になる行列です。2×2 や 3×3 のキーでは、随伴行列 (転置した余因子行列) に行列式のモジュラー逆元を掛けることで求められます。ヒル暗号はそれを暗号化を取り消すために使い、このツールはキーが有効なときはいつでも、計算した逆行列を表示します。
入力したテキストはサーバーに送信されますか?
いいえ。すべての暗号化と復号はブラウザ内だけで実行されるため、入力したテキストとキーがアップロード・記録・保存されることはありません。共有リンクでさえ、テキストとキーを URL のハッシュ以降の部分に保持しますが、ブラウザはこの部分をサーバーに決して送信しないため、自分でリンクを共有するまでメッセージは非公開のまま保たれます。

関連ツール

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

フォースクエア暗号

ツースクエア暗号

シーザー暗号

ヴィジュネル暗号

アトバシュ暗号

レールフェンス暗号