この大会は2021/12/25 3:00(JST)~2021/12/26 3:00(JST)に開催されました。
今回もチームで参戦。結果は189点で123チーム中40位でした。
自分で解けた問題をWriteupとして書いておきます。
Non Abelian (crypto, misc)
Hの各要素の数はそれほど大きい数にはならない。Pinv * G * Pを算出すると、かなり大きい数になる。境界値を調整して、数値の大小でビットを割り出し、フラグを求める。
#!/usr/bin/env sage import numpy as np def check(M): for i in range(len(M)): for j in range(len(M[0])): if abs(M[i][j]) > 2**32: return False return True enc = np.load('out.npy', allow_pickle=True) bits = '' for i in range(len(enc)): if check(enc[i][0]): bits += '0' else: bits += '1' flag = ''.join([chr(int(bits[i:i+8], 2)) for i in range(0, len(bits), 8)]) print(flag)
flag{s0_muCh_M0re_s7RUC7urE_7h4n_juS7_N0N_48EL14N}
フラグはフラグ文字列のsha256の値をsubmitする必要があるので、その計算をする。
$ echo -n flag{s0_muCh_M0re_s7RUC7urE_7h4n_juS7_N0N_48EL14N} | sha256sum e5b87114b0a5ce3fea8f4ef9a1b495457e47983ead9a549ef93059753038b688 -
e5b87114b0a5ce3fea8f4ef9a1b495457e47983ead9a549ef93059753038b688