In [1]:
from qiskit import QuantumCircuit, QuantumRegister, transpile
from qiskit_ibm_runtime import QiskitRuntimeService
service = QiskitRuntimeService.save_account(channel="ibm_quantum", token="HIER IHR TOKEN EINSETZEN", set_as_default=True, overwrite=True)
from qiskit.providers.basic_provider import BasicSimulator
backend = BasicSimulator()
import random
import numpy as np
In [2]:
def Alice(circuit,alice_bits,alice_basen):
# wählt zufällig ein Bit und eine Basis
bit=random.choice(['0','1'])
basis=random.choice(['+', 'X'])
# für spätere Ausgabe
alice_bits.append(bit)
alice_basen.append(basis)
if bit == '1':
circuit.x(0)
if basis == 'X':
circuit.h(0)
return circuit
In [3]:
def Bob(circuit,bob_basen):
# wählt zufällig eine Basis
basis=random.choice(['+', 'X'])
# für spätere Ausgabe
bob_basen.append(basis)
if basis == 'X':
circuit.h(0)
circuit.measure(0, 1)
return circuit
In [4]:
def Eve(circuit):
# Eve wählt einen Winkel t (z.B. pi/4, bei ry-Gatter: np.pi/2)
t = -np.pi/4
circuit.ry(t, 0)
circuit.measure(0, 0)
circuit.ry(-t, 0)
return circuit
In [5]:
# Übertragung
num_bits = 1024
alice_bits = []
alice_basen = []
bob_basen = []
eve_bits = []
bob_bits = []
anz_gemeinsameBits = 0
anz_gleicheBitsAE = 0
anz_gleicheBitsAB = 0
for i in range(num_bits):
circuit = QuantumCircuit(2,2)
Alice(circuit,alice_bits,alice_basen)
Eve(circuit)
Bob(circuit,bob_basen)
circ = transpile(circuit, backend)
erg=backend.run(circ, shots=1).result().get_counts().most_frequent()
bob_bits.append(erg[0])
eve_bits.append(erg[1])
if alice_basen[i] == bob_basen[i]:
anz_gemeinsameBits = anz_gemeinsameBits+1
if alice_bits[i] == bob_bits[i]:
anz_gleicheBitsAB = anz_gleicheBitsAB+1
if alice_bits[i] == eve_bits[i]:
anz_gleicheBitsAE = anz_gleicheBitsAE+1
print("Alice und Bob: ",anz_gleicheBitsAB/anz_gemeinsameBits*100,"Prozent gleiche Bits")
print("Alice und Eve: ",anz_gleicheBitsAE/anz_gemeinsameBits*100,"Prozent gleiche Bits")
if (num_bits<129):
print(f"Alice Bits:\t {" ".join(map(str, alice_bits))}")
print(f"Alice Basis:\t {" ".join(alice_basen)}")
print(f"Bobs Basis:\t {" ".join(bob_basen)}")
print(f"Bobs Bits:\t {" ".join(bob_bits)}")
print(f"Eves Bits:\t {" ".join(eve_bits)}")
Alice und Bob: 75.59055118110236 Prozent gleiche Bits Alice und Eve: 84.64566929133859 Prozent gleiche Bits
In [ ]: