feat(transport): 完成安全架构拆分并收口 stream/bulk 传输优化
- 新增 managed/external/nested 三种传输保护模式 - 新增 peer attach 显式认证、抗重放、channel binding 和可选前向保密协商 - 明确单连接注入与可重拨连接源的语义边界 - 禁止 ConnectByConn 场景下 dedicated bulk 走 sidecar,auto 模式自动回退 shared - 修正 dedicated attach 在 bootstrap/steady profile 切换下的处理逻辑 - 优化 shared bulk super-batch 与批量 framed write 路径 - 降低 stream/bulk fast path 的复制和分发损耗 - 补齐 benchmark、回归测试、运行时快照和 README 文档
This commit is contained in:
@@ -25,6 +25,21 @@
|
||||
|
||||
未配置时会返回 `errModernPSKRequired`。
|
||||
|
||||
## 安全模式选择
|
||||
|
||||
- `UseModernPSKClient` / `UseModernPSKServer`
|
||||
- bootstrap 和稳态传输都由 `notify` 自己保护
|
||||
- 适合默认场景
|
||||
- 支持 peer attach 显式认证、抗重放,以及在需要时协商前向保密
|
||||
- `UsePSKOverExternalTransportClient` / `UsePSKOverExternalTransportServer`
|
||||
- bootstrap 仍用 PSK 做认证
|
||||
- 稳态阶段信任外部物理通道,不再做 `notify` 内层加密
|
||||
- 适合 `tls.Conn` 或调用方自认可信的外部通道
|
||||
- 不支持 `RequireForwardSecrecy`
|
||||
- `UseNestedSecurityClient` / `UseNestedSecurityServer`
|
||||
- 外层已有可信通道,但仍保留 `notify` 内层保护
|
||||
- 适合需要“外层可信 + 内层独立保护”的场景
|
||||
|
||||
## 快速开始
|
||||
|
||||
服务端:
|
||||
@@ -83,6 +98,42 @@ func main() {
|
||||
}
|
||||
```
|
||||
|
||||
## 连接入口与物理连接语义
|
||||
|
||||
- `Connect` / `ConnectTimeout`
|
||||
- 由 `notify` 自己拨号
|
||||
- 支持重连,也支持 dedicated bulk 额外 sidecar 连接
|
||||
- `ConnectByFactory`
|
||||
- 调用方提供 `dialFn`
|
||||
- `notify` 会在需要时再次调用 `dialFn`,因此仍支持重连和 dedicated bulk
|
||||
- `ConnectByConn`
|
||||
- 调用方注入一个已经建立好的 `net.Conn`
|
||||
- 该模式被视为“单物理连接模式”
|
||||
- `OpenDedicatedBulk` 会直接返回错误
|
||||
- `OpenBulk` 使用 `auto` 模式时会自动回退到 `shared`
|
||||
- `ListenByListener`
|
||||
- 服务端复用调用方提供的 `net.Listener`
|
||||
- 适合需要和现有 listener 栈整合的场景
|
||||
|
||||
`dedicated bulk` 依赖额外物理连接,因此只适用于可再次拨号的 transport source。
|
||||
|
||||
## Peer Attach 安全策略
|
||||
|
||||
可通过 `SetPeerAttachSecurityConfig` 配置逻辑会话 attach 阶段的额外保护。
|
||||
|
||||
- `RequireExplicitAuth`
|
||||
- 要求 peer attach 使用显式认证
|
||||
- `RequireChannelBinding`
|
||||
- 要求 attach 绑定到底层可信通道
|
||||
- 启用后会隐式要求显式认证
|
||||
- `ChannelBinding`
|
||||
- 由调用方提供 channel binding 提取函数
|
||||
- 适合外层 TLS 或其他可信通道整合
|
||||
- `ReplayWindow` / `ReplayCapacity`
|
||||
- 控制 attach 抗重放窗口和缓存容量
|
||||
|
||||
如果你选择 `UsePSKOverExternalTransport*`,并且希望 attach 阶段显式绑定到外层可信信道,建议同时配置 channel binding。
|
||||
|
||||
## RecordStream 说明
|
||||
|
||||
`RecordStream` 构建在 `Stream` 之上,适合“有边界的顺序记录”场景。
|
||||
@@ -146,6 +197,9 @@ func main() {
|
||||
- 共享密钥派生(Argon2id)
|
||||
- 消息层加密(AES-GCM)
|
||||
- `stream` / `bulk` fast path 复用现代编码栈
|
||||
- peer attach 显式认证 / 抗重放
|
||||
- 可选 channel binding
|
||||
- 可选前向保密(`UseModernPSK*` / `UseNestedSecurity*`)
|
||||
|
||||
兼容入口仍保留,但属于历史路径:
|
||||
|
||||
|
||||
Reference in New Issue
Block a user