
SRO PKCS11 – SSH Agent CNG एक संप्रभु, अल्ट्रा-लाइटवेट और शून्य-निर्भरता वाला विंडोज एजेंट है जो PKCS#11, SSH-एजेंट, Pageant और CNG/स्मार्टकार्ड को एक मजबूत बाइनरी में एकीकृत करता है। मांग वाले वातावरण के लिए डिज़ाइन किया गया, यह देशी हार्डवेयर क्रिप्टोग्राफी, सेवा/यूज़रलैंड आइसोलेशन और स्मार्टकार्ड का पूर्ण समर्थन प्रदान करता है।
संप्रभु एकीकरण PKCS#11 + SSH-agent + Pageant + CNG/Smartcard
एक एकल Windows निष्पादन योग्य जो चार पारंपरिक रूप से अलग कार्यों को एकीकृत करता है:
संप्रभु. CRT पर कोई निर्भरता नहीं। सभी मेमोरी संचालन RtlCopyMemory, RtlZeroMemory, RtlEqualMemory (FreeCRT.h) के माध्यम से होते हैं। हर जगह यूनिकोड (नेटिव Win32)। कोई malloc, memcpy, strlen, printf नहीं।
सुरक्षित. निजी कुंजियाँ कभी निर्यात नहीं की जातीं। कोई PIN प्रेषित नहीं होता। CNG/KSP मूल Windows PIN UI का प्रबंधन करता है। सुरक्षित पाइपों के माध्यम से सेवा ↔ उपयोगकर्ता क्षेत्र का सख्त पृथक्करण।
न्यूनतम. एक एकल बाइनरी। कोई बाहरी DLL नहीं। कोई रजिस्ट्री ब्लोट नहीं। सरल स्थापना (regsvr32 या -install).
बहुमुखी. एक ही प्रक्रिया में PKCS#11, SSH-agent, Pageant, और WSL2 का एक साथ समर्थन।
┌──────────────────────────────────────────────────────────────┐ │ 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) │ └──────────────────────────────────────────────────────────────┘
---
## निष्पादन मोड
### 1. PKCS#11 मोड (स्वचालित)
द्वारा लोड किया गया:
- `ssh -I ssh-agent.exe user@host`
- `Firefox (सुरक्षा उपकरण → PKCS#11 मॉड्यूल लोड करें)`
- `pkcs11-tool --module ssh-agent.exe --list-objects`
मानक PKCS#11 निर्यात को उजागर करता है:
- `C_Initialize`, `C_Finalize`, `C_GetInfo`
- `C_GetSlotList`, `C_GetSlotInfo`, `C_GetTokenInfo`
- `C_GetMechanismList`, `C_GetMechanismInfo`
- `C_OpenSession`, `C_CloseSession`, `C_Login`, `C_Logout`
- `C_FindObjectsInit`, `C_FindObjects`, `C_FindObjectsFinal`
- `C_GetAttributeValue`
- `C_SignInit`, `C_Sign`
- `C_VerifyInit`, `C_Verify`
- `C_DecryptInit`, `C_Decrypt`
- `C_GenerateRandom`, `C_SeedRandom`
**समर्थित तंत्र (कुल 14):**
- `CKM_RSA_PKCS` (पैडिंग के साथ raw)
- `CKM_RSA_X_509` (पैडिंग के बिना raw)
- `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_SHA384`
- `CKM_ECDSA_SHA512`
### 2. एजेंट यूज़रलैंड मोड (स्टैंडअलोन)```bash
ssh-agent.exe
\\.\pipe\openssh-ssh-agent बनाता हैसंगत है :
set SSH_AUTH_SOCK=\\.\pipe\openssh-ssh-agent)ssh-agent.exe -install net start SROSSHAgentCNG
- सत्र 0 (SYSTEM) में चलता है
- वैश्विक पाइप पर कनेक्शन स्वीकार करता है
- प्रति क्लाइंट आंतरिक पाइप बनाता है (SID द्वारा सुरक्षित)
- `CreateProcessAsUserW` के साथ userland हेल्पर लॉन्च करता है
- संदेशों को सीक्रेट्स को छुए बिना अग्रेषित करता है
- 4h टाइमआउट के साथ हेल्पर्स का पूल (स्वचालित पुन: उपयोग)
- पूल भरा होने पर LRU निष्कासन
**लाभ :**
- उपयोगकर्ता सत्र में UI PIN (सत्र 0 में नहीं)
- कठोर वातावरण के साथ संगत
- सेवा ↔ क्रिप्टो के बीच सख्त पृथक्करण
- बहु-उपयोगकर्ता मल्टीप्लेक्सिंग
### 4. सहायक क्रिप्टो userland मोड```bash
ssh-agent.exe -useragent -pipe \\.\pipe\ssh-ksp-helper-{GUID}
सेवा द्वारा स्वचालित रूप से लॉन्च किया गया:
NCryptSignHash को आमंत्रित करता है (मूल PIN UI)regsvr32 ssh-agent.exe
कुंजियाँ बनाएँ :
- `HKLM\SOFTWARE\San@sro Inc\PKCS11-SSH-Agent`
- `HKCU\SOFTWARE\San@sro Inc\PKCS11-SSH-Agent`
- `HKCU\SOFTWARE\Mozilla\Firefox\PKCS11Modules\SROSSHAgent`
### विंडोज सेवा स्थापित करें```bash
ssh-agent.exe -install
net start SROSSHAgentCNG