モジュール詳細:3×3黄色暗号

この歓声は黄色くない。2つの三とXを与えようとしてくるからね。

モジュールは、3つのディスプレー、キーボード、2つの矢印、及び現在のページを表示するボタン(送信ボタン)で構成されている。

右の矢印を押すと、次のページに移動できる。左の矢印を押すと前のページに移動できる。ページは全部で3ページある。

モジュールを解除するには、以下のルールに従って単語を解読する。復号された単語を取得したら、それを送信する。入力を開始すると、全てのディスプレーが暗転し下のディスプレーに入力された文字が表示される。

入力を消去するには、いずれかの矢印をクリックする。
入力に問題がなければ、「SUB」と書かれたボタンを押して、回答を送信する。ミスが記録された場合、モジュールの最初のページに戻るが、暗号の再生成はされない。

手順内で「値をNでモジュロする」と指示された場合、0から(N - 1)の範囲になるまでその値に対してNを加算/減算し続ける。

ステップ1:3×3逆行列の導出

どの画面が白で表示されているかに基づき、行列の一つに対して逆行列を計算する必要がある。 2ページと3ページの上から下の順に表示されている数字は、2つの別々の行列に対応し,要素には読み順にa-iと名前が付けられている。 1ページ目の真ん中と下の画面には,それぞれ2ページ目と3ページ目の行列の行列式が表示されている。
そのため、3×3行列の行列式を求める必要はない。

2ページ目においてすべての画面が白であるか、1ページ目の真ん中の画面が白である場合、2つ目の行列の逆行列を計算しなければならない。そうでない場合、1つ目の行列の逆行列を計算しなければならない。

逆行列を求めるべき行列の行列式E(26でモジュロ)を用いて、Dを求める。Dの求め方については、ページ4を参照すること。

その後、この順番通りに以下の9つの値を求める。

  1. (e * i) - (f * h)
  2. (f * g) - (d * i)
  3. (d * h) - (e * g)
  4. (c * h) - (b * i)
  5. (a * i) - (c * g)
  6. (b * g) - (a * h)
  7. (b * f) - (c * e)
  8. (c * d) - (a * f)
  9. (a * e) - (b * d)

9つの値それぞれをD倍し、すべてを26でモジュロする。 結果を上から下、左から右の順で書くと、逆行列を得られる。
逆行列の取得方法の一例は、3ページに掲載されている。

次のステップにおいて、ページ番号によりそのページの行列の逆行列を使うことになった場合、その逆行列を復号に使用する。そうでない場合、そのページに記載された行列を使用する。

ステップ2:3×3ヒル暗号の計算

行列を使用する際に、1ページの上の画面の内容を3文字ずつ2セットに分割する。セット内の英字をアルファベット上の位置の数字に変換する。Zは0とする。

シリアルナンバーの最後の数字が4より大きい場合、3ページの行列を使用して計算した後、2ページの行列を使用する。そうでない場合、2ページの行列を使用して計算した後、3ページの行列を使用する。

各セットに対して3✕3行列を使用するには、行列の一列目に含まれる値とセット内の最初の値をそれぞれ乗算する。これを二列目と二つ目の値、三列目と三つ目の値と繰り返していく。乗算後の値を各行ごとに合計し、新しい3つの値を取得する。これが最後の行列計算の場合は、3つの値を26でモジュロし、アルファベット上の位置の数字を利用して英字に戻す。0はZとする。

例:3×3行列の乗算

獲得した行列

1177
161916
02417

3つの値のセット:12, 1, 2

12*1 + 1*17 + 2*7 = 43
12*16 + 1*19 + 2*16 = 243
12*0 + 1*24 + 2*17 = 58

26でモジュロした後の新たな値:17, 9, 6

例:逆行列の計算

獲得した行列

192415
21115
9214

行列の行列式:-3625

E = -3625 モジュロ 26 = 15; D = 7

(1 * 14) - (15 * 2) = -16, (-16 * 7) モジュロ 26 = 18
(15 * 9) - (21 * 14) = -159, (-159 * 7) モジュロ 26 = 5
(21 * 2) - (1 * 9) = 33, (33 * 7) モジュロ 26 = 23
(15 * 2) - (24 * 14) = -306, (-306 * 7) モジュロ 26 = 16
(19 * 14) - (15 * 9) = 131, (131 * 7) モジュロ 26 = 7
(24 * 9) - (19 * 2) = 178, (178 * 7) モジュロ 26 = 24
(24 * 15) - (15 * 1) = 345, (345 * 7) モジュロ 26 = 23
(15 * 21) - (19 * 15) = 30, (30 * 7) モジュロ 26 = 2
(19 * 1) - (24 * 21) = -485, (-485 * 7) モジュロ 26 = 11

逆行列

181623
572
232411

Dの求め方 - 論理的な方法

  1. 「A, B, Q, R, T1, T2, T3」からなる7つの変数を用意する。
  2. Aを26にする。
  3. BをEにする。
  4. QをA / B(小数点以下切り捨て)にする。
  5. RをAをBでモジュロした結果にする。
  6. T1を0にする。
  7. T2を1にする。
  8. T3をT1 - (T2 * Q)にする。
  9. AをBにする。
  10. BをRにする。
  11. QをA / B(小数点以下切り捨て)にする。
  12. RをAをBでモジュロした結果にする。
  13. T1をT2にする。
  14. T2をT3にする。
  15. T3をT1 - (T2 * Q)にする。
  16. ステップ9 ~ 15をRが0になるまで繰り返し、ステップ12になったら止まる。
  17. Dは、T3を26でモジュロした結果である。

Dの求め方 - 総当たり方法

  1. 「((I * 26) + 1) モジュロ E = 0」を満たすIを見つける。
  2. Dは、「((I * 26) + 1) / E」である。
    • 「(D * E) モジュロ 26 = 1」を満たす数Dを探しても求められる。

Dの求め方 - 表を使う方法

逆行列の計算は時間がかかると思われるため、役立つ表を用意した。
(多分必要になる……よね?)

E357911151719212325
D921153197231151725