Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【ITニュース解説】Enigma Machine : How a step on its rotor change the mapping

2025年09月13日に「Dev.to」が公開したITニュース「Enigma Machine : How a step on its rotor change the mapping」について初心者にもわかりやすく解説しています。

作成日: 更新日:

ITニュース概要

エニグマ暗号機でローターが回転すると、文字のマッピングが変化する。この変化は、単純な出力文字のシフトではなく、入力文字と出力文字の「差(オフセット)」を回転させることで正しく計算できる。これにより、複雑なマッピングの仕組みが解明された。

ITニュース解説

エニグマ暗号機は、第二次世界大戦中にドイツ軍が使用したことで知られる、複雑な機械式暗号装置だ。その暗号の核となるのが「ローター」と呼ばれる円盤で、これは電気的な配線が施されており、入力された文字を別の文字に変換する役割を担う。複数のローターが連動して回転することで、同じ文字を入力しても毎回異なる文字が出力され、暗号の強度を高めている。

このローターは、暗号化のたびに少しずつ回転する。この「1ステップ」の回転が、文字の変換規則、つまりマッピングをどのように変化させるのかについて、ある書籍の記述をきっかけに深い考察が行われた。多くの人が直感的に抱く疑問点から始まり、その疑問を解消するための具体的な計算プロセスが示されている。

初心者がローターの回転について考えるとき、まず思い浮かべるのは、現在の出力結果がそのまま一つずれる、といった単純なシフトではないだろうか。例えば、入力された文字がA, B, C, Dの順に、それぞれC, A, B, Dという文字に変換される規則があったとする。この状態を「ステップ0」と呼ぼう。ローターが1ステップ動いたとき、もし単純なシフトで考えるなら、「CABD」という出力が「ABDC」や「DCAB」のように、全体がずれると想像するかもしれない。しかし、書籍では1ステップ後の出力が「DACB」という全く異なる結果で示されており、ここから混乱が生じた。なぜ、このような直感に反する結果になるのか、その理由を探ることがこの考察の核心だ。

結論から言えば、ローターが1ステップ動いたときにシフトするのは、出力される文字そのものではなく、「オフセット」という概念だ。オフセットとは、入力された文字と出力される文字との「位置の差」を数値化したものだ。アルファベットがA, B, C, Dの4文字しかないと仮定すると、Aを0、Bを1、Cを2、Dを3と数値化できる。

例えば、ステップ0での変換規則を見てみよう。 入力がAで出力がCの場合、A(0)からC(2)への変換なので、オフセットは+2となる。 入力がBで出力がAの場合、B(1)からA(0)への変換なので、オフセットは-1となる。この-1は、4文字のアルファベットの世界では、Bから一つ戻るとA、Bから三つ進むとA(B→C→D→A)となるため、+3と考えることもできる。ここでは便宜上、-1として説明を進める。 入力がCで出力がBの場合、C(2)からB(1)への変換なので、オフセットは-1。 入力がDで出力がDの場合、D(3)からD(3)への変換なので、オフセットは+0。 これをまとめると、ステップ0のオフセットは、入力A, B, C, Dに対してそれぞれ [2, -1, -1, 0] という数値の並びになる。

ローターが1ステップ動くとき、このオフセットの並び全体が「左に一つシフト(回転)」する。つまり、[2, -1, -1, 0] というオフセットの並びが、左端の「2」が一番右に移動し、残りの要素が左にずれて [-1, -1, 0, 2] となるのだ。

この新しいオフセットの並びが、ステップ1での変換規則の基礎となる。では、この新しいオフセットを使って、どのように最終的な出力を計算するのだろうか。 まず、入力文字A, B, C, Dはそのまま変わらない。それに、シフト後のオフセットをそれぞれ適用する。 入力Aには、新しいオフセットの最初の値である -1 を適用する。Aから-1ということは、アルファベットを一つ戻すことになり、Aの前の文字であるDが導かれる。 入力Bには、新しいオフセットの2番目の値である -1 を適用する。Bから-1ということは、Bの前の文字であるAが導かれる。 入力Cには、新しいオフセットの3番目の値である +0 を適用する。Cに+0ということは、文字は変わらずCのままだ。 入力Dには、新しいオフセットの4番目の値である +2 を適用する。Dに+2ということは、アルファベットを二つ進めることになり、Dの次の文字を順に数えていくと(D→A→B)、Bが導かれる。 このように計算すると、ステップ1での最終的な出力は「DACB」となる。これは、書籍で示された結果と完全に一致する。

この詳細な解析を通して、エニグマ暗号機のローターが動く際に、単に出力される文字がずれるのではなく、入力と出力の間の「差分」であるオフセットの並びが回転するという、より洗練された仕組みでマッピングが変化することが明らかになった。このオフセットの概念を理解することで、一見すると不規則に見えるローターの動きと出力の変化が、論理的な計算に基づいていることがわかる。このような微細な部分にまで複雑なロジックが組み込まれているからこそ、エニグマ暗号はかつて解読が困難だったのだ。システムエンジニアを目指す上でも、直感だけに頼らず、システムの内部ロジックや数値的な関係性を深く掘り下げて理解することの重要性を示唆する興味深い事例と言えるだろう。

関連コンテンツ