Skip to content

Security layer ​

Selected by the security= component, per protocol family. Shot-noise units, ξ referred to the channel input.

Devetak–Winter ​

RateKasym=βIAB−χBE: Gaussian modulation, reverse reconciliation, Gaussian collective attacks
βreconciliation efficiency
χBEHolevo bound on Eve's information about Bob's key, Eve purifying the channel
Arithmeticf64 on the CPU; the subtraction is cancellation-sensitive (precision, not device)

Added-noise bookkeeping ​

TermValue, referred to the channel input
χline1T−1+ξ
χhom(1−η)+velη
χhet1+(1−η)+2velη. vel enters twice, one per receiver; the extra 1 is the vacuum at Bob's balanced splitter, the 3 dB heterodyne penalty
χtotχline+χdetT

Mutual information ​

DetectionIAB, with V=VA+1
Homodyne12log2⁡V+χtot1+χtot
Heterodynelog2⁡V+χtot1+χtot

The Holevo bound ​

Gaussian modulation of coherent states is equivalent to Alice holding one mode of an EPR state of variance V=VA+1.

γAB after the channel (Lodewyck Eq. (19))(V12T(V2−1)σzT(V2−1)σzT(V+χline)12), σz=diag(1,−1)
ν1,2212[A±A2−4B]
AV2(1−2T)+2T+T2(V+χline)2
BT2(Vχline+1)2
ν3,4from an analogous pair (C,D): Lodewyck Eq. (24), heterodyne variant from Fossier
ν51 exactly; G(0)=0, so its term vanishes
χBE∑i=12G(νi−12)−∑i=35G(νi−12), G(x)=(x+1)log2⁡(x+1)−xlog2⁡x
Where the detector enterstrusted: η and vel appear only in C, D and χtot, never in A or B — Eve purifies the channel, not Bob's electronics

Departures from the literal closed form, checked against a 60-digit evaluation (conditioning exam):

DepartureDetail
C and D reparametrisednear T=1 the conditional blocks are differences of nearly equal numbers. Literally, ν2−1 at VA=104, ξ=10−9, η=1, T=1−3×10−7 is 3.103×10−6 against an exact 4.993×10−6: 38 % on the small eigenvalue, which G′(0)=∞ turns into 1.5×10−5 bit/symbol of understated χBE. Reparametrised: 10−11, all four ν−1 exactly 0 at the identity channel, monotone in VA, published anchors moved in the last bit only (+2.2×10−15 on Lodewyck's χBE)
G(x)→log2⁡x+(x+1)ln⁡(1+1/x)/ln⁡2 above x=1the literal form returns exactly zero once x>253, where x + 1 == x
The guardon the eigenvalues, ν≥1−10−6, not on the sign of χBE

Trusted vs untrusted is a security model ​

Whether Eve controls Bob's η and vel is a claim about the adversary, not the hardware; no experiment settles it. It is the trusted= flag on the detector.

TrustedUntrusted
Assumptiondetector inside Bob's secure labEve controls detector imperfections
Detector noiseheld out of Eve's informationattributed to Eve, inflates χBE
Key ratehigher, longer reachconservative
Requiresa calibration argument that η, vel are stable and unmanipulablenothing
  • The flag belongs to the rate function, not to the receiver component carrying it.
  • Discrete modulation: the analytic bound refuses trusted=True (why); the certified bound carries it.
  • No click family carries the split: a threshold detector's η and dark rate enter the gain and error rate, with no second labelling.

Untrusted is a substitution: fold the detector into the channel, give Bob a perfect one.

SubstitutionT→ηT, ξ→ξ+μvelηT, η→1, vel→0
μ1 homodyne, 2 heterodyne: two receivers' electronic noise does not halve at Bob's splitter (Laudenbach Eq. (9.93)) — the factor that puts 2vel in χhet
SourceLaudenbach & Pacher, Sec. 2, Eqs. (13)/(14), in input-referred form; Laudenbach 2018, Eqs. (7.38)–(7.41) and (9.92)–(9.97)
No ξ term for (1−η)vacuum loss, carried by the smaller T
InvariantIAB is exactly equal under both labellings: 0.451838 homodyne, 0.521943 heterodyne at VA=4, T=0.4, ξ=0.01, η=0.6, vel=0.1. Only χBE moves; test/consistency.py asserts it
python
import qkd as q

def rate(trusted):
    return q.Link(
        modulation=q.GaussianModulation(v_a=5.0),
        channel=q.Channel(T=0.316, xi=0.01, ref="input"),
        bob=q.Bob(detector=q.Heterodyne(eta=0.6, v_el=0.1, trusted=trusted)),
        security=q.Asymptotic(beta=0.95),
    ).run()

rate(True).key_rate    # 0.087859   i_ab = 0.516558, chi_BE = 0.402871
rate(False).key_rate   # 0.0        i_ab = 0.516558, chi_BE = 0.929099
                       #            (raw value -0.438369)

key_rate clamps at zero; the suite asserts untrusted never exceeds trusted. The substitution is the only place modelling the split: budget.assemble() has no vel and no trusted (why).

Finite size ​

Leverrier, Grosshans & Grangier (2010), collective attacks. T and ξ come from m disclosed symbols of N and are used at their worst case within a confidence interval; disclosed pairs obey y=tx+z, t=T, z∼N(0,σ2), σ2=1+Tξ.

QuantityAt failure probability ϵPE
tmint^−zϵPE/2σ^2mVA
σmax2σ^2+zϵPE/2σ^22m
Tmin, ξmaxtmin2, σmax2−1Tmin
zϵ/2two-sided Gaussian tail; at ϵ=10−10 the literature's "6.5 sigma", computed as 6.467 by Acklam's rational approximation
KfinitenN(βIAB−χBE(Tmin,ξmax)−Δ(n))
Δ(n)(2dim⁡HX+3)log2⁡(2/ϵ¯)n+2nlog2⁡1ϵPA; dim⁡HX=2 for the binary reconciliation alphabet, prefactor 7
python
for n in (1e5, 1e7, 1e9, 1e12):
    res = q.Link(
        modulation=q.GaussianModulation(v_a=5.0),
        channel=q.Channel(T=0.316, xi=0.01, ref="input"),
        bob=q.Bob(detector=q.Heterodyne(eta=0.6, v_el=0.1, trusted=True)),
        security=q.FiniteSize(beta=0.95, eps=1e-10, n=n, pe_fraction=0.5),
    ).run()
    print(n, res.key_rate, res.t_min, res.xi_max, res.delta)
Nkey_ratet_minxi_maxdelta
1050.0000000.2887570.5307500.184454
1070.0184410.3132200.0580100.018326
1090.0409980.3157210.0147630.001831
10120.0438340.3159910.0101500.000058
asymptotic0.087859———

At N=1012 the rate converges to half the asymptotic one: n/N never returns the parameter-estimation half. A lower pe_fraction recovers it at wider intervals.

cv_bounds(t_hat, sigma2_hat, m, va, eps)
Takesthe measured σ^2, which carries the detection term, not the idealisation σ2=1+Tξ
Cost of the idealisationoverstates the key 6.9× at n=106, 24 % at 107, 6.3 % at 108, falling as 1/n
Planethe pipeline reports σ^2 at Bob's ADC; dividing out a heterodyne receiver's amplitude gain η/2 lands it on the channel output, where cv_bounds needs it and where it is exactly 1+χdet+T^ξ^
Same hardware, two planesde-embedded, η=0.6, vel=0.1 heterodyne give χhet=2.667 SNU and a variance ≈3.67× the idealisation's; at Bob's ADC, σ2≈1.1
Epsilon convention
Decomposition (Leverrier 2010, Eq. (5))ϵ=ϵPE+ϵEC+ϵ¯+ϵPA: parameter estimation, error correction (ϵcor), smoothing, privacy amplification
FiniteSize(eps=…)sets ϵPE, ϵ¯ and ϵPA each to the value, as that paper's numerics do; not split (register)
ϵECnot modelled: qkd runs no reconciliation. A published four-term ϵ does not compare with qkd's three-term one

The count the interval is built on ​

m counts scalar symbol/sample pairs — two per heterodyne symbol, one per homodyne symbol — capped at the declared pPEN. Bounding from the nominal pPEN overstated the rate 3.2–3.6× on a run whose 2×105 symbols supplied 4×105 pairs against a declared 107.

Frame errors ​

FiniteSize(fer=…)scales the whole rate: K=(1−FER)nN(βIAB−χBE−Δ(n)). A failed frame is discarded before privacy amplification, yielding and leaking nothing
fer=Nonenot modelled, never a measured zero
Pinned versus simulatedthe table above is a pinned channel; on the simulated path see estimates versus the oracle
Attack classcollective; general attacks: the Gaussian de Finetti reduction

Click protocols use different mathematics ​

A covariance matrix yields a Holevo bound only under a Gaussian measurement; a threshold click is a non-Gaussian POVM. The optics simulation is shared, security= is per family, and Link refuses a mismatched pair by name.

The WTY individual-attack bound ​

Waks, Takesue & Yamamoto (2006).

Collision probability per bitPc0=1−e2−(1−6e)22
RateR=pclick[−(1−2μ)log2⁡Pc0(e)−fh2(e)]
(1−2μ)the photon-splitting concession for a weak-coherent source of mean μ photons per pulse
f1.16, the DPS literature's error-correction inefficiency
DomainBehaviour
e≥6/38≈0.158Eq. (34) saturates and proves nothing; the rate is 0
μ≥1/2the concession consumes the key; the rate is 0
e=0Pc0=1/2, so R=pclick(1−2μ)

Anchors: DPS exam. The QBER is derived from the click train or pinned on IndividualAttack(qber=…); explain() labels which ran.

Every security component, and the family it belongs to ​

ModulationSecurity componentEve priced by
GaussianModulationAsymptotic, FiniteSizethe Holevo bound on a Gaussian state
PhaseShiftKeyingAsymptotic (analytic bound, untrusted only), CertifiedBoundthe Holevo bound on a finite constellation; the relative-entropy proof
DifferentialPhaseIndividualAttackthe WTY collision probability
BasisKeyingSplittingAttack: GLLP (GLLP04) over the decoy boundsthe tagged multiphoton fraction plus h2 of the phase error
BasisKeying(bases=3)the samethe same, on a tomographically complete estimate
BasisKeying(announce="pair")the samethe same, plus a two-photon term BB84 concedes
IntensityKeyingPhaseBound, e_phase requireda phase error nothing in the record estimates
TwoStateKeyingDiscriminationBounda phase error derived from the loss, or supplied
PairSource (q.PairLink)SymmetryBoundthe phase error, from the conjugate basis
the sameViolationBoundthe observed CHSH violation, no source-state assumption
BellAnalyser (MDI-BB84, q.Swap)TestBasisBoundthe Y11Z / e11X decoy analysis

PhaseBound refuses an e_phase below the multiphoton fraction 1−e−μ(1+μ) of a mean-μ source: a floor, not a proof.

What the qubit-family bounds assume ​

Most share the Shor–Preskill shape 1−h2(eph)−fh2(ebit) and differ in where eph comes from.

FamilyPhase error fromTolerance and cost
BB84 (BasisKeying)the conjugate basis; two error rates leave Eve one free Bell-diagonal parametertolerable QBER 11.003%
Six-state (bases=3)three error rates, fixing all four Bell-diagonal weights12.6193%, paid in sifting: 1/3 against BB84's 1/2
SARG04 (announce="pair")the conjugate basis, on conclusive exclusions of an announced pair9.689% at one photon, 2.710% at two; sifting 1/4. The optimised splitting ceiling scales as t3/2 against BB84's t2
B92 (TwoStateKeying)derived from the loss on the plain branchthe rate reaches zero at transmittance equal to the state overlap, the noiseless boundary. At overlap 0.68125 the crossing falls to 0.61884, 0.52015 and 0.42221 at depolarising rates 0.001, 0.005 and 0.01. reference=True has no closed form and prices a supplied bound
BBM92 (SymmetryBound)the conjugate basis of an entangled pair11.003%
E91 (ViolationBound)none: χ(S) from the observed violation, no source-state assumption7.149%. The gap from 11.003% is what the state assumption is worth
MDI-BB84 (TestBasisBound)the test basis, through the joint decoy inversionthe detector is Eve's by construction
RRDPS (q.rates)nothing measured: packet length L and photon numberrises without limit in L, past BB84's 11.0%, six-state's 12.6% and DPS's 6/38; one packet of L pulses yields at most one bit
Mode pairing (q.rates)Ma & Razavi's e11X, from mdi.rspairs arrive at O(η), passing the repeaterless capacity

Nothing here is device independent (why).

Finite key for BB84-WCP ​

Lim, Curty, Walenta, Xu & Zbinden (2014), through q.SplittingAttack(block=q.KeyBlock(…)); without a block the asymptotic GLLP rate returns byte for byte. res.key_length is bits for the block, res.key_rate is key_length / n; res.s0, res.s1, res.phi, res.n_key carry the pieces. Example.

Quote this caveat with every number from this path. Tupkary et al.: Lim's phase-error estimate "goes through a Taylor approximation step. Thus the estimate is not a true bound", while "the main essence of the result remains true after suitable fixes". qkd evaluates the bound as published, with E6's load-bearing printing error corrected; no fix for the Taylor step is implemented.

What is different from the continuous-variable path ​

Gaussian modulationBB84-WCP
Estimatedt^, σ^2 from m disclosed scalar pairsinteger detection and error counts, per intensity and basis
Intervaltwo-sided Gaussian tail, zϵ/2Hoeffding, δ=(n/2)ln⁡(1/ϵ), on per-intensity counts
Unitbits per symbolbits for the block, reported beside the per-pulse rate
SmoothingΔ(n), prefactor 7six explicit log2 terms in the length
Componentq.FiniteSizeq.KeyBlock on the family's security component

The components are not shared: FiniteSize.n counts symbols and KeyBlock.n emitted pulses; beta ∈[0,1] is an efficiency where the click families take f≥1; pe_fraction has no meaning where the split is over intensities and bases.

The pieces ​

Quantity
τn∑kpke−kkn/n!, the probability the source emitted exactly n photons
nk±(ek/pk)[nk±(ntot/2)ln⁡(1/ϵ)], the Hoeffding-corrected per-intensity count
s0, s1decoy_counts: lower bounds on vacuum and single-photon detections, clamped at zero
v1decoy_errors: upper bound on single-photon bit errors
ϕbb84_phase: v1/s1test plus a sampling-without-replacement penalty, capped at 1/2
ℓbb84_length: ⌊s0+s1[1−h2(ϕ)]−λEC−6log2⁡(21/ϵsec)−log2⁡(2/ϵcor)⌋

s0 enters at full weight with no entropy factor: a vacuum emission tells Eve nothing.

The basis split is derived, not dialled ​

BasisKeying(sift=…) is q2+(1−q)2 at bias q, so q=[1+2sift−1]/2 and the key share is q2. sift below 1/2 is refused (unreachable) and sift = 1 too (no test basis). run_basis names the basis with the draw that decided sifting, so key_sifted + test_sifted == sifted exactly.

What it costs, and why biasing is worth doing ​

GYS receiver, 50 km, μ=0.5, ν1=0.1, unbiased bases:

Nkey_rateratio to asymptotic
1080.0000000.000
10102.97×10−50.153
10126.94×10−50.356
10147.38×10−50.379
asymptotic1.95×10−4—

The rate settles near 0.38 of asymptotic. The residual is the test basis and the decoy lines, not a finite-size penalty. Biasing recovers most of it at an interior optimum:

siftasymptoticfinite, N=1012ratio
0.51.95×10−46.94×10−50.356
0.72.72×10−41.76×10−40.646
0.83.11×10−41.95×10−40.625
0.93.50×10−41.75×10−40.499
0.983.81×10−400

Past the optimum the test basis starves and ϕ saturates at 1/2.

Epsilon convention ​

Compositionϵsec=21ϵ; each of the twenty-one bounds is taken at ϵsec/21
KeyBlock(eps_sec=…)10−10, matching FiniteSize(eps=…)
KeyBlock(eps_cor=…)10−15, separate from eps_sec: no simulated counterpart, qkd running no reconciliation
KeyBlock(fer=…)scales the whole length; None is not modelled

Closed form or counted ​

explain()["counts"] says which ran.

PathSelected byCounts
Closed formalice=Noneexpected, from the analytic gains at KeyBlock(n=…)
Sampledalice=q.Alice(…)measured, integers off run_basis; run(symbols=…) must equal KeyBlock(n=…)

Expected counts are a typical case, not a bound: a block whose signal line falls low returns a shorter key. The two paths agree to about 1% at N=2×107 on a short high-efficiency link.

Source-preparation flaws ​

A qubit source whose phase modulator applies ϕ+δϕ/π for an intended ϕ puts Alice's four single-photon components at Bloch polar angles 0, π/2+δ/2, π+δ and 3π/2+3δ/2. Tamaki, Curty, Kato, Lo & Azuma (2014); device model Pereira, Curty & Tamaki (2019).

flaw_tolerantflaw_standard
Phase errorread exactly, by inverting observed yields against Alice's known Bloch vectorsbounded through a quantum coin whose imbalance Eve amplifies by the whole channel loss
Fourth returnthe phase error ratethe coin imbalance
At zero flawagree to round-off; both reduce to the single-photon BB84 rate
Smaller published flaw, tilt −δdistils to 57.775328 dBstops at 28.766343 dB

The 29.008984 dB gap is the price of the worst-case assumption, not a security margin. The two tuples do not line up slot for slot; never subtract them.

Loss tolerance
Mechanismthe single-photon components stay in a two-dimensional Hilbert space, so loss opens no side channel. Three states whose Bloch vectors form a triangle span {1,σx,σz}; the transmission of any fourth, including the virtual state the phase error is defined on, follows by linear algebra
Numericallythe phase error barely moves across forty decibels of loss; the dark count moves it
Scope
Sourcea qubit only: no side channel, no Trojan-horse leakage, no mode dependency. Wang's θ and μ are absent, so their inequalities collapse to equalities
Signalsasymptotic, single photons; a weak-coherent source reaches it through the decoy layer, which supplies y1
Not composedwith attacks.mismatch_rate (why); the unreconciled line of Tamaki's Appendix C: gaps

Certifying COW′'s phase error ​

Plain COW's e_phase is supplied. COW′ adds the two-pulse vacuum decoy sequence, and src/sdp.rs certifies its phase error as the value of a semidefinite programme (problem). Method, refusals and the other two solvers: three cones.

The certified value is returned raw: at or above 1/2 is the abort region, reported unclamped so the depth of the failure stays readable. No q.Link reaches it: q.IntensityKeying describes a three-sequence source and sdp.rs reads four. The routes are q.rates("cow-vacuum") and q.security.keylength.

Everything else is asymptotic, and says so ​

Finite-key routeFamilies
A componentGaussian modulation, q.FiniteSize; BB84-WCP, q.KeyBlock; MDI-BB84, q.TestBasisBound(block=q.RelayBlock(…)); CV-MDI, q.TwoModeBound(block=q.GaussianBlock(…))
q.security.keylength, by namesix-state, SARG04, RRDPS, mode pairing, COW′, discrete modulation, the pair link
Its own moduleDPS, qkd.dps.finite(..., detector=…)

Every other request refuses by name; the reasons are What qkd will not do today. What that table does not carry:

Family
Discrete modulationanalytic bound: Lupo & Ouyang (2022), a heterodyne confined to q,p∈[−R,R] in d bins, both charged as noise rows. Certified bound: Kanitschar, George, Lin, Upadhyaya & Lütkenhaus (2023), Theorem 6; its dimension-reduction charge Δ(w) is 0.101 bit/pulse at w=10−4, so dropping it is wrong, not loose. The 1.834309 / 1.894405 bit/kept round comparison is at α=0.7, nc=6, and the 3.17% over-claim is substitution into Eq. (9). _core.dm_length refuses source="certified" twice: the equality set sits inside the relaxed one, and the two are written over different observables, {q,p,n,d} against Eq. (21)'s displaced {n^β,n^β2}. The protocol steps stay caller obligations, of the standing the photon-number cutoff has
DPSqkd.dps.finite, Mizutani, Takeuchi & Tamaki (2023), reproduces their εsec composition to the last bit and their μopt to two figures, zero fitted. detector="threshold" names four gaps: the detected event is a photon number, not a click; the protocol is block-wise where run_clicks is a continuous train; ClickOut has no code/sample coin; the analysis wants one symmetric detector pair
COWKorzh et al. 2015 published ϵqkd=4×10−9 at 307 km; González-Payo et al. 2020 declared that implementation insecure without touching the statistics. After the vacuum-decoy change the composable length is Li, Cao, Xie, Yin & Chen (2024)
Six-statethe pooled monitor statistic is the worst case, not an approximation: h2 peaks at 1/2, so the equal split minimises $H(X
SARG04sarg_length is Nian, Nie, Zhang & Lu, Commun. Theor. Phys. 76, 065101 (2024), Eq. (5), on Rusca et al., Appl. Phys. Lett. 112, 171104 (2018). No complementary-basis sample: ep≤32eb
E91 and BBM92qkd.pairs.finite (Tomamichel & Leverrier (2017), Theorem 3) reproduces the four points their own examples.py prints exactly. _core.ekert_finite refuses and names four missing pieces. q.PairLink carries no block-size component
RRDPS, mode pairingno component tree; epsilons: register
The relayq.TwoModeBound(block=q.GaussianBlock(…)) (Papanastasiou, Ottaviani & Pirandola (2017)): sigma is a coefficient in standard deviations, not a probability, with no default; its epsilons do not compose; attack= refuses "collective" and "coherent" by name. q.RelayBlock is not a q.KeyBlock: n counts pulse pairs, the length is per announced Bell state summed at a summed budget, and the secrecy budget splits into 266 shares against Lim's 21

qkd.security, the epsilon register ​

No two shipped families mean the same thing by "eps". A registry, not a derivation: every row is read off the engine it names.

FamilyWhat the declared parameter isRuleformEqual shares
cvper term. q.FiniteSize.eps is handed to eps_pe, eps_smooth and eps_pa alike, so the composed secrecy parameter is 3ε and the declared number is not the totalsum, a union bound over three independent failure eventssumnone
bb84the totalsum: secrecy plus correctnesssum21
sargthe totalsum: secrecy plus correctnesssum18
pairingthe totalsum: secrecy plus correctnesssum24
pairthe total, over one correctness term and two secrecysum, plus a hash length in bitssumnone
cvmdiuncomposed: POP17 add none of these together, and state parameter estimation as a coefficient in standard deviationsthe secrecy half is a sum of the two modelled terms; no total composessumnone
mdithe total per announced Bell stateper-state sumper-state266
sixstateeps_ec sits inside epsnestednested3
cow-vacuumfour terms on one common sharesum at Li's weights 2/1/6/1, each weight counting the bounds that term is spent onweighted10
rrdpsTakesue's d, over five terms two of which are hash lengths in bitsmax, with a square root inside one branchmaxnone
dmcsfive termsouter sum over a maximum: εec+max(εpa/2+ε¯, εet+εat)outer-maxnone
dpsfour terms, two of them hash lengthsroot over a weighted sum, MTT23 Eq. (50), two terms charged three times eachrootnone

families() lists the registered families; describe(family) returns one record. Both refuse an unregistered name.

rule is a sentence; form is the same composition as a token from security.FORMS, and Ledger.secrecy dispatches on it. A row whose form names an arm it does not reach refuses rather than falling through: the plain sum reads zero for six-state, half the parameter for MDI and above one for RRDPS and DPS. The token names the arm of the secrecy half, not the total — hence cvmdi carries sum while its rule composes nothing.

Three kinds, and a hash length is not a probability ​

KindIs
epsa failure probability in (0,1), as src/std.rs::check_eps
bitsa hash length s standing for 2−s — the only form Takesue's ηx, ηz take
countwhole repetitions of a whole analysis, as Curty's sum over announced Bell states

A term also carries a role: secrecy, correctness, authentication, or structure, which is not charged but multiplies.

Verify or compute, and only one of them is available per family ​

compose(family, **terms)verifies a stated budget. Every term is required; the refusal lists what the family accepts
allocate(family, target)computes terms by the family's own published assignment. rrdps only; every other family refuses by name, having an equal-share divisor or none, and dividing a target misreports a budget that composes as a maximum, nests, or counts repetitions

Both return a Ledger. .secrecy and .correctness are the two halves; .total is their sum plus any authentication term. Each refuses a term the family does not model, naming the file that would produce it. cv models no correctness parameter — a frame error rate scales the rate and is not a probability that two keys differ undetected — and rrdps charges error-correction leakage as a count of bits sent, with no confidence interval.

authenticate(ledger, messages, eps) adds the forgery probability messages×ε — the epsilon side. qkd.reconcile's net_length subtracts authentication in bits and never touches the parameter. Never charge both.

A privacy-amplification term — eps_pa, eps_amp, eps_hash — is accepted only by a family whose engine takes one as a separate argument; elsewhere it is refused by name, the family's secrecy parameter already charging the hashing.

Attacks outside every bound on this page ​

Every rate above bounds Eve given the observables. Under every qkd.attacks attack the observables stay at values an unattacked link would give, so no bound here sees them.

AttackFamilyMechanism
Saturationhomodyne CVthe covariance matrix is invariant under a shift of the quadrature mean, which no CV-QKD estimator monitors: Eve intercept-resends every pulse and displaces Bob into his clipping region. Qin, Kumar & Alléaume (2016)
Calibrationhomodyne CVthe shot-noise unit is over-estimated; the reported excess noise is the true one divided by that ratio, and past the zero-noise ratio it is negative, returned raw. Jouguet, Kunz-Jacques & Diamanti (2013)
Blindingthreshold detectorsunder detector control the gain and QBER are whatever Eve reproduces, while she holds one bit per sifted bit. Lydersen et al. (2010); a detector set violating their Eq. (1) is refused, not modelled as a weaker attack
Mismatchthreshold detectorsa time shift routes the pulse through a long or short path unmeasured, so the QBER carries no trace at any mismatch. Qi, Fung, Lo & Ma (2007); surviving rate Fung, Tamaki, Qi, Lo & Ma (2009), Eqs. (32)–(34)
Blankingthreshold detectorsa bright pulse in the dead interval blinds the next gate and leaves gain and QBER unchanged. Weier et al. (2011). The τD q.DeadTime spends on rate, this attack spends on security

A Reading carries observed and eve and no key rate: key_rate, rate, key, secure, safe and margin raise. Never subtract the two. qkd's asymptotic rate is positive on the channel the attacked estimator reports and negative on the channel that is there. Module reference: Impairments.

The two engines that do not compose ​

src/flaws.rs and attacks.mismatch_rate may not be chained. Both loss-tolerant analyses require Bob's inconclusive operator Mf to be the same in both bases; a detection-efficiency mismatch violates exactly that. The composition exists (arXiv:2412.09684, 2024) and needs its own proof and virtual states; neither is implemented.

References ​

KeyCitation
Fung, Tamaki, Qi, Lo & Ma (2009)QIC 9, 131 (2009), arXiv:0802.3788
Gao et al. (2022)Opt. Express 30, 23783 (2022), arXiv:2107.09329
GLLP04Gottesman, Lo, Lütkenhaus & Preskill, QIC 5, 325 (2004)
Jouguet, Kunz-Jacques & Diamanti (2013)PRA 87, 062313 (2013), arXiv:1304.7024
Kanitschar, George, Lin, Upadhyaya & Lütkenhaus (2023)PRX Quantum 4, 040306 (2023), arXiv:2301.08686
Laudenbach & PacherarXiv:1904.01970
Laudenbach 2018arXiv:1703.09278
Leverrier, Grosshans & Grangier (2010)PRA 81, 062343 (2010)
Li, Cao, Xie, Yin & Chen (2024)Phys. Rev. Research 6, 013022 (2024)
Lim, Curty, Walenta, Xu & Zbinden (2014)Phys. Rev. A 89, 022307 (2014), arXiv:1311.7129
Lupo & Ouyang (2022)PRX Quantum 3, 010341 (2022), arXiv:2108.00428
Lydersen et al. (2010)Nat. Photonics 4, 686 (2010), arXiv:1008.4593
Mizutani, Takeuchi & Tamaki (2023), MTT23Phys. Rev. Research 5, 023132 (2023), arXiv:2301.09844
Papanastasiou, Ottaviani & Pirandola (2017), POP17Phys. Rev. A 96, 042332 (2017), arXiv:1707.04599
Pereira, Curty & Tamaki (2019)npj Quantum Information 5, 62 (2019), arXiv:1902.02126
Qi, Fung, Lo & Ma (2007)QIC 7, 73 (2007), quant-ph/0512080
Qin, Kumar & Alléaume (2016)PRA 94, 012325 (2016), arXiv:1511.01007
Scarani & Renner (2008)Phys. Rev. Lett. 100, 200501 (2008), arXiv:0708.0709
Tamaki, Curty, Kato, Lo & Azuma (2014)PRA 90, 052314 (2014), arXiv:1312.3514
Tomamichel & Leverrier (2017)Quantum 1, 14 (2017), arXiv:1506.08458
Tupkary et al.arXiv:2502.10340v3
Waks, Takesue & Yamamoto (2006)PRA 73, 012344 (2006)
Weier et al. (2011)New J. Phys. 13, 073024 (2011), arXiv:1101.5289