tiwanari / seccon16

http://2016.seccon.jp/news/#124
0 stars 2 forks source link

Vigenere #2

Closed tiwanari closed 7 years ago

tiwanari commented 7 years ago
k: ????????????
p: SECCON{???????????????????????????????????}
c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ

k=key, p=plain, c=cipher, md5(p)=f528a6ab914c1ecf856a1d93103948fe

 |ABCDEFGHIJKLMNOPQRSTUVWXYZ{}
-+----------------------------
A|ABCDEFGHIJKLMNOPQRSTUVWXYZ{}
B|BCDEFGHIJKLMNOPQRSTUVWXYZ{}A
C|CDEFGHIJKLMNOPQRSTUVWXYZ{}AB
D|DEFGHIJKLMNOPQRSTUVWXYZ{}ABC
E|EFGHIJKLMNOPQRSTUVWXYZ{}ABCD
F|FGHIJKLMNOPQRSTUVWXYZ{}ABCDE
G|GHIJKLMNOPQRSTUVWXYZ{}ABCDEF
H|HIJKLMNOPQRSTUVWXYZ{}ABCDEFG
I|IJKLMNOPQRSTUVWXYZ{}ABCDEFGH
J|JKLMNOPQRSTUVWXYZ{}ABCDEFGHI
K|KLMNOPQRSTUVWXYZ{}ABCDEFGHIJ
L|LMNOPQRSTUVWXYZ{}ABCDEFGHIJK
M|MNOPQRSTUVWXYZ{}ABCDEFGHIJKL
N|NOPQRSTUVWXYZ{}ABCDEFGHIJKLM
O|OPQRSTUVWXYZ{}ABCDEFGHIJKLMN
P|PQRSTUVWXYZ{}ABCDEFGHIJKLMNO
Q|QRSTUVWXYZ{}ABCDEFGHIJKLMNOP
R|RSTUVWXYZ{}ABCDEFGHIJKLMNOPQ
S|STUVWXYZ{}ABCDEFGHIJKLMNOPQR
T|TUVWXYZ{}ABCDEFGHIJKLMNOPQRS
U|UVWXYZ{}ABCDEFGHIJKLMNOPQRST
V|VWXYZ{}ABCDEFGHIJKLMNOPQRSTU
W|WXYZ{}ABCDEFGHIJKLMNOPQRSTUV
X|XYZ{}ABCDEFGHIJKLMNOPQRSTUVW
Y|YZ{}ABCDEFGHIJKLMNOPQRSTUVWX
Z|Z{}ABCDEFGHIJKLMNOPQRSTUVWXY
{|{}ABCDEFGHIJKLMNOPQRSTUVWXYZ
}|}ABCDEFGHIJKLMNOPQRSTUVWXYZ{

Vigenere cipher
https://en.wikipedia.org/wiki/Vigen%C3%A8re_cipher
tiwanari commented 7 years ago

Vigenere 暗号は単純だけど,わりと使える古典的な暗号 古典暗号 - Vigenere暗号とカシスキー・テスト - ₍₍ (ง ˘ω˘ )ว ⁾⁾ < 暗号楽しいです

今回は ABC... に {} の2つがついてるのだけ注意.

tiwanari commented 7 years ago

とりあえず,最初の7文字が SECCON{ を暗号化したものだということは知ってるので,鍵の最初の7文字出す簡単なスクリプト かいたら

p: SECCON{???????????????????????????????????}
c: LMIG}RPEDOEEWKJIQIWKJWMNDTSR}TFVUFWYOCBAJBQ
k: ["V", "I", "G", "E", "N", "E", "R"]

と key の先頭 7 文字が ["V", "I", "G", "E", "N", "E", "R"] なので,もしやキーは…

tiwanari commented 7 years ago

あ,暗号文の最後の 1 文字 (43文字目) も { が暗号化されたものだとわかって,これのキーが R. つまり,繰り返し使ったときに 43 番目が R になるキー.

tiwanari commented 7 years ago

43 文字目が R になるのだけど,VIGENER がわかっていて,この 7 番目の R が 43 番目に使われるようにするには,n を適当な整数とすると,

size(k) * n + 7 = 43

となるから,size(k)n が成り立つ整数の組み合わせは (36, 1), (18, 2), (12, 3), (9, 4) の 4 通り (size(k) が 7 より小さくなることはないから).

tiwanari commented 7 years ago

そんで,この推測にたって,8 文字目はまぁ E だろうと踏んで,9 文字の場合,12文字の場合…と試せば…

tiwanari commented 7 years ago

解けた〜 🎉

https://github.com/tiwanari/seccon16/blob/master/vigenere/solve.rb

ans: SECCON{ABABABCDEDEFGHIJJKLMNOPQRSTTUVWXYYZ}
(key: ["V", "I", "G", "E", "N", "E", "R", "E", "C", "O", "D", "E"])