You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Sparkle的EdDSA(ed25519)签名私钥迁移至新Mac?

解决Sparkle EdDSA私钥导出迁移问题及密钥轮换说明

一、导出/迁移EdDSA私钥的可行方案

针对macOS 10.15.7上钥匙串无法导出EdDSA私钥(导出选项灰色)的问题,可尝试以下操作:

  • 通过命令行导出密钥:
    打开终端,先执行命令列出钥匙串中的目标密钥,替换引号内的名称为你Sparkle密钥的实际标识:
    security find-generic-password -l "Sparkle EdDSA Key" -g
    
    找到密钥后,执行导出命令将密钥保存为PEM文件:
    security export -k ~/Library/Keychains/login.keychain-db -t privkey -l "Sparkle EdDSA Key" -f pkcs8 -o ~/Desktop/sparkle-private-key.pem
    
    输入钥匙串密码完成导出后,将PEM文件复制到新Mac,再通过命令行导入新钥匙串:
    security import ~/Desktop/sparkle-private-key.pem -k ~/Library/Keychains/login.keychain-db -t privkey -P "你的密钥密码"
    
  • 调整密钥访问权限:
    打开钥匙串访问,找到目标私钥右键选择「显示简介」,切换到「访问控制」标签页,勾选「允许所有应用程序访问此项目」,或添加/usr/bin/security路径后,重新尝试导出操作。
  • 整体备份钥匙串恢复:
    在旧Mac的钥匙串访问中,选择「文件」->「导出钥匙串」,将整个登录钥匙串导出为.keychain文件,复制到新Mac后双击导入,私钥会同步迁移至新系统的钥匙串。

二、生成新密钥对原项目的影响

直接使用generate_keys生成新密钥会导致旧版本客户端无法验证新更新包的签名——因为旧客户端仅信任原公钥,因此不能直接替换密钥,必须配合密钥轮换机制完成过渡。

三、Sparkle密钥轮换(Key Rotation)的含义

密钥轮换是Sparkle提供的平滑过渡机制,核心是让新旧客户端都能正常验证更新,步骤如下:

  1. 使用generate_keys生成新的EdDSA密钥对
  2. 在更新配置文件appcast.xml中,同时保留原公钥和新公钥:可在全局配置中声明多个公钥,或在更新条目里添加新的<sparkle:publicKey>标签
  3. 用新密钥签名后续的更新包,同时保留旧更新包的可用性(供未升级的旧客户端下载)
  4. 等待足够周期(确保绝大多数用户已升级到包含新公钥的版本)后,再移除原公钥,完全切换到新密钥

此过程中,旧客户端用原公钥验证旧更新包,新客户端则可验证新更新包,实现无中断过渡。


内容的提问来源于stack exchange,提问作者soundflix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 20:02:40