Simulator (qkdsec.sim)

BB84 QKD protocol simulator.

Two backends are available:

  • "classical" — pure-Python probabilistic simulation. No extra dependencies.

  • "qiskit" — real quantum circuits on IBM Qiskit Aer with depolarizing noise. Requires the sim extra: pip install qkdsec[sim].

Example

>>> from qkdsec.sim import BB84Protocol
>>> result = BB84Protocol(error_rate=0.01).run(n_bits=4096)
>>> if result.secure:
...     print(result.final_key.hex())
class qkdsec.sim.BB84Protocol(error_rate=0.01, eavesdrop=False, eavesdrop_fraction=1.0, qber_threshold=0.11, sample_fraction=0.1, backend='qiskit')[source]

Bases: object

Full BB84 QKD protocol.

Parameters:
  • error_rate (float) – Background channel error rate (without eavesdropping). Default 0.01.

  • eavesdrop (bool) – Simulate an intercept-resend eavesdropper. Default False.

  • eavesdrop_fraction (float) – Fraction of qubits Eve intercepts. Only used when eavesdrop=True.

  • qber_threshold (float) – Maximum tolerable QBER. Protocol aborts above this. Default 0.11.

  • sample_fraction (float) – Fraction of sifted bits sacrificed for QBER estimation. Default 0.10.

  • backend (str) – "qiskit" — IBM Qiskit Aer simulator (requires qkdsec[sim] extra). "classical" — pure-Python probabilistic simulation (no extras).

run(n_bits=4096)[source]

Execute the full BB84 protocol and return a BB84Result.

Return type:

BB84Result

Parameters:

n_bits (int)

class qkdsec.sim.BB84Result(final_key, key_length_bits, raw_bits, sifted_bits, qber, eavesdropper_detected, secure, backend_used='qiskit', sift_ratio=0.0, block_error_rates=None, error_variance=0.0, max_burst_length=0)[source]

Bases: object

Parameters:
  • final_key (bytes)

  • key_length_bits (int)

  • raw_bits (int)

  • sifted_bits (int)

  • qber (float)

  • eavesdropper_detected (bool)

  • secure (bool)

  • backend_used (str)

  • sift_ratio (float)

  • block_error_rates (list)

  • error_variance (float)

  • max_burst_length (int)

backend_used: str = 'qiskit'
block_error_rates: list = None
eavesdropper_detected: bool
error_variance: float = 0.0
final_key: bytes
key_length_bits: int
max_burst_length: int = 0
qber: float
raw_bits: int
secure: bool
sift_ratio: float = 0.0
sifted_bits: int
class qkdsec.sim.BB84Protocol(error_rate=0.01, eavesdrop=False, eavesdrop_fraction=1.0, qber_threshold=0.11, sample_fraction=0.1, backend='qiskit')[source]

Bases: object

Full BB84 QKD protocol.

Parameters:
  • error_rate (float) – Background channel error rate (without eavesdropping). Default 0.01.

  • eavesdrop (bool) – Simulate an intercept-resend eavesdropper. Default False.

  • eavesdrop_fraction (float) – Fraction of qubits Eve intercepts. Only used when eavesdrop=True.

  • qber_threshold (float) – Maximum tolerable QBER. Protocol aborts above this. Default 0.11.

  • sample_fraction (float) – Fraction of sifted bits sacrificed for QBER estimation. Default 0.10.

  • backend (str) – "qiskit" — IBM Qiskit Aer simulator (requires qkdsec[sim] extra). "classical" — pure-Python probabilistic simulation (no extras).

__init__(error_rate=0.01, eavesdrop=False, eavesdrop_fraction=1.0, qber_threshold=0.11, sample_fraction=0.1, backend='qiskit')[source]
Parameters:
run(n_bits=4096)[source]

Execute the full BB84 protocol and return a BB84Result.

Return type:

BB84Result

Parameters:

n_bits (int)

class qkdsec.sim.BB84Result(final_key, key_length_bits, raw_bits, sifted_bits, qber, eavesdropper_detected, secure, backend_used='qiskit', sift_ratio=0.0, block_error_rates=None, error_variance=0.0, max_burst_length=0)[source]

Bases: object

Parameters:
  • final_key (bytes)

  • key_length_bits (int)

  • raw_bits (int)

  • sifted_bits (int)

  • qber (float)

  • eavesdropper_detected (bool)

  • secure (bool)

  • backend_used (str)

  • sift_ratio (float)

  • block_error_rates (list)

  • error_variance (float)

  • max_burst_length (int)

backend_used: str = 'qiskit'
block_error_rates: list = None
eavesdropper_detected: bool
error_variance: float = 0.0
final_key: bytes
key_length_bits: int
max_burst_length: int = 0
qber: float
raw_bits: int
secure: bool
sift_ratio: float = 0.0
sifted_bits: int