OpenPencil P2P 协作威胁模型解析:端到端信任边界、票证验证与残余风险全景
【免费下载链接】openpencilThe worlds first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.项目地址https://gitcode.com/gh_mirrors/op/openpencil点击查看免费下载OpenPencil 的 P2P 协作是一套无实现保密依赖的安全契约协议、解析器、状态机、密码学传输集成、资源上限与安全测试全部公开可信边界建立在可审查的签名票证ticket、Noise 传输通道与离线签名引导bootstrap之上。本文以 docs/security/p2p-collaboration-threat-model.md 为骨架结合 crates/op-collab-transport/src/noise.rs、crates/op-auth-bridge/src/collab_claims.rs 等源码完整讲解协作功能的资产边界、九步信任数据流、境内外 issuer 拓扑、签名 bootstrap 路由机制、各类攻击面及其控制措施、残余风险与自动化边界门禁。读完你将掌握 OpenPencil 协作安全的完整威胁模型理解谁可以加入、凭什么加入、加入后能做什么三层问题的设计答案。范围与安全目标M1 与 M2.1 两个阶段协作安全契约按里程碑分阶段落地M1连接本地网络的桌面端 peer通过 mDNS 发现或手工输入 IP 地址建立连接文档字节在 peer 之间直传。mDNS 仅限局域网作用域不是跨区域发现机制。手工输入的可路由公网地址在防火墙与 NAT 策略允许时可走 TCP Noise 路径跨站点连接但 M1 没有 rendezvous、NAT 穿透或中继不承诺健壮的互联网可达性。M2.1增加 owner 锚定的公共 WSS 中继路径。海外 peer 可通过 Global L4 入口加入签名的home_regioncn邀请该入口固定回程fixed-backhaul到同一套 CN 中继与 locator 服务海外地理位置不会改变签名的 home region也不授权 Global-home 兜底。中继基础设施只转发有界 prelude、Noise 握手与内部 Noise 密文构成的不透明流可以在已文档化的层次观察准入与路由元数据但不得解密或持久化文档帧。票证由 ZSeven 服务认证账号并签发生产 issuer 边界。私有 issuer 与携带凭证的 provider 源码实现已存在含严格 JWKS profile、持久轮换账本、Unix-HSM peer 认证、append-only ABI-v2 客户端契约但生产 HSM 密钥、受保护静态归档、部署策略与加固 runner 仍是独立 provisioning 门禁本文档发布时未宣称完成。身份与 bootstrap 服务不存储文档内容中继服务只转发、不解密也不持久化。实现的强制性要求包括双端以服务器签名协作票证认证每个票证必须绑定连接所用的 Noise 静态密钥只接受预期 issuer 与账号 subject对所有准入与文档流量做加密与完整性保护未认证 peer 不得收到文档、缩略图、会话名或 presence 数据执行 owner 权威角色与编辑策略拒绝畸形、超大、过期、重放状态或不受支持的操作且不产生部分文档变更对连接、握手、帧、传输、队列、文档验证与缓存元数据设界。可用性不作硬性承诺面对能占满主机网络链路的攻击者防护不保证下述上限用于限制流量到达 OpenPencil 之后的 CPU 与内存消耗。资产清单什么值得保护、如何保护资产要求的保护文档与 presence 内容传输中保密与完整性准入前不得泄露ZSeven 设备凭证私有实现与平台保护存储绝不通过开放协作 API 暴露协作签名私钥仅 issuer/HSM 边界持有绝不随客户端或仓库发布协作 bootstrap 根私钥仅离线签名/HSM 边界持有桌面与在线 op-hub 服务都不持有签名中继 bootstrap 与已验证 LKG真实性、规范编码、有界有效期、回滚抵抗、CN/Global 端点与密钥的原子选择短期协作票证视为 bearer 凭证在持有处脱敏与清零Noise X25519 静态私钥仅本地、内存清零、平台/文件保护存储账号 subject 与设备 id仅从已验证 claims 派生不进入 mDNS 与常规日志协作显示名与头像 URL仅作为有界签名 claims 接受只向已准入会话参与者披露中继路径上另向中继运营方经 bearer 票证披露见中继运营方可见性Owner 角色与提交序列owner 权威防范 guest 自诩或过期写入资源可用性在分配、重组、解析或广播之前设界信任边界与数据流九步准入链路私密认证 provider使用已认证的设备会话请求不透明票证公开请求体只包含本地 X25519 公钥。票证签发issuer 对固定公开 claims profile 签名不向客户端返回签名密钥。公共中继会话的 bootstrap 获取桌面从启动配置的精确 HTTPS 端点拉取一份签名协作 bootstrap在嵌入的 Ed25519 根下验证规范 payload然后原子选择完整的 CN 或 Global entry。bootstrap 镜像、DNS、TLS 端点、邀请与 peer 都不能替换该信任根。路由发布与选择owner 向所选 entry 的 locator 服务发布路由guest 选择邀请签名home_region命名的 entry。双方使用同一份已验证快照中继 URL、locator URL、验证密钥、中继挑战 X25519 pins。mDNS 广告只广播临时 discovery id、协议版本与 TCP 端口。发现是 locator不是认证声明。Noise 握手双方完成Noise_XX_25519_ChaChaPoly_BLAKE2sresponder prelude 计入 Noise prologue。源码中 noise.rs 以pub const NOISE_PROTOCOL_NAME: str Noise_XX_25519_ChaChaPoly_BLAKE2s固定协议名握手帧上限MAX_HANDSHAKE_MESSAGE_BYTES 4 * 1024build_handshake将prelude.prologue_bytes()注入 builder并在finish_handshake中取出 32 字节remote_static供后续票证绑定校验。加密通道内交换票证开放 verifier 检查签名、issuer、audience、版本、scope、时间、标识符并校验dh_pub_x25519与观测到的远端 Noise 静态密钥相等。可选display_name与avatar_urlclaims 只从该签名 payload 接受名字有界且无控制字符avatar URL 必须是无凭证无 fragment 的有界 HTTPS URL。源码侧 collab_claims.rs 定义了COLLAB_JWS_ALGORITHM Ed25519、COLLAB_JWS_TYPE openpencil-collabjwt、COLLAB_TICKET_AUDIENCE openpencil-collab、COLLAB_TICKET_SCOPE collab:connect、COLLAB_TICKET_MAX_LIFETIME_SECONDS 15 * 60、COLLAB_TICKET_CLOCK_SKEW_SECONDS 60显示名上限 320 字节 / 80 个 Unicode 标量avatar URL 上限 2048 字节。准入完成后的消息只有双端准入检查都通过后owner 才能发送 welcome、快照、commit 或 presence 消息。角色与序列化owner 分配连接角色是已接受提交的序列化点。guest 无法通过在不信任消息中放入 role、author、subject 或 device id 来获取权限。关键结论mDNS 记录、本地SignedIn标志、邮箱地址或 peer 提供的 profile 都不是认证源。尚未添加可选签名 profile claims 的 issuer 仍然兼容但其 peer 只能得到通用 epoch-local 标签而非来自本地账号 UI 状态的兜底。携票证协议值刻意不实现Clone。通用 JSON 与帧传输编码器拒绝RenewTicket专用敏感编码器直接序列化进唯一所有权的清零存储不先物化serde_json::Value或普通输出缓冲。ticket_json.rs 使用zeroize::Zeroizing准入、续期命令、分块、解密、重组与 per-peer 队列都保持该所有权纪律票证明文在所有丢弃路径上清零。境内外 issuer 拓扑区域凭证源不是信任根区域凭证起源不是协作信任根境内客户端可用本地 SSO 登录并请求票证境外客户端可用另一 SSO 源但两个部署必须签发完全相同的逻辑协作iss与相同的不可变全局账号sub。邮箱地址匹配或区域本地账号 id 不是联邦机制。桌面只在受信任的进程启动配置中读取OPENPENCIL_SSO_URL、OPENPENCIL_COLLAB_ISSUER、OPENPENCIL_COLLAB_POLICY_ENDPOINT。生产环境获取/api/v1/collab/policy常量见 collab_claims.rs 的COLLAB_POLICY_PATHenvelope 必须在内嵌于开放客户端的离线 Ed25519 根下验证。紧急根切换由 policy 代数约束legacy union-policy 根仅授权第 1–3 代替换根仅授权第 4 代起。客户端验证每个编译期根要求恰好一个签名匹配且恰好一个代数授权匹配生产环境变量不能增删 union-policy 根。端点不匹配、冲突的 policy/JWKS 端点、签名或 issuer 失配、非活动密钥元数据、代数回滚、同代重写都 fail-closed且无 raw-JWKS 兜底。旧OPENPENCIL_COLLAB_JWKS_ENDPOINT保留为显式自托管兼容路径。任何票证、provider 响应、mDNS 记录、邀请或 peer 消息都不能提供或替换内嵌信任值。每区域持有独立 HSM 签名密钥层级绝不向另一区域导出或复制私钥。区域本地镜像发布一份规范离线签名 policy包含完整公开 union。客户端验证不超过 8 区域 / 24 密钥、精确区域成员、唯一 key id/公钥、每区域恰好一个活动密钥与一个 next 密钥、至多一个退役 overlap 密钥未激活的 next 密钥不参与票证验证每次缓存使用都会复查 policy/key 时间。因此密钥发布、激活、overlap、退役与紧急移除都必须在更高代数授权之后任一区域才能变更签名状态。镜像可用性、一致性、HSM provisioning 与物理多区域计时测试仍是生产门禁。签名协作 bootstrap 与跨区域中继路由桌面不再直接注入五个中继/locator 端点与公钥值。发布构建携带两个内建生产 hub URL每区域一个在编译期由发布管线的 secret store 注入——开源树不含任何生产端点未注入的构建保持中继纯环境配置。持久化的用户偏好选择哪个 hub 提供签名 bootstrap 文档无覆盖时也决定 owner 在哪个区域发布。两个 hub 服务于同一份签名文档、在同一内嵌根集合下验证因此该偏好是可达性选择不是信任选择。OPENPENCIL_COLLAB_BOOTSTRAP_URL作为运营方覆盖设置时优先非法值 fail-closedOPENPENCIL_COLLAB_RELAY_HOME_REGIONcn|global供 owner 本地固定 home 选择器guest 的 home region 只能来自签名邀请或带区域标签的配对码。紧急切换期内嵌 bootstrap 根集合同时含 legacyopenpencil-collab-union-root-v2与独立openpencil-collab-bootstrap-root-v2envelope 的kid在签名验证前精确选择其中一个legacy 根仅授权至 bootstrap 第 2 代后继根从第 3 代起。未知 id、另一根签的名、或根超出其代数范围都 fail-closed。bootstrap URL 必须为 HTTPS路径精确为/api/v1/collaboration/bootstrap无凭证、查询或 fragment。envelope 与解码 payload 都必须匹配各自规范 JSON 重编码payload、签名与公钥字段使用无填充规范 base64url。签名是 Ed25519覆盖openpencil/op-hub/collaboration-bootstrap/v1\0 || canonical_payload_json_bytes域分隔符防止另一协作工件的有效签名被当作 bootstrap 签名。payload 有且仅有一个非零代数与一个至多七天的有效期窗口同一签名快照内恰好包含一个 CN 与一个 Global entry每个 entry 原子携带其精确中继 WSS URL、locator HTTPS URL、locator Ed25519 公钥与中继挑战 X25519 公钥。桌面允许至多 300 秒的not_before未来时钟偏移not_after保持排他。海外 guest 加入签名home_regioncn邀请时从该快照选择完整 CN entry。GeoDNS 或审计过的边缘可将 CN entry 的逻辑主机名落在 Global L4 入口并固定回程未改动的内部 TLS 流至 CNguest 不得因物理位置选择 Global entry、不得将 Global 端点与 CN 密钥混用、也不得在 CN 路径失败时兜底到 Global home。CN locator 签名者与 CN 中继认证器是权威路由与准入边界。缓存与 LKG桌面缓存绑定精确 bootstrap 端点存储带强 SHA-256 ETag 的签名体。仅在拉取/请求发送失败且响应未到、状态非 200/304、或带精确缓存 ETag 的合法 304 时才可用仍有效且重新验证过的 last-known-good 快照。200 响应后的 body 读取失败、或任何非法 200 响应都不回退 LKG。更低代数、或同代不同签名 payload 字节 fail-closed。过期快照不用于路由但保留为回滚基线。该 high-water mark 只存在于有效持久化端点绑定缓存中改变 bootstrap URL、或删除/损坏/不可读/无法持久化缓存都不保留全局代数下限。境内与境外 op-hub 站点可服务逐字节相同的签名 envelope但当前服务不复制也不热重载快照运维必须向两个站点部署同一工件。每个 op-hub 进程加载OP_HUB_BOOTSTRAP_FILE、以OP_HUB_BOOTSTRAP_ROOT_KEYS验证、并强制OP_HUB_BOOTSTRAP_MIN_GENERATION后才服务不可变内存快照。在线服务永远不接触离线 bootstrap 私钥。调试明文是窄异常只有 test/debug 构建在OPENPENCIL_COLLAB_BOOTSTRAP_DEV_HTTP1时允许从数字 loopback 地址拉取 HTTP bootstrap附加的OPENPENCIL_COLLAB_BOOTSTRAP_DEV_ROOT_KEYS仅在该模式考虑快照中的明文 locator/中继端点也必须是数字 loopback。无签名中继另需OPENPENCIL_COLLAB_RELAY_DEV_UNSIGNED1debug 构建 数字 loopback WebSocket 端点。localhost、非 loopback 明文与 release 构建不在这些例外覆盖内。客户端 bootstrap 不替代服务端密钥与 policy provisioning中继服务保留OPENPENCIL_COLLAB_RELAY_TICKET_POLICY_FILE、OPENPENCIL_COLLAB_RELAY_LOCATOR_KEYS_FILE、OPENPENCIL_COLLAB_RELAY_X25519_KEYS_FILElocator 服务保留OPENPENCIL_COLLAB_LOCATOR_TICKET_POLICY_FILE这些仍是受限的运营/HSM 侧生产输入不是桌面发现设置。公开与私有所有权默认开源例外才私有默认开源仅当公开会暴露账号凭证或生产签名密钥时才保持私有。组件仓库边界理由线上协议、精确 diff/apply、规范哈希、owner/guest 状态机公开crates/op-collab确定性行为可审查wasm 兼容Noise/TCP 帧、准入、上限、队列、发现、密钥存储接口与安全回退公开crates/op-collab-transport安全来自开放协议与被审计库票证 claims/profile、签名 union-policy 与 legacy JWKS 解析/缓存、Ed25519 verifier、provider trait、stub、ABI 声明公开crates/op-auth-bridge信任决策必须可审查中继协议/客户端/服务端、签名 locator verifier、bootstrap verifier/缓存、规范线上与回滚测试公开仓库 crates 与桌面 host端点、密钥选择与数据面信任决策必须可审查签名 bootstrap HTTP 服务与部署私有op-hub服务公开签名响应在线服务不持根私钥私有部署拓扑不是密码学控制确定性 issuer 与轮换 fixtures公开仅测试或test-issuer编译含刻意公开的种子与.invalidissuer生产 verifier 拒绝该 issuerHost 集成、UI、恢复、诊断与 smoke 测试公开无凭证处理理由隐藏设备令牌与认证票证请求实现私有op-platformreal provider持有账号凭证与平台存储集成票证签发 policy、生产签名/HSM 密钥、轮换与撤销私有zseven-sso含生产签名权威与账号 policy运行时票证、Noise 私钥、设备令牌、HSM 材料永不提交密钥是运行时数据不是源码资产公开测试密钥不是备份或开发生产密钥。启用test-issuer的构建仍必须显式固定测试 verifier生产构造函数默认https://sso.zseven.cn。桌面可为受控区域部署显式使用启动固定的协作 issuer/JWKS 值独立于其凭证源。威胁、控制与残余风险逐项分析LAN 拦截与主动中间人Noise XX 加密流量并认证双端静态私钥的持有。签名票证将已认证账号/设备 claims 绑定到该握手观测到的远端静态密钥因此替换或中转的静态密钥会在准入失败。本地网络仍可见流量端点、时序与大致体积——M1 不提供匿名或流量整形隐蔽。发现欺骗与隐私mDNS 不受信任且可伪造。广告不含账号、邮箱、设备名、文档标题、会话标题或稳定主机名。消费端严格解析id、v、p字段discovery_bonjour_txt.rs 逐项校验 keyvalue 语法、拒绝空键/空值与重复键封顶发现缓存、尊重移除并在泄露前完成 Noise 票证认证。macOS 上活跃的DNSServiceGetAddrInfo每 10 秒刷新一次 30 秒上层租约移除即清除死亡 worker 在该租约内老化。有界事件通道满时只丢弃当前通知靠下一心跳重新发布当前状态接收方断连才是停止 worker 的条件。macOS 源 plist 声明规范的本地网络用途描述与精确的_openpencil-collab._tcpNSBonjourServices两个 bundle 路径经同一 helper 修补并验证最终 plist发布流程在 notarization 前验证精确 app plist——这是打包/TCC 前置条件不是 peer 认证。攻击者可广告大量端点或发起连接尝试缓存、pending-handshake、per-IP 与活跃连接上限可降低影响但不能阻止网络链路耗尽。中继运营方可见性中继永远看不到文档内容隧道 payload 是与 LAN 路径逐字节相同的 prelude、NoiseXX_25519_ChaChaPoly_BLAKE2s握手与加密 record 的桥接pairing 后帧作为不透明二进制转发且不被解析准入在 Noise 通道内重建peer 准入从不依赖中继视角。中继在其自有 TLS 终结器之后明文可见的不只是狭义路由元数据文档明确列出完整准入票证WSSAuthorization: Bearer凭证中继验证claims 携带全局账号 subject、设备 id存在时含显示名与 avatar URL。协作跨账号因此中继运营方可重建哪些账号在协作、从哪些设备、何时——这是社交图谱而不只是单账号设备群。这是最小化凭证的最强论据故文档将最小化列为开放工作而非锦上添花。注意中继只读取票证中一个字段——它钳制会话截止时间的 expirysubject、device id、jti、显示名、avatar URL 只做格式检查后丢弃从不比较、存储或由认证路径返回因此该泄露是多余而非承重的。client hello路由 id、角色、调用方设备 X25519 公钥、持有证明、内嵌签名 locatorowner Noise 静态密钥、区域、有效期窗口、discovery id。流量形状配对时间、消息计数与体积。明文服务端 prelude作为 Noise prologue 必然先于握手携带session_id与epoch——会话生命周期内的稳定关联句柄discovery id 每五分钟轮换。残余风险这是向中继运营方的泄露不是向网络的泄露且是认证后才转发式中继运营的固有属性第一方中继接受该风险。两种缓解已调研一是 claim 最小化的中继凭证不携带账号身份是开放工作且已有设计——中继的授权输出是(route, role, expiry)均不来自票证身份 claims凭证可缩减为 audience-scoped 令牌仅含 issuer、audience、版本、scope、调用方 X25519 密钥的通道绑定与时间界。两个诚实限制(1) 它去标识化但不使中继视角不可关联——设备 X25519 静态密钥持久且在每个 hello 明文传输运营方仍建立永久设备图谱只是无法命名节点或将其接入 support/billing 等第一方服务的账号命名空间(2) 同时运行 issuer 与中继的运营方可通过通道绑定密钥 签发时间戳重识别连接对第一方而言该变化近乎象征性其真实价值在于对抗中继被攻破、日志泄露、第三方/区域中继运营方与中继范围的法务请求。实现被私有 provider ABI铸造凭证者阻塞。二是用绑定承诺替换 prelude 明文session_id已原型化并被否决prelude 不只是绑定它是 guest 获知 session id 的唯一通道——LAN 加入路径直接从 prelude 读取、mDNS 记录刻意不携带会话标识符、中继邀请只携带 locator 与路由能力承诺方案将把 session id 发布到 guest 连接前可达的某处LAN 上即 mDNS 记录等于用一个中继运营方可见的句柄换取广播给整个本地网络的句柄。边际收益也窄中继本已在整个会话持有签名 locator 内的discovery_id只关闭跨 epoch 关联彻底解决需在邀请中加入 session id 并改 LAN 加入握手——是产品变更而非协议微调。因此当前部署要求是中继与 locator 运营方不得持久化 bearer 头、hello 字节或客户端地址超过事件所需且完全不得记录任何中继/locator 代码路径不把票证、密钥或身份材料插进日志语句两个二进制将日志过滤器钳制到各自 crate依赖追踪无法被开启来倾倒线上数据。邀请泄露与再分享中继邀请是 bearer 能力任何持有者都可触达该路由的配对步骤故按机密处理——绝不放入 URL 路径或查询配对窗口上限一小时并绑定签名 locator 的区域与有效期窗口。它本身不授予准入owner 必须仍批准每位 guestguest 必须在 Noise 通道内出示绑定其设备密钥的有效票证。残余风险泄露或被转发的邀请让意外方消耗配对容量并触达 owner 批准提示——这是社交工程面对看起来合理的名字的批准提示而非密码学面。授权参与者的刻意再分享超出范围。短配对码10 字符配对码是生产会话暴露的唯一邀请面约 500 字符的opc1_fragment 已从所有 UI 退役仅作为加入时的隐藏兼容解析与开发无签名循环保留。完整邀请在 locator 控制面以从码派生的密钥加密后encrypt-then-MAC存储code_id是码的独立派生因此持存储 blob 不泄露封印密钥持查找 id 不泄露码。首字符命名中继区域guest 因此只向恰好一个控制面 claimcode_id与 guest 的 bearer 票证绝不呈现给非会话区域。其余九字符随机45 位熵。暴力控制在线猜测必须通过票证认证、per-IP 与全局限速的 HTTPS 端点呈现code_id本身要求先有码每个存储 blob 随 locator 配对窗口≤ 1 小时过期并携带有界 per-code claim 预算。存储滥用控制slot 在过期前绝不释放耗尽 claim 预算留下 tombstone码持有者无法烧光预算后在同一 id 下替换自己的密封邀请条目归属到票证验证过的设备密钥并有 per-device 上限单账号无法侵占全局容量。接受的残余风险持有密封 blob 的控制面运营方可离线磨 45 位码空间。因封印密钥是对称的这是真实性损失兼机密性损失——磨码运营方可伪造 guest 声称的 blob 并把加入导向其控制的会话。两道闸门保留伪造 locator 必须在同区域签名密钥下验证该运营方确实控制且 guest 在任何文档数据应用前仍看到 owner 身份确认屏伪造还必须通过显示 owner 账号的人工核对。不能接受运营方可磨码的 owner 应改走 LAN 分享。码发布是 owner 侧 best-effort失败时会话表面显示中继通知并仅保持 LAN 可加入。会话期间的本地进程边界桌面在127.0.0.1暴露 HTTP JSON-RPC MCP 端点供外部 agent CLI 驱动编辑器。会话期间该端点读写准入系统守护的同一文档但它是本地边界其 per-instance 令牌认证身份探测与关闭而文档工具调用对任何同用户进程开放端点不校验Origin/Host。残余风险任何本地进程——或经 DNS rebinding 的同机浏览器网页——可不经会话准入读取或变更共享文档。CollabGatePolicy可在会话中拒绝 MCP 变更但读取与边界本身仍在协作信任模型之外。对单用户桌面敌意本地进程本已持有磁盘上的文档这是接受的此处点名的原因在于协作功能把爆炸半径从该用户的文件扩大到每位参与者的实时文档。Origin/Host 校验与文档工具调用认证是开放工作。伪造、重放、错账号或降级票证verifier 只接受紧凑 JWS要求受保护头algEd25519、typopenpencil-collabjwt、有界kid。claims 精确包括固定 issuer/audience/version/scope、规范 subject/device id、通道绑定、iat/nbf/exp/jti。JWKS 数据只从固定 HTTPS 端点获取严格解析为公开 OKP/Ed25519 验证密钥collab_jwks.rs 校验crv Ed25519。被盗票证只能配合绑定的 Noise 私钥并在签名 expiry 前使用。M1 的撤销服务级目标即票证生命周期当前至多 15 分钟登出阻止续期但不追溯作废已签发票证。若即时撤销成为产品需求需要在线撤销 epoch 或 introspection 机制。未知签名密钥触发节流刷新JWKS 缓存过期项在刷新失败时 fail-closed密钥轮换必须发布 overlap 密钥至少覆盖最大票证生命周期与缓存间隔。多区域部署中区域票证仅在其签名密钥出现在每个客户端观测到的同一逻辑 union JWKS 后才被接受。固定端点 URL 可以是区域本地镜像但其规范 keyset 必须与每面其他镜像一致将客户端路由到部分区域 keyset 会造成非对称准入与续期失败是部署错误绝不是回退到票证提供密钥或第二 issuer 的理由。续期区分票证无效的证据与信任源不可用刷新成功 keyset 中缺失的 key id 被拒绝传输、缓存、畸形 keyset、非法 ETag、拒绝响应与响应上限失败不发布续期票证且仅在先前已验证票证仍有效期间重试持续失败在旧票证过期前关闭会话。生产原生 fetcher 将取消传播穿过缓存锁等待、异步 HTTPS 发送与每个流式 body 块取消丢弃未完成请求 future、回滚刷新/未知密钥计时标记、关闭 pending 结果通道并在不等待网络超时或不发布迟到结果的情况下 join worker。trait 默认只能在阻塞第三方 fetch 前后检查其他生产阻塞适配器必须覆盖可取消方法。Bootstrap 镜像被攻破、回滚与区域混淆被攻破的 op-hub 镜像、DNS 路径、CDN 或 TLS 终结器可拒绝服务、重放字节或返回畸形数据但无有效域分隔根签名就无法授权新端点或公钥。规范 JSON 与 base64url 检查去除备选编码有界响应/payload/区域/密钥计数约束解析器与分配工作。非法签名时间窗、弱密钥、未知根、畸形 ETag、更低代数或同代重写都 fail-closed。LKG 是可用性控制不是信任旁路仅在签名与有效期窗口仍验证时可用不掩盖畸形 200 响应。运营方仍须把缓存删除、损坏、不可读、持久化失败、bootstrap URL 变更与未同步的区域镜像视为回滚风险事件——因为无有效缓存时客户端没有持久跨端点全局代数账本。生产发布必须向境内与境外镜像发布逐字节相同的 envelope、推进 op-hub 最低代数下限并在签名快照内保留 overlap 区域密钥。轮换内嵌根仍需协调的客户端与服务端发布有界双根集合支持该发布但生产桌面不从运行时配置加载附加根。邀请的签名home_region是权威的物理地理位置、bootstrap 镜像位置、DNS 应答与边缘 ingress 都不授权另一区域。海外客户端若无法为 CN-home 邀请触达 CN entry则关闭或报告中继不可用绝不混用 Global 端点/密钥材料或静默创建 Global-home 会话。哪些账号可配对协作跨账号持可信 issuer 有效票证的 peer 可与任何其他账号的 peer 配对。账号不再是授权本身取而代之的是刻意不对称的规则因为两侧回答这是谁的能力不同接受 guest 的 owner准入任何已签发账号。此层不决定 guest 能否加入——由人在批准提示决定提示展示已验证身份且准入状态机使其不可跳过Active只能经OwnerAuthorized到达guest.rs 中以GuestConnectionState::Active表达活动态。经邀请或中继加入的 guest准入任何已签发账号因为邀请的签名 locator 已钉住 owner 的 Noise 静态密钥且该 pin 在准入运行前检查。设备在账号背后被认证这正是加入陌生人会话安全的原因。经无 pin LAN 发现加入的 guest仍要求同一账号。guest 无批准提示——它接受什么就静默接受什么——无 pin LAN 加入时无他物命名 peermDNS 可伪造且无预知密钥。此时 subject就是认证放宽它会让段内任何持有效票证者冒充 owner 而不可察觉。放宽账号不放松其他任何东西issuer 仍必须是固定者、票证未过期、且必须绑定连接上实际观测的 Noise 静态密钥。续期连续性也不变会话的 issuer、subject、device id 与静态密钥不得中途变更。残余风险无 pin LAN 路径保持仅同账号开放它需要 guest 确认加入对象的方式——是用户面对的产品决策不是协议变更。未授权编辑与身份注入已验证身份元数据只由准入边界构造。owner 状态分配角色并重写权威 author/sequence 字段。viewer 编辑、counter 间隙、过期 base、失败前置条件、不支持操作与会话/epoch 失配都是类型化拒绝路径。认证的Participantroster 线上投影只输出已验证显示名与 HTTPS avatar URL伴随 epoch-local participant/peer id 与 role持久 subject 与 device id 保留在不可序列化的连接 principal 内绝不进入 Welcome、presence、commit 或 roster 消息session_roster.rs 的活动 roster 投影即源自连接 principal 的认证元数据。桌面 host 只把 URL 复制进进程本地、generation 作用域的 avatar 注册表它不存在于文档、EditorState、收窄的离线程快照与脱敏Debug中拉取的图像字节绝不进入协作协议。owner 可有意发送文档内容或授予编辑权限——那是协作动作不是攻击者旁路。M1 不保护文档免受泄露后授权恶意参与者的侵害。解析、内存、CPU 与队列耗尽上限是带硬最大值的类型化配置覆盖紧凑票证、JWKS 体与密钥计数、标识符、操作计数、验证访问数、树深度、文档节点数、presence、envelope、事务/快照传输、Noise record 与握手、重组、连接计数、per-peer/全局队列、速率桶、超时、提交历史与发现缓存条目。源码实例如 config.rsMAX_NOISE_PLAINTEXT_BYTES 60 KiB、MAX_SNAPSHOT_TRANSFER_BYTES 64 MiB、MAX_TXN_TRANSFER_BYTES 4 MiB、DEFAULT_MAX_PENDING_HANDSHAKES 128、DEFAULT_MAX_PENDING_HANDSHAKES_PER_IP 4、DEFAULT_MAX_ACTIVE_CONNECTIONS 64、MAX_CONFIGURED_CONNECTIONS 256、MAX_CONFIGURED_QUEUE_ITEMS 1024、MAX_CONFIGURED_QUEUE_BYTES 512 MiB等并对可达上限做编译期断言。长度与计数在分配完整缓冲或应用变更前检查无效刷新不替换有效 JWKS 缓存精确 apply 是事务性的拒绝不得留下部分文档变更。每个新的外部受控集合、字符串、传输、解析器、重试、缓存或队列要求① 具名默认与硬最大值② 构造时验证的类型化配置或包装③ 类型化、日志安全的错误④ 上限处与超上限一个单位的测试⑤ 出站执行与入站执行并重。本地密钥窃取与文件系统攻击私钥缓冲实现清零并脱敏Debug。开放OsKeyStore使用 macOS Keychain、Windows Credential Manager 或 Linux Secret Service 存储设备静态密钥os_key_store.rs 注释明示锁定的、不可访问的、歧义的或畸形平台存储项 fail-closed绝不静默创建替代身份。Unix 文件存储是窄作用域回退仅在所选平台存储明确报告不可用时使用专用0700目录、0600文件、no-follow 打开、原子安装、长度/全零检查并经加固读取路径重开。锁定或临时不可访问的平台存储不是不可用不得触发回退。文件存储非硬件支撑无法防护被攻破的用户账号或进程缺少所需文件系统保证的平台 fail-closed。平台密钥存储适配器可保持公开只有其运行时秘密值是私有的。日志、崩溃报告与 fixtures跨越公开边界的错误含关闭代码与大小绝不含远端 body 或凭证。票证、密钥、已验证身份、签名 profile、roster profile 与文档容器的Debug必须脱敏内容。生产日志不得含票证、Noise 密钥、完整快照、文档文本、邮箱、subject、device id、显示名或 avatar URL。仓库 fixtures 不得含 PEM 私钥、生产样式令牌、紧凑 bearer 票证或复制的运行时密钥文件确定性测试签名材料只允许在test-issuer/测试编译门后且必须使用非生产.invalidissuer。永久 Go-to-Rust 互操作向量遵循该边界其公共 fixture 将非生产紧凑 JWS 存为三个独立 segment并将 segment 加公共 JWKS 用一个 SHA-256 摘要锁住Rust 测试在内存中拼接并验证私有仓库 producer 测试调用真实 Go issuer 服务并独立锁同一 segment/JWKS/摘要。它不含设备令牌、生产身份、签名私钥、HSM 元数据或授权 policy。供应链与密码学降级密码学算法与协议版本是固定的不由 peer 选择未知版本与算法 fail-closed。依赖保持于仓库固定 lockfile、cargo-deny advisories/bans 检查与定向协作 CI 覆盖之下。改变 Noise pattern、JWS 算法、规范编码、密钥类型、协议版本、依赖源或最大尺寸是安全评审事件不是常规重构。已提交的认证静态归档是可检查的客户端输入不是信任边界。当前 ABI-v1 矩阵是 legacy 兼容通道SHA-256 与窄 C ABI 已审计但归档仍泄露 source/debug/private-symbol 元数据不声称已 strip 或混淆。生产 ABI-v2 要求私有源加固重建加 Ed25519 签名来源清单覆盖精确工件哈希、目标、版本、ABI、源码修订、build id 与加固 profile缺失或非法来源 fail-closed。混淆可提高逆向成本但授权与票证信任仍根植于服务端持有的签名密钥与 policy。归档静态加密仅在解密密钥保留于私有发布系统时有用提交密钥、内嵌build.rs或随密文旁送客户端解密器都不会实质提高逆向边界反而使可复现公共构建具有误导性——已发布客户端二进制即使构建输入被加密仍可检查。自动化边界门禁本地运行见 check-collab-security-boundaries.sh 与配套测试bash tools/check-collab-security-boundaries.sh bash tools/check-collab-security-boundaries.test.sh bash tools/check-op-auth-prebuilt.sh bash tools/check-op-auth-prebuilt.test.sh bash tools/check-macos-bundle-plist.sh bash tools/check-macos-bundle-plist.test.sh门禁验证op-collab的 wasm 依赖闭包不含原生传输、认证、网络或随机密钥依赖每个op-collab*crate 与op-auth-bridge从 MIT 工作区许可解析其许可必需的类型化协议、apply、传输、队列与硬上限锚点存在协作源码不返回Result_, String测试 issuer/签名 fixtures 保持在显式测试 feature 门后已提交认证归档保持其精确哈希与文档化 C ABI加固 ABI-v2 工件要求签名来源且不含源码路径、debug 标记或私有 Rust 模块符号高信号私钥、令牌、紧凑票证与敏感文件模式不存在两个 macOS bundle 路径与 notarization 前发布路径保留精确本地网络与 Bonjour plist 声明协作 Rust 文件保持在仓库 800 行上限内。独立collab-security.yml工作流还将op-collab编译为wasm32-unknown-unknown运行完整协议/状态机/属性套件检查传输上限与生产 verifier 隔离并以隔离的公共测试 issuer 演练双进程 Noise/票证协作 smoke。静态扫描是纵深防御不是秘密扫描或安全评审替代——生产凭证还必须由仓库宿主秘密扫描与事件响应流程阻止。安全评审触发条件任一变更触发安全评审增改 claim、信任根、密钥来源、密码学算法或协议版本在准入完成前允许文档或 presence 数据增加发现元数据或日志字段改变过期、续期、轮换、撤销或 owner-leave 行为引入外部受控分配、重试、缓存或队列新增协作 crate 或移动跨公开/私有边界代码为op-collab添加原生依赖或启用新默认 feature改变持久私钥存储。安全报告应指明受影响边界避免附带实时票证、凭证、私钥或文档内容。赞分享【免费下载链接】openpencilThe worlds first open-source AI-native vector design tool and the first to feature concurrent Agent Teams. Design-as-Code. Turn prompts into UI directly on the live canvas. A modern alternative to Pencil.项目地址https://gitcode.com/gh_mirrors/op/openpencil点击查看免费下载相关推荐Windmill 后端威胁模型深度解析任意代码执行引擎与凭证保险库的安全边界Windmill 后端威胁模型深度解析任意代码执行引擎与凭证保险库的安全边界 导读 本文以 Windmill 仓库内的 backend/THREAT_MODE后端工作流自动化任务调度低代码前端pxpipe 安全模型深度解析信任边界、威胁控制与可验证的安全清单pxpipe 安全模型深度解析信任边界、威胁控制与可验证的安全清单 导读 SECURITY_MODEL.md https://link.gitcode.com游戏里的 DLSS 太旧用 DLSS Swapper 快速切换版本完整指南游戏里的 DLSS 太旧用 DLSS Swapper 快速切换版本完整指南 DLSS Swapper 是一款免费的 Windows 开源工具统一管理游戏内桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考