HNDL, QKD attack modelling and quantum cryptanalysis — analysed in depth, then mapped onto three real platforms: Karsa Quantum OS, QryptOn, and Origin PilotOS. With full feature inventories, the Origin Quantum hardware estate, and the deployment architecture that ties them together.
The threat is analysed first and on its own terms. Only then do the three platforms appear — because a capability claim is only meaningful once you know exactly what it is being claimed against.
Each of these exists today and each works standalone. What makes them interesting together is that they occupy three different layers of the same problem — and none of them can substitute for another.
Qryptonite — a pure-Rust FIPS 203/204/205 implementation. Runs entirely
on classical hardware; that is the point.Four attack families, analysed on their own terms — before any platform is proposed as an answer.
Not one threat but a family, and the members have wildly different prerequisites. The right-hand column is the one people skip — and it is where most of the confusion lives.
| Attack | Class | What it defeats | Adversary prerequisite | Realistic today? |
|---|---|---|---|---|
| Harvest-now-decrypt-later | Strategic | Confidentiality of anything recorded now under RSA/ECDH key exchange | Storage, patience, network access. No quantum computer at harvest time | Underway now |
| Shor — integer factoring | Cryptanalytic | RSA at every key size; no larger modulus helps | Fault-tolerant QC, ~10⁵–10⁶ physical qubits under current estimates | Not yet |
| Shor — discrete log (ECDLP) | Cryptanalytic | ECDH, ECDSA, EdDSA, DH, DSA — and every major blockchain | ~100× fewer Toffoli gates than RSA; minutes, not days, once running | Not yet — but cheaper than RSA |
| Grover — unstructured search | Cryptanalytic | Symmetric keys and hashes — quadratically, not catastrophically | Enormous coherent runtime; parallelises poorly | Manageable — use 256-bit |
| QKD implementation attacks | Physical | Deployed QKD links, via detectors, sources and side channels | Optical access to a real QKD fibre. No quantum computer at all | Demonstrated in labs |
| Downgrade / hybrid stripping | Protocol | A PQC rollout that still negotiates classical-only as fallback | Ordinary active MITM position | Available today |
| Trust-anchor & signature forgery | Cryptanalytic | PKI roots, code signing, firmware — forward in time only | CRQC at the moment of verification, not of signing | Not yet |
| Crypto-agility failure | Organisational | Your ability to respond at all when any of the above lands | None — this one is self-inflicted | Already the default |
Two algorithms, two entirely different consequences. Treating them as one threat produces the wrong remediation plan — usually an expensive symmetric-key project that was never needed.
| Primitive | Quantum attack | Effect | Fix |
|---|---|---|---|
| RSA (any size) | Shor | Broken | ML-KEM / ML-DSA |
| DH · DSA | Shor | Broken | ML-KEM |
| ECDH · ECDSA · EdDSA | Shor | Broken | ML-KEM / ML-DSA |
| AES-128 | Grover | ~64-bit | Move to AES-256 |
| AES-256 | Grover | Adequate | No change |
| SHA-256 / SHA3-256 | Grover | Adequate | No change |
| ML-KEM · ML-DSA · SLH-DSA | None known | By design | Deploy |
Shor solves factoring and discrete log in polynomial time. RSA, DH and every elliptic-curve scheme rest on exactly one of those problems being hard. There is no modulus large enough — the hardness assumption itself is gone, which is why the answer has to be different mathematics.
Grover gives a quadratic speedup, so 256-bit symmetric keys retain roughly 128 bits of quantum security. It also parallelises badly: running it across many machines buys far less than intuition suggests, and the coherent runtime required is punishing. Doubling symmetric key length is a genuinely sufficient response.
The only attack in this brief whose first stage requires no quantum technology whatsoever. It is a storage-and-patience problem, which is exactly why it is already happening.
Mosca's inequality is the standard formulation. The Karsa exposure window is the same arithmetic rearranged to produce a number a steering committee can act on. Both are planning heuristics — neither predicts a date.
X + Y > Z
If the inequality holds, you are already exposed. It answers yes or no.
W = Z − Y − X
Same inputs, but it returns a signed magnitude, so thousands of assets can be ranked against each other rather than each answering yes.
The same TLS stack protecting a session token and a genomic record carries completely different HNDL risk. Prioritisation has to start from the confidentiality lifetime of the content.
| Data class | Secrecy lifetime | HNDL urgency | Typical carrier |
|---|---|---|---|
| Health & genomic records | Decades to lifetime | Critical | TLS, HL7/FHIR, backup |
| State & diplomatic traffic | Decades | Critical | VPN, IPsec, satcom |
| Identity & biometric enrolment | Lifetime — cannot be reissued | Critical | TLS, enrolment API |
| Long-lived trade secrets, IP | 10–30 years | High | File transfer, email |
| Financial records | 7–10 years | Medium | TLS, SWIFT, core banking |
| Legal & contractual archives | 7–20 years | Medium | Document store, S/MIME |
| Routine session traffic | Minutes to days | Low | TLS |
Ephemeral ECDH is the standard answer to key compromise, and against a classical adversary it works. Against a quantum one it does not: the ephemeral public values were transmitted in the clear and recorded along with everything else. The discrete-log problem underneath them is exactly what Shor solves. Perfect forward secrecy protects against a stolen long-term key, not against a broken hardness assumption.
Population-scale identity, health and civil-registry data have the longest secrecy lifetimes of anything an organisation holds, and biometric enrolment cannot be rotated after a breach. Combined with financial infrastructure under 7–10 year retention obligations, the national HNDL exposure sits in the top two rows of this table, not the bottom.
The hardware did not get better this fast. The algorithms and error-correcting codes did. Every reduction below came from compilation, arithmetic and code design — not from a bigger machine.
An exposure model is only as good as its Z. Three papers in under twelve months moved the resource estimate by two orders of magnitude, and every one of them shortened the plausible horizon. A risk engine that hard-codes a threat-horizon constant is wrong within a year.
This is the single strongest argument for building the exposure model as a parameterised batch simulation rather than a spreadsheet: when Z moves, you re-run thousands of assets against the new assumption in one job instead of re-deriving a plan.
Almost every quantum-threat briefing is written about RSA. The elliptic-curve case is substantially cheaper to attack and arrives with an operational twist that RSA does not have.
| Dimension | RSA-2048 | ECDLP-256 |
|---|---|---|
| Toffoli gates | ~6.5 × 10⁹ | ~70–90 × 10⁶ (≈100× fewer) |
| Physical qubits | < 1 M (2025) · < 100 k (2026 arch.) | < 500 k (Google, Mar 2026) |
| Runtime once running | Under a week | Minutes |
| Precomputation | Limited | Primeable — half the work depends only on curve parameters |
| Time after key exposure | n/a | ≈ 9 minutes to recover a private key |
| Prior best estimate | 20 M (2019) | ~9 M photonic (Litinski 2023) — ≈20× reduction |
Bitcoin's average block time is ten minutes. Once a public key is revealed in an unconfirmed transaction, a primed attacker needs roughly nine. Google's own estimate puts the probability of deriving the private key before confirmation at around 41% under idealised conditions. The mitigations are protocol-level: stop reusing addresses, avoid unnecessary public-key exposure, private mempools, and quantum-resistant signature schemes.
An illustrative BB84 walkthrough under idealised assumptions. Measuring in the wrong basis disturbs the state, and that disturbance shows up as error rate on a publicly compared sample.
The security proof holds within its assumptions. Real hardware violates those assumptions, and this is the family of attacks that has actually been demonstrated — none of which needs a quantum computer.
| Attack | Target | Mechanism | Countermeasure |
|---|---|---|---|
| Photon-number splitting | Source | Attenuated laser pulses occasionally contain multiple photons; Eve siphons one and keeps it, learning key bits without adding error | Decoy-state protocol; SARG04; true single-photon sources |
| Detector blinding / faked state | Detector | Bright light forces avalanche photodiodes into linear mode; Eve then drives detection events at will and can recover the full key undetected by error checking | Optical power monitoring, detector self-testing, MDI-QKD |
| Trojan horse | Source & receiver | Eve injects light into Alice's or Bob's apparatus and reads the back-reflection to learn the encoding settings | Optical isolators, passive optical components, watchdog detectors |
| Time-shift | Detector | Exploits efficiency mismatch between the two single-photon detectors across the detection window | Active basis selection, temporal monitoring, MDI-QKD |
| Phase remapping / non-randomisation | Source | Imperfect or absent global phase randomisation lets Eve remap the encoded states | Active phase randomisation, characterisation in the proof |
| Dead-time | Detector | Detector recovery periods leak basis information through detection timing | Simultaneous dead-time enforcement, MDI-QKD |
| Electromagnetic side channel | Electronics | RNGs, detectors and high-speed electronics radiate signals correlated with internal state — basis settings, detection events | Shielding, TEMPEST-grade engineering, emissions testing |
| Denial of service | Channel | Cutting or degrading the fibre stops key agreement entirely — the abort behaviour is itself the vulnerability | Path diversity, fallback to authenticated PQC key establishment |
QKD is a legitimate technology with a narrow, real use case. Most of the harm in this space comes from claims made on its behalf rather than from the technology itself.
A photon source, single-photon detectors, dedicated fibre or free-space optics, timing and calibration infrastructure, trusted-node design over distance, and an authenticated classical channel. NSA notes it needs special-purpose equipment and dedicated physical-layer communications.
It secures a point-to-point link between fixed endpoints. It does not secure code signing, data at rest, stored backups, mobile clients, third-party APIs, or any of the several thousand places an enterprise uses public-key cryptography today.
Indonesian operators are already discussing quantum-safe networks and data centres. Being able to model a QKD link's behaviour, its failure modes and its economics — before anyone procures optics — is worth considerably more than the optics.
These are the attacks a PQC programme creates for itself. They are available today, against organisations that have already started migrating — which makes them more urgent than Shor, not less.
A rollout that negotiates ML-KEM when both sides support it, and silently falls back to classical-only when they do not, gives an active attacker a switch. The fallback path is the real security level of the deployment, and an HNDL adversary only needs the session to take it once.
Test for it: does a hybrid handshake fail closed, or fall back quietly? A negotiated-evidence scan — not a declared-capability scan — is the only way to know.
Signatures are not HNDL-exposed, but roots are long-lived. A federal or national root CA signing with RSA or ECDSA must be re-keyed to a PQC algorithm before deprecation — and re-keying a root means reissuing the entire subordinate hierarchy and redistributing trust anchors.
The long pole: firmware and code signing under SP 800-208 LMS/XMSS, on devices with 10–20 year field lives that may never be updatable again.
Most systems cannot change algorithm without changing code. That is survivable once. It is not survivable across FIPS 203/204/205 now, FIPS 206 later, HQC as a code-based backup, and whatever follows a lattice cryptanalysis result. Hard-coded primitives convert every future standard into a re-engineering project.
Design rule: algorithm identity belongs in configuration and in the inventory, never in the source.
An inventory is a photograph, and dependencies reintroduce classical-only cryptography continuously — a new SDK, a vendored library, a bundled OpenSSL three minor versions behind. Organisations that completed a migration in one system routinely find it undone by the next release.
Design rule: the scan is not a project deliverable, it is a pipeline check with a failure threshold.
Migration is expensive and the threat is not yet visible, which historically made it easy to defer. Standards bodies removed that option by setting one deadline for everyone at once.
| Authority | Instrument | What it requires | Date |
|---|---|---|---|
| NIST | FIPS 203 · 204 · 205 — ML-KEM, ML-DSA, SLH-DSA | The finalised foundational PQC standards | Finalised 13 Aug 2024 |
| NIST | IR 8547 (initial public draft) | RSA, ECDSA, ECDH, DH deprecated, then disallowed | Deprecated after 2030, disallowed after 2035 |
| NIST | FIPS 206 (FN-DSA) · HQC | Falcon-based signature; code-based backup KEM | FIPS 206 not yet drafted as of mid-2026; HQC selected Mar 2025, expected 2027 |
| NSA | CNSA 2.0 | ML-KEM-1024 and ML-DSA-87 specifically — stricter than the common hybrid group | New NSS quantum-safe by Jan 2027 |
| EU | Coordinated implementation roadmap (NIS CG) | National roadmaps, then high-risk migration, then completion | Roadmaps end-2026 · high-risk 2030 · complete 2035 |
| Canada | ITSM.40.001 | Departmental migration plans and phased completion | Plan Apr 2026 · high-priority 2031 · rest 2035 |
| Indonesia | BSSN National PQC Migration Task Force | Cryptographic inventory, risk analysis, prioritisation, migration roadmap, execution, monitoring — with a draft Presidential Regulation on the PQC roadmap as an output | Kick-off 25 June 2026, BSSN Bojongsari |
The quantum operating system underneath everything else — read from the v4.2 manual, then checked against the vendor's own current pages.
PilotOS is not an abstraction exercise. It is the operating system shipped on real superconducting hardware, and the estate it addresses changed substantially in May 2026.
| System | Route | Specification | Status & significance |
|---|---|---|---|
| Origin Wukong-180 | Superconducting | 180 computational qubits on a single core, plus 251 coupling qubits. T1 ≈ 40 µs, T2-echo ≈ 20 µs | 4th generation, online 9 May 2026, accepting global tasks |
| Origin Wukong | Superconducting | 72 computational qubits (198 total incl. 126 couplers) — the "Wukong chip" | 3rd generation, online 6 Jan 2024. ~50 M remote accesses, 160+ countries, 900,000+ tasks completed |
| Hanyuan-2 | Neutral atom | 200 rubidium qubits, dual-core (100 × Rb-85, 100 × Rb-87), cabinet-scale, under 7 kW | CAS Cold Atom Technology, May 2026. Room-temperature enclosure; atoms laser-cooled to µK |
| Jiuzhang 4.0 | Photonic | Up to 3,050 photons detected across 8,176 interferometric modes, 1,024 squeezed-state inputs | USTC, Nature, May 2026. First fully programmable photonic prototype at scale |
Launched 2021, open-sourced and made publicly downloadable in 2026. It sits between quantum hardware below and cloud, applications and supercomputing above, and it is the operations and scheduling hub of the Wukong machines.
| Attribute | Value |
|---|---|
| Product name | Origin Pilot / Origin Sīnán (本源司南) · PilotOS |
| Manual reviewed | Origin PilotOS 4.2, User Manual and API Reference, v3.4, 29 April 2026 |
| Vendor | Origin Quantum Computing Technology (Hefei) Co., Ltd. |
| Editions | Community Edition and Enterprise Edition |
| Backends addressed | Superconducting, trapped ion, semiconductor, neutral atom, photonic — plus classical HPC clusters |
| Programming framework | QPanda / PyQPanda, with QPanda3 Runtime; VQNet, ChemiQ, QCFD, pyqpanda-algorithm |
| Persistence | MySQL 8.0+ for structured metadata, MongoDB 6.0+ for circuits and raw results |
| Console | Browser, http://<server>:10020 |
Highly efficient quantum-classical hybrid computing. The manual frames the problem as managing resources at large qubit scale, scheduling tasks efficiently, and achieving heterogeneous multi-backend and hybrid computation — the three things that stop a chip from being a service.
The second group is named explicitly. That is the doorway Karsa's security labs walk through — the manual anticipates cryptography users, it just does not serve them a protocol engine.
The manual's overall architecture diagram, read out in full. Each layer has a specific separation-of-concerns job, and the system-call interface between application and system layers is the enforcement point.
Submission through result, as the manual describes it. This is the lifecycle every Karsa security job will inherit.
| Module | Role | Responsibilities as documented |
|---|---|---|
| QCloudServer | The only official gateway | HTTPS API surface. Unified access — no other direct path into the system is exposed. Request validation — identity, API permissions, parameters; malformed, unauthorised or malicious requests rejected before reaching core components. Persistent task management — user ID, submission timestamp, task type, configuration stored for full-lifecycle tracking, auditing and recovery. Secure internal routing and result delivery / state synchronisation. |
| ComputerServer | Middleware, kernel offload | Decouples common but less frequent computation from the core flow. Today: expectation value evaluation and full-circuit fidelity estimation. Four components — task preprocessing, subtask expansion, subtask execution, result aggregation (normalisation, weighting, statistical fusion). Explicitly designed for easy extension with new domain-specific capabilities. |
| OSServerManager | Central coordinator | Speaks to upper layers through SysCall. Task resource estimation — static circuit analysis for qubits, depth, gate count. Task queue management — tracks progress through the flow and pushes real-time status upward. Tiered persistence — MySQL for metadata, MongoDB for circuits and raw results. |
| ScheduleServer | Priority and dispatch | Max-heap priority queue; default policy HRRN (highest response ratio next). Initial priority set by OSServerManager from configurable policy — task type, user tier, business context — and explicitly not fixed at zero. Response ratio rises with wait time to prevent starvation. Each cycle: check heap top against available resources → dispatch or update all response ratios → refresh the queue. |
| QCompileServer | Circuit compilation | Hardware-agnostic development — submit QASM or internal IR, compiler adapts to target. Heterogeneous multi-backend — superconducting and ion trap pipelines selected dynamically. Parallel compilation acceleration — concurrent tasks, or one large circuit fragmented for parallel optimisation. Passes: multi-controlled gate decomposition, gate set conversion, circuit optimisation, qubit mapping and topology routing. |
| ResourceManager | Inventory of truth | Receives resource updates from backends and configuration commands from upper layers; maintains the live inventory of backend availability and qubit status; answers resource queries from other components. |
| BackendServer | Hardware communication hub | Manages heterogeneous backend units and handles task distribution and result receipt over a hybrid ZeroMQ messaging model — see next slide. |
This is the contract Karsa's simulator implements and the adapter terminates. Understanding why there are two patterns explains why a browser cannot talk to PilotOS directly.
Characteristics: connection-oriented, bidirectional, synchronous request–response.
Why: ordered, reliable delivery — appropriate for critical control commands and result retrieval.
Characteristics: connectionless, unidirectional, asynchronous, event-driven. The backend service is the subscriber, listening for control-service broadcasts.
Why: eliminates polling overhead and gives low-latency event propagation.
Everything the manual documents in the visual management console — the surface Karsa Quantum OS mirrors and then extends.
admin / admin123123456; delete account/opt/PilotOS-Upgrade (.tar.gz / .zip), directory scanned, multi-package selection sorted by version and build descendingEvery endpoint in the manual. This is precisely what a Karsa adapter must wrap, normalise and make idempotent.
| Endpoint | Purpose & key parameters |
|---|---|
| /management/pilotosmachinelogin | Authenticate with apiKey; returns token — prerequisite for everything else |
| /task/realQuantum/run | Submit to physical chip. QProg, TaskType, ChipID, Priority, Configuration (shot 10–20000, circuitOptimization, mappingFlag, specified_block, amendFlag, PointLabel). Must contain a measurement |
| /management/query/taskinfo | Query by taskid + token; returns state, circuit count, circuits, results |
| /system/queryBackendQueueTask | Backend queue: depth, task IDs, usernames, up to maxQueryTaskSize |
| /management/getchipconfig | Qubit params, noise model, CZ crosstalk compensation angles, available qubits — per Label |
| /task/run | Cluster simulation. QMachineType 0–4, per-type Configuration, ClusterID, callbackAddr |
| /task/query | Cluster simulation task status by taskId |
| /system/queryChipUpdateTime | Per-qubit calibration timestamps for a backend |
| Endpoint | Purpose & key parameters |
|---|---|
| /system/pauseChipSchedule | Pause or resume scheduling for a chip (isPause) |
| /system/queryChipScheduleState | Scheduling state for an array of chip IDs |
| /system/manualSampleM3 | Trigger manual M3 sampling for a chip and point label |
| /session/apply | Open a session with LifeTime in minutes; returns SessionId |
| /session/append_task | Submit inside a session — same shape as chip submission plus SessionId. Grants higher priority |
| /session/release | Close the session; may report Task is running |
| /management/query/best_qubit_blocks | Optimal qubit blocks for a chip given QubitNum and QubitBlockNum |
| /task/query_task_priority | Current effective priority of a task |
| chip_calibration_start | Calibration qubits, couplers, CZ pairs, discriminators |
| calibration end | chipId, lastCalibrationTime, calibration bit and bit-pair lists |
| chip_update | New chip configuration JSON — qubit count, high-frequency qubits |
| chip_manual_maintenance_start | Maintenance window opened |
| chip_manual_maintenance_end | Maintenance window closed |
| 0 | Full amplitude simulation |
| 1 | Noise simulation |
| 2 | Partial amplitude simulation |
| 3 | Single amplitude simulation |
| 4 | MPS simulation |
| 5 | Real chip computing |
| −1 | Unknown |
| 0 | Monte Carlo measurement |
| 1 | PMeasure |
| 2 | QST |
| 3 | QST density matrix |
| 4 | Fidelity calculation |
| 5 | Expectation calculation |
| 8 | Noise learning |
| 9 | Readout error mitigation |
| 10 | Quantum distributed computing |
| 11 | Fidelity measurement |
| 0 / 1 / 2 | Unknown · received · executing |
| 3 / 4 / 5 | Success · failed · queuing |
| 35 | Cancelled |
| 0–5 | No error · database · OriginIR syntax · JSON parse · backend compute · queue full |
| 6–12 | Qubit count exceeded · unsupported backend · timing exceeded · task type · VM init · compilation · estimation |
| 13–20 | Metadata config · fidelity density matrix · QST program · empty program · qubit/gate mismatch · chip topology · chip task program · duplicate MEASURE |
| 21–26 | DB operation · status info full · backend send failure · cluster compute · topology cannot execute circuit · task config |
| 27–35 | Unknown app ID · unknown task ID · subtask result parse · syscall timeout · terminated · URL · parameter · circuit length · chip offline |
| 36–43 | Unknown · login password · username taken · token verification failed · task query · user query · insufficient permissions · API key |
| > 1400 | Measurement and control error — marks a hardware fault |
pilotos:x.x.iso image, PilotOS-Config/, requirements.txt, Upgrade.py, Util.pysudo kill — never kill -9, which strands /var/run/autodeploy_upgrade.pid and blocks the next start| Task stuck in "Sent" | Measurement-and-control link down — check network, restart the control service |
| Database connection failed | Redis not running — systemctl start redis |
| Compilation failed | Circuit syntax error |
| Slow page load | Cache buildup, browser or server side |
| Licence service unavailable | IP misconfiguration (never 127.0.0.1 — the image is isolated), MySQL schema not initialised (expect 26 tables), or MongoDB auth/bind |
| Licence server unreachable | Local network cannot reach the public verification endpoint |
The vendor's own capability statement, set against the security functions it does not provide. Both halves matter: the left is what Karsa gets for free, the right is what Karsa must build.
| Capability | Owner | Why it is not native |
|---|---|---|
| QKD protocol engine | Karsa | Photonic compute backends are documented. No BB84/E91/B92 or decoy-state application exists. QKD is not a chip-compute task |
| HNDL risk model | Karsa | Entirely a classical business-risk calculation. Nothing in a quantum OS knows what a secrecy lifetime is |
| PQC runtime | Karsa / QryptOn | ML-KEM, ML-DSA and SLH-DSA run on classical CPUs. The control plane can schedule them; it does not implement them |
| Cryptographic inventory / CBOM | Karsa | Asset schema, scanners, attestation workflow and evidence lineage are business-layer concerns |
| Key protection | External | HSM, key vault and PKI stay outside the control plane. Private keys must never sit in the business database |
| Enterprise identity & approvals | Karsa | Console roles are tenant-local. SSO, RBAC across the estate, exceptions and sign-off are the adapter's job |
Twelve modules, read feature by feature from the prototype source — plus the adapter that makes a browser able to talk to a quantum control plane at all.
A dependency-free static HTML, CSS and JavaScript application — no framework, no build step, no CDN, no backend required. It runs standalone from local state, and switches to live control-plane data the moment the Karsa adapter is reachable.
| Module | Implemented features | Contract it speaks |
|---|---|---|
| Command Center | Tracked-task and queue counters, configured-backend count, module count. Core-coverage cards linking each control-plane function. Use-case accelerator cards. Canvas bar chart of platform activity. Live operational event feed. Connection pill showing Local simulation, Adapter online · simulator unreachable, or Live control plane · n/m systems. | Aggregates from local state or /api/health |
| Task Management | Create a canonical task: name, workload type (Quantum Chip Task, Cluster Simulation, Classical Benchmark, Session-Based Task), backend selector across all six backends, priority. Live table with per-row action. Automatic lifecycle progression. Session grouping (SESS-nnnn). Cancellation. Task event log. Job cap of 60 with FIFO trim. |
MsgTask → MsgTaskAck → MsgTaskResult; status via the numeric TaskStatus enum |
| Resource Management | Health cards plus a 13-column inventory table: backend, system, qubits (available/total), Router and Pub port, max shots, native gate set, access mode, queue depth, utilisation, fidelity, latest calibration, scheduling state, action. Pause and resume scheduling. Manual M3 sampling utility. Optimal qubit block query. Resource log. | Mirrors ChipConfig/chip_config_mapping.json; maps to PilotOS §5.11–5.14 |
| Status Monitoring | Per-backend health grid, refresh control, queue and throughput trend chart, alert and event feed with severity classes, monitoring log. Consumes the four Pub topics as event classes. | task_status · probe · calibration_done · chip_protect |
| API Console | Endpoint selector grouped by system and port, with pattern, endpoint and message type readout; request and response payload panes; per-endpoint explanatory note including known defects; send button that replays a recorded payload offline and dispatches a real ZMQ message when live. Task-creating operations are marked so read-only queries no longer fabricate tasks. | 20 endpoints across Router 7000–7003, Pub 8000–8003, plus two error paths |
| Access & License | Provision a user or group with role and access profile; four seeded roles; remove an entry; licence verification returning the enabled feature set — Dashboard, Resource Management, Task Management, Queue Insight, API Management, Session Tasks. Governance log. Input validation with aria-invalid on empty submit. |
Wraps the PilotOS console's user and licence model with an enterprise layer |
aria-pressed stateBoth close gaps this brief identified in an earlier pass — a portfolio-scale HNDL engine and a working QKD protocol simulator — and both are live in the app today, not on the roadmap.
The inventory the platform serves, mirroring the bundled Python simulator's own chip configuration — qubit counts, shot ceilings and native gate sets are the values it actually returns.
| Backend | System | Router / Pub | Qubits | Max shots | Native gates | Access mode | Scheduling |
|---|---|---|---|---|---|---|---|
| Origin Wukong 72Q | superconducting | 7000 / 8000 | 60 / 72 | 20,000 | RPhi, CZ | Exclusive window available | ACTIVE |
| Superconducting_72_2 | superconducting | 7000 / 8000 | 60 / 72 | 20,000 | RPhi, CZ | Shared | ACTIVE |
| IonTrap | ion_trap | 7001 / 8001 | 6 / 6 | 10,000 | RPhi, MS | Token authenticated | ACTIVE |
| HanYuan_01 | neutral_atom | 7002 / 8002 | 225 / 225 | 20,000 | RPhi, CZ | Maintenance window | PAUSED |
| PQPUMESH8 | photonic | 7003 / 8003 | 3 / 3 | 100,000 | CZ, RPhi | Shared | ACTIVE |
| CPU Pool A | classical | — | — | — | N/A | Shared | ACTIVE |
Payloads in the console are not hand-written examples. They were captured from an actual run and are replayed offline, or dispatched for real when the adapter is present.
| Operation | System · port | Behaviour |
|---|---|---|
| MsgHeartbeat | superconducting · 7000 | Liveness; returns backend, timestamp, topic |
| MsgTask | superconducting · 7000 | Ack first, then MsgTaskResult with Key / ProbCount / NoteTime |
| TaskStatus | superconducting · 7000 | Query state — see the known-defect note |
| GetChipConfig | superconducting · 7000 | QubitCount, AvailableQubits, CLOPS, MaxShots, MaxClockCycle, BasicQGate, keyed by work area |
| GetUpdateTime | superconducting · 7000 | Per-qubit calibration timestamps |
| GetRBData | superconducting · 7000 | Single and double gate circuit depths and fidelities, per qubit and qubit pair |
| SetVip / ReleaseVip | superconducting · 7000 | Reserve and release an exclusive window |
| MsgGetToken | ion trap · 7001 | APPId / APIKey / APISecret → access and refresh tokens |
| MsgUpdateToken | ion trap · 7001 | Refresh an access token |
| MsgTask (OPENQASM) | neutral atom · 7002 | Header/Body form; HanYuan_01 at 225 qubits |
| Operation | System · port | Behaviour |
|---|---|---|
| MsgAtomConfig | neutral atom · 7002 | Documented but absent from the dispatch table — silently dropped |
| MsgTask | photonic · 7003 | PQPUMESH8, 3 qubits, 100,000 max shots |
| GetChipConfig | photonic · 7003 | Photonic chip architecture |
| task_status | Pub · 8000–8003 | Three-frame push: topic, operation, JSON. Observed PENDING → RUNNING → SUCCESSED |
| probe | Pub · 8000 | Qubit usage and worker-thread status |
| calibration_done | Pub · 8000 | Paired with calibration_start; drives the calibration feed |
| chip_protect | Pub · 8000 | Maintenance start/end → PAUSED state in Resource Management |
| Malformed payload | error path | UndefinedMsg, ErrCode 3 (JSON_ERROR) |
| Unknown ChipID | error path | ErrCode 2 (TASK_PARAM_ERROR) |
MsgType
produces no reply at all — which is a materially different client problem from an error response, and
exactly the kind of thing a contract explorer should make visible before someone writes a client against it.The adapter terminates the simulator's ZeroMQ Router and Pub sockets and re-exposes the same contract over HTTP and Server-Sent Events. It also serves the web application, so there is one process and one origin — no CORS, no second server to operate.
| GET /api/health | Boot probe, 1.5 s timeout. Returns adapter state and per-system connectivity |
| GET /api/backends | Live chip inventory |
| POST /api/task | Canonical submission — system, chipId, shots |
| GET /api/task/{id}?system= | Task status by system |
| POST /api/message | Arbitrary typed message, with a collect count |
| POST /api/message (raw) | Raw string — used to exercise the malformed-payload path |
| POST /api/token | Ion-trap token brokerage |
| GET /api/topics | Pub buffer: per-topic counts and recent frames |
| GET /api/events | SSE stream: task_status, probe, chip_update, calibration_start, calibration_done, chip_protect |
Every call is optional and failure is never fatal. That is a deliberate design property: a demonstration must not depend on a backend being reachable.
TaskId and task_id, and both ChipID and ChipId,
so queries resolve against the real server despite documented casing defects. The correct fix is upstream;
the shim exists so the browser sees a clean contract in the meantime and is scheduled for removal once the
simulator is patched at source.The simulator was validated against a live run, not against its README — reproducible with
verify_simulator.py.
Three of the defects would have blocked any real client. The source was deliberately left unmodified pending review.
| Severity | Defect | Consequence |
|---|---|---|
| Blocking | Client identity decoded as UTF-8 | Drops every request from a standard ZMQ client — including the simulator's own bundled test client. Nothing that speaks the protocol correctly can connect. |
| High | TaskStatus reads the wrong field | The server reads snake_case task_id; the documented TaskId query never resolves — returning NOTASK even for a task that just succeeded. |
| High | Ion trap auth rejects its own credentials | The handler reads a lowercase body with APPId / APIKey / APISecret. The documented Body / AppId / ApiKey form returns ErrCode 5 with the exact credentials the server expects. |
| Lower | Four further defects | Chip-ID casing inconsistency, one documented-but-unimplemented message (MsgAtomConfig), and two silent failure paths where an unknown message type produces no reply at all. |
The layer that actually protects traffic: a readiness scanner, a browser toolkit, and the pure-Rust library underneath both.
QryptOn is deliberately scoped to post-quantum cryptography rather than to security in general. It is the only layer in this brief that touches real cryptographic material.
The threat model, without hype. What Shor and Grover actually do, harvest-now-decrypt-later with a working Mosca calculator, the three finalised standards side by side, and the regulatory picture — each claim sourced, or explicitly marked as needing a source.
Local toolchain PQ scanner. A read-only POSIX shell script. Can the crypto libraries and CLI tools on this host negotiate post-quantum TLS and SSH today? Scored, capped, with confidence stated — and nothing leaves the machine by default.
Browser PQC toolkit. Generate a hybrid identity, password-protect it, encrypt to someone's public
key, sign and verify — all in WebAssembly on your own device, in the same file formats the
qrypt CLI reads and writes.
Scanning and scoring are plain shell logic — version parsing, grep,
and exit-code checks against openssl, curl, ssh, go, node and python3. No language model, no classifier, no
remote decision service at any step. Same host, same tools, same result, every time. The whole script is
wrapped in a function invoked on the last line, so a truncated download cannot run a partial check.
--online allows exactly one TLS probe, revealing this host's IP and nothing else--share — affirmative consent, fails closed with no terminal| Check | Category | Weight |
|---|---|---|
| kex.tls.openssl.groups | TLS | 40 |
| kex.ssh.client.mlkem | SSH | 15 |
| kex.tls.live.hybrid | TLS · negotiated | 12 |
| kex.ssh.client.effective | SSH | 10 |
| kex.tls.curl.pq | TLS · negotiated | 8 |
| kex.ssh.client.sntrup | SSH | 5 |
| runtime.go / node / python | Runtime | 4 / 3 / 3 |
| pki.signature.mldsa / slhdsa | Signatures | 0 · reported |
| hygiene.os / tls13 | Hygiene | 0 · reported |
--profile cnsa2 adds three unscored checks for ML-KEM-1024 and ML-DSA-87.| Tool | What it does |
|---|---|
| Generate identity | One identity bundles an encryption key (X25519 + ML-KEM-768) and a signing key (ML-DSA-65) — the same format qrypt keygen --alg qrypton-identity produces |
| Protect a key | Wrap a private bundle with a password using Argon2id + AEAD, with a live strength meter; unlocks protected keys too |
| Encrypt / decrypt | Hybrid X25519 + ML-KEM-768 seal to a public armor text; the recipient needs only their private key |
| Sign / verify | ML-DSA-65 detached signatures under FIPS 204, bound to a QryptOn identity |
| Component | Algorithm | Size |
|---|---|---|
| Encryption key | X25519 + ML-KEM-768 | 1184 B public |
| Signing key | ML-DSA-65 | 1952 B public |
| Signature | FIPS 204 | 3309 B |
| Password wrap | Argon2id + AEAD | — |
qrypt tool · C ABI bindingcargo-deny clean; documentation coverage enforced at compile time.
Dual-licensed Apache-2.0 OR MIT.NIST finalised three post-quantum standards in August 2024. This is what QryptOn actually implements — not every parameter set every standard defines.
| Standard | Algorithm | In use | Public key | Signature / ciphertext | Status |
|---|---|---|---|---|---|
| FIPS 203 | ML-KEM | ML-KEM-768 (cat. 3) | 1184 B | 1088 B ct | Live |
| FIPS 204 | ML-DSA | ML-DSA-65 (cat. 3) | 1952 B | 3309 B sig | Live |
| FIPS 205 | SLH-DSA | All 12 parameter sets | — | — | Library only |
| FIPS 206 (not yet drafted) | FN-DSA (Falcon) | — | — | — | Tracked |
| Round 4 selection | HQC | — | — | — | Tracked |
Every encryption operation combines X25519 with ML-KEM-768. The shared secret is compromised only if both components are broken, so the deployment loses nothing if an unknown weakness later appears on either side.
All 12 parameter sets are implemented, but the pure-Rust backend is still a release candidate. It is deliberately excluded from the WebAssembly build to keep the download small and the stability risk contained.
As of mid-2026 NIST has published no draft of FIPS 206 and has assigned no FIPS number to HQC. Anyone selling compliance with a standard that does not exist yet is telling you something useful about their other claims.
Attack by attack: which layer simulates it, which layer mitigates it, and which layer must not claim it.
Simulate and mitigate are different jobs and they land on different layers. Where a cell is empty that is a finding, not an omission.
| Attack | Origin PilotOS | Karsa Quantum OS | QryptOn | Net position |
|---|---|---|---|---|
| Harvest-now-decrypt-later | Batch orchestration of scenario sweeps across thousands of assets | Simulates. HNDL Batch & Vault Lab — portfolio exposure sweep across the asset inventory plus a synthetic harvest-snapshot generator, live in the app | Mitigates. Hybrid ML-KEM key exchange; scanner measures whether it is actually negotiated | Covered end to end |
| Shor — RSA factoring | Executes toy factorisations; supplies real backend constraints for resource estimation | Simulates. Demonstration and resource-estimation workflow, explicitly labelled | Mitigates. ML-KEM-768 replaces RSA key transport; ML-DSA-65 replaces RSA signatures | Covered |
| Shor — ECDLP | Same execution path; ECC circuits are smaller than RSA | Simulates. Must score ECDH assets distinctly from RSA — cheaper attack, higher urgency | Mitigates. Hybrid X25519 + ML-KEM-768 seal | Asset scoring needs ECC weighting |
| Grover | Search-circuit demonstrations at toy scale | Simulates. Correctly separates Grover from Shor in the risk model | Mitigates. AES-256 guidance; deliberately does not score symmetric crypto | Covered — and correctly de-prioritised |
| QKD implementation attacks | Orchestrates the workload. Photonic backend integration exists; no QKD application in the control plane itself | Simulates. QKD Security Lab — a real per-pulse BB84/decoy-state/E91/B92 Monte Carlo with channel, detector, and four Eve strategies, live in the app | Supplies the authenticated classical channel a real QKD link requires | Prototype built — external validation pending |
| Downgrade / hybrid stripping | — | Should surface fallback posture as an inventory attribute | Detects. --online completes a real TLS 1.3 handshake offering only X25519MLKEM768 — negotiated, not declared |
Covered by evidence classes |
| Trust anchor & code signing | — | Migration Optimizer already carries Core Banking PKI and HR Signature Workflow as assets | Reports ML-DSA and SLH-DSA availability; certificate-in-use analysis is on the roadmap | Partial — PKI depth still to come |
| Crypto-agility failure | — | Inventory, CBOM and approval workflow are Karsa-owned and named in the architecture map | --fail-under N exits non-zero for CI — the scan becomes a pipeline gate, not a report |
Covered, if operationalised |
Reuse the queueing and telemetry conventions; expose QKD-specific parameters and results. QKD is not modelled as an ordinary chip-compute task — and as of this build, the engine on the left is live.
| Repeatability | Seeded run reproduces sifted key and QBER exactly | PASS |
| Noise calibration | Baseline QBER follows the configured channel and detector model | PASS |
| Eve sensitivity | Intercept–resend raises QBER under controlled assumptions | PASS |
| Integration | Submit → queue → run → evidence through the adapter | PASS |
A capability that is overclaimed is worth less than one that is scoped honestly, because the overclaim invalidates everything next to it. These are the rules the product enforces.
May never claim
May never claim
May never claim
Zones, processes, ports and data flows — and four topologies, from one laptop to a sovereign installation.
The strongest architecture keeps the control plane generic and makes QKD, HNDL and PQC explicit domain services. That preserves backend portability and stops quantum-compute semantics being confused with cryptographic-protection semantics.
Three network zones and five process groups. The browser tier holds no credential and opens no socket to anything but the adapter.
localStorage under ksi_origin_*, shape-checked and reseeded on corruption/api/health /api/backends /api/task /api/message /api/token /api/topics/api/events — task_status, probe, chip_update, calibration_start, calibration_done, chip_protect| Component | Port | Protocol | Direction | Carries · notes |
|---|---|---|---|---|
| Karsa Adapter | 8080 (conv.) | HTTP | Browser → adapter | Static app, REST calls. Same origin as the app, so no CORS configuration is needed |
| Karsa Adapter | 8080 /api/events | SSE | Adapter → browser | Six Pub topics fanned out as named events. Browser reconnects automatically; a closed stream surfaces as degraded |
| Simulator · superconducting | 7000 / 8000 | ZMQ Router / Pub | Adapter ↔ simulator | MsgTask, TaskStatus, GetChipConfig, GetUpdateTime, GetRBData, SetVip, ReleaseVip, MsgHeartbeat |
| Simulator · ion trap | 7001 / 8001 | ZMQ Router / Pub | Adapter ↔ simulator | MsgGetToken, MsgUpdateToken, MsgTask. Token-authenticated access mode |
| Simulator · neutral atom | 7002 / 8002 | ZMQ Router / Pub | Adapter ↔ simulator | OPENQASM MsgTask with Header/Body envelope. Status enum extends with SUBMIT 9, FINISH 10, CANCEL 11 |
| Simulator · photonic | 7003 / 8003 | ZMQ Router / Pub | Adapter ↔ simulator | PQPUMESH8. The attachment point for a future QKD backend |
| Origin PilotOS console | 10020 | HTTP | Operator → PilotOS | Visual management console. Default admin / admin123 — change on first boot |
| Origin PilotOS API | 443 | HTTPS | Adapter → PilotOS | QCloudServer gateway. Token obtained from /management/pilotosmachinelogin with an API key |
| MySQL | 3306 | TCP | PilotOS → DB | Structured metadata. Must bind to a routable address — never 127.0.0.1, because the PilotOS image is isolated. Expect 26 tables after initialisation |
| MongoDB | 27017 | TCP | PilotOS → DB | Circuits and raw measurement results. Requires authorization: enabled and bindIp: 0.0.0.0 |
| SMTP | 465 | SMTPS | PilotOS → mail | Registration and chip event alerts. Required if multi-user registration is enabled |
| Licence verification | 443 | HTTPS | PilotOS → vendor | Outbound internet required. Expired licence suspends all functions — resolve before designing an isolated deployment |
| HSM / key vault | site-specific | PKCS#11 / REST | Security services → HSM | Private keys, trust anchors, machine identities. Never reachable from Zone A |
The contract does not change between these. That is the design property that makes a laptop demo and a sovereign installation the same system.
| Topology | What runs | Backends | Identity & secrets | Suitable for |
|---|---|---|---|---|
| T1 · Standalone | Browser only. python3 -m http.server 8080, or open the file directly |
None — seeded local state | None | Demonstration, training, offline review. No network dependency at all |
| T2 · Single-host lab | Adapter + simulator on one machine, one origin, one process to start | Four simulated systems on 7000–8003 | Localhost trust; no external credential | Development, contract verification, QKD and HNDL engine work. Where the security labs get built |
| T3 · Enterprise | Adapter and security workers behind a reverse proxy; PilotOS on its own host with MySQL and MongoDB; CPU pool for PQC and Monte Carlo | PilotOS-managed simulators, optional QPU, classical cluster | Enterprise SSO at the proxy; API keys and tokens in a vault; HSM for any real key material | Production migration programmes: inventory, batch exposure modelling, benchmark campaigns, evidence retention |
| T4 · Sovereign / isolated | Full T3, plus mirrored package repositories and an internal CA | On-premises PilotOS and simulators; QPU only if physically delivered | National PKI, on-premises HSM, no third-party dependency in the data path | Government and critical infrastructure. Requires resolving PilotOS licence activation, which needs outbound internet |
| Control | Layer | Requirement |
|---|---|---|
| Identity & authentication | Adapter | The prototype adapter is localhost-trusted with no authentication. Before any shared deployment: enterprise SSO at the proxy, per-user sessions, and multi-user session handling in the adapter. This is explicitly the top item on the "move beyond localhost" list. |
| Authorisation | Adapter | The four console roles — Tenant Admin, Operator, Developer, Auditor — are display state today. They must become enforced scopes at the adapter, because the browser cannot be trusted to enforce its own permissions. |
| Secret handling | Adapter · workers | PilotOS API keys, ion-trap APPId/APIKey/APISecret and database credentials live in a vault and are injected at runtime. Never in localStorage, never in the static bundle, never in a repository. |
| Key protection | External | HSM, key vault and PKI stay outside the platform. Private keys must not be in the business database — a rule the architecture map states explicitly and the deployment must enforce with network policy, not convention. |
| Workload isolation | Execution | PQC cryptographic operations run in isolated classical workers using approved libraries. The web process performs no cryptography, so a web-tier compromise yields no key material. |
| Idempotency & retry | Adapter | Canonical job IDs with idempotent submission. Error codes must be classified: 23 (backend send failure) is retryable; 25 (topology cannot execute this circuit) never is. Conflating them produces an infinite loop against an impossible task. |
| Evidence & audit | Adapter · PilotOS | Every security-relevant job keeps inputs, seed, backend, timestamps and outputs. PilotOS already provides tiered persistence — MySQL for metadata, MongoDB for payloads — and QCloudServer's task record supports full-lifecycle tracking and recovery. Use it rather than rebuilding it. |
| Safety labelling | Adapter · UI | Outputs carry their class — simulation, demonstration or resource estimate — through the API and into the UI. A label applied only at render time is a label that will eventually be lost in an export. |
| Egress control | Network | Zone A reaches only the adapter. Zone B reaches PilotOS, the HSM and the mirrors it needs. Zone C accepts no inbound connection from Zone A. PilotOS licence verification is the one documented outbound exception and must be explicitly allowed. |
What is built, what is next, and where every claim in this brief came from.
TaskId/task_id and ChipID/ChipId — exist only because the defects do, and every shim left in place is a divergence between what the contract says and what the client sends.Karsa Quantum OS simulates. QryptOn measures and protects. Origin PilotOS executes. The value is in keeping those three verbs separate — and in never claiming one when you have only done another.
Indonesia Quantum Computing and Security Forum · 2026 · Prototype and simulation only — no production system, production key, or real QPU is involved in anything shown in this brief.