文件

79 行
7.3 KiB
Markdown

此文件含有模棱两可的 Unicode 字符
此文件含有可能会与其他字符混淆的 Unicode 字符。 如果您是想特意这样的,可以安全地忽略该警告。 使用 Escape 按钮显示他们。
# STATUS — 项目完成度
> PazeSSL / PazeSSH:从零实现、仅依赖 libc 的 OpenSSL / OpenSSH 平替(纯 C, ISO C17)。
> 按层推进,本文件汇总当前各层完成度(2026-08-13 更新)。
## 总体
| 层 | 模块 | 状态 |
|---|---|---|
| 原语层 | `src/crypto` — 哈希/对称/非对称/编码/ASN.1/X.509 | ✅ 完整实现 |
| 协议层 | `src/ssl` — TLS 1.2 / 1.3 | ✅ TLS 1.2 + 1.3 完整实现(含版本回退与 OpenSSL 互操作验证) |
| 协议层 | `src/ssh` — SSH-2 transport/kex/auth/channel + SFTP | ✅ 完整实现 |
| 应用层 | `apps/*` — 11 个 CLI | ✅ 可用 |
| 测试 | ~~tests/*~~ | ❌ 已从仓库移除(KAT 本地化) |
## 密码学原语(✅ 完整)
- 哈希:SHA-1 / SHA-256 / SHA-512 / MD5 / HMAC / HKDF / PBKDF2
- 对称:AES-128/192/256、AES-CBC/GCM、ChaCha20、Poly1305、ChaCha20-Poly1305 AEAD
- 曲线:X25519、Ed25519、**P-256、P-384secp384r1)、P-521secp521r1**、ECDSA(大数运算自研:模幂、模逆、Montgomery)
- 非对称:RSA(密钥生成/加解密/签名)、X.509 证书解析与构建、PEM/DER 编解码
- 其他:ASN.1 DER、base64、hex、常量时间准则
## PazeSSL — TLS(🔶 部分完成)
- ✅ TLS 1.3 客户端/服务端状态机(record、handshake、key schedule、扩展)
- ✅ TLS 1.3 **PSK 会话恢复**RFC 8446 §4.2.11 / §4.6.1):NewSessionTicket 签发与解析、ticket+binder 校验、selected_identity 回选、恢复握手跳过证书;`pazessl -sess_in/-sess_out` 端到端验证通过
- ✅ TLS 1.2 客户端/服务端状态机 + 1.3↔1.2 版本回退(ECDHE-RSA/ECDSA/RSA AES-GCM、CHACHA20-POLY1305
- ✅ OpenSSL 互操作对测 6/6s_server↔s_client 双向 TLS 1.3 / TLS 1.2RSA 与 ECDSA 证书、SHA-256 与 SHA-384 套件,`build/run_openssl_interop.ps1`
- ✅ 证书链与信任锚加载、RSA/ECDSA 私钥 PEM 解析、**X.509 ECDSA 证书(P-256)解析与验签**(`pazessl verify -CAfile ec_cert.pem ec_cert.pem` 通过)
- ✅ TLS 1.3 ECDSA CertificateVerifyRFC 8446 §4.2.3 DER 签名)与 OpenSSL 双向互操作
- ✅ TLS 1.3 SHA-384 密码套件(TLS_AES_256_GCM_SHA384)服务端/客户端握手(含 PSK 恢复的 resumption_master_secret
-**0-RTT 数据路径**RFC 8446 §4.2.10/§4.5/§8):early_data 扩展、client_early_traffic_secret 密钥派生、握手前早数据收发、EndOfEarlyDataearly key 加密且计入 transcript);`pazessl s_client/s_server -early` 端到端验证(早数据接收 + early accepted
-**HRRHelloRetryRequest**RFC 8446 §4.1.3/§4.1.4):服务端 key_share 不匹配时发 HRR(随机数=固定魔数)、transcript 合成 MessageHash 重放、客户端 CH2(仅选定组 share)响应、HRR 后放弃 0-RTT;`-key_share` 选项触发,`hrr=YES` 互操作验证通过
-**secp384r1TLS P-384**:新增 P-384 曲线点运算(`p384.c`,Jacobian,常量时间标量乘);ECDSA 支持 P-384 签名/验签(RFC 6979 确定性 k,`paze_ecdsa_p384_*`);X.509 支持 secp384r1 证书解析/验签/签发(含 ecdsa-with-SHA384 与 P-384 公钥,`paze_x509_build_spki384`);TLS 1.3 支持 secp384r1 组(key_share/supported_groups/ECDH 按 SEC1 x 坐标)、签名算法 ECDSA_SECP384R1_SHA384;TLS 1.2 ECDHE 亦支持 P-384。`s_client -key_share P-384` 端到端验证(含 HRR 触发与 P-384 证书链/主机名验证);曲线与 ECDSA 经 OpenSSL 双向交叉验证
-**secp521r1TLS P-521**:新增 P-521 曲线点运算(`p521.c`,域 p=2^521-1,标量/点 66/133 字节,常量时间标量乘);ECDSA 支持 P-521 签名/验签(RFC 6979,配 SHA-512,`paze_ecdsa_p521_*`);X.509 支持 secp521r1 证书解析/验签/签发(含 ecdsa-with-SHA512,`paze_x509_build_spki521`);TLS 1.3 支持 secp521r1 组与签名算法 ECDSA_SECP521R1_SHA5120x0603),TLS 1.2 ECDHE 亦支持。`s_client -key_share P-521` 端到端验证(HRR + P-521 证书链/主机名验证,应用数据收发);曲线(n·G=∞)、ECDSA 双向、X.509 证书均经 OpenSSL 交叉验证
-**TLS 1.3 会话恢复持久化**session ticket key 支持持久化到文件(`paze_tls_config_set_session_ticket_file` + `paze_tls_ensure_ticket_key`),服务端跨进程重启后 ticket 仍可校验、PSK 会话恢复继续有效;`pazessl s_server -ticket_file <file>` 端到端验证(重启后 resumed=YES
-**session ticket key 轮换**:支持 2 代 ticket key`paze_tls_config_rotate_ticket_key`),轮换后旧 ticket 仍由上一代 key 验证(MAC 遍历匹配,平滑过渡);`s_server -rotate_ticket_key` 验证(轮换后旧会话仍恢复 + 新会话跨进程恢复)
-**修复**ECDSA `bits2int` 输入短于群阶时错误左移(影响 P-384+SHA-256 验签);TLS 1.3/1.2 对端证书 `issuer_dn/subject_dn` 等指针指向被记录层复用缓冲导致的链验证失败(`paze_tls_store_peer_cert` 拷贝 DER
## PazeSSH — SSH-2(✅ 完成)
- transport:版本交换、密钥交换(curve25519-sha256)、NEWKEYS、包加密
- 认证:password / **keyboard-interactiveRFC 4256,`psshd -kbdint` 仅 ki** / publickeyauthorized_keys 校验)
- 通道:sessionexec/shell 真实进程执行)、direct-tcpip(出站桥接)
- **SFTP 子系统 v3**OPEN/READ/WRITE/OPENDIR/READDIR/STAT/REALPATH 等,与 OpenSSH sftp / scp -s 互操作(Git OpenSSH 实测通过)
- 客户端命令:
- `pssh ssh` — 远程 shell / 执行命令,`-L`/`-R`/`-D` 端口转发,`-J` 代理跳板(单跳)、`-W host:port` stdio 转发、`-N` 仅转发、`-A` agent 转发(POSIX;Windows agent 为命名管道不支持);config 读取 `-F` / `~/.ssh/config`OpenSSH 兼容) / `~/.pssh/config.conf``-o ServerAliveInterval=N` 空闲心跳保活(keepalive@openssh.com)、`-o ReconnectInterval=N` 断线自动重连(重新执行命令/重开 shell)
- `pssh scp` — SFTP 优先(OpenSSH 9.x 默认),回退 legacy SCP;`-r` 递归、`-p` 保留时间戳
- `pssh keygen` / `keyscan` / `copy-id` — 密钥工具
- `pssh agent` / `add` / `ssha` — agent 守护进程与密钥管理
- `pssh sshd` — 服务端:多用户库 + 分级权限 + publickey 认证 + SFTP 子系统;**认证失败日志对齐 OpenSSH 格式**(`Invalid user`/`Failed password ... from <IP>`),可与 fail2ban 默认 `sshd` filter 配合
- 密码套件:chacha20-poly1305@openssh.com、aes128/256-gcm@openssh.com
## 应用(✅ 可用)
| 命令 | 说明 |
|---|---|
| `pssh` | SSH 工具集入口(ssh/scp/sshd/keygen/keyscan/copy-id/agent/add/useradd |
| `pazessl` | 类 openssl 命令行(s_client/s_server/verify/genrsa/req/x509 |
| `pssh useradd` | 管理 sshd 用户库(用户名:哈希:权限) |
## 与 OpenSSH 对比
| OpenSSH | PazeSSH | 说明 |
|---|---|---|
| `ssh` | `pssh` | 远程 shell / 执行命令 / 端口转发 |
| `scp` | `pscp` | SFTP 优先 + legacy SCP 回退 |
| `sftp` | `psftp` | 独立 SFTP 客户端;服务端为 `psshd` 子系统 |
| `ssh-keygen` | `pkeygen` | ed25519/rsa/ecdsa |
| `ssh-keyscan` | `pkeyscan` | known_hosts 格式 |
| `ssh-copy-id` | `pcopy-id` | 安装公钥 |
| `ssh-agent` / `ssh-add` | `pagent` / `padd` | agent 密钥管理 |
| `sshd` | `psshd` | 多用户 + 权限 + 公钥认证 + SFTP |
## 遗留项(已知)
- 无(TLS 1.2 / 1.3 与 SSH-2 全部既定功能完成)