Insomni'hack teaser 2017 Writeup

この大会は2017/1/21 18:00(JST)~2017/1/23 6:00(JST)に開催されました。
今回もチームで参戦。結果は450点で339チーム中51位でした。
自分で解けた問題をWriteupとして書いておきます。

cryptoquizz (Misc/Crypto 50pt)

暗号学者の誕生した年を答えていくクイズ。
いろんな問題パターンを辞書にして答えていくスクリプトにした。
辞書にないものは答えられず、完全に対応したスクリプトではない。

#!/usr/bin/env python
import socket
import re

birth = {
    'Serge Vaudenay': 1968,
    'Gilles Brassard': 1955,
    'Scott Vanstone': 1947,
    'Claude Shannon': 1916,
    'Shafi Goldwasser': 1958,
    'Paul Kocher': 1973,
    'Bart Preneel': 1963,
    'Taher Elgamal': 1955,
    'Nigel P. Smart': 1967,
    'David Chaum': 1955,
    'Alan Turing': 1912,
    'Kaisa Nyberg': 1948,
    'Silvio Micali': 1954,
    'Moni Naor': 1961,
    'Joan Daemen': 1965,
    'Daniel Bleichenbacher': 1964,
    'Paulo Barreto': 1965,
    'Neal Koblitz': 1948,
    'Michael O. Rabin': 1931,
    'Xuejia Lai': 1954,
    'Vincent Rijmen': 1970,
    'Paul van Oorschot': 1950,
    'Adi Shamir': 1952,
    'Arjen K. Lenstra': 1956,
    'Dan Boneh': 1969,
    'Amit Sahai': 1974,
    'Eli Biham': 1960,
    'Whitfield Diffie': 1944,
    'Ueli Maurer': 1960,
    'Mihir Bellare': 1962,
    'Horst Feistel': 1915,
    'Ralph Merkle': 1952,
    'Don Coppersmith': 1950,
    'Jacques Patarin': 1965,
    'Alex Biryukov': 1969,
    'Jim Massey': 1934,
    'David Naccache': 1967,
    'Jean-Jacques Quisquater': 1945,
    'Amos Fiat': 1956,
    'Yvo Desmedt': 1956,
    'Donald Davies': 1924,
    'Niels Ferguson': 1965,
    'Ron Rivest': 1947,
    'Rafail Ostrovsky': 1963,
    'Jacques Stern': 1949,
    'Wang Xiaoyun': 1966,
    'Phil Rogaway': 1962,
    'Ivan Damgard': 1956,
    'Shai Halevi': 1966,
    'Daniel J. Bernstein': 1971,
    'Mitsuru Matsui': 1961,
    'Ross Anderson': 1956,
    'Martin Hellman': 1945,
    'Yehuda Lindell': 1971,
    'Lars Knudsen': 1962,
    'Claus-Peter Schnorr': 1943,
    'Ronald Cramer': 1968,
    'Victor S. Miller': 1947,
    'Douglas Stinson': 1956,
    'Antoine Joux': 1967
}

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('quizz.teaser.insomnihack.ch', 1031))
data = s.recv(1024)
print data

pattern = 'What is the birth year of (.+) \?'
for i in range(10):
    data = s.recv(1024)
    print data
    m = re.search(pattern, data)
    if m is None:
        data = s.recv(1024)
        print data
        m = re.search(pattern, data)
    name = m.group(1)
    ans = str(birth[name])
    print ans
    s.sendall(ans + '\n')

8回答えると、フラグが表示された。

INS{GENUINE_CRYPTOGRAPHER_BUT_NOT_YET_A_PROVEN_SKILLED_ONE}