Skip to main content

A Python Package for Quantum Key Distribution

Project description

QKDpy: Quantum Key Distribution Library

License Python CI Release Documentation

QKDpy is a comprehensive Python library for Quantum Key Distribution (QKD) simulations, implementing various QKD protocols, quantum simulators, and cryptographic tools. It provides an intuitive API similar to NumPy, TensorFlow, and scikit-learn, making quantum cryptography accessible to developers and researchers.

Features

  • Quantum Simulation: Simulate qubits, quantum gates, multi-qubit states, and measurements
  • QKD Protocols: Implementations of BB84, E92, E91, SARG04, CV-QKD, Device-Independent QKD, HD-QKD, and more
  • High-Dimensional QKD: Support for qudit-based protocols with enhanced security and key rates
  • Key Management: Advanced error correction and privacy amplification algorithms
  • Quantum Cryptography: Quantum authentication, key exchange, and random number generation
  • Enhanced Security: Message authentication, key validation, and side-channel protection
  • Machine Learning Integration: Optimization and anomaly detection for QKD systems
  • Quantum Networks: Multi-party QKD and network simulation capabilities
  • Visualization: Advanced tools to visualize quantum states and protocol execution
  • Quantum Network Analysis: Tools for analyzing quantum networks and multi-party QKD
  • Extensible Design: Easy to add new protocols and features
  • Performance: Efficient implementations for simulations

Installation

QKDpy requires Python 3.10 or higher. We recommend using uv for package management:

# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clone the repository
git clone https://github.com/yourusername/qkdpy.git
cd qkdpy

# Install in development mode
uv pip install -e .

Installation

QKDpy requires Python 3.10 or higher. We recommend using uv for package management:

# Install uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# Clone the repository
git clone https://github.com/yourusername/qkdpy.git
cd qkdpy

# Install in development mode
uv pip install -e .

Quick Start

Here's a simple example of using the BB84 protocol to generate a secure key:

from qkdpy import BB84, QuantumChannel

# Create a quantum channel with some noise
channel = QuantumChannel(loss=0.1, noise_model='depolarizing', noise_level=0.05)

# Create a BB84 protocol instance
bb84 = BB84(channel, key_length=100)

# Execute the protocol
results = bb84.execute()

# Print the results
print(f"Generated key: {results['final_key']}")
print(f"QBER: {results['qber']:.4f}")
print(f"Is secure: {results['is_secure']}")

For High-Dimensional QKD:

from qkdpy import HDQKD, QuantumChannel

# Create a quantum channel with some noise
channel = QuantumChannel(loss=0.1, noise_model='depolarizing', noise_level=0.05)

# Create an HD-QKD protocol instance with 4-dimensional qudits
hd_qkd = HDQKD(channel, key_length=100, dimension=4)

# Execute the protocol
results = hd_qkd.execute()

# Print the results
print(f"Generated key: {results['final_key']}")
print(f"QBER: {results['qber']:.4f}")
print(f"Is secure: {results['is_secure']}")
print(f"Dimensional efficiency gain: {hd_qkd.get_dimension_efficiency():.2f}x")

For more examples, see the examples directory.

Advanced Usage

QKDpy also supports advanced protocols and features:

from qkdpy import (
    DeviceIndependentQKD,
    QuantumKeyManager,
    QuantumRandomNumberGenerator,
    QuantumNetwork,
    HDQKD,
    QKDOptimizer
)

# Device-independent QKD
di_qkd = DeviceIndependentQKD(channel, key_length=100)
results = di_qkd.execute()

# Quantum key management
key_manager = QuantumKeyManager(channel)
key_id = key_manager.generate_key("secure_session", key_length=128)

# Quantum random number generation
qrng = QuantumRandomNumberGenerator(channel)
random_bits = qrng.generate_random_bits(100)

# Quantum network simulation
network = QuantumNetwork("Research Network")
network.add_node("Alice")
network.add_node("Bob")
network.add_connection("Alice", "Bob", channel)
key = network.establish_key_between_nodes("Alice", "Bob", 128)

# High-dimensional QKD
hd_qkd = HDQKD(channel, key_length=100, dimension=4)
hd_results = hd_qkd.execute()

# ML-based QKD optimization
optimizer = QKDOptimizer("BB84")
parameter_space = {
    "loss": (0.0, 0.5),
    "noise_level": (0.0, 0.1)
}
# optimization_results = optimizer.optimize_channel_parameters(
#     parameter_space,
#     lambda params: simulate_protocol_performance(params),
#     num_iterations=50
# )

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines.

License

QKDpy is licensed under the Apache License 2.0. See LICENSE for the full license text.

Citation

If you use QKDpy in your research, please cite it as described in CITATION.cff.

Code of Conduct

This project adheres to the Contributor Covenant code of conduct. By participating, you are expected to uphold this code.

Contact

For questions, suggestions, or issues, please open an issue on GitHub.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

qkdpy-0.2.1.tar.gz (77.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

qkdpy-0.2.1-py3-none-any.whl (99.9 kB view details)

Uploaded Python 3

File details

Details for the file qkdpy-0.2.1.tar.gz.

File metadata

  • Download URL: qkdpy-0.2.1.tar.gz
  • Upload date:
  • Size: 77.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for qkdpy-0.2.1.tar.gz
Algorithm Hash digest
SHA256 65940b37746c102afdc34f850ef1dc0a349530e2cbac32e99a12d2f2df586cb9
MD5 122d07d1215dc30821a050faa4f7afa8
BLAKE2b-256 9e20af998512fcb15f4e31c51c375f127bcb9080328e6b93b9b310641a2d3856

See more details on using hashes here.

Provenance

The following attestation bundles were made for qkdpy-0.2.1.tar.gz:

Publisher: release.yml on Pranava-Kumar/qkdpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file qkdpy-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: qkdpy-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 99.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for qkdpy-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 9fa228c9b3161acd41419a31a8d029b06055ca4d8884b30ffd0c4b375c48c9dc
MD5 8813baa046a0674a44dc23cbdeedd65a
BLAKE2b-256 9edc816affabda3aa7cdb4c653e4214e7673eb2643088ab5b08c3d8fa477798e

See more details on using hashes here.

Provenance

The following attestation bundles were made for qkdpy-0.2.1-py3-none-any.whl:

Publisher: release.yml on Pranava-Kumar/qkdpy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page