##                       ##

########           ########

############   ############

 ###########   ########### 

   #########   #########   

"@_    #####   #####    _@"

#######             #######

############   ############

############   ############

############   ############

######    "#   #"    ######

 #####               ##### 

  #####             #####  

    ####           ####    

       '####   ####'       

D
O

N
O
T

F
E
E
D

T
H
E

B
U
G
S

Save the tristate

[CSAW Qualifiers, 2021]

category: misc

by unknown

An evil plan to get the flag.

Step 1: Get correct base

This requires 256 steps to iteratively guess the bases. In my case, I just appended one more "x" and sent it to the server to check, if I got an error I corrected it to a "+". After 256 iterations I got the correct base.

Step 2: remember QKD and decrypt flag

After correctly obtaining the key the server gives us a byte string with 256 qbits. A (smaller) example is: 0.707 + 0.707i, -0.707 + 0.707i, 0.0 + 1.0i, 1.0 + 0.0i, 1.0 + 0.0i, 0.707 + 0.707i, ...

This corresponds to our key: xx+++xx...

~~We could have not used the key exchange part in my opinion, since it is fairly clear what we need to do. ~~

Each polar coordinate corresponds to a bit measured with the base.

  • 0.707 + 0.707i translates to 0 (equivalent to 45° polarization)
  • -0.707 + 0.707i translates to 1 (equivalent to 135° polarization)
  • 0.0 + 1.0i translates to 1 (equivalent to 0° polarization)
  • 1.0 + 0.0i translates to 0 again (equivalent to 90° polarization) Using this decoding, we get a bitstring which is the ascii encoding of semi-aquatic mammal of action!

Step 3: use the key

The server now asks for a key. This is not the key base we obtained before, but instead the semi-aquatic mammal string we got before. After sending this, we get the flag:

flag{MO0O0O0O0M PH1NE4S & F3RB R T4LK1NG 2 AL1ENS 0V3R QKD!!!}

optional soundtrack: https://www.youtube.com/watch?v=mcBk2ov_qmw

/writeups/ $

$