縦列転置式暗号
古典的なキーワードベースの並べ替えである縦列転置式暗号を暗号化・復号しましょう。テキストはキーワードの下に一行ずつグリッドへ書き込まれ、続いて各列がキーワードの文字のアルファベット順に読み戻されます — 何も置き換えられず、すべての文字はただ移動されるだけです。不完全列か完全列かを選び、パディング文字を設定し、リアルタイムのグリッドを追いながら、結果をコピー・ダウンロード・共有できます。すべての処理はブラウザ上で実行されます。
キーワード
キーワードを入力してください。その文字が列を決めます: テキストは列をまたいで一行ずつ書き込まれ、続いて列がキーワードのアルファベット順に読み出されます。同じ鍵文字が繰り返される場合は左から右の順で扱われます。
上にテキストを入力すると、結果がここに表示されます。
縦列転置式暗号 の使い方
- 1
暗号化か復号を選ぶ
平文を縦列転置式暗号文にかき混ぜるには暗号化を、暗号文を元のメッセージに戻すには復号を選びます。
- 2
不完全列か完全列を選ぶ
不完全は最後の行を短いまま残し、テキストをそのまま正確に返します。完全は選んだ文字でグリッドを完璧な長方形までパディングするので、すべての列が同じ長さになります。
- 3
キーワードを入力する
キーワードを入力します。その長さが列数を決め、その文字のアルファベット順が列を読む順序を決めます。双方とも同じキーワードを使わなければなりません。完全モードではパディング文字も設定できます。
- 4
テキストを入力または貼り付ける
メッセージを入力すると、入力すると同時に転置されます。暗号化グリッドが、鍵付けされた列に埋め込まれたテキストを、各列の読み出し順に番号を振って示します。
- 5
コピー・ダウンロード・共有する
結果をコピーしたり、テキストファイルとしてダウンロードしたり、入力したテキスト・キーワード・モード・パディングをそのまま整えてツールを開き直すリンクで共有したりできます。
縦列転置式暗号を理解する
縦列転置式暗号とは何ですか?
縦列転置式暗号は、メッセージを隠す最も古く、最も直感的な方法の一つです。これは転置式暗号であり、つまり文字そのものは何も変えず — その順序だけを変えます。暗号文中のすべての文字は、平文の中にあった文字そのものです。それらはただ、決まった反復可能な規則に従ってかき混ぜられただけです。その規則はキーワードによって定まり、これによって並べ替えは信頼する相手と簡単に共有でき、それを知らない者には元に戻すのが難しくなります。
発想は、メッセージをキーワードの文字の下に一行ずつグリッドへ書き込み、続いてグリッドを一列ずつ読み戻すというものです。コツは列を読む順序にあります: 左から右ではなく、キーワードの文字のアルファベット順に読むのです。キーワードがその順序を決めるので、キーワードを共有する二人は自由に暗号化・復号できる一方、列の順序はそれ以外の誰にとっても恣意的に見えます。
縦列転置式暗号の仕組み
まずキーワードをグリッドの上部に、一列につき一文字ずつ書きます。続いてその下にメッセージを書き、最初の行を左から右へ、次に二行目、というふうに、メッセージ全体が並ぶまで埋めていきます。列の数はキーワードの長さによって定まるので、六文字のキーワードはメッセージの長さに関わらず常に六列を作ります。
さて、キーワードの文字のアルファベット順に列に番号を振ります: アルファベットで最も早いキーワードの文字の下にある列が最初に読まれ、次に早いものが二番目、というふうに続きます。キーワードに同じ文字が二つある場合、それらの列は現れる順に左から右へ読まれます。最後に、その番号順にグリッドを一列ずつ読み、各列の文字を順に書き出します。得られる文字列が暗号文です。復号するには、その過程を逆にたどります: 空のグリッドを組み立て直し、列を読み出し順に埋め戻し、行をまたいで読みます。
不完全列と完全列
ほとんどのメッセージはグリッドにきれいに割り切れないので、最後の行は短くなります。不完全 (incomplete) の形式 — 古典的な教科書どおりの縦列転置 — では、それらのマスを単に空のままにします。すると列の長さは一つ分だけ異なり、暗号文は元のメッセージとちょうど同じ長さになります。このツールの不完全モードはこれを行い、テキストを完全に往復させます: 復号すると、スペースや句読点を含めて、入力したものがそのまま正確に返ってきます。
完全の形式では、代わりにメッセージを最後の行を埋めるまでパディングするので、すべての列が同じ長さになり、グリッドは完璧な長方形になります。パディングはふつう、X や Q のような決められた合意済みの文字、またはヌルの並びです。完全列は列の長さを明確にし、これは歴史的に紙と鉛筆の作業を簡単にし、同じグリッドを二度目に転置するときには欠かせません。完全モードに切り替えると、好きな文字でグリッドをパディングできます。すると復号は、テキストに続けて追加されたパディングを返すので、それを切り取って取り除けます。
キーワードの役割
キーワードは二つの仕事を同時にこなします: その長さがグリッドの列数を決め、その文字のアルファベット順の並びが列を読む順序を決めます。長いキーワードはより幅広く背の低いグリッドと、より徹底した並べ替えを作ります。文字がすでにアルファベット順に近いキーワードはほとんど何も並べ替えないので、よく混ざったキーワードの方が強くなります。重要なのは文字の相対的な順序だけであり、だからこそあるキーワードと、同じ文字の並びを持つどんな単語も同じ転置を生み出します。
キーワードがすべての秘密なので、送り手と受け手はまったく同じものを使わなければなりません。このツールではキーワード中の文字だけが列の順序に数えられ — スペース、数字、句読点は無視されます — 繰り返された文字は左から右の順を保つので、BANANA のようなキーワードでも明確で再現可能な列の並びを与えます。キーワードを変えると暗号文は完全に変わり、一方で同じキーワードは常にそれを元へ復号します。
実例で見る
メッセージ WE ARE DISCOVERED FLEE AT ONCE とキーワード ZEBRAS を取り上げましょう。スペースを取り除くとメッセージは WEAREDISCOVEREDFLEEATONCE で、二十五文字あり、ZEBRAS は六文字なので、これを六列に書きます: 一行目に WEARED、二行目に ISCOVE、三行目に REDFLE、四行目に EATONC、そして E だけを収める最後の短い行です。
さて、キーワードの文字をアルファベット順に並べると — A, B, E, R, S, Z — 列は左から右へ 5, 3, 2, 4, 6, 1 と番号付けされます。その順に列を読むと、A の列から EVLN、B の列から ACDT、E の列から ESEA、R の列から ROFO、S の列から DEEC、そして最後に Z の列から WIREE が得られます。つなぎ合わせると、暗号文は EVLNACDTESEAROFODEECWIREE です。それとキーワード ZEBRAS を復号に与えると、グリッドが組み立て直され、WEAREDISCOVEREDFLEEATONCE が読み戻されます。
縦列転置式メッセージを復号する
復号は暗号化より難しく見えますが、同じグリッドに従います。暗号文の長さとキーワードの列数から、各列がちょうどどれだけ高いかを正確に割り出せます: メッセージがきれいに割り切れない場合、最も左の列 — 各行の最も早い文字を収める列 — が残りより一つ分だけ高くなります。各列の高さがわかれば、暗号文を読み出し順にその列へと切り分け、各列をそのキーワードの位置に落とし戻し、行をまたいで読んでメッセージを復元できます。
必要な唯一の秘密はキーワードです。ほかのすべては暗号文そのものによって定まっています。だからこそこのツールは、追加情報なしに、暗号文とキーワードだけから純粋に復号できます。暗号化に使われたのと同じキーワードを、そしてパディングが関わっていたなら同じモードを使えば、元のメッセージがふたたび現れます — 不完全列ではそのまま正確に戻り、完全列では切り取る準備の整ったパディングとともに戻ります。
歴史と安全性
縦列転置は何世紀も前からあり、二十世紀に入っても長く野戦暗号の主力でした。紙、キーワード、そして安定した手以外には何も必要としないので重宝されたのです。それ単体では安全ではありません: 文字を決して変えないため、暗号文は平文とまったく同じ文字頻度を持ち、暗号解読者は列数を推測してかけらを組み直そうとすることでこれを攻撃できます — アナグラミング (anagramming) と呼ばれる手法です。短いメッセージと使い回されたキーワードは、とりわけ早く陥落します。
その本当の強みは、ほかの手順と組み合わされることから生まれます。転置を二つの異なるキーワードで二度行うこと — 二重転置 (double transposition) — は、何十年もの間、真剣な用途に十分強いと考えられており、転置を換字の上に積み重ねることこそが ADFGVX 暗号を手強いものにしています。今日、縦列転置は教材やパズルとして扱うのが最適です: 文字を並べ替えることがどのようにメッセージを隠すかを、明快に手を動かして示すものだからです。本当の情報を守るには、AES のような現代的で査読を経たアルゴリズムを使い、縦列転置は学習やパズル、キャプチャー・ザ・フラッグのチャレンジのために取っておきましょう。
よくある質問
縦列転置式暗号とは何ですか?
縦列転置式暗号はどう動きますか?
完全列と不完全列の違いは何ですか?
縦列転置の例を見せてもらえますか?
縦列転置式暗号はどうやって復号しますか?
キーワードは何をしますか?
キーワードに繰り返された文字があるとどうなりますか?
この暗号はスペースや句読点を保持しますか?
パディング文字は何のためのものですか?
二重転置とは何ですか?
縦列転置式暗号はどれほど安全ですか?
入力したテキストはサーバーに送信されますか?
関連ツール
こちらの便利なツールもどうぞ