Tokyo Westerns CTF 2017 Crypto25: My Simple Cipher Writeup

題目要我們解密以下訊息:

當然,不知道用什麼加密算法是沒有方法解密的:

可以看出,明文的格式是  FLAG|KEY,當中 KEY  的長度為 13。(Line 9)

設密文為 \(c_0c_1…c_{m-1}\)。\(c_0=\text{0x7c}\) 是隨機生成的,而 \(c_{n+1} = (m_n + c_n + k_{n \text{mod} 13}) (\text{mod} 128)\)。(Lines 15, 18)

由上述關係,我們知道 \(m_n+k_{n\text{mod}13} = c_{n+1}-c_n (\text{mod} 128)\)(右邊都是已知的)。

由於明文最後是 KEY,有以下關係:

  • \(k_0 + k_9 = m_{22} + k_{22\text{mod}13} = c_{23} – c_{22} (\text{mod} 128)\)
  • \(k_1 + k_{10} = m_{23} + k_{23\text{mod}13} = c_{24} – c_{23} (\text{mod} 128)\)
  • \(k_4 + k_0 = m_{26} + k_{26\text{mod}13} = c_{27} – c_{26} (\text{mod} 128)\)
  • \(k_{11} + k_7 = m_{33} + k_{33\text{mod}13} = c_{34} – c_{33} (\text{mod} 128)\)
  • \(k_{12} + k_8 = m_{34} + k_{34\text{mod}13} = c_{35} – c_{34} (\text{mod} 128)\)

那有什麼用呢?我們可以窮舉 \(k_0\) 來算出 \(k_4\)、用 \(k_4\) 算出 \(k_8\)、如此類推。

最後解出明文: TWCTF{Crypto-is-fun!}|ENJ0YHOLIDAY!

 


發表迴響