codex-app-mirror安全设计详解EdDSA字节级签名固定公钥如何守护Codex安装包真实性【免费下载链接】codex-app-mirror原样镜像官方 Codex 桌面应用:每 15 分钟探测、SHA256 可校验、国内直连下载、 Mac 可增量更新 | Verbatim, verifiable mirror of the official Codex desktop app — probed every 15 min, with a Sparkle delta-update feed.项目地址: https://gitcode.com/gh_mirrors/co/codex-app-mirrorcodex-app-mirror是一个面向 OpenAI Codex 桌面应用的安装包镜像项目它每 15 分钟探测一次上游把官方 Windows MSIX 与 macOS DMG原样、可校验地发布出来并为 macOS 提供 Sparkle 增量更新源。既然安装包要经过第三方镜像流转如何保证拿到的就是官方原件就成了整个项目的核心命题。本文用大白话拆解它的三道安全防线EdDSA 字节级签名、**固定公钥pinned key**与macOS 身份门禁让你看懂镜像不篡改到底是怎么被技术强制的而不是口头承诺。一、先搞懂一个前提为什么镜像项目最怕换包想象你在下载一个几 GB 的安装包。如果中途有人把官方包换成自己的包哪怕只改一个字节植入后门普通用户根本无从察觉。这就是下载渠道的信任问题。codex-app-mirror的解法很硬核每一道环节都把与官方字节完全一致变成可机器验证的事实任何一步校验失败整个发布流程直接中止fail-closed宁可不发也不发错。下面逐一拆解。二、第一道防线EdDSA 字节级签名签名跟着字节走什么是 EdDSA 签名30 秒科普EdDSA基于椭圆曲线的数字签名算法常见实现是 Ed25519可以理解为官方给文件盖的一枚防伪印章OpenAI 用私钥给 Sparkle 更新归档.zip算出一串签名任何人拿公钥就能验签文件改一个字节签名立刻失效关键在于签名签的是文件的原始字节跟文件存放在哪里、URL 叫什么名字完全无关。Codex 的 macOS 更新源appcast里每个enclosure都带有sparkle:edSignature属性就是这枚印章。镜像的关键操作只换地址不动字节镜像脚本 build-appcast.sh 在生成自己的 appcast 时只做一件事把下载地址url从 OpenAI 的服务器换成镜像地址其余属性——包括sparkle:edSignature签名值——逐字原样保留。对应地下载脚本 download-macos.sh 把官方.zip归档逐字节复制verbatim copy归档字节被原样拷贝这正是官方 EdDSA 签名保持有效的前提镜像从不运行 BinaryDelta从不重新计算签名。换句话说官方做了什么镜像做了什么结果用私钥对归档字节签名原样复制字节 原样复制签名客户端用 OpenAI 公钥验签依然通过—若镜像擅自改动 1 个字节验签必然失败更新直接拒绝所以镜像无法伪造签名不是一句口号而是密码学的必然没有 OpenAI 私钥任何修改都过不了客户端的 EdDSA 验签。探测阶段同样严格probe-release.sh 在抓取官方 appcast 时会把每个增量差量包delta的全部属性原样记录并校验其下载 URL 是否为官方 HTTPS 地址、文件名是否安全合法从源头掐掉投毒的可能。三、第二道防线固定公钥拒绝听信上游字节级复制保证了签名对得上但还有一个更深的问题客户端拿哪把公钥去验签如果公钥也是每次从网络动态获取攻击者只要同时篡改文件 公钥就能骗过验签这叫公钥注入攻击。codex-app-mirror的做法是把 OpenAI 的 Ed25519 公钥硬编码写死在仓库里pinned key。在 read-macos-metadata.sh 中预期签名团队 ID2DC432GLL2OpenAI 的 Apple 开发者团队预期 Sparkle 公钥mNfr1v9t63BfgDtlw4C8lRvSY6uMggIXABDOCi3tS6k这意味着无论上游 appcast 将来怎么写、网络上返回什么只要验签用的公钥不是这把写死的钥匙流程就报错退出。公钥钉死在仓库中、可被社区审计是整条信任链的锚点。同样的思路也用在了Linux Preview 通道probe-linux-preview.sh 使用固定在仓库里的 codex-linux-repository-key.b64 公钥先核对密钥指纹3BFA0E4AE8B8CC16A2D9BA684A3B4A566C4660E4是否一致再用gpgv验证 OpenAI 官方 APT 仓库的InRelease与 RPM 仓库的repomd.xml签名probe-linux-preview.sh——仓库元数据不被官方私钥签过一个包都不会下载。校验脚本 verify-linux-preview.sh 对同一把固定密钥做了双重门禁。四、第三道防线macOS 身份门禁长得像不算数光验字节还不够镜像还回答了一个问题这个 DMG 里装的应用真的是 OpenAI 的 Codex 吗read-macos-metadata.sh 在 macOS 上挂载 DMG 后执行一组身份门禁检查任何一条不满足立即失败只有一个顶层.app——防止夹带隐藏应用find_single_top_level_appBundle ID 必须匹配稳定通道必须是com.openai.codexBeta 通道必须是com.openai.codex.beta写死在脚本里不接受差不多read-macos-metadata.sh内置公钥核对读取应用Info.plist中的SUPublicEDKey必须与第三部分写死的固定公钥一致——这等于让应用自带验签钥匙与仓库钉死的钥匙互相咬合防止有人替换应用后偷梁换柱Apple 代码签名全量校验运行codesign --verify --deep --strict逐层验证签名链并核对 TeamIdentifier 是否等于2DC432GLL2read-macos-metadata.sh。这套门禁的妙处在于它不信任文件名、不信任版本号、不信任任何看起来对的东西只信任 Apple 的签名体系和密码学验证。五、配套保险尺寸校验与 SHA256 双重核对三道主防线之外还有两个低成本但高效的保险丝下载即量尺寸download-macos.sh 中的validate_size会把每个下载文件的实际字节数与探测阶段从官方响应头里读到的Content-Length精确比对差 1 个字节就中止——传输被截断、被替换都躲不过SHA256 全量清单每次发布都会生成 SHA256SUMS.txt 与release-manifest.json上游指纹用户可手动二次核对探测阶段还会用这些指纹与上一次 Release 对比上游没变就不重复发版减少无意义的资产流转probe-release.sh 甚至会把 appcast 声明的长度与真实对象大小对齐。六、总结一条密码学闭环的信任链把上面的环节串起来就是一条完整的信任链官方私钥签名归档 ──► 镜像逐字节复制不动签名 │ ├─► 固定公钥钉死在仓库公钥可审计 ├─► macOS 身份门禁Bundle ID Team ID 代码签名 ├─► 字节尺寸核对下载即校验 └─► SHA256SUMS.txt 供用户终验防线防的是什么核心文件EdDSA 字节级签名镜像篡改文件字节build-appcast.sh固定公钥公钥注入、供应链替换read-macos-metadata.shmacOS 身份门禁冒充官方应用read-macos-metadata.shLinux 仓库密钥固定伪造 APT/RPM 仓库probe-linux-preview.sh对普通用户而言你只需要记住一句话codex-app-mirror 的每个字节都可以被验证是官方的——下载后顺手核对一下SHA256SUMS.txt你的 Codex 安装包就经过了四重保险的背书。更多通道策略与更新机制的说明可参考 docs/beta-prerelease.md 与项目主文档 README.md。【免费下载链接】codex-app-mirror原样镜像官方 Codex 桌面应用:每 15 分钟探测、SHA256 可校验、国内直连下载、 Mac 可增量更新 | Verbatim, verifiable mirror of the official Codex desktop app — probed every 15 min, with a Sparkle delta-update feed.项目地址: https://gitcode.com/gh_mirrors/co/codex-app-mirror创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考