DiceCTF 2023 Writeup

この大会は2023/2/4 6:00(JST)~2023/2/6 6:00(JST)に開催されました。
今回もチームで参戦。結果は346点で1041チーム中142位でした。
自分で解けた問題をWriteupとして書いておきます。

welcome (misc)

Discordに入り、#rulesチャネルのメッセージを見ると、フラグが書いてあった。

dice{2023}

Provably Secure (crypto)

サーバの処理概要は以下の通り。

・以下128回繰り返し
 ・key0: nが2048ビットの秘密鍵
 ・key1: nが2048ビットの秘密鍵
 ・pk0: key0の公開鍵
 ・pk1: key1の公開鍵
 ・pk0のnを表示
 ・pk1のnを表示
 ・m_bit: ランダム1ビット整数
 ・seen_ct: 空集合
 ・en_count = 0
 ・de_count = 0
 ・以下繰り返し
  ・choice: 入力(0/1/2)
  ・choiceが0の場合
   ・guess: 数値入力
   ・guessがm_bitと一致している場合、繰り返し終了
   ・guessがm_bitと一致していない場合、チャレンジ終了
  ・choiceが1の場合
   ・en_count += 1
   ・en_countが8より大きい場合、チャレンジ終了
   ・m0: 16バイト文字列を16進数表記で入力→hexデコード
   ・m1: 16バイト文字列を16進数表記で入力→hexデコード
   ・m_bitが0の場合、msg = m0、そうでない場合、msg = m1
   ・ct = encrypt(pk0, pk1, msg)
   ・seen_ctにctを追加
   ・ctを表示
  ・choiceが2の場合
   ・de_count += 1
   ・de_countが8より大きい場合、チャレンジ終了
   ・in_ct: 512バイト文字列を16進数表記で入力→hexデコード
   ・in_ctがseen_ctの中にある場合、チャレンジ終了
   ・decrypt(key0, key1, in_ct).hex()を表示
 ・フラグを表示

choiceの2で比較しているin_ctはhexデコードした後のデータで、seen_ctはhexデータ。このため、暗号化したデータをそのまま復号しても、チェックには引っかからず、復号できる。これでどちらのメッセージが選択されているかわかるので、m_bitの値がわかる。これを128回繰り返せば、フラグが得られる。

#!/usr/bin/env python3
import socket

def recvuntil(s, tail):
    data = b''
    while True:
        if tail in data:
            return data.decode()
        data += s.recv(1)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('mc.ax', 31493))

for _ in range(5):
    data = recvuntil(s, b'\n').rstrip()
    print(data)

for _ in range(128):
    for _ in range(3):
        data = recvuntil(s, b'\n').rstrip()
        print(data)

    m0 = '0' * 32
    m1 = '1' * 32
    data = recvuntil(s, b': ')
    print(data + '1')
    s.sendall(b'1\n')
    data = recvuntil(s, b': ')
    print(data + m0)
    s.sendall(m0.encode() + b'\n')
    data = recvuntil(s, b': ')
    print(data + m1)
    s.sendall(m1.encode() + b'\n')
    data = recvuntil(s, b'\n').rstrip()
    print(data)

    ct = data
    data = recvuntil(s, b': ')
    print(data + '2')
    s.sendall(b'2\n')
    data = recvuntil(s, b': ')
    print(data + ct)
    s.sendall(ct.encode() + b'\n')
    data = recvuntil(s, b'\n').rstrip()
    print(data)

    if data == m0:
        m_bit = 0
    else:
        m_bit = 1
    data = recvuntil(s, b': ')
    print(data + '0')
    s.sendall(b'0\n')
    data = recvuntil(s, b': ')
    print(data + str(m_bit))
    s.sendall(str(m_bit).encode() + b'\n')
    data = recvuntil(s, b'\n').rstrip()
    print(data)

data = recvuntil(s, b'\n').rstrip()
print(data)

実行結果は以下の通り。

Actions:
0) Solve
1) Query Encryption
2) Query Decryption

Experiment 1/128
pk0 = 28675882489572981085359266253604183018846776009545940380995556760564781610290496100675958905904977409911668930543637245510560974147756753300017440735156998947564675293241727496101397242438828633534962308238635572647749752456565167473179157482600490054050011466399838542286963276909437976946893937306518045370789512422552520855592309650693234817408302138774045908423740207360943806524997103903485587104184852843554464070970515748023409438909325704569647820445838422493492825993344176031820884018813430186223904819528033697079558751124358652651251748983476566448505857079488328914660649894964801729532646438908976616453
pk1 = 17466002164754131428132283317774063834929745671014249243958508456211185503669043959105776930552673382432233101922512711046423874055737881034138980671576278329400024068600652073381401148988973038684277061127659054894680139438643263929193239164384217311896815152572636928711609536447492518142326189162935228972248911284914970281133571188604109422918769522567639909919443046208409408035562846076709095999313532009429408080305316050647994591368485231972528101159476296707078656271301840277168494497903555166260447700121501095056076211384934813306537741020414617420072874140060340679071445135680768974813282302065871422417
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
874af376c734a92e861f73258d8765ed12d4b5aabd062601f17934f58c4b0db0ac97a3dea06067c0c3d23e8655176824a226694e82be4a101d2e39875da53a97089d88c7841f340b0c40746fec78d278b45f13929f30c8dc40d27ecb857878f97a16cdcfae5f837f0fa19aec5c93cdb9f14be7cf81a85eac394b0e1cb55cd44d702ae06da3f9e76d92a4697b2fc6884acd6a720c9b9ee7ed935a5c7e7d0298bf2fdef48fc20ffad5fe738cfb3791a3a4dc2391f6b1341002d60b1e826d83a86c3b1c3d1c05b416a193619075e3e72449e33d1d9713afba7dabcb221ad62a65ea4ad12bbde36d10c9e2f23eb73920908bdada2a0ffa92ee59e62ca4a18fdecb113b2893b97e8274bc30d9e55e652aa9335ffc87988c9d986f0fdf8a8935e26690fd8a376f0ed6334ea34b3d6f67b8990c07ad828a67c11991e55f14bb9b1911a2a4fc820d6ce5d7b38fdce45db2026ace04fa496a96127183d0c248fb19ceb89a8323369668f268e31b7aa58a8a611ed0c0b266c94ddc83abeef781e50ccdf0a08b679d3e4681c4890be08f44880a8c82f23b08a266f503241907247996436e96944d53a9bed462c7d182222fcf11bc8f039f86d0f46a498c6758493ac74a3618ddf3d3d1a9d47134a0a15b4eb7fc108846c5aa427fc254bd43d45b54c356ec53d00bd5691ffefe340970763bc00b8cde8b9005be156f7937af4d50e7c7343034
Action: 2
ct (512 byte hexstring): 874af376c734a92e861f73258d8765ed12d4b5aabd062601f17934f58c4b0db0ac97a3dea06067c0c3d23e8655176824a226694e82be4a101d2e39875da53a97089d88c7841f340b0c40746fec78d278b45f13929f30c8dc40d27ecb857878f97a16cdcfae5f837f0fa19aec5c93cdb9f14be7cf81a85eac394b0e1cb55cd44d702ae06da3f9e76d92a4697b2fc6884acd6a720c9b9ee7ed935a5c7e7d0298bf2fdef48fc20ffad5fe738cfb3791a3a4dc2391f6b1341002d60b1e826d83a86c3b1c3d1c05b416a193619075e3e72449e33d1d9713afba7dabcb221ad62a65ea4ad12bbde36d10c9e2f23eb73920908bdada2a0ffa92ee59e62ca4a18fdecb113b2893b97e8274bc30d9e55e652aa9335ffc87988c9d986f0fdf8a8935e26690fd8a376f0ed6334ea34b3d6f67b8990c07ad828a67c11991e55f14bb9b1911a2a4fc820d6ce5d7b38fdce45db2026ace04fa496a96127183d0c248fb19ceb89a8323369668f268e31b7aa58a8a611ed0c0b266c94ddc83abeef781e50ccdf0a08b679d3e4681c4890be08f44880a8c82f23b08a266f503241907247996436e96944d53a9bed462c7d182222fcf11bc8f039f86d0f46a498c6758493ac74a3618ddf3d3d1a9d47134a0a15b4eb7fc108846c5aa427fc254bd43d45b54c356ec53d00bd5691ffefe340970763bc00b8cde8b9005be156f7937af4d50e7c7343034
00000000000000000000000000000000
Action: 0
m_bit guess: 0
Correct!
Experiment 2/128
pk0 = 22229086110433168720505692837477110712468709036865286784288607004577047662685647932325054282457067582748063082428808354031936718489798910820853285126191506286221884103212852812276618769007653489764495133447614677588327621216536838387246971197430372832499033054984867477520107371456912262678627383140896869554991739593244223907770205798172862625334751000587471661082351334877259946685666718470810452821438986799237599737714533177190426051659796544717915206467000120127005885837479528953920463398759083454444518642504338731489050314604546825654613210277643431082484800221957590105283001981543967283325318487532442196979
pk1 = 27458177911701665515233828345715035895594547060366349066177871244280941369666785649161713729536405718364425653157306460895573194276548211765481212737331202948566198820960122280658328385184413790750518229934799420440714953803369537487267951713669344609437262168347883642160600689488816586446011357568367038859206373994449218533805208665969445500748094477709889102280396335368575625169215106615408934906286395981946433166125087515822409028390184117280792922142333136918663379586010030254534704524695575464238190824211489718550963976223141201663815071680419325921196802847958706653612083144569490100950336174725803360873
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
10abed136108a6dc4ea6346ae2f69812bf64b5bf09e8933fcda89ea71e0ff1dc7f89d666d0c906f7cd09adfc3a3b87764c952fd346b87803343bee63ade9e5d2270d43f45838489bb9ee388e94dc2c8e27530e8fa2411588eb161087dbe12b39e78b7a05bd15b3a11a2c21e97313f8ff40a400fbe11161e55ef65c4af0fc47bc705b83cdfaf62b86d0a78fbe132a720268a441d60cdd290014db71fa656ca350aaf1bc5ef8859ebfad6fb6e1e5460d91c003985664c9303c4ca62316e32bb7bae1852db5ec9920e47f591d70848dc64e2019e62569a7929febf66b2d69269d4c5787189fe9a8a2e00be9906d1583ada052f7376a3b15519a6e6000d6e8bef4ea9adeb4eb71b998e3e46ca21a9312dfb4fc74c86a542d76aebfedbb1881aaced34e9a8a64a2e8fbd26fc556f6935272e25e2fafc28c7b0afd922700033227a28d8e2c03db2227f10bac5605f8586e0b2ed182c2c795c4b39169e4a06d97c0e942864caf6f824e9a9ea2d5f4dc5cac4a4a90d99c892e5f7a02ff3338d786b460c5ce1d197075512a233583e4a5e10bda3d2b89ba600d44660765c0443bac145452c66325058dd4ad4e62a534c04938768fa1ad1a4ec727071eb9d55d2a9074599ba2e3c0a71a323e5107d4e951a2e6c86f80c25833ffd2a1d040c02af3f1106fc21501c26de328222ed13d311ad0425e2bfff14c4d4c92987982d4c147dc7bf280
Action: 2
ct (512 byte hexstring): 10abed136108a6dc4ea6346ae2f69812bf64b5bf09e8933fcda89ea71e0ff1dc7f89d666d0c906f7cd09adfc3a3b87764c952fd346b87803343bee63ade9e5d2270d43f45838489bb9ee388e94dc2c8e27530e8fa2411588eb161087dbe12b39e78b7a05bd15b3a11a2c21e97313f8ff40a400fbe11161e55ef65c4af0fc47bc705b83cdfaf62b86d0a78fbe132a720268a441d60cdd290014db71fa656ca350aaf1bc5ef8859ebfad6fb6e1e5460d91c003985664c9303c4ca62316e32bb7bae1852db5ec9920e47f591d70848dc64e2019e62569a7929febf66b2d69269d4c5787189fe9a8a2e00be9906d1583ada052f7376a3b15519a6e6000d6e8bef4ea9adeb4eb71b998e3e46ca21a9312dfb4fc74c86a542d76aebfedbb1881aaced34e9a8a64a2e8fbd26fc556f6935272e25e2fafc28c7b0afd922700033227a28d8e2c03db2227f10bac5605f8586e0b2ed182c2c795c4b39169e4a06d97c0e942864caf6f824e9a9ea2d5f4dc5cac4a4a90d99c892e5f7a02ff3338d786b460c5ce1d197075512a233583e4a5e10bda3d2b89ba600d44660765c0443bac145452c66325058dd4ad4e62a534c04938768fa1ad1a4ec727071eb9d55d2a9074599ba2e3c0a71a323e5107d4e951a2e6c86f80c25833ffd2a1d040c02af3f1106fc21501c26de328222ed13d311ad0425e2bfff14c4d4c92987982d4c147dc7bf280
11111111111111111111111111111111
Action: 0
m_bit guess: 1
Correct!
        :
        :
Experiment 127/128
pk0 = 23862596298266733774383275643203630411144344475557591384145846643748385768391790780268722405497616395630277406161284273486726622674945365397617158417745532793721184608546769225160054212386277944068689046456149505121181104897341675037819639359190489441441644400430868581962791746348040070774986669167621815648270768764457436669317437324462720620314104798312225810980206078888019574839608660219143658971034890222082001077784478459807386144926501938253613373004570932102610877882733347212921776292777225643191360234561915099652509527256417527455838583714208730245373794007990928415312233424964783469369115985624342187601
pk1 = 29211942597059062166923115297406336197602794244779804258708205469404359002098894081012029250379472681337040940441065737880771852939246322609585910854502393834730339720584829266250203835324055185918378221540061250568005738606780059597144561656698424126350040800608352838227216986762118077321128999732682641250392961993336956675264356524104608826811459938646342148932144797733173090834367186087376053804921025151978793282980241392187617754837427009859865565422381239289447778848868903369583243530099490979035316877244437700788827437698758997563040792189439363548874330113507758733962213266538693114194755215427857702341
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
7b8059e997f28362090a4c319cb35caa4d5ca3a96b126e9683736f339c83e0c02f0aef9fd41f46ce0a80d48b26d7585ab6869872b32a359917e9141ed26d13e27e2b3fea785ccf91642734a91190be0c7af33878ce201d32a69f3fba8b536bf281681e8c4103d1fd57cd726f175a2ead56d9deee68d4d5272ffa78e5a5c41c87715b3e325e346698dd2fe4064502638e7bea6dc4c765deace875673beeda787cf8c6ac1bac5e65900b879d8174c3db407885a3db1ba732e817b1f42373c056ba5dafae1b9b960f26f71cb34138e1436230804cce799883793df48bc41539e8131dcee2d0645169ffdfe6c12f20c3c375546c9019691fc6fb19657cd84b8f0400414815b010c8ae05ff343e22234b7fe04251b7dbf54e71ee45c203482c2dd4bf74904640e923651806c19ee752a1f33d4386e9bffe48795e4384e5a895d69e789b2c15d069310cdfbe5304129dab732ecfaf207700f4f17ce0eb070529c288b20675136efda9a97b9c4eaa76071c5aac7cd76ef45b40c49d76209ad07024e1893e69e004d326a01fef71489d071ff9a94de0e1f1a706bbdf14debe72fe1056e87b4e8d1c42663eb856ab2d7fa72fa91e6925e256d7db6a72a3bc03588052dd9ac0ace988d6243ed4c2de8db7fe889fbe58cda718dc9b0c75eeffb3dd49d59d31c3008eac5c49a02e5722b1fb366379237ed0d589a1899797dd524a448bcfcc55
Action: 2
ct (512 byte hexstring): 7b8059e997f28362090a4c319cb35caa4d5ca3a96b126e9683736f339c83e0c02f0aef9fd41f46ce0a80d48b26d7585ab6869872b32a359917e9141ed26d13e27e2b3fea785ccf91642734a91190be0c7af33878ce201d32a69f3fba8b536bf281681e8c4103d1fd57cd726f175a2ead56d9deee68d4d5272ffa78e5a5c41c87715b3e325e346698dd2fe4064502638e7bea6dc4c765deace875673beeda787cf8c6ac1bac5e65900b879d8174c3db407885a3db1ba732e817b1f42373c056ba5dafae1b9b960f26f71cb34138e1436230804cce799883793df48bc41539e8131dcee2d0645169ffdfe6c12f20c3c375546c9019691fc6fb19657cd84b8f0400414815b010c8ae05ff343e22234b7fe04251b7dbf54e71ee45c203482c2dd4bf74904640e923651806c19ee752a1f33d4386e9bffe48795e4384e5a895d69e789b2c15d069310cdfbe5304129dab732ecfaf207700f4f17ce0eb070529c288b20675136efda9a97b9c4eaa76071c5aac7cd76ef45b40c49d76209ad07024e1893e69e004d326a01fef71489d071ff9a94de0e1f1a706bbdf14debe72fe1056e87b4e8d1c42663eb856ab2d7fa72fa91e6925e256d7db6a72a3bc03588052dd9ac0ace988d6243ed4c2de8db7fe889fbe58cda718dc9b0c75eeffb3dd49d59d31c3008eac5c49a02e5722b1fb366379237ed0d589a1899797dd524a448bcfcc55
11111111111111111111111111111111
Action: 0
m_bit guess: 1
Correct!
Experiment 128/128
pk0 = 23784125816866806248185694107972232997580566226766228004535812411271198089162426013264475073851993145957456412969967233740390654237109749047925770400474176742029392892304882870707487426810126241555451997617774412547613505321497398741993156114059510510351884116819766238889533602599685136347014064823416100785080709394913978903974333555619269724408618136315632091052425720103838407379467590122651600730739533519009099862961147596283759581351863471419119760466916688736259734284537588970716421807906564492643063720532761593331882102430826468129313169926380950513970689231263907862897470424410830904269457862785640069851
pk1 = 21236547553870112760226533469274671813836680643631657898028201607601479867818105824365203595823770827103834867121154723615841758095735933847196407806720434561173673939909426800222718586214861205595863768651131769435953837168120484776295510859456323124021682018970158467137299009542652346262342988814669099404313437679948024343428884923969808127990315499466270169506570100640511323844942230816793274433105671517382551441882513746471306300929779100510419229332894007805502997754374220780984217346546887048806797803891116595109459160267214889480606328735187352429232833093842444227047108126604622858316440356709425104131
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
868095784013a191009aa021b486ec2f47c72b0abea4d95bf6cf8567d1f5d7560aa85eba14a966e2d8f322336e9758438055b2c57fc536b0073047d3933504063bcc7671aaf9bbb9a5350463a279b4d94c38106fd562759d91e0eaae274674492d385fdfab24368d3e97f70b40f18db78fb7c470dc8045ad19fc4637750ef9fa5338d702a97982a8298356794ff93fe0b0a8e08b97b7d10b4117c6df1c2ba868c6013b28e0c91e35c6b71f144af64b36f4fc7dd9f8f9c855dcf4a2cf7be4fb14fd2c0390d809a810c21641c646a9a5d57420b1821b83fc23075406f09f927bdf6dd1d2c7dd78eb1c2116ec54309544bab8e4cfd4cd5a9ed8e360c26204a5220f661b88d77d113dad2aa9cd9f79e1c34d8747cf658d50752647c2edc34cd7f892a16dfa09b71e6d20d7491f16730985f2592ea599953a106185b1b7f8fb1466b7be0c7103ae2cc8d407f9ad77b46fb61bcbb3060acb0bce927b38c0c0e9bbbbcf310a2ece3e88982cf4630791e63d7255bea2a5676615c4cf68d6a1a246a4cfaa251f9c80ed5f705f5f0ce804ffa9d863632cc2912ce0ac98aa8cebc4d81f88ea39f54f8a037814b06a15a33bed4cffa05c4fd0ae90aed9998a4fde46f477fce530038df6141edd4d95b8c940d69468e87b05fbb48a29858fac753619410234bbac4ee09abeda075b39aac02973520994753b00dc03ecebb8ef3df3f8d6d41947
Action: 2
ct (512 byte hexstring): 868095784013a191009aa021b486ec2f47c72b0abea4d95bf6cf8567d1f5d7560aa85eba14a966e2d8f322336e9758438055b2c57fc536b0073047d3933504063bcc7671aaf9bbb9a5350463a279b4d94c38106fd562759d91e0eaae274674492d385fdfab24368d3e97f70b40f18db78fb7c470dc8045ad19fc4637750ef9fa5338d702a97982a8298356794ff93fe0b0a8e08b97b7d10b4117c6df1c2ba868c6013b28e0c91e35c6b71f144af64b36f4fc7dd9f8f9c855dcf4a2cf7be4fb14fd2c0390d809a810c21641c646a9a5d57420b1821b83fc23075406f09f927bdf6dd1d2c7dd78eb1c2116ec54309544bab8e4cfd4cd5a9ed8e360c26204a5220f661b88d77d113dad2aa9cd9f79e1c34d8747cf658d50752647c2edc34cd7f892a16dfa09b71e6d20d7491f16730985f2592ea599953a106185b1b7f8fb1466b7be0c7103ae2cc8d407f9ad77b46fb61bcbb3060acb0bce927b38c0c0e9bbbbcf310a2ece3e88982cf4630791e63d7255bea2a5676615c4cf68d6a1a246a4cfaa251f9c80ed5f705f5f0ce804ffa9d863632cc2912ce0ac98aa8cebc4d81f88ea39f54f8a037814b06a15a33bed4cffa05c4fd0ae90aed9998a4fde46f477fce530038df6141edd4d95b8c940d69468e87b05fbb48a29858fac753619410234bbac4ee09abeda075b39aac02973520994753b00dc03ecebb8ef3df3f8d6d41947
11111111111111111111111111111111
Action: 0
m_bit guess: 1
Correct!
Flag: dice{yeah_I_lost_like_10_points_on_that_proof_lmao}
dice{yeah_I_lost_like_10_points_on_that_proof_lmao}

Provably Secure 2 (crypto)

サーバの処理概要は以下の通り。

・以下128回繰り返し
 ・key0: nが2048ビットの秘密鍵
 ・key1: nが2048ビットの秘密鍵
 ・pk0: key0の公開鍵
 ・pk1: key1の公開鍵
 ・pk0のnを表示
 ・pk1のnを表示
 ・m_bit: ランダム1ビット整数
 ・seen_ct: 空集合
 ・en_count = 0
 ・de_count = 0
 ・以下繰り返し
  ・choice: 入力(0/1/2)
  ・choiceが0の場合
   ・guess: 数値入力
   ・guessがm_bitと一致している場合、繰り返し終了
   ・guessがm_bitと一致していない場合、チャレンジ終了
  ・choiceが1の場合
   ・en_count += 1
   ・en_countが8より大きい場合、チャレンジ終了
   ・m0: 16バイト文字列を16進数表記で入力→hexデコード
   ・m1: 16バイト文字列を16進数表記で入力→hexデコード
   ・m_bitが0の場合、msg = m0、そうでない場合、msg = m1
   ・ct = encrypt(pk0, pk1, msg)
   ・seen_ctにctを追加
   ・ctを表示
  ・choiceが2の場合
   ・de_count += 1
   ・de_countが8より大きい場合、チャレンジ終了
   ・in_ct: 512バイト文字列を16進数表記で入力→hexデコード
   ・in_ctの16進数表記がseen_ctの中にある場合、チャレンジ終了
   ・decrypt(key0, key1, in_ct).hex()を表示
 ・フラグを表示

Provably Secureの改良版。一度暗号化したものを復号に使用することができない。暗号を構成するものを組み合わせて復号することを考える。同じ文字列を3回暗号したときのイメージは以下の通り。

r0     -> ct0_0
r0 ^ m -> ct1_0
mの暗号化1回目:ct0_0 + ct1_0

r1     -> ct0_1
r1 ^ m -> ct1_1
mの暗号化2回目:ct0_1 + ct1_1

r2     -> ct0_2
r2 ^ m -> ct1_2
mの暗号化3回目:ct0_2 + ct1_2

以下のように組み合わせ、復号する。

①ct0_0 + ct1_1を復号する。
ct0_0 -> r0
ct1_1 -> r1 ^ m
復号結果:r0 ^ r1 ^ m

②ct0_0 + ct1_2を復号する。
ct0_0 -> r0
ct1_2 -> r2 ^ m
復号結果:r0 ^ r2 ^ m

③ct0_1 + ct1_2を復号する。
ct0_1 -> r1
ct1_2 -> r2 ^ m
復号結果:r1 ^ r2 ^ m

①と②と③の復号結果のXORはmになる。以上のことを使って、mを復号できる。これでどちらのメッセージが選択されているかわかるので、m_bitの値がわかる。これを128回繰り返せば、フラグが得られる。

#!/usr/bin/env python3
import socket
from Crypto.Util.strxor import strxor

def recvuntil(s, tail):
    data = b''
    while True:
        if tail in data:
            return data.decode()
        data += s.recv(1)

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('mc.ax', 31497))

for _ in range(5):
    data = recvuntil(s, b'\n').rstrip()
    print(data)

for _ in range(128):
    for _ in range(3):
        data = recvuntil(s, b'\n').rstrip()
        print(data)

    cts = []
    for _ in range(3):
        m0 = '0' * 32
        m1 = '1' * 32
        data = recvuntil(s, b': ')
        print(data + '1')
        s.sendall(b'1\n')
        data = recvuntil(s, b': ')
        print(data + m0)
        s.sendall(m0.encode() + b'\n')
        data = recvuntil(s, b': ')
        print(data + m1)
        s.sendall(m1.encode() + b'\n')
        data = recvuntil(s, b'\n').rstrip()
        print(data)
        cts.append(data)

    try_cts = [cts[0][:512] + cts[1][512:],
        cts[0][:512] + cts[2][512:], cts[1][:512] + cts[2][512:]]
    pt = b'\x00' * 16
    for i in range(3):
        data = recvuntil(s, b': ')
        print(data + '2')
        s.sendall(b'2\n')
        data = recvuntil(s, b': ')
        print(data + try_cts[i])
        s.sendall(try_cts[i].encode() + b'\n')
        data = recvuntil(s, b'\n').rstrip()
        print(data)
        ct = bytes.fromhex(data)
        pt = strxor(pt, ct)

    m = pt.hex()
    if m == m0:
        m_bit = 0
    else:
        m_bit = 1
    data = recvuntil(s, b': ')
    print(data + '0')
    s.sendall(b'0\n')
    data = recvuntil(s, b': ')
    print(data + str(m_bit))
    s.sendall(str(m_bit).encode() + b'\n')
    data = recvuntil(s, b'\n').rstrip()
    print(data)

data = recvuntil(s, b'\n').rstrip()
print(data)

実行結果は以下の通り。

Actions:
0) Solve
1) Query Encryption
2) Query Decryption

Experiment 1/128
pk0 = 19010673921803143269312600897337573886874189126262196321472494159910873161377169062552967393729147848920722767241528848766814684807058151133804504021279492437248209452423475329877524896602281715796713361539776812037079853796004576687373307879292803361144988005757869904782391451040958555244087908275609296765755218458757341050790585914521042508220238552656969989058103173594579718182896574940201721023763743318669374323769715550832140476724855135011473327730002595860548208705483229827679116262465088870035900997040616292572468052525775329765441383653424052543385549257536025517534127538508391097088453710998498116581
pk1 = 23085948554803044533233238629489192537363708160380455699828012947259383382953813466688907927770567881522584032440494135022083503812519185884414197070451537955644993583793287470455647302670475348118339372525520145549131331741997431842045347416939238305735358934105407512950699964175267777470645483466267201497665648684922640536202327329403658217719915297130162129815763054937510490544045505407846067586664148192414280832000826347643024481017372155340331598034078950901074196364013427564205740454793151440832480054743424755110256073857581908229819097866478320990565366850828960025305145313738861452444205657403750829469
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
013503c8e679b2e7f5914e6d1b140c03c881c22c08f427851961f82fa257e6bfa8c946953636ce6989e2a94bc137c0c9daed0592d9bc3521dd5249b86920c9297641d387a66ae2f692a7b9d937713d5b294fe7e4529f97a96ff98f4a1dc70699b092a8f3b6944145229b71befa7717e29387810c91a38ef0d53b7f6db96a3e325587f81a198191b604936a5355eb8443ce758ee5951a326ae6da74dbf6f449c3360866448be2397b9db80412f4b361702a9f92885ee416785cb8da9060936cb82372cff7668852911b7e86f6a8955eb377cabce5a773ad462ed05d81ac6d20daf7638f8a576f871bc4da578f3ac2cd6056f912c15deb583f050751f0a51b0f0a6b58a6dda6998484c4194110464a3adb8ac95c6d14aabf385ad138da254a704e79e73794c46f509b9ff4381dade4154fd322195c1896144fcb9f827d5d52b8777332f0b649edd1cbf975155c6c51382d6407811431d866aa792f85ec9be75721bbe6eec6ad90ea2ef6e41ba0ace2d3f955e6c895efaf39fea45d36128d0cbf085b91d7842dba96c053a45df21615ce28f0bae0f8b5e5601e3559eb1dc40171f2ec7600fd4be2b7baf3cea5a651ed60fc1696e044829fa38dad5d4a4fcf44d0d9e57e9ea1dd77cc188a693aaba524304b6bb8a9a1e653110e1ff82c2f6bd63ea88ea7b9cbf45a02822089c4160cd1b4954cd9a65365d524b01ecb545cd0b4a9fc
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
51e1d4a7b59eec2ed3264942528853be44dcb867cb3dd9af1900f80f5574dcdb838095d4132e47e1a08251938b5413682451ed5615d32bb2b54d0dd4cdb52b4fabe1b69055a0fa0c8b6876670db39362c6d175484e5893effcb0c8c0a7bf6a1adc0d8f70ef7b075fda47dc982d1772569ca7321f76c969358f8419c92fc06d0f2572bff9e27188c9db02a256f5cf1c0f67f6dd91723f587bc7025e2d0e43b634a1f2074b6eb92e621ccbf562e46ebf887e9ddee5d5e69d1ce3c960fd2ae026cd9a8698677a36a4238c0feddd6a2cf564a4de8ccfa3f52e9075033dfd88d4bf6169db713de9ccad06607330325c9607f37955971bc12ad4bdcf4e87bb42bfcb4264152e80342cc453dc18513b3b7911e79d2c800e52c937db3659cc82ef0a4fc68d40dd32f46fcb0027e4ee343924b2928a4c3369808f33209c04421074d82fb1011db6b51152b4bb89303e37212bd0d98959f340274092381e44ec54de609169ada172fcc29925a8cf4e23fbc393d5ed1fc89ae32a9af88791b495de93bbb8bdf8f070724a4638b601140d29648b577fdf37304ef00b56b9dc0af83eaf3f2f61c4859213af88d64fd3fdf12c0e64b75cc446709aa13457bd2199a8ac6d25ebcdcc0bc999df59445b5110d9adc841f0bf70a429263ea126332e55a371f686dbfc824dc009ddcee28054debce5d363c238bf0832247a3d8d7556d547cd3b3197f4
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
0c01aace237e90a534229c03290a24bfedab272c071fc547a908b839c1d2286fa67697b36aff2ffa7e672d3febac43fc8450e761b57f3d43399fca9818c5c484d527a301b8eb172be5ae6bad1203888a6ca08c06320e21774be7e6e95d5b78932680ed3efd8373dfec2cc4fa9a7e77107c4a2844e602352e8c7ab56895abf49bf1a1fe52f346dc80a6500159b112544f9509168e4898be8abe38e917c4c335e9bdfdcaf2d81fbe7ad720ec5c2a885f7d11574c9e7445f13b7313e0d08d152ebf49951a5960b62fb208410cc7b5fa9abd7b9157ae51935b02c64b7953dd0e6ab1abdf070c47fac671f8051358dc986733f43ec700c8f67957e9b77e77bbb71de183b3c696b8b7b9cc0959eaac8b9efd84422d5043aea4e8f0c5ccbbdbd10c3cace278d34bcdcdf75a5720a7f947a7ff77c3687f88210955da78030d368470528fef2bdbf4af6ab6b707e7ffe44d1cf416616185f3033b1a9bd120b726fd9d9c06503a1586e2ebb32fad99e854d80a5e25ef038d85d8fb46d6ebb11bcbb5d59b50c40aebd8079f68513e1c9e681b140cf08fdd7935239df2788029b4a48217b070cd811898526429d62cb8fdfd889ae40c20bee502c64b827201409fa8ec274757065fd46886559f31e70319fbf2dd7973ec12910f6c6e43887b4ee208f18b4207213af869d597508445d5122702514d3d5518510cb7d12c7972698f9435f836a7
Action: 2
ct (512 byte hexstring): 013503c8e679b2e7f5914e6d1b140c03c881c22c08f427851961f82fa257e6bfa8c946953636ce6989e2a94bc137c0c9daed0592d9bc3521dd5249b86920c9297641d387a66ae2f692a7b9d937713d5b294fe7e4529f97a96ff98f4a1dc70699b092a8f3b6944145229b71befa7717e29387810c91a38ef0d53b7f6db96a3e325587f81a198191b604936a5355eb8443ce758ee5951a326ae6da74dbf6f449c3360866448be2397b9db80412f4b361702a9f92885ee416785cb8da9060936cb82372cff7668852911b7e86f6a8955eb377cabce5a773ad462ed05d81ac6d20daf7638f8a576f871bc4da578f3ac2cd6056f912c15deb583f050751f0a51b0f0a64152e80342cc453dc18513b3b7911e79d2c800e52c937db3659cc82ef0a4fc68d40dd32f46fcb0027e4ee343924b2928a4c3369808f33209c04421074d82fb1011db6b51152b4bb89303e37212bd0d98959f340274092381e44ec54de609169ada172fcc29925a8cf4e23fbc393d5ed1fc89ae32a9af88791b495de93bbb8bdf8f070724a4638b601140d29648b577fdf37304ef00b56b9dc0af83eaf3f2f61c4859213af88d64fd3fdf12c0e64b75cc446709aa13457bd2199a8ac6d25ebcdcc0bc999df59445b5110d9adc841f0bf70a429263ea126332e55a371f686dbfc824dc009ddcee28054debce5d363c238bf0832247a3d8d7556d547cd3b3197f4
4729ac7f276df47887a02e7bb238c23a
Action: 2
ct (512 byte hexstring): 013503c8e679b2e7f5914e6d1b140c03c881c22c08f427851961f82fa257e6bfa8c946953636ce6989e2a94bc137c0c9daed0592d9bc3521dd5249b86920c9297641d387a66ae2f692a7b9d937713d5b294fe7e4529f97a96ff98f4a1dc70699b092a8f3b6944145229b71befa7717e29387810c91a38ef0d53b7f6db96a3e325587f81a198191b604936a5355eb8443ce758ee5951a326ae6da74dbf6f449c3360866448be2397b9db80412f4b361702a9f92885ee416785cb8da9060936cb82372cff7668852911b7e86f6a8955eb377cabce5a773ad462ed05d81ac6d20daf7638f8a576f871bc4da578f3ac2cd6056f912c15deb583f050751f0a51b0f0a83b3c696b8b7b9cc0959eaac8b9efd84422d5043aea4e8f0c5ccbbdbd10c3cace278d34bcdcdf75a5720a7f947a7ff77c3687f88210955da78030d368470528fef2bdbf4af6ab6b707e7ffe44d1cf416616185f3033b1a9bd120b726fd9d9c06503a1586e2ebb32fad99e854d80a5e25ef038d85d8fb46d6ebb11bcbb5d59b50c40aebd8079f68513e1c9e681b140cf08fdd7935239df2788029b4a48217b070cd811898526429d62cb8fdfd889ae40c20bee502c64b827201409fa8ec274757065fd46886559f31e70319fbf2dd7973ec12910f6c6e43887b4ee208f18b4207213af869d597508445d5122702514d3d5518510cb7d12c7972698f9435f836a7
82e01d0938c87bb9bf595e6c0b9b5134
Action: 2
ct (512 byte hexstring): 51e1d4a7b59eec2ed3264942528853be44dcb867cb3dd9af1900f80f5574dcdb838095d4132e47e1a08251938b5413682451ed5615d32bb2b54d0dd4cdb52b4fabe1b69055a0fa0c8b6876670db39362c6d175484e5893effcb0c8c0a7bf6a1adc0d8f70ef7b075fda47dc982d1772569ca7321f76c969358f8419c92fc06d0f2572bff9e27188c9db02a256f5cf1c0f67f6dd91723f587bc7025e2d0e43b634a1f2074b6eb92e621ccbf562e46ebf887e9ddee5d5e69d1ce3c960fd2ae026cd9a8698677a36a4238c0feddd6a2cf564a4de8ccfa3f52e9075033dfd88d4bf6169db713de9ccad06607330325c9607f37955971bc12ad4bdcf4e87bb42bfcb4283b3c696b8b7b9cc0959eaac8b9efd84422d5043aea4e8f0c5ccbbdbd10c3cace278d34bcdcdf75a5720a7f947a7ff77c3687f88210955da78030d368470528fef2bdbf4af6ab6b707e7ffe44d1cf416616185f3033b1a9bd120b726fd9d9c06503a1586e2ebb32fad99e854d80a5e25ef038d85d8fb46d6ebb11bcbb5d59b50c40aebd8079f68513e1c9e681b140cf08fdd7935239df2788029b4a48217b070cd811898526429d62cb8fdfd889ae40c20bee502c64b827201409fa8ec274757065fd46886559f31e70319fbf2dd7973ec12910f6c6e43887b4ee208f18b4207213af869d597508445d5122702514d3d5518510cb7d12c7972698f9435f836a7
c5c9b1761fa58fc138f97017b9a3930e
Action: 0
m_bit guess: 0
Correct!
Experiment 2/128
pk0 = 22819304892276237334857036933797573898263666484761944551197197747767442057275476899599071425548738126720628531090906474137590978230604503846296420636703015976197287970652050979671310966270857890510995348214854325737389237398882230707867322814798405772108695413839580473324887435315520703841582364431415853813534437622268306353393949040368379787819648466096815683830428955176172489194339740555647579583672920924540493202818944518827374936921998339993651905778900102532261862167275936403193675963129597277668576342554017429905492189562183501936483507229814178653069071158309931699071747300613167368107410506661610820003
pk1 = 26236076511322743082918052847716727136475454095497885942435043455669019516579980134942947700951796163229444566891178444429276853123923476121815905395841020619385772347607959223387665846039497375809090017234106245118069029366753066652379518432069407172704467779461793033734976721757442061107580554396282600967010596436692760283723086154723805291823579769361785612571237336707335774125807483437838020022512020289504617513410267954136874007196937949351116012405560747255907130553197604705054710555304884164597655584261707035218254008386892350548924314399807424652552093656999767762640378012591071271887042691695058572729
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
aec1fec94f3ecd1fa84f01f249228475b4de1827b574702d914086777b973b9e11820257c578112f79b1cd4dca0a19230683233089a29c9d0541bb9c814c9e21fa9e91de9698792cab8ddda884f3e2477f07158d5810e152187f6987da3b54c9f4d7d088a0e0dc45e70f489595682b1ac29b7b5e78a3fbc1dba9649329234d066f0f14f10a53aef545f7f0c8a3e18e26258360a3cfa3ac5a93cd7ee7ec74e42d9dbf8bf70efcd031560197f131c0e50f1da1d930cb893ce8da7f87c9ccb89bbd8568b4581555cacec85c4023de3dd1e5378ad3f9108e0d89b69c9afa39a0d2bed495ec207822d05505f017cee14c698228f76c828eef201ed755219aac84c02345b1c61f4085056e7cb9831c2c3a9a6e40cc36abc73a0db3ed2f9c030bd9f5d1749bede8033b167cf84dc377ad2adf5088c1a04d3f300ba2e06d407c3c55b99e3256ad7936b205efaed145806f4d5cdaacd28dd0cbf9c37b7daf9552b10a6f08852681cc17faef8c88ae4299a1b4b3146727ade43a5b137e02a0dd1ab50e4049fa740e4adcf9ff31543771ee0add5f19aaa84d34d750626eda22dba775940191b776959d7d0634ecfb7100c70f32addf3d4e4221f0db4a5b034ef124967e1e07e536783bd7c2780704bc8aa2e5c8c22f5ee94365976d0f36d01ad142f0803fd090e408da2ee763346e704ecf973a00fe85a6d5f40dc4429ba654d375910a2bdc
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
933c73aae16d36a567680fb2e791bc3f0f8cee3519d900b1fe46ce9fcd64c69a9c22f6f33bacbd8adcbb563a0b30ac1ec27ce7fddb15fe50cd373187bc994ca76a5ff1b860cdbd2b59e6863ad75a102c9ebb42937ff9a5085d6a07bbc6643c54b9de4cce16799d592f3602a446179d2d92cf7ebc1e8a51483f2c41e36645a8b6e27acb245d138895e21cd8c4b104cd70c67690a9efb5a2087332b74973b8db3ff404fc4d3effec6d648d6742ed242701bbe553ff48fbe4b3009f29b919bd7cca511903b32adbe99f0c7253b3ed075d3cb94d9208b2b87cffe792c610d203f53454c133016289d2f34fb655b7b04d6a9ffde87e4afd1e059a06ba797fb273c29327bc7b35c552101e580ff095adb1a0d65ec3ea79b66e15569c01de53862e64c71a070555f24b16466dd272c40efd21ed0c83436f01261557d53b0b7d9dc8e6ff686b15d46238fc1c4ad19997851225d9726253b833b74416deef40d5fa2af13b98256fc17de07a99c348ac0b56adad78251010d6019f12aa9bf9a639912f77e0321ae1c7366d94b65a536dcdf805732a6060ae3b44c4c63359812b05b3f53b2fb2b78103c0b8f3f289856a4741bc7de96da66afa1ecc2e51e41a85dfac13e6b925223181ac6cc326d36d7c1672a0d59f34b7a823d751857448e491412f8199e175a56a6cb1f0e1a9102e670af4f7de2f3530559e5a38ea471bf79f68b78060d4
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
4a048298a5557ea85eef2ffbaa7e48c8170f54de944ab1a7fc04012d33f82db0a9dbe52bc807188a8fcfc3933c1653343eb4ab647bc0f029d4e2c1a427a1df9ef10e913d3b62cff885828c736b8c3e7565ebc4019b6b0735f5ffbfff6e10eb69a182c9efd18d4c3e38d3c4b745d55d4059d99f19afe1bd5cda4b3a22a71a677688957c3cf6c4f6648615313b8c72045c24e997fd0afdfec426058702dfa811d58119ca3ae9e22a51f8f24576eada034e83fd941ae427c9118332dfe0a0abafb706de647093b504a0c5c948df41cb003160aca93d92ef91769fba86fe182c7d5308a405a502ec83dafcd0f2290432720c120a97f08fc97579bf91c9fcfb231beea124ed77d0ccbe1f85c759da2295905eba893145624d05ed141b19fc0e298c1b052bed6a6f8af2031b4ab801d5dfe8c8d0285ec25a66229bcc8c1b77aa232430953100f7abe82976a75c1fc0dbbebbe7667810abc313c65e1698b28cee283d4e86fa59858ed55263cf065303bdff12d28e57e5c360775ce18b1af5bf86d740c8e539a02576697062e60b0f6b7344720ff9f1d76adde02ff6ab9e7a8ef6a43c3ef028dbb60c86e6bbddfbec6ccc7da3a4a7583ba50d48f4ff2b961d291d5fa5135b31464020f8737b5a51c4baba4724013dfc7e4b6b4daf969339270a84e1b573d34956ee9235bc92dc210091fbccf5cdb029214914f560495d29a4c8bff38579
Action: 2
ct (512 byte hexstring): aec1fec94f3ecd1fa84f01f249228475b4de1827b574702d914086777b973b9e11820257c578112f79b1cd4dca0a19230683233089a29c9d0541bb9c814c9e21fa9e91de9698792cab8ddda884f3e2477f07158d5810e152187f6987da3b54c9f4d7d088a0e0dc45e70f489595682b1ac29b7b5e78a3fbc1dba9649329234d066f0f14f10a53aef545f7f0c8a3e18e26258360a3cfa3ac5a93cd7ee7ec74e42d9dbf8bf70efcd031560197f131c0e50f1da1d930cb893ce8da7f87c9ccb89bbd8568b4581555cacec85c4023de3dd1e5378ad3f9108e0d89b69c9afa39a0d2bed495ec207822d05505f017cee14c698228f76c828eef201ed755219aac84c02327bc7b35c552101e580ff095adb1a0d65ec3ea79b66e15569c01de53862e64c71a070555f24b16466dd272c40efd21ed0c83436f01261557d53b0b7d9dc8e6ff686b15d46238fc1c4ad19997851225d9726253b833b74416deef40d5fa2af13b98256fc17de07a99c348ac0b56adad78251010d6019f12aa9bf9a639912f77e0321ae1c7366d94b65a536dcdf805732a6060ae3b44c4c63359812b05b3f53b2fb2b78103c0b8f3f289856a4741bc7de96da66afa1ecc2e51e41a85dfac13e6b925223181ac6cc326d36d7c1672a0d59f34b7a823d751857448e491412f8199e175a56a6cb1f0e1a9102e670af4f7de2f3530559e5a38ea471bf79f68b78060d4
9da9280850e8ecd79d1f92490e28ea4a
Action: 2
ct (512 byte hexstring): aec1fec94f3ecd1fa84f01f249228475b4de1827b574702d914086777b973b9e11820257c578112f79b1cd4dca0a19230683233089a29c9d0541bb9c814c9e21fa9e91de9698792cab8ddda884f3e2477f07158d5810e152187f6987da3b54c9f4d7d088a0e0dc45e70f489595682b1ac29b7b5e78a3fbc1dba9649329234d066f0f14f10a53aef545f7f0c8a3e18e26258360a3cfa3ac5a93cd7ee7ec74e42d9dbf8bf70efcd031560197f131c0e50f1da1d930cb893ce8da7f87c9ccb89bbd8568b4581555cacec85c4023de3dd1e5378ad3f9108e0d89b69c9afa39a0d2bed495ec207822d05505f017cee14c698228f76c828eef201ed755219aac84c023a124ed77d0ccbe1f85c759da2295905eba893145624d05ed141b19fc0e298c1b052bed6a6f8af2031b4ab801d5dfe8c8d0285ec25a66229bcc8c1b77aa232430953100f7abe82976a75c1fc0dbbebbe7667810abc313c65e1698b28cee283d4e86fa59858ed55263cf065303bdff12d28e57e5c360775ce18b1af5bf86d740c8e539a02576697062e60b0f6b7344720ff9f1d76adde02ff6ab9e7a8ef6a43c3ef028dbb60c86e6bbddfbec6ccc7da3a4a7583ba50d48f4ff2b961d291d5fa5135b31464020f8737b5a51c4baba4724013dfc7e4b6b4daf969339270a84e1b573d34956ee9235bc92dc210091fbccf5cdb029214914f560495d29a4c8bff38579
d21bd37bc97611a569361451e415e35d
Action: 2
ct (512 byte hexstring): 933c73aae16d36a567680fb2e791bc3f0f8cee3519d900b1fe46ce9fcd64c69a9c22f6f33bacbd8adcbb563a0b30ac1ec27ce7fddb15fe50cd373187bc994ca76a5ff1b860cdbd2b59e6863ad75a102c9ebb42937ff9a5085d6a07bbc6643c54b9de4cce16799d592f3602a446179d2d92cf7ebc1e8a51483f2c41e36645a8b6e27acb245d138895e21cd8c4b104cd70c67690a9efb5a2087332b74973b8db3ff404fc4d3effec6d648d6742ed242701bbe553ff48fbe4b3009f29b919bd7cca511903b32adbe99f0c7253b3ed075d3cb94d9208b2b87cffe792c610d203f53454c133016289d2f34fb655b7b04d6a9ffde87e4afd1e059a06ba797fb273c293a124ed77d0ccbe1f85c759da2295905eba893145624d05ed141b19fc0e298c1b052bed6a6f8af2031b4ab801d5dfe8c8d0285ec25a66229bcc8c1b77aa232430953100f7abe82976a75c1fc0dbbebbe7667810abc313c65e1698b28cee283d4e86fa59858ed55263cf065303bdff12d28e57e5c360775ce18b1af5bf86d740c8e539a02576697062e60b0f6b7344720ff9f1d76adde02ff6ab9e7a8ef6a43c3ef028dbb60c86e6bbddfbec6ccc7da3a4a7583ba50d48f4ff2b961d291d5fa5135b31464020f8737b5a51c4baba4724013dfc7e4b6b4daf969339270a84e1b573d34956ee9235bc92dc210091fbccf5cdb029214914f560495d29a4c8bff38579
5ea3ea62888fec63e5389709fb2c1806
Action: 0
m_bit guess: 1
Correct!
        :
        :
Experiment 127/128
pk0 = 25221858873640602282368814727340756992992929333161551181405933418343765496123563739908985717587604064111444330008693397303872111448699406212513495824023994124514628586815689953873088966864178189417344200200073457380877264237720044689524920467761582171663130836886918126266064945756798179316846185028149774598187223714221652478287583804584469434603659784177918937026609646502336618321511298514617445891360115025970773648218371049837206236601182889411580013031324390319889362638396582354982846796914734161949434645103233541877596026628709523408485436461786712672362268899150346048148269450730106298559065890209694751417
pk1 = 27107700544133579885320102362253275345633553824006053175850627284386343536637896633020832964400603309287001772824773366016622428498061847555617058847273495694460490157551162921353980031720289173836978462341629477018278280681076704902873239778012836940016517710121471945293841240302726976196282622839596645024864085936418108414574844777225934507215215770876730030389577060965817295687932843645042005840146824731860233577050080810149221295399830706280538553669007539447460405824259103192553502715221514168193991562189295054574059013727608269890995410372910554340134412803889894391458345767593444538327813752582520052083
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
aeb2a9618fed33111b449b153121f8990d054364c5a6accd7a10372fd65ae63993ca0723305ee823dee36e350333297af61c144a352b2d4abc1f7150254b62c25b3814fd471653ebb22e2189146b45cdefa9afca7e49804c0efb92ebc02a6aa8e07eb14e7c1c9f87721dc4572dc2618bafcc0fac1f07d4562ca1bca11dc28dbb688376e9fc3f3e40470b23ea0ae9bd25566ad3e1f06789da9a3563921fe9fd0e0760ba2d80657c1a5c9a681dcad813984328c2ee3b935650e147a579c9a73f875ad5d56552241561beca77947fce2ed41e848c4cf6e2932e1647d0a71aeb56a1eb2e4de1260511683466d626edbc830b34132ea35e387576e01e82109d11d8fd740412f4ae86b85c881c2c938d01233a9b64c1b34b770b62426e4bea2c8958538f34ffd0005558e07210fd161d96ac2d9fcd4a093df0d8826c4ca4a4058ef4df84e2012f749a970a763eca41eac14a40ee635d08401e4f5af8e963649b5df72c7eec4c75850cc2e4a7fd79eaa5194235e7bc99b33cd1def0c49671fec906f523f68655c1aab0f9dec7773936a8bcc5414e6dbf955afaa52cd68f61fa7405ea12f4f5f89536778d6f185975484a2d60a1620243addf98814a25757587e5672143947b0a1d25ce23f13b5f753291dcd930839dc6197e42843b4ad5df4f57731445ef72fc196bbe9a61f9533c66c897aca02e251361ea54459f2060f74fb0a50d2a
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
3666cbfe58b45a0f82f2a819be12886522717f93931497d8f0f21a65da24ecfbc6bd584ed411ed1f79f0da9ae322928200679f04fdbc41c3a2d3991f1f7ca58f53b6ff396e54206eb90f831beb29138df280a16169786f5a3efd45e86b602f52ec68d1b6fc80bdaa35ff68fc6224e3fc5c84fb4aa9b6dfb4fc4a3de3d59f527cd05cd08da216ad4dadf8ca922696017e55a5c0326ffe05d5a9b4b65618e96f7d2f06f38a81f0ab10ca99338809728f24cd8ce88e6c6fc188e3f4cfc52b7917b9cc92220b4b240cddcb5ecdd90789432bf39e25ef92d62b1850f480d42d19a8d97541ab2eb853556d0faf94307a7a02cbd0937b38ccebf090cca60d390d46614f15bfdf1ab20bc0c92f1a4068dcf8385672387320697b36b32a99c2c2176a9237fcbf27a079f131d35724718006f1b4bacb6aad9bf63c084892e706eef6ef55e66b0f19fa2b0967bd8a9ef364a95a2ada5190eca420ed9480478e5bb987d1fd2ea8b9c26eee3735db439fb20e1f89982b1326c2a99edb3110c193db89778660d4edd9a9b687ef93c7b727741a6aceb4c6e3ae6bb2ed356ebeb393918ff80eb7d2ce79db12812ea99d47cd60ce12cbd1a5823827533eea96a562983ecfbfad7a5d7be1c199a4118fe73ac9d4045e1617d0185f71f5d9e173e89bf01924eb1f6b8d9ac4ffdb45f6babd23019434f2bb4f84106c9a2788cd60d9868b983b0fc58d19
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
6d15f8019e63374fe0465d4520a3d1dfb329518aeec5f2a336389cc8b8cfb6732d8c73527f7796ad7c05d67bf667bffe1bf796728d5cc33416073d30619df851b915c74d4aa43a57f5deaec6891f82bade65962b4905f554067be711c3e433bb398b63c75bc758f26e39f14947c27282808ef165cf43cfee7b7e1cd58fb241f060e82d4a3db42314621d638424c6aec4696076568a68f7506e294381b6f91d7aedfc516be6a834ad88a5f1e972b814edc825c685241782c82ebb9841cdc8fdea5f861c593fbcebe79a72adabad00b405cc5aa816c245a394ece44b708e8d328f28e31bbd06532801bb411b6b4b6cfc395ed520c894c1de6552e9e9e65bfb5cd2297ea71f07954d5ac77949d8d1a3e77c9231c7ecd0b2a40a9254693e21419fb986f94eea8cbb0cb32f37466761f0573c799db12abff631edc7f00d0e8349216273e7d2cbc0d3fc45337bb537d86d78694db152202dfdcceadac7765984f78cf179c9bd9e9c4724b6f27e7fa547209e341b12817c673fb9baee770c09b6ee4132b04c35110a1389d7b64d952791bef000960076e8611b68d915a614dc2e416330eeefac1404f6de406e7a295dfadd52e436a71c1229f44766f047a6a548271ade76fc6a5713b64a3c0ca130d3fc46dff51592c8324a4eb1e0bad270489f5c433b7b7f2ea8b9bee6ba7eba316e34aac7c09580513019fc0ec89d4ae6cffcde16c3
Action: 2
ct (512 byte hexstring): aeb2a9618fed33111b449b153121f8990d054364c5a6accd7a10372fd65ae63993ca0723305ee823dee36e350333297af61c144a352b2d4abc1f7150254b62c25b3814fd471653ebb22e2189146b45cdefa9afca7e49804c0efb92ebc02a6aa8e07eb14e7c1c9f87721dc4572dc2618bafcc0fac1f07d4562ca1bca11dc28dbb688376e9fc3f3e40470b23ea0ae9bd25566ad3e1f06789da9a3563921fe9fd0e0760ba2d80657c1a5c9a681dcad813984328c2ee3b935650e147a579c9a73f875ad5d56552241561beca77947fce2ed41e848c4cf6e2932e1647d0a71aeb56a1eb2e4de1260511683466d626edbc830b34132ea35e387576e01e82109d11d8fd15bfdf1ab20bc0c92f1a4068dcf8385672387320697b36b32a99c2c2176a9237fcbf27a079f131d35724718006f1b4bacb6aad9bf63c084892e706eef6ef55e66b0f19fa2b0967bd8a9ef364a95a2ada5190eca420ed9480478e5bb987d1fd2ea8b9c26eee3735db439fb20e1f89982b1326c2a99edb3110c193db89778660d4edd9a9b687ef93c7b727741a6aceb4c6e3ae6bb2ed356ebeb393918ff80eb7d2ce79db12812ea99d47cd60ce12cbd1a5823827533eea96a562983ecfbfad7a5d7be1c199a4118fe73ac9d4045e1617d0185f71f5d9e173e89bf01924eb1f6b8d9ac4ffdb45f6babd23019434f2bb4f84106c9a2788cd60d9868b983b0fc58d19
031d1380bbf16ee166d040aef6c4e409
Action: 2
ct (512 byte hexstring): aeb2a9618fed33111b449b153121f8990d054364c5a6accd7a10372fd65ae63993ca0723305ee823dee36e350333297af61c144a352b2d4abc1f7150254b62c25b3814fd471653ebb22e2189146b45cdefa9afca7e49804c0efb92ebc02a6aa8e07eb14e7c1c9f87721dc4572dc2618bafcc0fac1f07d4562ca1bca11dc28dbb688376e9fc3f3e40470b23ea0ae9bd25566ad3e1f06789da9a3563921fe9fd0e0760ba2d80657c1a5c9a681dcad813984328c2ee3b935650e147a579c9a73f875ad5d56552241561beca77947fce2ed41e848c4cf6e2932e1647d0a71aeb56a1eb2e4de1260511683466d626edbc830b34132ea35e387576e01e82109d11d8fd297ea71f07954d5ac77949d8d1a3e77c9231c7ecd0b2a40a9254693e21419fb986f94eea8cbb0cb32f37466761f0573c799db12abff631edc7f00d0e8349216273e7d2cbc0d3fc45337bb537d86d78694db152202dfdcceadac7765984f78cf179c9bd9e9c4724b6f27e7fa547209e341b12817c673fb9baee770c09b6ee4132b04c35110a1389d7b64d952791bef000960076e8611b68d915a614dc2e416330eeefac1404f6de406e7a295dfadd52e436a71c1229f44766f047a6a548271ade76fc6a5713b64a3c0ca130d3fc46dff51592c8324a4eb1e0bad270489f5c433b7b7f2ea8b9bee6ba7eba316e34aac7c09580513019fc0ec89d4ae6cffcde16c3
0a769b07716b0fcc1ca664ab4f60871c
Action: 2
ct (512 byte hexstring): 3666cbfe58b45a0f82f2a819be12886522717f93931497d8f0f21a65da24ecfbc6bd584ed411ed1f79f0da9ae322928200679f04fdbc41c3a2d3991f1f7ca58f53b6ff396e54206eb90f831beb29138df280a16169786f5a3efd45e86b602f52ec68d1b6fc80bdaa35ff68fc6224e3fc5c84fb4aa9b6dfb4fc4a3de3d59f527cd05cd08da216ad4dadf8ca922696017e55a5c0326ffe05d5a9b4b65618e96f7d2f06f38a81f0ab10ca99338809728f24cd8ce88e6c6fc188e3f4cfc52b7917b9cc92220b4b240cddcb5ecdd90789432bf39e25ef92d62b1850f480d42d19a8d97541ab2eb853556d0faf94307a7a02cbd0937b38ccebf090cca60d390d46614f297ea71f07954d5ac77949d8d1a3e77c9231c7ecd0b2a40a9254693e21419fb986f94eea8cbb0cb32f37466761f0573c799db12abff631edc7f00d0e8349216273e7d2cbc0d3fc45337bb537d86d78694db152202dfdcceadac7765984f78cf179c9bd9e9c4724b6f27e7fa547209e341b12817c673fb9baee770c09b6ee4132b04c35110a1389d7b64d952791bef000960076e8611b68d915a614dc2e416330eeefac1404f6de406e7a295dfadd52e436a71c1229f44766f047a6a548271ade76fc6a5713b64a3c0ca130d3fc46dff51592c8324a4eb1e0bad270489f5c433b7b7f2ea8b9bee6ba7eba316e34aac7c09580513019fc0ec89d4ae6cffcde16c3
096b8887ca9a612d7a762405b9a46315
Action: 0
m_bit guess: 0
Correct!
Experiment 128/128
pk0 = 19705724594829232929079574576260293418584674501214969161375534741972188966674075188647206988065569565189689048692939620793847710030997943724131077930430082833768944933388482777607959801242582279531924166092466957763122953792084596892992610452083235012407006105453176413456837684760630997091872308802936902529200200899813336866480331630005046754890056916295626912196245523233469389659104351017494272982199402904535396292607876149549437566087343287687256189012780146910673839264161087580357151159021740508059566718529320417819866345215113435172679924268944163587164185941003753054535587090080718379811808615345915886273
pk1 = 24817130173553834315128707768350604931785858550343006313317729393280250270580993479565814367225507519238387439125472157072320113711521341254126487263575781546596850887514617413918946000902559036405734083489930647229120664152524137346992692970635488916949621679488233925990829873761922778666518603546708203826178196648718054731151450103538605599218722413570412631671471355696402143728787076466997383547356265106190765425371352970257696160243626146038862146340160909180301661669406191340546461912245069264862015826599901067714163111847184652010352617110182460936604213887294640686471777954933274696963049853966246039467
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
9493c47ac86dfb852d2d6ecff0a3b95ffd04e57925d1dffff449e917640a7ebadd0c07b7e424298be1f24ed21e099e4548ed54d9b7a6fb8c7c40484f52ef6fa9434f9ca50e8f8186c5f933fb62991511359206b1e8c8adc8c896c42cdd0f5106b0451f1bc6e58f0347663816d006f2064717398bb71202c2ae2bb2f8f55f5de86df14cfff787d95976ba74f42c5bbe8b6aed4db70ea6d9df47577455a331e37251e310f889c35f6ce4dff5385a883c28499a62ba44d16b5c79b991de685dcc9df41f3f2b57a64b45381097235fc387533261b187eb3d3eaacde0d93069de5e8ebb157065c728e92f0225f04c80787dab014888afefdda60912dd87980ac2f1f729c468d70f16367f019c29a6e101db20fcfffbc7a90167842c3cda79e7468f6463eb04365a7788db9bfae2dcfb53623b672fa54f5f8407be2ff4e520b85510b542b8a739fe1e25df28fdc8de4ec4577e8996ba9ff097b4d491e470f8ddaf70d7adf187e2eaa8daffd8b6a1f781749409c506d0394a39e8e126689c70a91c4bbac9112608e2db76b74d692a0705b1f0ef6ab053ad006f99dc6e532e0cfe667946383cf3fe894e8404f267521bce2f36eb8df92311aee9dd759ae48c531439875873073431a8253e0f38d044826803d1de01c8b179f9ca1a9f01d0fcf70b914bcd693c021ee9e7cb62aae060b65b583806d88e50d4296f3a828d94bff6518de783
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
7c59d37d68bc980e29a142d47c63ac6e528e49de61fb11989f548a41e9c724d527e99ab386bad467356947aa56913d3b3040531260dcf8a934e3bbed44d67206502f061bddd1744d61054e344896420799731af71ac045191aae8183dc712d6b138f5094b39d5994a3e93994874d62d019e623d9c043fe04bef57503203f2b3663b43fca718822b94ba2622b6b7b7c9c2704783cecfbebb8726d2cc97838f9dc25523f4984a55a0c5d905ce28ee2b30866ae927f088248870ba371d7c6e2bd3fb706df297c912808be027dfe3ff63fae0d76b29e71875ce5cbf76c66ba7daaad4f933f16fe2cd8a4d52eb8b4670c2c5c609cb72138253d4607805f704e38849b4e5d724017a8b2aba28c73ab0b7f9b1f00070f9b790cac92eddadff2ba6ffdb4d928669e0aa1df3845ed883181be81a38aa29b63b74fafc29b1bf17f6bad80d003c41ca31270df2a54f96ced57021bb65824a94dcb76d813b324b70779d814d8c21b51a228f35dc565405158227e6acf31ac0e55c59e78dd2b41e9853e20f9cafec511ad09c47a7052d6f635f0aef14d85299a70ca5cde918bd63fd898c04ee2732b08bd63eac941f8bdc35ccaafa82f41b64eeae3db8fd9b975f01a726b15671029162665520d89d36deb0f08edce46722497e8f013c851c8bc6af60f3dfbd830c6de04f3d0a40725e74dd7fe3564a95374484f53189b95514643b7bfad6e28
Action: 1
m0 (16 byte hexstring): 00000000000000000000000000000000
m1 (16 byte hexstring): 11111111111111111111111111111111
32081c45ba94f9acba5eb84f7f6d8f8b2f4c2570b79e51ed21f5962594688ba43e73c83c44435f0e3b1790196619cadddac5705064d76f705620b9ce1ae63a787fd66fb1e90c6d8d1eefe21a6adf0c6f722dcdbcc1866a339d0c03beb67fdd44aad6301684a5a9183e393fb2e7e18f2c3ed6c3febb8f54a365fc27398fb5697f4e2ae73d8380ed55ebe43f2b1cc0d08e813959db62fb21a27e569164a5aef112ca4fed9a89b4a1d40abfe3ef11b4473b6dd271c441805c2aeb7a9dd26b25babf8a3c492044b07a97cf2709ca4a6ba9de6a56d21c5ed35ecbd25b42740a8a41373c2f7cd663cb1ca63d4d01f72faa4c9cf9022dff33cb0b6258a5ed059eccaa84bda8c177f0547c969e918ef770f3f5d25c212e3625b9f870fe82043b1b771cfc9ca57cf9d28c818dc3f75723773dde8cfaa710c136b63ab6d40d9415c9647f52916ac3602f139fb5d58bbc31696d0012ece1634017587175e1ba82c77a93edb4657ff4471ac31668f1f3060e4068a3869503e1d2c1484229c3a2aa0d047d1751969e1e1fe4373776bc4f3964f15160395f682e73b3dd7399b473aaed0edf051a6cce341e638b22eb6468b3013c04f8b194c18c0ac98828f64d65be5c0654a071c5256d309e8d050586eaaa3014985a31d23a958da0b7f74cf65b9fa470c835d6c6650ea37cb763e8bbe6452dd062db7e64d36f9b168c392b8ec84de0e6c3d1ee
Action: 2
ct (512 byte hexstring): 9493c47ac86dfb852d2d6ecff0a3b95ffd04e57925d1dffff449e917640a7ebadd0c07b7e424298be1f24ed21e099e4548ed54d9b7a6fb8c7c40484f52ef6fa9434f9ca50e8f8186c5f933fb62991511359206b1e8c8adc8c896c42cdd0f5106b0451f1bc6e58f0347663816d006f2064717398bb71202c2ae2bb2f8f55f5de86df14cfff787d95976ba74f42c5bbe8b6aed4db70ea6d9df47577455a331e37251e310f889c35f6ce4dff5385a883c28499a62ba44d16b5c79b991de685dcc9df41f3f2b57a64b45381097235fc387533261b187eb3d3eaacde0d93069de5e8ebb157065c728e92f0225f04c80787dab014888afefdda60912dd87980ac2f1f74e5d724017a8b2aba28c73ab0b7f9b1f00070f9b790cac92eddadff2ba6ffdb4d928669e0aa1df3845ed883181be81a38aa29b63b74fafc29b1bf17f6bad80d003c41ca31270df2a54f96ced57021bb65824a94dcb76d813b324b70779d814d8c21b51a228f35dc565405158227e6acf31ac0e55c59e78dd2b41e9853e20f9cafec511ad09c47a7052d6f635f0aef14d85299a70ca5cde918bd63fd898c04ee2732b08bd63eac941f8bdc35ccaafa82f41b64eeae3db8fd9b975f01a726b15671029162665520d89d36deb0f08edce46722497e8f013c851c8bc6af60f3dfbd830c6de04f3d0a40725e74dd7fe3564a95374484f53189b95514643b7bfad6e28
fa2e076056e2ef608c4b3791c504b427
Action: 2
ct (512 byte hexstring): 9493c47ac86dfb852d2d6ecff0a3b95ffd04e57925d1dffff449e917640a7ebadd0c07b7e424298be1f24ed21e099e4548ed54d9b7a6fb8c7c40484f52ef6fa9434f9ca50e8f8186c5f933fb62991511359206b1e8c8adc8c896c42cdd0f5106b0451f1bc6e58f0347663816d006f2064717398bb71202c2ae2bb2f8f55f5de86df14cfff787d95976ba74f42c5bbe8b6aed4db70ea6d9df47577455a331e37251e310f889c35f6ce4dff5385a883c28499a62ba44d16b5c79b991de685dcc9df41f3f2b57a64b45381097235fc387533261b187eb3d3eaacde0d93069de5e8ebb157065c728e92f0225f04c80787dab014888afefdda60912dd87980ac2f1f7bda8c177f0547c969e918ef770f3f5d25c212e3625b9f870fe82043b1b771cfc9ca57cf9d28c818dc3f75723773dde8cfaa710c136b63ab6d40d9415c9647f52916ac3602f139fb5d58bbc31696d0012ece1634017587175e1ba82c77a93edb4657ff4471ac31668f1f3060e4068a3869503e1d2c1484229c3a2aa0d047d1751969e1e1fe4373776bc4f3964f15160395f682e73b3dd7399b473aaed0edf051a6cce341e638b22eb6468b3013c04f8b194c18c0ac98828f64d65be5c0654a071c5256d309e8d050586eaaa3014985a31d23a958da0b7f74cf65b9fa470c835d6c6650ea37cb763e8bbe6452dd062db7e64d36f9b168c392b8ec84de0e6c3d1ee
4cfcf73d620793ab1f41cbab6422b227
Action: 2
ct (512 byte hexstring): 7c59d37d68bc980e29a142d47c63ac6e528e49de61fb11989f548a41e9c724d527e99ab386bad467356947aa56913d3b3040531260dcf8a934e3bbed44d67206502f061bddd1744d61054e344896420799731af71ac045191aae8183dc712d6b138f5094b39d5994a3e93994874d62d019e623d9c043fe04bef57503203f2b3663b43fca718822b94ba2622b6b7b7c9c2704783cecfbebb8726d2cc97838f9dc25523f4984a55a0c5d905ce28ee2b30866ae927f088248870ba371d7c6e2bd3fb706df297c912808be027dfe3ff63fae0d76b29e71875ce5cbf76c66ba7daaad4f933f16fe2cd8a4d52eb8b4670c2c5c609cb72138253d4607805f704e38849bbda8c177f0547c969e918ef770f3f5d25c212e3625b9f870fe82043b1b771cfc9ca57cf9d28c818dc3f75723773dde8cfaa710c136b63ab6d40d9415c9647f52916ac3602f139fb5d58bbc31696d0012ece1634017587175e1ba82c77a93edb4657ff4471ac31668f1f3060e4068a3869503e1d2c1484229c3a2aa0d047d1751969e1e1fe4373776bc4f3964f15160395f682e73b3dd7399b473aaed0edf051a6cce341e638b22eb6468b3013c04f8b194c18c0ac98828f64d65be5c0654a071c5256d309e8d050586eaaa3014985a31d23a958da0b7f74cf65b9fa470c835d6c6650ea37cb763e8bbe6452dd062db7e64d36f9b168c392b8ec84de0e6c3d1ee
b6d2f05d34e57ccb930afc3aa1260600
Action: 0
m_bit guess: 0
Correct!
Flag: dice{my_professor_would_not_be_proud_of_me}
dice{my_professor_would_not_be_proud_of_me}