暗号の解読

某ゲーム会社Nからナゾナゾが届きました。

——————————————–

コーネリア防衛軍のパイロット兼プログラマのあなたは、天才科学者Dr.アンドルフ皇帝の通信を傍受した。

m7752902780q5670754954w2654637406q5286271066m8125522416a1926172574x504148223l9676
431138g5289793839l5799859691n5135660909g5241613386k4148674163p2895427859i41156431
71d6373795065

これはどうやら、次の攻撃ターゲットの名前のようだ。

以下の、これまでに解読成功した暗号文をヒントに、
次の攻撃ターゲットはどこか、特定してください。

暗号文 : 解読結果
———————-
a0c2e4g6 : aaaa
a0z1c2x3 : aaaa
p65e68t2o51d27n48u38n13 : corneria
x6136494262r7484725313x185670378k2531105274x7114948063 : venom
——————————————–

暗号のいずれを取ってもアルファベットが2つ以上連なることはない。
規則性を仮定して上2つのヒントから、

a := a0 = c2 = e4 = g6 = z1 = c2 = x3 = n13

が言える。更にcorneriaの8文字と暗号文字に含まれる8文字のアルファベットの対応から、[アルファベット1文字]+[数値]で一つの文字を表すことが分かる。

今仮にa=1, b=1, …, z=26 とアルファベットに番号を振っていき、任意のk\in Zに対して

a -> 1 + 26k

t -> t + 26k

z -> 26 + 26k

が成立するとすれば、任意のアルファベットは26Z(Z=整数)を法とするZの商群(Z/26Z)と同相となる。
つまり[0],[1],\ldots,[25]\in Z/26Zが同順でz,a,…,yに対応することになる。
このような同値類への分割によって例えば 7114948063 = 7114948063^{mod(26)} = 15 \in [15] = o となる。

k個のアルファベットを表す暗号の羅列を[m_1]n_1,[m_2]n_2,\ldots,[m_k]n_k (0 \leq m_i \leq 25, 1 \leq i \leq k)と表現できるが、詳しく観察すれば、暗号の中でt番目を表すアルファベットが[m_t\pm n_t] (1\leq t\leq k)であることに気が付く。
実際この変換をf: (alpha, num, flag) \mapsto alpha*と表現すれば、

g(a0c2e4g6) = f(a,0,+)f(c,2,+)f(e,4,+)f(g,6,+) = aaaa
g(a0z1c2x3) = f(a,0,+)f(z,1,-)f(c,2,+)f(x,3,-) = aaaa

なるg:(alpha\bigoplus Z)^k \mapsto alpha^kが存在する.

符号を固定させた変換を

g_+ = f(m_1,n_1,+)\cdots f(m_k,n_k,+)
g_- = f(m_1,n_1,-)\cdots f(m_k,n_k,-)

と書くことにすれば、問題の暗号文q\in (alpha\bigoplus Z)^{16}

g_+(q) = awesomqbbwyknqfc
g_-(q) = ykookoevlacchole

適当な置換\sigmaによって意味のある語

g_{\sigma}(q) = f(m_1,n_1,\sigma(flag_1))f(m_2,n_2,\sigma(flag_2))\cdots f(m_k,n_k,\sigma(flag_k)) = awesomeblackhole

が得られた.

※この文はリクルート・トライアル内容への一つのの解答になるので、期限の21日までは伏せさせてもらいました。

サポートする