An open-source PKCS#11 v3.2 cryptographic module under Simorgh Labs
English version:
EAL4_PLUS.md. In case of discrepancy, the English version prevails.
Nom de la TOE : FreeHSM Cryptographic Module Version : 1.0.0-FIPS EAL cible : EAL4 augmenté de ALC_FLR.2 (remédiation de défauts) et AVA_VAN.5 (analyse avancée de vulnérabilités) Profil de protection revendiqué : eIDAS QSCD (EN 419211-2) ou cPP for Cryptographic Modules (NIAP, dès publication)
La TOE est un module cryptographique logiciel (« Soft HSM ») fournissant des services PKCS#11 v3.2 aux applications. Elle est livrée sous la forme d’un seul objet partagé libfreehsm.so plus le fichier de configuration freehsm.conf. Elle dépend du provider FIPS d’OpenSSL 3.x, traité comme module évalué séparément dans le même environnement opérationnel.
getrandom, memfd_secret, prctl)| Identifiant | Énoncé |
|---|---|
| O.CRYPTO | La TOE doit fournir des services cryptographiques utilisant uniquement les primitives FIPS-validées chargées depuis le provider FIPS OpenSSL. |
| O.AUTH | La TOE doit authentifier les opérateurs (CO, USER) avant tout accès au matériel de clé privée. |
| O.AUDIT | La TOE doit enregistrer les événements pertinents pour la sécurité dans un log append-only résistant à l’insertion, à la suppression et à la modification par un attaquant sans la clé MAC d’audit. |
| O.SSP | La TOE doit protéger les SSP (DEKs, clés privées, PINs) de la divulgation non autorisée durant l’opération et à la terminaison (zéroisation). |
| O.SELFTEST | La TOE doit exécuter des auto-tests pré-opérationnels et conditionnels ; en cas d’échec, la TOE doit entrer dans un état ERROR irrécouvrable. |
| O.ROLE_SEP | La TOE doit imposer la séparation entre rôles CO et USER : seul le CO peut ré-initialiser le token ou déverrouiller un PIN USER ; seul le propriétaire du rôle peut changer son propre PIN. |
| Identifiant | Énoncé |
|---|---|
| OE.OS | L’OS opérationnel doit fournir l’isolation de processus (pas de ptrace depuis un autre UID) et la capacité mlock. |
| OE.STORAGE | Le système de fichiers stockant les tokens doit fournir un remplacement atomique (rename + fsync). |
| OE.OPENSSL | Le provider FIPS OpenSSL doit être installé, validé et en mode approuvé. |
| OE.OP | Les opérateurs doivent protéger leurs credentials d’authentification (PIN) et ne pas se connecter via un canal non fiable. |
| OE.PHYS | L’hôte doit être physiquement protégé contre les accès non autorisés (salle serveur ou équivalent). |
fhsm_audit_event_t (cf. include/fhsm_audit.h).FHSM_EV_GENERATE_KEY / _KEYPAIR.OPENSSL_secure_clear_free lors de C_DestroyObject, C_Logout, C_Finalize, ou verrouillage.FIPS_140_3.fr.md.FIPS_140_3.fr.md.CKA_PRIVATE, CKA_SENSITIVE, CKA_EXTRACTABLE et le rôle authentifié.C_UnwrapKey positionne CKA_LOCAL = false ; les imports passent par le même contrôle d’accès.C_DestroyObject sont irrécupérables.C_GetTokenInfo est le seul service public appelable avant C_Login.C_Login via le flag CKU_*.C_InitToken et C_SetPIN sur le PIN USER.C_Initialize.C_Logout et C_CloseSession zéroïsent les secrets de session.| Sous-système | Fichier(s) | TSFI exposé |
|---|---|---|
| State machine | src/fhsm_state.c |
(interne uniquement) |
| Secure memory | src/fhsm_memory.c |
(interne uniquement) |
| Primitives crypto | src/fhsm_crypto.c + kat/ |
(interne uniquement) |
| Token store | src/fhsm_token.c |
(interne uniquement) |
| Session table | src/fhsm_session.c |
(interne uniquement) |
| Audit log | src/fhsm_audit.c |
(interne uniquement) |
| Façade PKCS#11 | src/fhsm_pkcs11.c |
C_* (PKCS#11 v3.2 complet) |
La TSFI est exclusivement l’ensemble des symboles C_* exportés par libfreehsm.so. Tous les autres symboles sont cachés par -fvisibility=hidden et le script de version du linker.
afchine-pubkey.asc ; un trousseau docs/keys/dev-pubkeys.gpg a été nommé
ici comme forme future à plusieurs mainteneurs et n’a jamais été écrit,
puisqu’il n’y en a qu’un.Dockerfile.build épinglé (Debian 12 + OpenSSL 3.x).cppcheck + clang-tidy.security@freehsm.example (empreinte de clé PGP à compléter).gcc ≥ 12.0 ou clang ≥ 15.0 avec le jeu de flags défini dans Makefile.valgrind --tool=memcheck, valgrind --tool=helgrind, ASAN, UBSAN.La TOE est conçue pour résister à des attaquants avec potentiel d’attaque au-dessus du Haut (Beyond-High), la cible AVA_VAN.5. Preuves :
La TOE est livrée sous forme d’archive source .tar.xz signée (make dist) et un package binaire RPM/DEB compilé reproductiblement. Les deux bundles sont signés par la même clé GPG. Les clients vérifient la signature et l’empreinte SHA-256 publiée sur le site du projet via HTTPS.
Le rafraîchissement pré-soumission CST ajoute 4 TSF transverses qui complètent la couverture fonctionnelle EAL4+ :
| Identifiant TSF | Famille | Description | Source |
|---|---|---|---|
| FCS_RBG_EXT.1 | FCS (Support cryptographique) | DRBG durci avec seed multi-source (getrandom + RDRAND + /dev/urandom + jitter TSC), conditionneur SHA-384 selon SP 800-90C, health tests NIST SP 800-90B (RCT, APT, CRNGT), reseed auto 1 MiB ou 1 h. | src/fhsm_drbg.c, include/fhsm_drbg.h, RNG.md |
| FCS_CKM_EXT.4 | FCS | Pair-wise consistency check post C_GenerateKeyPair (RSA, EC, ML-KEM, ML-DSA, SLH-DSA). Échec → ERROR latché + refus de persister. Conforme FIPS 140-3 §7.10.2.b. |
src/fhsm_pairwise.c, include/fhsm_pairwise.h |
| FPT_TST_EXT.1 | FPT (Protection des TSF) | Sealing TPM 2.0 de la DEK par token (opt-in via FHSM_TPM_SEALING=1). DEK liée aux PCR 0-7 de la chaîne de boot. Mismatch à l’unseal traité comme PIN incorrect (résistance aux oracles). |
src/fhsm_token_tpm.c, src/fhsm_tpm.c |
| FMT_SMR_EXT.1 | FMT (Gestion sécurité) | Bascule mode runtime entre permissive (défaut) et strict via env FHSM_MODE ou directive mode = ; les anciennes orthographes legacy et fips restent acceptées. Permet à un binaire unique de satisfaire l’évaluateur FIPS 140-3 ET les opérateurs qui ont besoin d’interopérer avec des systèmes anciens. |
src/fhsm_mode.c, src/dispatch/fhsm_dispatch_legacy.c |
| Interface externe | TSF couvertes |
|---|---|
C_GenerateKeyPair |
FCS_CKM_EXT.4 (pair-wise check) + FCS_CKM.1 existante |
Tout consommateur de fhsm_rng_bytes |
FCS_RBG_EXT.1 (RCT + APT + CRNGT) |
fhsm_token_init / fhsm_token_login |
FPT_TST_EXT.1 (sealing TPM optionnel) |
Tout appel C_* de mécanisme |
FMT_SMR_EXT.1 (dispatch mode-dépendant) |