• Telecommunications

Deutsche Telekom Quantum-Secured 5G Network Slicing and Resource Allocation

Deutsche Telekom

Deutsche Telekom researched QAOA for 5G network slice placement optimization and QKD for slice authentication, demonstrating near-optimal resource allocation for 16-slice networks and deploying a QKD pilot on Berlin core network management traffic.

Key Outcome
QAOA achieved optimal or near-optimal slice placement for 16-slice networks in simulation; QKD pilot secures core network management traffic on Deutsche Telekom's Berlin testbed.

The Problem

5G network slicing allows a single physical infrastructure to be partitioned into multiple logically isolated virtual networks (slices), each with dedicated quality-of-service (QoS) guarantees. A slice for autonomous vehicle communication requires ultra-low latency (1 ms end-to-end) and high reliability (99.9999%); a slice for IoT sensor networks prioritizes massive connectivity (1 million devices per square kilometer) over throughput; a slice for enhanced mobile broadband needs peak data rates above 10 Gbps. Deutsche Telekom manages slices across its 5G SA (standalone) core in Germany, where the number of active slices across enterprise customers can reach into the thousands during peak periods.

The slice placement problem is NP-hard in the general case. Given a physical network with nodes and links, a set of slice requests each with resource requirements (compute, bandwidth, latency budget), and physical resource constraints, finding the optimal assignment of virtual network functions (VNFs) to physical nodes and virtual links to physical paths minimizes cost while satisfying all constraints. Classical approaches use LP relaxation (solvable in polynomial time but produces fractional solutions requiring rounding), greedy heuristics (fast but suboptimal), or branch-and-bound exact solvers (exponential worst-case). For real-time slice admission decisions, Deutsche Telekom needs solutions in under 100 milliseconds.

QUBO Formulation of Slice Placement

The slice placement problem is formulated as a Quadratic Unconstrained Binary Optimization (QUBO). For a network with N physical nodes and M slice requests, the binary variable x_{i,k} = 1 if slice k’s anchor VNF is placed on physical node i. Constraints on compute capacity, bandwidth capacity, and latency budget are incorporated as penalty terms in the QUBO objective function. The resulting QUBO has dimension N * M binary variables.

For a 16-slice problem on a 12-node network segment, the QUBO has 192 binary variables, too large for near-term QPUs to solve exactly, but tractable for QAOA approximation when the constraint graph is sparse (which it is for realistic network topologies with limited inter-node bandwidth links).

from qiskit_optimization import QuadraticProgram
from qiskit_optimization.converters import QuadraticProgramToQubo
from qiskit_optimization.algorithms import MinimumEigenOptimizer
from qiskit_algorithms import QAOA
from qiskit_algorithms.optimizers import COBYLA
from qiskit_aer.primitives import Sampler
import numpy as np

# 5G slice placement problem: 4 physical nodes, 4 slice requests (demo scale)
n_nodes = 4
n_slices = 4
node_capacity = [10, 8, 12, 6]       # compute units per node
slice_demand = [3, 4, 2, 5]          # compute demand per slice

qp = QuadraticProgram(name="5g_slice_placement")

# Binary variables: x[i][k] = 1 if slice k placed on node i
for i in range(n_nodes):
    for k in range(n_slices):
        qp.binary_var(name=f"x_{i}_{k}")

# Objective: minimize total cost (load imbalance penalty)
linear_costs = {}
for i in range(n_nodes):
    for k in range(n_slices):
        linear_costs[f"x_{i}_{k}"] = float(slice_demand[k]) / node_capacity[i]
qp.minimize(linear=linear_costs)

# Constraint 1: each slice must be placed on exactly one node
for k in range(n_slices):
    constraint = {f"x_{i}_{k}": 1.0 for i in range(n_nodes)}
    qp.linear_constraint(linear=constraint, sense="==", rhs=1.0, name=f"slice_{k}_placement")

# Constraint 2: node capacity must not be exceeded
for i in range(n_nodes):
    constraint = {f"x_{i}_{k}": float(slice_demand[k]) for k in range(n_slices)}
    qp.linear_constraint(linear=constraint, sense="<=", rhs=float(node_capacity[i]),
                         name=f"node_{i}_capacity")

print(f"Variables: {qp.get_num_vars()}")
print(f"Constraints: {qp.get_num_linear_constraints()}")

# Convert to QUBO
converter = QuadraticProgramToQubo()
qubo = converter.convert(qp)
print(f"QUBO variables: {qubo.get_num_vars()}")

QAOA Circuit and Optimization

QAOA with p=3 layers was used to approximate the QUBO ground state. The QAOA circuit alternates between the problem Hamiltonian (phase separation) and the mixer Hamiltonian (transverse field). The 2p=6 variational parameters (gamma and beta angles) were optimized using COBYLA with 200 function evaluations. The approximation ratio (the QAOA solution value divided by the optimal solution value) was measured by comparing against brute-force enumeration for the 4-node, 4-slice demo problem.

# QAOA for slice placement QUBO
from qiskit_algorithms import QAOA, MinimumEigensolverResult
import numpy as np

sampler = Sampler(backend_options={"method": "statevector"}, run_options={"shots": 4096})
optimizer = COBYLA(maxiter=200, rhobeg=0.5)

qaoa = QAOA(
    sampler=sampler,
    optimizer=optimizer,
    reps=3,              # p=3 layers
    initial_point=None   # random initialization
)

# Solve via MinimumEigenOptimizer wrapping QAOA
from qiskit_optimization.algorithms import MinimumEigenOptimizer
qaoa_optimizer = MinimumEigenOptimizer(qaoa)
result = qaoa_optimizer.solve(qubo)

print(f"QAOA solution: {result.x}")
print(f"QAOA objective: {result.fval:.4f}")

# Approximation ratio vs optimal
from qiskit_optimization.algorithms import CplexOptimizer
# Classical optimal (reference)
optimal_result_value = 1.875  # from brute force
qaoa_value = result.fval
approximation_ratio = qaoa_value / optimal_result_value
print(f"Approximation ratio: {approximation_ratio:.3f}")

# Slice allocation summary
for k in range(n_slices):
    for i in range(n_nodes):
        if result.x[i * n_slices + k] > 0.5:
            print(f"Slice {k} -> Node {i} (demand={slice_demand[k]}, capacity={node_capacity[i]})")

QKD Integration for Slice Authentication

The second component of Deutsche Telekom’s quantum program addressed 5G slice security. Network slice authentication currently relies on conventional PKI (public key infrastructure) and TLS for management plane traffic. Post-quantum cryptography migration is underway industry-wide, but Deutsche Telekom piloted a complementary approach: using QKD to secure the core network management channel between the 5G core (5GC) and the RAN central unit (CU), on the Berlin testbed.

The QKD system uses an ID Quantique Clavis XG platform operating on a dark fiber pair between Deutsche Telekom’s Berlin-Mitte data center and a remote CU site 14 km away. The BB84 protocol generates shared symmetric keys at approximately 10 kbps, which are used to key an AES-256 encryptor on the N2/N3 management interface (between AMF and gNB). This provides information-theoretically secure management traffic; no quantum computer, however large, can break AES-256 encrypted with a QKD-derived key.

# QKD key rate simulation using BB84 protocol model
import numpy as np

class BB84KeyRateModel:
    """
    Simplified BB84 secret key rate calculation.
    Accounts for channel loss, detector efficiency, and QBER.
    """
    def __init__(self, channel_loss_db_per_km, distance_km,
                 detector_efficiency, dark_count_rate, repetition_rate_ghz):
        self.loss_db_km = channel_loss_db_per_km
        self.distance = distance_km
        self.eta_det = detector_efficiency
        self.dcr = dark_count_rate
        self.rep_rate = repetition_rate_ghz * 1e9

    def channel_transmittance(self):
        total_loss_db = self.loss_db_km * self.distance
        return 10 ** (-total_loss_db / 10)

    def qber(self):
        """Quantum Bit Error Rate from dark counts and optical noise."""
        eta_ch = self.channel_transmittance()
        signal_rate = eta_ch * self.eta_det * self.rep_rate
        noise_rate = self.dcr * 2  # two detector dark counts
        return noise_rate / (signal_rate + noise_rate)

    def secret_key_rate_bps(self):
        """BB84 secret key rate using Gottesman-Lo-Lutkenhaus-Preskill (GLLP)."""
        eta_ch = self.channel_transmittance()
        Q = self.qber()
        if Q > 0.11:  # BB84 security threshold
            return 0.0
        # GLLP formula: R = Q_1 (1 - H(e_1)) - Q * f_EC * H(Q)
        # Simplified version with single-photon contribution
        h = lambda p: -p * np.log2(p + 1e-10) - (1-p) * np.log2(1-p + 1e-10)
        signal_rate = eta_ch * self.eta_det * self.rep_rate
        key_fraction = (1 - h(Q)) - 1.16 * h(Q)  # error correction overhead
        return max(0, signal_rate * key_fraction)

# Berlin testbed parameters (ID Quantique Clavis XG)
berlin_qkd = BB84KeyRateModel(
    channel_loss_db_per_km=0.18,  # low-loss fiber
    distance_km=14,
    detector_efficiency=0.15,      # InGaAs APD at telecom wavelength
    dark_count_rate=1000,          # 1 kcps dark count rate
    repetition_rate_ghz=1.0        # 1 GHz clock rate
)

print(f"Channel transmittance: {berlin_qkd.channel_transmittance():.4f}")
print(f"QBER: {berlin_qkd.qber() * 100:.2f}%")
print(f"Secret key rate: {berlin_qkd.secret_key_rate_bps() / 1000:.1f} kbps")

Deployment Results and 16-Slice Performance

In simulation (AerSimulator statevector mode), QAOA with p=3 achieved an approximation ratio of 0.97 or better on all tested 16-slice placement instances, within 3% of optimal for a problem that classical greedy algorithms solved to only 85 to 90% of optimal. LP relaxation achieved near-optimal solutions but required rounding steps that degraded quality to 92 to 95% in practice. For the target real-time admission control use case (sub-100 ms decision), LP takes 60 to 80 ms on current hardware; QAOA on a dedicated QPU is projected to require 20 to 40 ms at comparable circuit execution times, with the advantage growing as slice counts scale beyond 32.

The QKD pilot on the Berlin testbed has been running since Q2 2024, generating secret key material at approximately 8 kbps on the 14 km fiber link, sufficient to rekey the AES-256 management encryptor every 30 seconds. No security incidents have been observed, and the QKD key material passes all NIST SP 800-90B randomness tests. Deutsche Telekom is evaluating extension of the QKD pilot to three additional sites in Germany and integration with their post-quantum cryptography migration program as complementary layers of the 5G security architecture.

Learn more: Qiskit Reference