This page is a practical guide for readers choosing a PKCS#11-compatible hardware token or Hardware Security Module (HSM) to use with Signotaur. It summarises the major options, their supported algorithms and certifications, and our recommendations — so a reader can make a defensible purchasing decision in a few minutes.
The page focuses on selection. For the mechanics of registering a hardware token with Signotaur after you have one, see Hardware Certificates (library.md). For the underlying fundamentals of code-signing certificates themselves, see Code Signing Certificates.
The recommendations on this page are framed for new purchases and renewals. If your existing token and certificate work today, they continue to work — plan any hardware migration to align with your next certificate renewal.
Three constraints narrow the field:
The formats Signotaur signs today and the key algorithm each accepts:
| Format | Key algorithm | Implication for token choice |
|---|---|---|
| Authenticode (EXE/DLL/MSI/SYS) | RSA or ECDSA (Windows 8+) | RSA is safest for broadest compatibility; ECDSA OK on modern Windows only |
Dual signing (--sha1) |
RSA only | ECDSA-only tokens cannot dual-sign — legacy Windows fallback breaks |
| ClickOnce / VSTO manifests | RSA only | No ECDSA path exists in the ClickOnce infrastructure |
| VSIX / OPC | RSA only | Microsoft's VSIXInstaller.exe rejects ECDSA signatures |
| NuGet packages | RSA only | The NuGet package-signing specification mandates RSA |
| RDP files | RSA only | rdpsign.exe/mstsc.exe has no documented or validated ECDSA support |
CMS (.mobileconfig, .p7s, etc.) |
RSA or ECDSA | RSA safest for broadest client compatibility |
Bottom line for buyers today: pick a token that supports RSA at 3072 bits or larger. ECDSA-only tokens cannot sign five of the seven formats above. This is a snapshot of current requirements — if Signotaur adds formats in future that natively use ECDSA or Ed25519 (for example Linux kernel module signing, SSH signatures, or Ed25519-based container signing), we'll revise the guide. In the meantime, RSA 3072+ is the universal fallback that covers every current and almost every plausible future signing format.
We explicitly test a subset of the devices listed below with Signotaur. For the rest, our assessment is based on the token's PKCS#11 specification compliance and public documentation — Signotaur communicates with any token through the standard PKCS#11 interface, so a device that passes PKCS#11 conformance should work, but we haven't exercised it end-to-end.
Each per-product section below is tagged with its testing status. If you deploy Signotaur with a "not tested" device and hit issues, we're keen to hear about it — please reach out so we can reproduce and, where appropriate, add the device to the tested list.
Testing status: ✅ Tested by VSoft with Signotaur.
Thales SafeNet eToken 5110+ and eToken 5300 are FIPS 140-2 Level 2 or Level 3 certified PKCS#11 tokens, available with Common Criteria EAL 6+ secure elements. They support RSA up to 4096 bits and ECDSA up to P-521. DigiCert, Sectigo, GlobalSign, and Entrust commonly ship these tokens pre-loaded with EV code-signing certificates.
Pros:
eTPKCS11.dll) is mature and well-supported.Cons:
PKCS#11 library path (Windows, typical): C:\Windows\System32\eTPKCS11.dll
Testing status: ✅ Tested by VSoft with Signotaur.
The YubiKey 5 FIPS Series currently shipping at retail is FIPS 140-2 Level 2 certified on firmware 5.4. At that firmware level, the token supports RSA 2048 and ECDSA (P-256, P-384), but does not support RSA 3072 or RSA 4096. This makes it unsuitable for obtaining a new publicly-trusted code-signing certificate, which today must use RSA 3072+.
If a code-signing certificate is already installed on a YubiKey 5 FIPS running firmware 5.4, the device remains fully functional for signing with Signotaur and no immediate migration is required. The caveat kicks in at renewal time: your CA will require RSA 3072 or larger for the new certificate, and the fw 5.4 YubiKey cannot generate that key. Plan to migrate to a different FIPS-certified device (SafeNet eToken 5110+/5300 or YubiHSM 2 FIPS) before your current certificate expires.
Yubico has submitted firmware 5.7.4 (which does support RSA 3072/4096) to NIST's Cryptographic Module Validation Program for FIPS 140-3 Overall Level 2 / Physical Level 3 certification. As of April 2026 that validation is still in the CMVP queue — no firmware 5.7+ FIPS-certified YubiKey is available for purchase.
Pros:
ykcs11.dll from Yubico.Cons:
PKCS#11 library path (Windows): ykcs11.dll (installed with the Yubico PIV Tool)
Testing status: ✅ Tested by VSoft with Signotaur (same hardware family as the FIPS variant, firmware differences exercised separately).
The standard (non-FIPS) YubiKey 5 on firmware 5.7 adds RSA 3072 and RSA 4096 support along with Ed25519 and X25519. It's a good token for internal code-signing where FIPS isn't a compliance requirement, but it cannot be used to obtain a publicly-trusted EV code-signing certificate because it doesn't meet the CA/B Forum FIPS 140-2 Level 2 hardware rule.
Testing status: ✅ Verified in production by a Signotaur customer.
Certum ships a proprietary smart card with its EV code-signing certificates, aimed at the Polish and broader European market. It supports RSA up to 4096. Public FIPS/CC certification documentation is thin compared to the Thales and Yubico lines; if you're buying a Certum certificate this is typically what you'll receive, and it works with Signotaur via Certum's crypto3PKCS.dll. Outside of that bundled-cert use case there's little reason to choose it over a SafeNet eToken.
Testing status: ✅ Verified in production by a Signotaur customer.
The YubiHSM 2 is a compact USB-form-factor HSM from Yubico — a separate product line from the YubiKey 5 authenticator tokens above. The YubiHSM 2 FIPS variant is FIPS 140-2 Level 3 certified (a step above the Level 2 certification of the smart-card-class tokens) and supports RSA 2048/3072/4096, ECDSA (P-224/P-256/P-384/P-521), Ed25519, and secp256k1. It stores up to ~127 keys in a nano form factor and is designed for server-side signing workloads rather than per-user authentication — which makes it a natural fit for a Signotaur deployment.
Pros:
Cons:
yubihsm-shell — less polished than enterprise HSM admin consoles.PKCS#11 library path (Windows): yubihsm_pkcs11.dll (installed with the YubiHSM 2 SDK; configuration file yubihsm_pkcs11.conf points the library at the connected device).
Testing status: ⚠ Not tested by VSoft. Expected to work via the standard PKCS#11 interface.
A rackmounted network HSM. Luna 7 is the first HSM family to achieve FIPS 140-3 Level 3 validation. Supports every relevant algorithm (RSA 2048/3072/4096, ECDSA, post-quantum candidates) and is the default pick for enterprise PKI.
Pros:
Cons:
Testing status: ⚠ Not tested by VSoft. Expected to work via the standard PKCS#11 interface.
Entrust nShield 5c is FIPS 140-3 Level 3 certified and explicitly positioned for code-signing workloads. nShield Connect (the predecessor) is still widely deployed at FIPS 140-2 Level 3. Both expose PKCS#11 via the Security World client software.
Cloud HSMs give you a FIPS-certified key store without managing physical hardware. Signotaur can talk to them through the vendor's PKCS#11 library, the same way it talks to a USB token — you simply point the Library path at the cloud client library instead of a local DLL.
Testing status: ⚠ Not tested by VSoft. Expected to work via the standard PKCS#11 interface provided by the AWS CloudHSM Client SDK.
FIPS 140-2 Level 3 certified (Thales Luna HSM backend). Single-tenant or cluster-managed. PKCS#11 via the AWS CloudHSM Client SDK.
Testing status: ⚠ Not tested by VSoft. Expected to work via the standard PKCS#11 interface provided by the Luna client.
FIPS 140-2 Level 3 (Thales Luna backend, managed by Microsoft). PKCS#11 via the Luna client installed alongside Signotaur.
Important distinction: Azure Dedicated HSM exposes PKCS#11. Azure Managed HSM and Azure Key Vault do NOT expose PKCS#11 — they're REST-only services. If you want to use Signotaur with Azure-hosted keys via PKCS#11, you need Dedicated HSM, not Key Vault.
Testing status: ⚠ Not tested by VSoft. Expected to work via the standard PKCS#11 interface provided by Google's Cloud KMS PKCS#11 library.
FIPS 140-2 Level 3. Multi-tenant with optional single-tenant pricing. PKCS#11 is available through Google's Cloud KMS PKCS#11 library.
Testing status: ⚠ Not tested by VSoft. Expected to work via OpenSC's opensc-pkcs11.dll PKCS#11 module.
Based on the NXP JCOP 4 secure element, which carries Common Criteria EAL 6+ certification at the chip level. Supports RSA up to 4096, ECDSA P-256/P-384/P-521. The Nitrokey HSM 2 is not itself a FIPS-certified product, so public CAs will not accept it as the key-storage device for an EV code-signing certificate.
Good choice for internal PKI or research environments where you want an open-source token without vendor lock-in. On Windows it is driven via OpenSC's opensc-pkcs11.dll.
Testing status: ⚠ Not tested by VSoft. Expected to work via OpenSC's PKCS#11 module.
Similar story to Nitrokey HSM 2 — modest cost, RSA up to 4096, ECDSA up to 521, accessed via OpenSC. No FIPS certification. Popular with some European CAs as a bundled token.
| Token / HSM | Tested by VSoft | FIPS / CC | RSA 3072 | Public CS | Internal | Typical Cost | Notes |
|---|---|---|---|---|---|---|---|
| Thales SafeNet eToken 5110+ / 5300 | ✅ | FIPS 140-2 L2 (L3 available) | Yes | ✅ Recommended | ✅ | ~ USD 60–100 | CA-bundled standard. |
| YubiKey 5 FIPS (fw 5.4) | ✅ | FIPS 140-2 L2 | No | ❌ new certs | ✅ | ~ USD 75 | Existing certs keep working; fails CA/B for new certs/renewals (no RSA 3072). |
| YubiKey 5 non-FIPS (fw 5.7) | ✅ | — | Yes | ❌ | ✅ | ~ USD 50 | Internal only; not FIPS-certified. |
| Certum ProID+ | ✅ (customer, production) | Limited public docs | Yes | ⚠ Certum only | ✅ | Bundled | Comes with Certum certificates. |
| YubiHSM 2 FIPS | ✅ (customer, production) | FIPS 140-2 L3 | Yes | ✅ | ✅ | ~ USD 650 | Compact server-side HSM. |
| Thales Luna Network HSM 7 | ⚠ Not tested | FIPS 140-3 L3 | Yes | ✅ | ✅ | Enterprise | First FIPS 140-3 L3 HSM; enterprise standard. |
| Entrust nShield 5c | ⚠ Not tested | FIPS 140-3 L3 | Yes | ✅ | ✅ | Enterprise | Purpose-built for code-signing. |
| AWS CloudHSM | ⚠ Not tested | FIPS 140-2 L3 | Yes | ✅ | ✅ | Cloud hourly | Single-tenant, pay-per-hour. |
| Azure Dedicated HSM | ⚠ Not tested | FIPS 140-2 L3 | Yes | ✅ | ✅ | Cloud hourly | Luna backend. Not Azure Key Vault / Managed HSM. |
| Google Cloud HSM | ⚠ Not tested | FIPS 140-2 L3 | Yes | ✅ | ✅ | Cloud hourly | PKCS#11 via Cloud KMS. |
| Nitrokey HSM 2 | ⚠ Not tested | CC EAL 6+ (chip) | Yes | ❌ | ✅ | ~ USD 90 | Internal only; not product-level FIPS. |
| SmartCard-HSM (CardContact) | ⚠ Not tested | — | Yes | ❌ (except some EU CAs) | ✅ | ~ USD 35 | Internal or EU-CA bundle. |
The Signotaur server currently runs on Windows only. Every token and HSM listed above ships a supported Windows PKCS#11 library (.dll), and all of our testing is on Windows. SafeNet, YubiKey, Certum, Nitrokey, and each of the enterprise and cloud HSMs provide signed Windows installers and driver tooling that work with Signotaur out of the box.
Signotaur server support for Linux is planned for a future release. Once available, PKCS#11 libraries for most of these tokens and HSMs exist on Linux too (typically as .so files), so choosing a token now does not lock you out of a future Linux migration. We'll update this guide with platform-specific driver notes when Linux server support ships.
.dll must be present on the Signotaur server and reachable by the Signotaur service account. For cloud HSMs this means installing the vendor's Windows client library on the server host first. (When Linux server support ships, .so files will apply too.)The format set Signotaur signs today is RSA-centric. If and when we add Linux kernel module signing, macOS codesign support, container image signing, or Ed25519-based formats, the token requirements may change — some of those accept ECDSA or Ed25519 keys that an RSA-only token can't produce. We'll revise this guide when that happens. For today's purchase decisions, choose RSA 3072+: that choice covers every currently supported format and remains the universally-accepted fallback for any plausible future one.