From 739a1ee094a9a99400e33b95f2f8aef3b099b7fc Mon Sep 17 00:00:00 2001 From: nav Date: Wed, 8 Apr 2026 22:04:56 +0000 Subject: [PATCH] feat: advance yonexus authentication handshake --- TASKLIST.md | 28 ++++++++++++++++++++++++++++ Yonexus.Client | 2 +- Yonexus.Protocol | 2 +- Yonexus.Server | 2 +- 4 files changed, 31 insertions(+), 3 deletions(-) diff --git a/TASKLIST.md b/TASKLIST.md index bab0d55..6120613 100644 --- a/TASKLIST.md +++ b/TASKLIST.md @@ -605,6 +605,9 @@ ## Phase 7 — Authentication 主流程 ### YNX-0701 固化 proof 构造与签名规范 +**状态** +- [x] 已完成(2026-04-08) + **目标** - 明确签名输入,避免 Server / Client 不一致 @@ -616,9 +619,18 @@ **验收标准** - 同一输入在 Client 与 Server 上验证一致 +**已完成内容** +- 已新增 `Yonexus.Protocol/src/auth.ts`,固化认证共享常量:nonce 长度、时间漂移窗口、attempt window、recent nonce window +- 已实现 `createAuthRequestSigningInput()` / `extractAuthRequestSigningInput()`,统一以稳定 JSON 序列化 `{ secret, nonce, timestamp }` 作为签名输入 +- 已补充 `isValidAuthNonce()` 与 `isTimestampFresh()`,把 nonce 与时间窗口校验规则从文档落到共享代码 +- 已从 `Yonexus.Protocol/src/index.ts` 导出认证辅助模块,供 Client / Server 复用 + --- ### YNX-0702 实现 Client auth_request +**状态** +- [x] 已完成(2026-04-08) + **目标** - Client 能基于本地 secret 与私钥发起认证 @@ -632,9 +644,18 @@ - 报文字段完整 - nonce 格式符合协议要求 +**已完成内容** +- Client runtime 已在收到 `hello_ack(auth_required)` 或 `pair_success` 后自动发起 `auth_request` +- 已复用本地 `secret` + Ed25519 私钥生成签名,并发送 `identifier` / `nonce` / `proofTimestamp` / `signature` / `publicKey` +- 已把 transport 状态补齐为 `authenticating -> authenticated`,并在 `auth_success` 后落盘 `authenticatedAt` +- 已处理 `auth_failed` / `re_pair_required` 的最小状态回退逻辑 + --- ### YNX-0703 实现 Server 认证校验 +**状态** +- [x] 已完成(2026-04-08) + **目标** - Server 能验证 auth_request 真伪 @@ -652,6 +673,13 @@ - 正确认证返回 `auth_success` - 各类失败返回对应 `auth_failed` +**已完成内容** +- Server runtime 已接入 `auth_request` builtin 处理并校验 allowlist / paired 状态 / publicKey 一致性 +- 已复用共享签名输入规范与 Ed25519 验签逻辑,验证客户端签名 +- 已实现 timestamp freshness、nonce 格式、recent nonce collision、10s attempt window 的最小校验 +- 正常认证会更新 `lastAuthenticatedAt` / `lastHeartbeatAt` / liveness 状态,并返回 `auth_success` +- 遇到 nonce collision 或 rate limit 时会触发 `re_pair_required`,清理旧 secret 与安全窗口 + --- ### YNX-0704 实现 re_pair_required 机制 diff --git a/Yonexus.Client b/Yonexus.Client index cec5978..5ca6ec0 160000 --- a/Yonexus.Client +++ b/Yonexus.Client @@ -1 +1 @@ -Subproject commit cec59784de4cd1f0a9643512cd233bb8ebfa5ccb +Subproject commit 5ca6ec0952dde015823dc0a9661767b16e292008 diff --git a/Yonexus.Protocol b/Yonexus.Protocol index fbe1457..7e69a08 160000 --- a/Yonexus.Protocol +++ b/Yonexus.Protocol @@ -1 +1 @@ -Subproject commit fbe1457ab63202503b669c4ad4022593750394da +Subproject commit 7e69a08443f9c45bddd929d46c3d4e71fd64b0f9 diff --git a/Yonexus.Server b/Yonexus.Server index a05b226..83f6195 160000 --- a/Yonexus.Server +++ b/Yonexus.Server @@ -1 +1 @@ -Subproject commit a05b226056c97f3f2ab85737050135cd6935fc54 +Subproject commit 83f6195c1f1520ff5c96953375bd9d3d01ab2440