モジュール詳細:メカナス暗号

構造物を運んでくるクリーチャーが潜む習慣にちなんで名付けられた暗号。

モジュールには、文字が書かれた二段のパネルと別の追加パネル、「SUB」と書かれた送信パネル、二つの英字付き歯車がある。

いずれかの段にあるパネルを押すと、その段のパネルが裏返しになる。上段は、暗号化された単語、キーワード、二進数が表示される。下段は、2組の数字と2つ目のキーワードが表示され、追加パネルにはキー英字が表示される。

このモジュールを解除するには、以下の手順に従って単語を解読し、歯車を使って送信する。送信するには、歯車を押して回転させ、選択中の英字を入力したいときに送信ボタンを押す。パネルを裏返すと、入力が消去される。

単語の解読

ステップ0 - キーの作成

ステップ2と3では、とあるキーが必要になる。このキーを作るには、上段からキーワードを取り出し、26文字になるまでこれを繰り返す。次に、この文字列にあるすべての英字を読み順に見て、その英字がすでに出現している場合は、そうでなくなるまで次のアルファベットにずらす。

例: TROUPER -> TROUPERTROUPERTROUPERTROUP -> TROUPESVWQXYFZABCDGHIJKLMN

ステップ1 - パンケーキ転置

上段から暗号化された単語を取り出し、下段から2つの数字を取得する。両方の数字から最初の数字を取り出し、端点を含む2つの数字と同じ位置の間にある英字のグループを逆順にする。文字列の他の数字についても同じことを繰り返す。

例: EOISDYN, 1223236 2456565
EOISDYN 12 -> OEISDYN
OEISDYN 24 -> OSIEDYN
OSIEDYN 25 -> ODEISYN
ODEISYN 36 -> ODYSIEN
ODYSIEN 25 -> OISYDEN
OISYDEN 36 -> OIEDYSN
OIEDYSN 56 -> OIEDSYN

ステップ2 - バイナリギア暗号

前のステップの暗号化された単語、ステップ0のキー、追加パネルのキー英字、上段の二進数を取得する。キー内の文字列を含む列と、1111から始まる4ビットの二進数の列を作る。二進数の列は0000、キー列はキー英字から始める。そして、暗号化された単語の一番目の英字に当たるまで、必要であればループしながら両方の列内を同時に上に移動し、二進数の列からその位置の値を記録する。他の英字についても、先程終了したところからこれを繰り返す。暗号化された単語の英字が、直前の英字と同じであれば、再びその英字に当たるまで、両方の列内を上へ移動する(これは、暗号化された単語の一番目の英字がキー英字である場合にも適用される)。これらすべての二進数を末尾に追加して1つの大きな文字列にし、それを4つの等しいグループに分割し、二進数テーブルとして設定する。

二進数テーブルの左端の列を上から下へ読む。直前に終了した場所から始めて、この二進数に到達するまで両方の列を上に移動する。二進数文字列の1桁目が1なら、再び二進数に到達するまで上へ移動する。その英字が新しい英字となる。二進数テーブルのすべての列についてこれを繰り返す。

例: OIEDSYN, A, 1100000

T
R
O
U
P
E
S
V
W
Q
X
Y
F
Z
A
B
C
D
G
H
I
J
K
L
M
N
1111
1110
1101
1100
1011
1010
1001
1000
0111
0110
0101
0100
0011
0010
0001
0000
1100010
0001100
0111000
0011101

O -> 1100
I -> 0100
E -> 0011
D -> 0001
S -> 1100
Y -> 0001
N -> 1101

(+1)1000 -> M
(+1)1010 -> S
(+0)0011 -> L
(+0)0111 -> H
(+0)0101 -> E
(+0)1000 -> O
(+0)0001 -> H

ステップ3 - 神出鬼没英字暗号

前のステップで暗号化した単語、ステップ0のキー、下段のキーワードを取得する。キーを3次元空間で読み順に配置しながら奥から手前に積み、3×3×3の3次元グリッドにする。余ったスペースには#のラベルを貼る。暗号化された単語とキーワードの最初の英字をこのグリッドから探す。各グリッドの軸に対し、2つの英字が同じ位置にあれば、新しい英字はその軸上の同じ位置にある。位置が異なる場合、新しい英字はその軸上で使われていない位置に置かれる。新しい英字は、3つの軸をすべて評価した後に見つけた場所に位置する。これが「#」の場合、それは暗号化された単語の英字になる。暗号化された単語のすべての文字についてこれを繰り返し、できあがった単語を送信する。

例: MSLHEOH, CHIMERA

z=1z=2z=3
TROQXYGHI
UPEFZAJKL
SVWBCDMN#

M+C -> W
S+H -> A
L+I -> # -> L
H+M -> L
E+E -> E
O+R -> T
H+A -> S