Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
PKCS11SSHAgent — SRO PKCS11 – SSH Agent CNG 是一款自主、超轻量级、零依赖的 Windows 代理,它将 PKCS#11、SSH-agent、Pageant 和 CNG/智能卡统一在一个健壮的单一二进制文件中。专为要求苛刻的环境设计,提供原生硬件加密、服务/用户态隔离、完整智能卡支持。 | Kitploit
工具/GitHubGitHub/sanmilie/pkcs11sshagent
加密/解密工具密码学硬件安全实用工具与框架身份与访问管理 (IAM)身份验证
GitHubsanmilie/pkcs11sshagent

PKCS11SSHAgent

SRO PKCS11 – SSH Agent CNG 是一款自主、超轻量级、零依赖的 Windows 代理,它将 PKCS#11、SSH-agent、Pageant 和 CNG/智能卡统一在一个健壮的单一二进制文件中。专为要求苛刻的环境设计,提供原生硬件加密、服务/用户态隔离、完整智能卡支持。

查看仓库
2456个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
网站

SRO PKCS11 – SSH Agent CNG

兼容性 内存服务 内存代理 稳定性 GitHub release

主权统一 PKCS#11 + SSH-agent + Pageant + CNG/智能卡

一个独特的 Windows 可执行文件,统一了传统上分离的四种功能:

  • 完整的 PKCS#11 模块(Firefox、OpenSC、ssh -I)
  • 兼容 OpenSSH/Git/VS/WSL 的 SSH 代理
  • 兼容 PuTTY/plink/pscp 的 Pageant 服务器
  • 用于智能卡的安全 CNG/KSP 编排器

目录

  1. 哲学
  2. 架构
  3. 执行模式
  4. 安装
  5. 配置
  6. 支持的协议
  7. PIN 管理
  8. CNG 后端
  9. 安全
  10. 兼容性
  11. 公钥导出
  12. 托盘图标
  13. WSL2 支持
  14. 冲突检测
  15. 依赖项
  16. 已知限制
  17. 路线图

哲学

主权。 不依赖 CRT。所有内存操作均通过 RtlCopyMemory、RtlZeroMemory、RtlEqualMemory(FreeCRT.h)。全局 Unicode(原生 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) │ └──────────────────────────────────────────────────────────────┘

root@kitploit:~
## 执行模式

### 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`(原始带填充)
- `CKM_RSA_X_509`(原始无填充)
- `CKM_SHA1_RSA_PKCS`(遗留的 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`(原始)
- `CKM_ECDSA_SHA1`(遗留)
- `CKM_ECDSA_SHA256`(ecdsa-sha2-nistp256/384/521)
- `CKM_ECDSA_SHA384`
- `CKM_ECDSA_SHA512`

### 2. 用户态代理模式(独立)```bash
ssh-agent.exe
  • 创建用户会话中的管道 \\.\pipe\openssh-ssh-agent
  • 实现 SSH-agent 协议
  • 支持多客户端(最多 16 个并发连接)
  • 自动启动 Pageant 服务器
  • 自动启动 WSL2 监听器(127.0.0.1:10022)
  • 直接使用 CNG/KSP(非服务模式)
  • 在当前会话中显示 PIN 界面
  • 可选 PIN 缓存(可配置)
  • 系统托盘图标,实时统计信息

兼容:

  • Git for Windows(set SSH_AUTH_SOCK=\\.\pipe\openssh-ssh-agent)
  • Visual Studio
  • WSL(通过 npiperelay 或 socat)
  • WSL2(通过 TCP 127.0.0.1:10022)
  • OpenSSH for Windows
  • PuTTY、plink、pscp、psftp(通过 Pageant)

3. 服务存根模式```bash

ssh-agent.exe -install net start SROSSHAgentCNG

root@kitploit:~
- Tourne en session 0 (SYSTEM) -> 在会话0(SYSTEM)中运行
- Accepte les connexions sur pipe global -> 接受全局管道上的连接
- Crée un pipe interne par client (sécurisé par SID) -> 为每个客户端创建内部管道(通过SID保护)
- Lance un helper userland avec `CreateProcessAsUserW` -> 使用 `CreateProcessAsUserW` 启动用户态助手
- Forwarde les messages sans toucher aux secrets -> 转发消息而不触及秘密
- Pool de helpers avec timeout 4h (réutilisation automatique) -> 助手池,超时4小时(自动重用)
- Éviction LRU si pool plein -> 如果池满则LRU逐出

**Avantages :**
- UI PIN dans la session utilisateur (pas en session 0) -> 用户会话中的UI PIN(而非会话0)
- Compatible environnements durcis -> 兼容加固环境
- Isolation stricte service ↔ crypto -> 服务与加密的严格隔离
- Multiplexage multi-utilisateurs -> 多用户复用

### 4. Mode helper crypto userland -> ### 4. 用户态加密助手模式```bash
ssh-agent.exe -useragent -pipe \\.\pipe\ssh-ksp-helper-{GUID}

由服务自动启动:

  • 连接到内部管道
  • 处理 SSH-agent/Pageant 请求
  • 调用 NCryptSignHash(本地 PIN 界面)
  • 将签名返回给服务
  • 启动 Pageant(隐藏窗口)
  • 启动 WSL2 监听器 (127.0.0.1:10022)
  • 显示托盘图标(服务模式)
  • 超时或断开连接后终止

安装

注册为 PKCS#11 模块```bash

regsvr32 ssh-agent.exe

root@kitploit:~
创建密钥:
- `HKLM\SOFTWARE\San@sro Inc\PKCS11-SSH-Agent`
- `HKCU\SOFTWARE\San@sro Inc\PKCS11-SSH-Agent`
- `HKCU\SOFTWARE\Mozilla\Firefox\PKCS11Modules\SROSSHAgent`

### 安装 Windows 服务```bash
ssh-agent.exe -install
net start SROSSHAgentCNG

配置WSL2

添加到 ~/.bashrc 或 ~/.zshrc :```bash

--- Pont SSH Agent Windows (TCP -> Unix Socket) ---

export SSH_AUTH_SOCK="$HOME/.ssh/agent.sock"

Vérifier si le socket est déjà géré par un socat actif

if ! pgrep -u $USER socat > /dev/null || [ ! -S "$SSH_AUTH_SOCK" ]; then # Nettoyage préventif rm -f "$SSH_AUTH_SOCK"

root@kitploit:~
# Lancement du bridge en arrière-plan
# Note: Utiliser 127.0.0.1 si mode 'mirrored'
# sinon l'IP du host (ex: 192.168.99.x)
socat UNIX-LISTEN:"$SSH_AUTH_SOCK",fork,unlink-early \
      TCP:127.0.0.1:10022 > /dev/null 2>&1 &

fi

root@kitploit:~
### 卸载```bash
regsvr32 /u ssh-agent.exe
ssh-agent.exe -remove

配置

HKLM\SOFTWARE\San@sro Inc\pkcs11-cng 或 HKCU\SOFTWARE\San@sro Inc\pkcs11-cng



示例:``` StoreName = "MY" StoreLocation = "CurrentUser" SmartCardOnly = 1 AllowedKSP = "Microsoft Smart Card Key Storage Provider;YubiKey Smart Card Key Storage Provider" RelaxCheckMode = 0 LogLevel = 2

root@kitploit:~
---

## 支持的协议

### SSH-Agent

#### SSH2_AGENTC_REQUEST_IDENTITIES (11)

请求:```
[type=11]

回答:``` [type=12][count][key_blob_1][comment_1][key_blob_2][comment_2]...

root@kitploit:~
**key_blob RSA :**```
[len]["ssh-rsa"][len][exponent][len][modulus]

key_blob ECDSA :``` [len]["ecdsa-sha2-nistp256"][len]["nistp256"][len][point]

root@kitploit:~
**key_blob EdDSA :**```
[len]["ssh-ed25519"][len][point]

SSH2_AGENTC_SIGN_REQUEST (13)

请求 :``` [type=13][len][key_blob][len][data][flags]

root@kitploit:~
**标志:**
- `0x00` : ssh-rsa (SHA-1, legacy)
- `0x02` : rsa-sha2-256
- `0x04` : rsa-sha2-512

响应:```
[type=14][len][signature_blob]

signature_blob :``` [len]["rsa-sha2-256"][len][signature_data]

root@kitploit:~
### Pageant

通过 `WM_COPYDATA` 与 PuTTY 兼容:

1. 客户端通过 `CreateFileMapping` 创建共享内存
2. 以标准格式写入 SSH-agent 请求
3. 向 "Pageant" 窗口发送 `WM_COPYDATA`
4. 从共享内存中读取响应

共享内存格式:```
[uint32 length][SSH-agent payload]

WSL2 网络

监听 TCP 127.0.0.1:10022:

  • 接受多客户端(最多 16 个连接)
  • 标准 SSH-agent 协议 over TCP
  • 仅绑定本地主机(安全性)
  • 每连接一线程
  • 转发至 handle_ssh_message()

PIN 管理

Windows 完全管理 PIN,通过 CNG/KSP 和智能卡迷你驱动程序。

模块从不存储 PIN,也从未看到其传输:

  • 独立模式:NCryptSignHash 触发原生 PIN 界面
  • 服务模式:用户空间辅助程序(交互会话)调用 NCryptSignHash,PIN 界面在用户会话中显示
  • 存根服务仅进行透明转发(直通)在管道之间

PIN 缓存: 由 Windows/迷你驱动程序自动管理(无需应用缓存)。

NCrypt 标志:

  • PIN 缓存激活 + 命中:NCRYPT_SILENT_FLAG(无界面)
  • PIN 缓存激活 + 未命中:无标志(显示界面)
  • PIN 缓存禁用:无标志(始终显示界面)
  • 若 SILENT_FLAG 失败:自动重试并显示界面

CNG 后端

多层缓存

密钥缓存(超时 4 小时):

  • 按 SHA-1 指纹索引
  • 存储 CNG_KEY_INFO(句柄、提供程序、容器)
  • 超时后自动驱逐
  • 通过托盘图标手动清理

提供程序缓存(超时 4 小时):

  • 按 KSP 名称索引
  • 存储 NCRYPT_PROV_HANDLE
  • 避免重复调用 NCryptOpenStorageProvider

证书枚举```c

cng_store_enum_certificates(cfg, callback, user_data);

root@kitploit:~
过滤器:
- 可用的私钥
- 已授权的KSP(如果 `SmartCardOnly`)
- 不可导出的密钥(如果 `SmartCardOnly`)

### 签名```c
cng_sign_hash(key_info, mechanism, hash, hash_len, signature, &sig_len);

机制 → 填充:

  • CKM_RSA_PKCS → BCRYPT_PAD_PKCS1
  • CKM_SHA256_RSA_PKCS → BCRYPT_PAD_PKCS1 + BCRYPT_SHA256_ALGORITHM
  • CKM_SHA256_RSA_PKCS_PSS → BCRYPT_PAD_PSS + salt size = hash size
  • CKM_ECDSA_SHA256 → 无填充(原始签名)

公钥编码

RSA :```c cng_cert_get_public_key(cert, modulus, &mod_len, exponent, &exp_len);

root@kitploit:~
**ECDSA :**```c
cng_cert_get_ec_params(cert, params, &params_len);  // OID courbe
cng_cert_get_ec_point(cert, point, &point_len);     // Point public

支持的曲线:

  • NIST: nistp256 (OID: 1.2.840.10045.3.1.7), nistp384 (1.3.132.0.34), nistp521 (1.3.132.0.35)
  • Brainpool: brainpoolP256r1, brainpoolP384r1, brainpoolP512r1
  • EdDSA: ed25519 (OID: 1.3.101.112), ed448 (1.3.101.113)

UPN 提取

支持 Active Directory 身份验证:```c cng_extract_upn_from_certificate(cert, upn, upn_size);

root@kitploit:~
Extrait l'extension `szOID_NT_PRINCIPAL_NAME` pour l'utiliser comme commentaire SSH.

---

## 安全性

### 私钥

**从不导出。** 所有加密操作都委托给 CNG/KSP。`NCryptSignHash` 使用密钥句柄调用,从不直接使用密钥本身。

### PIN

**完全由 Windows (CNG/KSP/minidriver) 管理。**

该模块**从不存储 PIN** 且**从不看到 PIN 传输**:
- PIN 从不传输给 PKCS#11 模块
- PIN 界面由智能卡 minidriver 显示
- PIN 缓存由 Windows/minidriver 自动管理
- 在服务模式下:用户态辅助程序(交互式会话)接收 PIN 界面

**服务模式(纯透传):**
服务 stub 仅进行透明转发:
- 客户端 → 服务 → 辅助程序(转发 SSH-agent 消息)
- 辅助程序 → 服务 → 客户端(转发 SSH-agent 响应)
- 服务从不解析内容
- 服务从不看到:PIN、哈希、签名、密钥

### 服务与用户态隔离

**安全的管道。** 每个内部管道:
- 使用唯一 GUID 生成
- 使用 `FILE_FLAG_FIRST_PIPE_INSTANCE` 创建
- DACL 仅允许当前用户

用户态辅助程序在交互式会话中调用 CNG/KSP → 原生 PIN 界面。

### 审计

**Unicode 日志。** 所有事件均通过 `utils_log()` 记录:
- 客户端连接
- 密钥枚举
- 签名请求
- CNG/KSP 错误
- 代理冲突

**位置:** OutputDebugString + 可选文件 (`utils_set_log_file()`)。

---

## 兼容性

| 环境                           | 模式                   | 状态 |
|-------------------------------|------------------------|------|
| OpenSSH for Windows           | 独立 / 服务            | ✓    |
| Git for Windows               | 独立 / 服务            | ✓    |
| Visual Studio                 | 独立 / 服务            | ✓    |
| WSL (npiperelay)              | 独立 / 服务            | ✓    |
| WSL2 (TCP)                    | 独立 / 服务            | ✓    |
| PuTTY / plink / pscp          | Pageant                | ✓    |
| Firefox                       | PKCS#11                | ✓    |
| OpenSC / pkcs11-tool          | PKCS#11                | ✓    |
| ssh -I (OpenSSH)              | PKCS#11                | ✓    |
| 加固环境                       | Service stub           | ✓    |
| 智能卡 GIDS                    | CNG/KSP                | ✓    |
| 智能卡 PIV                     | CNG/KSP                | ✓    |
| YubiKey                       | CNG/KSP                | ✓    |
| Nitrokey                      | CNG/KSP                | ✓    |

---

## 公钥导出

### CLI 命令```bash
ssh-agent.exe -exportkey [output.pub]

交互式对话框

  1. 打开 CryptUIDlgSelectCertificateFromStore
  2. 显示所有带私钥的证书
  3. 允许视觉选择
  4. 提取公钥 (RSA/ECDSA/EdDSA)
  5. 编码为SSH wire格式
  6. 生成两种格式:
    • OpenSSH (authorized_keys)
    • RFC4716 (SSH2 Public Key)

输出格式

OpenSSH :``` ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC5... [email protected]

root@kitploit:~
**RFC4716 :**```
---- BEGIN SSH2 PUBLIC KEY ----
Comment: "[email protected]"
AAAAB3NzaC1yc2EAAAADAQABAAABAQC5ABCDEF...
---- END SSH2 PUBLIC KEY ----

支持的曲线

  • RSA(所有大小)
  • ECDSA NIST(P-256, P-384, P-521)
  • ECDSA Brainpool(P256r1, P384r1, P512r1)
  • EdDSA(Ed25519, Ed448)

身份提取

注释的优先级顺序:

  1. UPN(szOID_NT_PRINCIPAL_NAME)
  2. CN (Common Name)
  3. 完整主题 DN

托盘图标

显示模式

TRAY_MODE_USERLAND(绿色):

  • 独立运行的 Agent
  • 工具提示:"SRO SSH-Agent (Userland)"

TRAY_MODE_SERVICE(蓝色):

  • 由服务启动的 Helper
  • 工具提示:"SRO SSH-Agent (Service Helper)"

实时统计信息

动态工具提示:``` SRO SSH-Agent (Userland) 12 keys, 3 clients

root@kitploit:~
Mise à jour :
- Toutes les 5 secondes
- À chaque connexion/déconnexion client
- Au flush du cache

### Menu contextuel

**Show Keys...** : Dialogue listant toutes les clés disponibles```
═══════════════════════════════════════════════
  SRO SSH-Agent - Available Keys
═══════════════════════════════════════════════

[01] RSA-2048 - [email protected]
[02] ECDSA-nistp256 - [email protected]
[03] EdDSA-Ed25519 - [email protected]

═══════════════════════════════════════════════
Total: 3 keys

💡 Tip: Use 'Export Public Key' to copy SSH format

Export Public Key... : 打开选择对话框并复制到剪贴板

Flush & Reload Keys : 清空密钥/提供程序缓存并重新加载

Settings... : 显示当前配置``` Current Configuration:

Store Name: MY Store Location: CurrentUser SmartCard Only: Yes Relax Key Usage Check Mode: No Log Level: 2

Edit registry to change: HKLM\SOFTWARE\San@sro Inc\pkcs11-cng

root@kitploit:~
**Exit** : 干净退出 (信号 `g_shutdown_event`)

### 专用 UI 线程

- 带有消息泵的隐藏窗口
- `GetMessage/DispatchMessage` 循环
- 用于同步的事件 `g_tray_ready_event`
- 自动清理 (`Shell_NotifyIcon(NIM_DELETE)`)

---

## WSL2 支持

### 架构```
┌─────────────────────────────────────────────┐
│  WSL2 (Linux)                               │
│  - socat UNIX-LISTEN → TCP:127.0.0.1:10022 │
└─────────────────────────────────────────────┘
                    │
                    │ TCP
                    v
┌─────────────────────────────────────────────┐
│  Windows Host                               │
│  - ssh-agent.exe (listener 127.0.0.1:10022)│
│  - CNG/KSP → Smartcard                     │
└─────────────────────────────────────────────┘

Listener TCP

安全性:

  • 带主动关闭的接收线程
  • 每客户端线程(最多16个)
  • 连接超时:1秒

客户端池

  • 静态数组 g_wsl2_clients[16]
  • 每槽位 CRITICAL_SECTION
  • 池满时LRU淘汰
  • 关闭时自动清理

WSL2 配置

镜像模式(Windows 11 22H2+):```bash socat UNIX-LISTEN:"$SSH_AUTH_SOCK",fork,unlink-early
TCP:127.0.0.1:10022 > /dev/null 2>&1 &

root@kitploit:~
**经典NAT模式:**```bash
# Récupérer l'IP du host Windows
HOST_IP=$(ip route | grep default | awk '{print $3}')

socat UNIX-LISTEN:"$SSH_AUTH_SOCK",fork,unlink-early \
      TCP:$HOST_IP:10022 > /dev/null 2>&1 &

公共函数```c

BOOL wsl2_network_start(WORD port, HANDLE shutdown_event); void wsl2_network_stop(void); BOOL wsl2_network_is_running(void); DWORD wsl2_network_get_client_count(void);

root@kitploit:~
---

## 冲突检测

### 检测到的代理```c
typedef enum {
    AGENT_NONE = 0,
    AGENT_OPENSSH_NATIVE,    // OpenSSH for Windows (ssh-agent.exe)
    AGENT_PAGEANT,           // PuTTY Pageant (fenêtre "Pageant")
    AGENT_SRO_USERLAND,      // SRO SSH-Agent userland
    AGENT_SRO_SERVICE,       // SRO SSH-Agent service Windows
    AGENT_UNKNOWN            // Agent inconnu détecté
} AGENT_TYPE;

检测方法

原生 OpenSSH:

  • 通过 CreateToolhelp32Snapshot 搜索 ssh-agent.exe 进程
  • 确认不是当前进程

Pageant:

  • 搜索窗口 FindWindowW(L"Pageant", L"Pageant")
  • 确认不是当前进程的窗口

SRO 用户态:

  • 尝试 CreateFileW(\\.\pipe\openssh-ssh-agent)
  • 如果成功:表示已有代理在监听

SRO 服务:

  • SCM 查询 OpenServiceW(L"SROSSHAgentCNG")
  • 检查状态 SERVICE_RUNNING

解决对话框

如果检测到冲突,在启动时显示:``` ⚠ SSH Agent Conflict Detected

The following SSH agents are already running: • OpenSSH Native (ssh-agent.exe) • PuTTY Pageant

Running multiple agents may cause conflicts.

Do you want to continue anyway?

[Continue] [Stop conflicting agents] [Exit]

root@kitploit:~
**操作:**
- **继续** : 仍然启动(存在冲突风险)
- **停止** : 尝试停止代理(如果可能)
- **退出** : 退出而不启动

### 公共函数```c
BOOL detect_running_agents(AGENT_TYPE* detected_agents, DWORD* count);
BOOL show_agent_conflict_dialog(const AGENT_TYPE* agents, DWORD count);
const WCHAR* agent_type_to_string(AGENT_TYPE agent);

依赖

无依赖。 二进制文件是自包含的,仅加载系统 DLL:

  • kernel32.dll(始终存在)
  • advapi32.dll(注册表,SCM)
  • crypt32.dll(证书)
  • ncrypt.dll(CNG)
  • bcrypt.dll(哈希)
  • wtsapi32.dll(会话)
  • shell32.dll(托盘图标)
  • ws2_32.dll(Winsock)
  • cryptui.dll(证书选择对话框)

无 CRT。 所有内存操作均使用 RtlCopyMemory、RtlZeroMemory、RtlEqualMemory。


已知限制

  • 无加密。 SSH-agent 仅实现签名(不支持 SSH2_AGENTC_*_ENCRYPT)。
  • 无密钥约束。 未实现 SSH2_AGENTC_ADD_ID_CONSTRAINED。
  • CNG PIN 缓存。 由 Windows/minidriver 管理,无法进行精细的应用控制。
  • 受限的辅助池。 服务模式下最多 16 个辅助程序(可通过 MAX_HELPERS 配置)。
  • 自签名的 YubiKey PIV。 处于 PIV 模式的 YubiKey 会生成自签名证书,这些证书不符合标准的 EKU/KeyUsage 字段。设置 RelaxCheckMode = 1 以使用它们。

路线图

  • 完整的 PKCS#11(14 种机制)
  • 多客户端 SSH-agent
  • 兼容 PuTTY 的 Pageant
  • WSL2 TCP 监听器
  • Windows 服务存根
  • 带统计信息的托盘图标
  • 公钥导出(OpenSSH + RFC4716)
  • 代理冲突检测
  • 密钥/提供者缓存(超时 4 小时)
  • 支持 EdDSA(Ed25519, Ed448)
  • 支持 Brainpool
  • 图形化配置 UI(简化的注册表编辑器)
  • 指标与监控(签名计数器)
  • JSON 配置导出

贡献

欢迎贡献!请:

  • 遵守自主架构(无 CRT)
  • 仅使用 Win32 API
  • 为公共函数编写文档
  • 使用真实智能卡进行测试
  • 遵循现有代码风格

所有权与许可

本软件归 San@sro inc. 所有。
根据信任许可模型分发:

• 个人使用与教育:免费且鼓励使用。
• 专业/商业用途:需要购买技术和平许可证。
在未获得有效许可证的情况下在企业中使用构成侵犯版权,尽管本软件自愿不设置任何技术锁。

重新分发

允许重新分发,前提是: • 二进制文件保持完整, • 保留原始 Authenticode 签名。

保证

本软件按“原样”提供,不提供任何形式的保证。

完整许可(法文+英文),包括定义、重新分发条件、有效期、终止以及获取技术和平许可证的方式,可在此处获取:

👉 LICENSE.md

如需专业许可证申请:
📧 [email protected]


安全与负责任披露

SRO PKCS11 – SSH Agent CNG 不处理任何敏感机密: PIN、私钥和加密操作完全由 Windows(CNG/KSP/minidriver)管理。

要报告错误、异常行为或潜在漏洞,可在此获取负责任披露政策:

👉 SECURITY.md

安全联系:
📧 [email protected]


SRO PKCS11 – SSH Agent CNG
自主。稳健。高效。
一应俱全的单一二进制文件。

下载工具
值类型描述
StoreNameREG_SZ"MY", "Root", 等(默认: "MY")
StoreLocationREG_SZ"CurrentUser" 或 "LocalMachine"
ModeREG_SZ"All" 或 "SmartCard"
SmartCardOnlyREG_DWORD1 = 仅筛选智能卡
AllowedKSPREG_SZ允许的KSP列表(用";"分隔)
RelaxCheckModeREG_DWORD1 = 禁用EKU/KeyUsage/日期验证 (YubiKey PIV自签名)
LogLevelREG_DWORD0=关闭, 1=错误, 2=信息, 3=调试