12 Aug 2026Engineering

Keeping Watch Over Keys: Card-Check Ceremonies for Our Entrust nShield HSMs

The keys that sign OpenSSL releases live inside Entrust nShield HSMs, guarded by quorums of smart cards. This is why we check every card, every month, and the small tool we built to run the checks.

By Magdalena Zdunkiewicz7 min read

In September last year we announced that OpenSSL Corporation was moving its production code signing onto Entrust nShield 5c Hardware Security Modules. That integration is now live. Two network-attached units sit at the core of our signing infrastructure, in two separate locations, and the private keys we use to sign OpenSSL release artifacts are generated and held inside them. The keys cannot be copied, exported, or leaked, because they never exist outside the HSM in any readable form. That is the point of a hardware root of trust: the nShield 5s cryptographic module inside each 5c appliance holds a FIPS 140-3 Level 3 validation, and our units run in FIPS mode.

An Entrust nShield 5c HSM racked in a cabinet, front panel display lit
One of the two nShield 5c units. The keys inside never leave the hardware in readable form.

The first release signed through this infrastructure was openssl-3.1.9, released on 24 June 2026 to our support customers. The first public release signed this way ships on 25 August 2026.

Before the HSMs, our signing key was a file on a server. A well-protected file, but a file, and anyone who got far enough into the infrastructure could in principle have copied it and signed a rogue artifact with it. That risk is now closed. What remains is a different question: who is allowed to operate these devices, and how do we stop any single person, including us, from doing it alone?

Why no one can act alone

nShield HSMs protect administrative operations with smart cards split across a set of trusted custodians. Two kinds of card sets matter here:

  • An Administrator Card Set (ACS) authorizes administrative operations on the Security World itself: resetting devices, creating card sets, and other tasks at that level.
  • An Operator Card Set (OCS) authorizes use of the OpenPGP primary key: the long-term, certification-capable key that defines the identity of our signing certificate. The primary key never signs release artifacts directly; it is used solely to certify signing subkeys. Under our Release Artifacts Signing Policy, using it requires a 2-of-4 quorum of human-held cards. Day-to-day release signatures are produced by a signing subkey operated by the release automation, which does not require cards.

Neither set is held by one person. Each is split into N cards using a K-of-N quorum scheme and distributed among custodians, and no protected operation can proceed until a quorum of K cards has been presented. Nobody can use the primary key or reconfigure the Security World alone. The primary key's cards are distributed equally between people designated by the OpenSSL Foundation and people designated by the OpenSSL Corporation. The quorum exists to stop any one person acting alone and to survive the loss of a card; it is not designed to force both organisations into every operation.

Custodians do not need to stand next to the HSM to present a card. Entrust's Trusted Verification Device, a small card reader with a PIN pad, connects to a custodian's own computer and establishes a secure channel to the HSM over the network. Our last ceremony ran over a video call with every custodian remote except one, each presenting their card from their own desk.

Entrust nShield Trusted Verification Device, a small white card reader with a numeric keypad
The Trusted Verification Device, a card reader with a PIN pad. It connects to a custodian's own computer and reaches the HSM over a secure channel.

The quiet risk of quorum schemes

The quorum model removes the single point of compromise. It introduces a different exposure: cards get lost, damaged, or degrade sitting in storage, and custodians move on or forget passphrases they set once and never typed again.

The arithmetic is unforgiving. A K-of-N set can survive the loss of up to N minus K cards and still be reconstituted from the remainder. Lose one more and the set, and whatever it protects, cannot be recovered by anyone, ever. In a 3-of-5 set, for example, you can lose one or two cards and rebuild from the three that remain. Lose a third and there is no recovery path.

What would that mean for us in practice? Signing itself would keep working, because the signing subkey is operated by the release automation and does not require cards. But no primary-key or administrative operation would ever be possible again: no new signing subkeys certified, no new card sets, no changes. The only way forward would be rebuilding the Security World from scratch, generating new keys, and revoking and re-announcing the old ones. For PGP that is unpleasant. For Windows code signing it also means ordering a new extended validation certificate from a certificate authority, which takes time we would rather never need.

So the only real defence is finding a failing card before the count crosses the line, with time in hand to reissue it. Reissuing requires a full ACS quorum ceremony of its own. That is why we run card-check ceremonies monthly: scheduled sessions where every custodian in a set proves their card is present, readable, and opens with its passphrase. Every card, not just a quorum's worth, because the whole point is catching a problem while the set is still intact. Done well, a full check takes five to ten minutes.

Why we built our own tool

Entrust ships solid command-line tooling for administering nShield HSMs, but it is built for administrators sitting at the client host, not for a distributed group of custodians who each need to prove their own card works. Turning a routine, recurring check into "everyone gets SSH access and learns the CLI" did not scale, and it left us stitching together our own record of who checked in and when.

So we built a small internal web application that custodians use from an ordinary browser. It runs a ceremony against a chosen card set, and as each custodian presents their card the page updates live for everyone watching. When the ceremony finishes, it leaves a permanent audit record: which cards were checked, when, and by whom.

Card sets page listing three demo card sets with serial numbers, custodians, and labels
The card sets page. All custodian names, serials, and quorums shown are demo data.

Some notes on how it is built, for the curious:

  • It is a small Python service, one to two thousand lines on FastAPI, written in about a week. Python was the natural choice because Entrust provides a Python API for interacting with the HSMs.
  • Live status reaches the browser over server-sent events, so a ceremony reads like a shared checklist. When a custodian in one country inserts a card, everyone on the call sees it.
  • It talks to the HSM exclusively through Entrust's own supported client software. It never bypasses it or reimplements any cryptography.
  • It runs on the HSM's client host, so a card check never depends on, or interferes with, the network path used for actual signing.
  • It can do exactly one thing: check that a card is present and that its passphrase opens it. It cannot issue cards, create keys, or sign anything. Card issuance stays with Entrust's own tooling and a full quorum ceremony.
nShield Card-Check Ceremony — SequenceOne full monthly check: every custodian, every card loopbackground watcher (every few seconds) alt[passphrase correct] [passphrase incorrect] CEREMONY START Open ceremony page, select card set POST /ceremony/begin SSE: ceremony started, waiting for cards poll slot state slot state PER-CUSTODIAN CARD CHECK · REPEATS FOR EVERY CARD IN THE SET Insert card into reader Card present (serial number) Establish secure channel (verify HSM serial number) Channel established, dynamic slot associated Prompt: confirm HSM identity Confirm (OK) poll slot state card detected in slot SSE: card detected, request passphrase Show passphrase prompt Enter passphrase POST /verify {slot, passphrase} Verify card (check passphrase against card) Forward check over secure channel Attempt to unlock card with derived key Unlock succeeds Success Card verified OK Append audit record(pass) SSE: card OK Show “Card verified” Decrypt failed Failure Verification failed Append audit record(fail) SSE: card failed Show “Verification failed, try again” Remove card CEREMONY COMPLETION Repeats until every custodian's card in the sethas been checked SSE: ceremony complete, summary of results Show ceremony summary Custodian Smartcard TVD(Card Reader) Web Client(Browser) Web Server HSM(nShield 5c)
One card check, end to end: custodian, card, reader, browser, server, HSM.

The passphrase check happens inside the HSM itself. The application never sees or stores passphrases or key material; it holds only the custodian and card metadata and the audit log.

Modal dialog prompting for a card passphrase
The passphrase prompt. The check itself happens inside the HSM.
Ceremony page showing one of three cards verified with a live progress bar
A ceremony in progress. Everyone on the call sees each verification as it lands.

It is an internal tool today. Once it has had more field time and some planned hardening, we intend to open-source it, most likely under Apache 2.0 like the rest of our work. This looks like exactly the operational gap other teams running nShield HSMs with distributed custodians have hit too, and we would rather share the fix than have everyone build their own.

Audit log entry expanded to per-card results showing passes, one fail, and one card not checked
The audit log, demo data. A failed card and an early finish are exactly what the tool exists to surface.

If you run nShield HSMs and have never checked your cards, do it this week. Entrust's built-in tooling can do it without anything like our application. The worst time to discover a dead card is the moment you need it.

The bigger picture

None of this changes what the HSM already guarantees: the signing key never leaves it, and no single person can operate the Security World alone. What card-check ceremonies add is confidence that the quorum itself stays healthy over time, card by card, well before we would ever need to find out the hard way that it did not.

Product render of the Entrust nShield 5c, a 1U rack appliance
The Entrust nShield 5c.