AIS3 2020 - 🐙 Octopus (Crypto, 372)

Challenge

題目:
prob.py
output

Solve

這題很簡單的實作了一個 BB84 的 Key exchange

關於 BB84 的詳細內容可以去查看 Wikipedia

由於使用的基底和光子的偏正態都給了,也因為這裡的光子並不是真正的量子,而是以數字取代方向

因此寫個腳本把基底相符的光子拿出來,轉回真正的 0 或 1 就好了

def measure(qubits, basis):
bit_stream = ""
for q, b in zip(qubits, basis):
if b == 'x':
q *= complex(0.707, -0.707)
bit_stream += str(np.random.choice([0,1], p=[round(pow(q.real, 2),1), round(pow(q.imag, 2),1)]))
return bit_stream

def key_exchange(qubits, basisA, basisB) :
measured_bits = measure(qubits, basisA)
bs = ''
for i in range(LENGTH) :
if basisA[i] == basisB[i] :
bs += measured_bits[i]
return bs

解題腳本:solve.py

AIS3{EveryONe_kn0w_Quan7um_k3Y_Distr1but1on–BB84}