Tags: qkd quantumcrypto 

Rating: 5.0

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`

Original writeup (https://hack.more.systems/writeups/).