Quantum communication key-rate modules
Project description
TNO-Quantum: QKD key-rate
TNO Quantum provides generic software components aimed at facilitating the development of quantum applications.
The tno.quantum.communication.qkd_key_rate
package provides python code to compute optimal protocol parameters for different quantum key distribution (QKD) protocols.
The codebase is based on the following papers:
- Attema et al. - Optimizing the decoy-state BB84 QKD protocol parameters (2021)
- Ma et al. - Quantum key distribution with entangled photon sources (2007)
The following quantum protocols are supported:
- BB84 protocol,
- BB84 protocol using a single photon source,
- BBM92 protocol.
The following classical error-correction protocols are supported:
- Cascade,
- Winnow.
The presented code can be used to
- determine optimal parameter settings needed to obtain the maximum key rate,
- correct errors in exchanged sifted keys for the different QKD protocols,
- apply privacy amplification by calculating secure key using hash function.
Limitations in (end-)use: the content of this software package may solely be used for applications that comply with international export control laws.
Documentation
Documentation of the tno.quantum.communication.qkd_key_rate
package can be found here
Install
Easily install the tno.quantum.communication.qkd_key_rate
package using pip:
$ python -m pip install tno.quantum.communication.qkd_key_rate
If you wish to run the tests you can use:
$ python -m pip install tno.quantum.communication.qkd_key_rate[tests]
Usage
Compute secure key-rate.
The following code demonstrates how the BB84 protocol can be used to calculate optimal key-rate for a specific detector.from tno.quantum.communication.qkd_key_rate.protocols.quantum.bb84 import (
BB84FullyAsymptoticKeyRateEstimate,
)
from tno.quantum.communication.qkd_key_rate.test.conftest import standard_detector
detector = standard_detector.customise(
dark_count_rate=6e-7,
polarization_drift=0.0707,
error_detector=5e-3,
efficiency_detector=0.1,
)
fully_asymptotic_key_rate = BB84FullyAsymptoticKeyRateEstimate(detector=detector)
mu, rate = fully_asymptotic_key_rate.optimize_rate(attenuation=0.2)
Correct errors.
The following example demonstrates usage of the Winnow error correction protocol.import numpy as np
from tno.quantum.communication.qkd_key_rate.base import Message, Permutations, Schedule
from tno.quantum.communication.qkd_key_rate.protocols.classical.winnow import (
WinnowCorrector,
WinnowReceiver,
WinnowSender,
)
error_rate = 0.05
message_length = 10000
input_message = Message.random_message(message_length=message_length)
error_message = Message(
[x if np.random.rand() > error_rate else 1 - x for x in input_message]
)
schedule = Schedule.schedule_from_error_rate(error_rate=error_rate)
number_of_passes = np.sum(schedule.schedule)
permutations = Permutations.random_permutation(
number_of_passes=number_of_passes, message_size=message_length
)
alice = WinnowSender(
message=input_message, permutations=permutations, schedule=schedule
)
bob = WinnowReceiver(
message=error_message, permutations=permutations, schedule=schedule
)
corrector = WinnowCorrector(alice=alice, bob=bob)
summary = corrector.correct_errors()
Examples
The examples repository contain more elaborate examples that demonstrate possible usage
-
How to compute the secure key-rate for various protocols as function of the loss.
-
How to compute secure key-rate using the finite key-rate protocol for different number of pulses.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for tno.quantum.communication.qkd_key_rate-1.0.0.tar.gz
Algorithm | Hash digest | |
---|---|---|
SHA256 | 834815b1cb57e4b188ced3c0b20f98955986012814737765a23b30a5038d6ad5 |
|
MD5 | 8a2090dbde1003826a24b211cdb9747d |
|
BLAKE2b-256 | 71dbad6e01a7f2feec53642bac8784b24025a9ad1faea62e516c06eaeffacd86 |
Hashes for tno.quantum.communication.qkd_key_rate-1.0.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | aaace6274f291d424711b6e1dba275c53b572fe43e0492cc70f0b2e024ea2484 |
|
MD5 | 9ec2bcd4b97c68bc683233d816d18992 |
|
BLAKE2b-256 | 7a2ee593b7577ba695f4d9b19f6cd0a5d4e6e421713e31f993ccb22d64ece5f0 |