【问题标题】:git-crypt cleartext protection?git-crypt 明文保护?
【发布时间】:2014-03-03 20:38:41
【问题描述】:

爱 git。喜欢 git-crypt。

曾几何时,有一个受 git-crypt 保护的 repo 和一组开发该 repo 的编码人员。不知何故,让我们责怪外星人,一个文件以未加密的形式提交。

该错误被及早发现并且没有造成任何伤害,但这引出了我的问题:

在您控制服务器(因此不包括 github)的半集中式设置(gitlab,一个受信任的存储库...)中,如果有的话,您会使用哪些保护措施来确保机密文件不会以未加密的方式提交形式?

【问题讨论】:

  • 嗯,你看过 git hooks 吗?
  • 这将涉及到我自己的编写,虽然我并不反对,但发布问题的想法是看看是否其他人已经编写了这样的钩子。

标签: git gitlab


【解决方案1】:

正如您在git-crypt issue 104 中看到的,当尝试解密实际上 加密的文件时会出现警告:

git-crypt: Warning: file not encrypted

来自smudge() function,它读取文件的第一个字符:

// Read the header to get the nonce and make sure it's actually encrypted
unsigned char       header[10 + Aes_ctr_decryptor::NONCE_LEN];
std::cin.read(reinterpret_cast<char*>(header), sizeof(header));
if (std::cin.gcount() != sizeof(header) || std::memcmp(header, "\0GITCRYPT\0", 10) != 0) {

这意味着您可以编写pre-receive hook which will unpack the pushed files 并读取第一个NONCE (12) characters 以检查文件是否以"\0GITCRYPT\0" 开头。

如果其中一个推送的文件没有(并且是 .gitattributes file 引用的文件之一),则返回 1:推送将被拒绝。

重点是:server-side hook(因为您控制服务器端)是执行策略的最可靠方式(例如,此处仅加密文件)

【讨论】: