SECON 2017 Online CTF Vigenere3d(Crypto, 100pt)

score-quals.seccon.jp
とりあえずググると暗号自体の説明が出てきます
ヴィジュネル暗号 - Wikipedia

  • 変換テーブルと鍵文字列の組み合わせで暗号化後の文字が決まる
  • 1文字ずつ変換するので、入力が1文字変わると出力も同じ部分が1文字だけ変わる
  • 鍵文字は周回して使われる

といったことがわかります。
今回の問題では

  • 鍵文字列が2つある
  • 鍵文字列の長さは分かっている
  • 片方の鍵文字列を前後反転させたものがもう片方の鍵文字列になる

といった点が特徴です。
鍵が14文字あるので、仮に0123456789abcdとすると

SECCON{**************************}
0123456789abcd0123456789abcd012345
dcba9876543210dcba9876543210dcba98
↓
POR4dnyTLHBfwbxAAZhe}}ocZR3Cxcftw9

という感じになります。

また少し実験すると、鍵のn文字目と14-n文字目は和が同じであれば暗号化結果が同じになることが分かります。
この事実から最初7文字をAに固定すると

SECCON{**************************}
AAAAAAA*******AAAAAAA*******AAAAAA
*******AAAAAAA*******AAAAAAA******
↓
POR4dnyTLHBfwbxAAZhe}}ocZR3Cxcftw9

となり、最初の7文字の暗号化結果から逆算すると
鍵がAAAAAAA_aZ2PK_となります。

すると

SECCON{**************************}
AAAAAAA_aZ2PK_AAAAAAA_aZ2PK_AAAAAA
_KP2Za_AAAAAAA_KP2Za_AAAAAAA_KP2Za
↓
POR4dnyTLHBfwbxAAZhe}}ocZR3Cxcftw9

となるのでフラグ部分の文字が逆算できます。

感想

鍵文字列の数を増やしても、長さが同じだったりそれらの間に依存関係があったりすると結局複雑性が増えなくて意味が無いですね、という学びが得られました(?)