
SRO PKCS11 – SSH Agent CNG est un agent Windows souverain, ultra‑léger et zéro‑dépendance qui unifie PKCS#11, SSH-agent, Pageant et CNG/Smartcard dans un seul binaire robuste. Pensé pour les environnements exigeants, il offre une cryptographie matérielle native, une isolation service/userland, un support complet smartcards.
Unification souveraine PKCS#11 + SSH-agent + Pageant + CNG/Smartcard
Un exécutable Windows unique qui unifie quatre fonctions traditionnellement séparées :
Souverain. Aucune dépendance au CRT. Toutes les opérations mémoire passent par RtlCopyMemory, RtlZeroMemory, RtlEqualMemory (FreeCRT.h). Unicode partout (Win32 natif). Aucun malloc, memcpy, strlen, printf.
Sécurisé. Les clés privées ne sont jamais exportées. Aucun PIN ne transite. CNG/KSP gère l'UI PIN native Windows. Isolation stricte service ↔ userland via pipes sécurisés.
Minimaliste. Un seul binaire. Aucune DLL externe. Pas de registry bloat. Installation simple (regsvr32 ou -install).
Polyvalent. Support simultané de PKCS#11, SSH-agent, Pageant, et WSL2 dans le même processus.
┌──────────────────────────────────────────────────────────────┐
│ Clients (Git, VS, WSL, OpenSSH, PuTTY, Firefox) │
└────────────────────────┬─────────────────────────────────────┘
│
┌───────────────┼───────────────┬─────────────────┐
│ │ │ │
SSH-agent Pageant (WM_COPYDATA) PKCS#11 WSL2 (TCP)
│ │ │ │
v v v v
┌──────────────────────────────────────────────────────────────┐
│ Service Stub (session 0, SYSTEM) │
│ - Accepte connexions sur \\.\pipe\openssh-ssh-agent │
│ - Crée pipe interne par client (GUID unique) │
│ - Lance helper userland avec token interactif │
│ - Forwarde messages sans manipuler de secrets │
└────────────────────────┬─────────────────────────────────────┘
│ lancé par le service
v
┌──────────────────────────────────────────────────────────────┐
│ Helper Userland (session interactive) │
│ - Connecte au pipe interne │
│ - Décode protocole SSH-agent/Pageant │
│ - Invoque CNG/KSP pour signature │
│ - UI PIN native Windows (pas de relay) │
│ - Renvoie signature au service │
│ - Fenêtre Pageant cachée pour WM_COPYDATA │
│ - Listener TCP 127.0.0.1:10022 pour WSL2 │
│ - Tray icon avec menu contextuel │
└────────────────────────┬─────────────────────────────────────┘
│
v
┌──────────────────────────────────────────────────────────────┐
│ CNG/KSP Backend │
│ - NCryptSignHash avec PKCS#1/PSS padding │
│ - Enumération certificats Windows Store │
│ - Filtrage SmartCardOnly / AllowedKSP │
│ - Support RSA + ECDSA (P-256, P-384, P-521) │
│ - Support EdDSA (Ed25519, Ed448) │
│ - Support Brainpool (P256r1, P384r1, P512r1) │
│ - Cache clés + providers (4h timeout) │
└──────────────────────────────────────────────────────────────┘
Chargé par :
ssh -I ssh-agent.exe user@hostpkcs11-tool --module ssh-agent.exe --list-objectsExpose les exports PKCS#11 standards :
C_Initialize, C_Finalize, C_GetInfoC_GetSlotList, C_GetSlotInfo, C_GetTokenInfoC_GetMechanismList, C_GetMechanismInfoC_OpenSession, C_CloseSession, C_Login, C_LogoutC_FindObjectsInit, C_FindObjects, C_FindObjectsFinalC_GetAttributeValueC_SignInit, C_SignC_VerifyInit, C_VerifyC_DecryptInit, C_DecryptC_GenerateRandom, C_SeedRandomMécanismes supportés (14 au total) :
CKM_RSA_PKCS (raw avec padding)CKM_RSA_X_509 (raw sans padding)CKM_SHA1_RSA_PKCS (legacy ssh-rsa)CKM_SHA256_RSA_PKCS (rsa-sha2-256)CKM_SHA384_RSA_PKCS (rsa-sha2-384)CKM_SHA512_RSA_PKCS (rsa-sha2-512)CKM_SHA256_RSA_PKCS_PSS (RSA-PSS SHA-256)CKM_SHA384_RSA_PKCS_PSS (RSA-PSS SHA-384)CKM_SHA512_RSA_PKCS_PSS (RSA-PSS SHA-512)CKM_ECDSA (raw)CKM_ECDSA_SHA1 (legacy)CKM_ECDSA_SHA256 (ecdsa-sha2-nistp256/384/521)CKM_ECDSA_SHA384CKM_ECDSA_SHA512ssh-agent.exe
\\.\pipe\openssh-ssh-agent en session utilisateurCompatible avec :
set SSH_AUTH_SOCK=\\.\pipe\openssh-ssh-agent)ssh-agent.exe -install
net start SROSSHAgentCNG
CreateProcessAsUserWAvantages :
ssh-agent.exe -useragent -pipe \\.\pipe\ssh-ksp-helper-{GUID}
Lancé automatiquement par le service :
NCryptSignHash (UI PIN native)regsvr32 ssh-agent.exe
Crée les clés :
HKLM\SOFTWARE\San@sro Inc\PKCS11-SSH-AgentHKCU\SOFTWARE\San@sro Inc\PKCS11-SSH-AgentHKCU\SOFTWARE\Mozilla\Firefox\PKCS11Modules\SROSSHAgentssh-agent.exe -install
net start SROSSHAgentCNG