如何更改 git-crypt 密钥

JDi*_*teo 3 git git-crypt

我使用git-crypt分叉了一个 repo,我需要更新 git-crypt 密钥,以便上游 git-crypt 密钥无法解密新的 repo。

该git-crypt help文档和README似乎没有解释如何改变一个git-加密密钥。

我尝试了各种擦除 git-crypt 配置并重新初始化的方法。不幸的是,所有这样做的尝试似乎都破坏了各种事情,例如 git diff 显示诸如smudge filter git-crypt failed. 其中一些行为记录在在已初始化的存储库上运行git-crypt init会使数据不可读。https://github.com/AGWA/git-crypt/issues/47评论中的任何建议都无法防止 git diff 致命错误。(我对 git diff 显示未加密的二进制文件历史记录的无用输出感到满意,但在某些提交中给出致命错误是不行的,即使是未加密的文件也无法进行差异git diff。)

这似乎是 git-crypt 的一个主要要求,所以我不敢相信这不受支持,例如,如果您因为有人离开公司而需要轮换 git-crypt 密钥。

小智 6

通过一些工作,您可以旋转中央密钥(不是 gpg,我不知道)

  1. 删除 .gitattributes 文件。这将解密您的秘密。
  2. 隐藏更改(在本地存储未加密的机密)
  3. 删除 .gitattributes 和所有机密文件。犯罪。(操作 2+3 是这样,因为您不必提交任何明文机密)
  4. 做'git-crypt lock',在这种情况下只是扔掉你的钥匙
  5. 执行 'git-crypt init' 来创建一个新密钥。
  6. 取消隐藏的文件并重新创建 .gitattributes
  7. 犯罪

请注意,协作者需要在拉取新更改之前执行“git-crypt lock”,以便丢弃旧密钥并仅在纯 git 模式下处理文本文件(尽管机密仍然加密)。

更新后,只需使用新密钥 git-crypt 解锁。

  • 这确实会更改新文件和现有文件新版本的加密密钥,但应该注意旧版本仍然使用 git 历史记录中的旧密钥进行加密。 (4认同)

JDi*_*teo 4

正如https://github.com/AGWA/git-crypt/issues/61中明确指出的,git-crypt 不支持旋转 git-crypt 密钥。


我最终重写了 git 历史记录以删除旧 git-crypt 密钥的所有先前历史记录(我从 git 历史记录中完全删除了加密文件),然后创建了一个新密钥并签入了加密文件。这既耗时又痛苦。

此限制记录在https://github.com/AGWA/git-crypt/#limitations。如果您需要轮换密钥,您可能需要考虑不使用 git-crypt。