git-crypt 学习笔记

从 git-crypt 的官方文档中可知

git-crypt 使用 AES-256 在 CTR 模式下对文件进行加密,并且使用基于文件 SHA-1 HMAC 生成的合成初始化向量(IV)。这种操作模式在确定性选择明文攻击下被证明具有语义安全性,确保除了判断两个文件是否完全相同之外,不会泄露其他任何信息。

git-crypt 是结合了 GPG(GNU Privacy Guard)和 AES 加密技术的一个工具。它允许通过 GPG 公钥/私钥系统来管理和分发加密密钥,从而实现对 Git 仓库中特定文件的安全保护。对于每个需要加密的文件,git-crypt 利用 AES-256 加密算法在 CTR 模式下进行加密,以保证数据安全。

因此,git-crypt 在实际应用中整合了 GPG 的密钥管理和 AES 加密算法,实现了透明的文件加密与解密功能,使得在版本控制的同时能够保护敏感信息的安全。

也就是说,git-crypt 是一个将 GPG 和 AES 结合的项目,GPG 来管理用户权限,AES 来加密文件。

环境准备

要把从 git-crypt 下载的 git-crypt-0.7.0-x86_64.exe 重命名为 git-crypt.exe,否则检测不到环境变量

git-crypt.exe 放到 git\bin 目录下

步骤

1. 初始化仓库

git init

2. 初始化 git-crypt

git-crypt init

3. 添加 GPG 用户

git-crypt add-gpg-user 

4. 配置加密文件

.gitattributes 文件中添加

## 加密指定文件
secretfile filter=git-crypt diff=git-crypt

## 加密指定文件夹下的md文件
Test/*.md filter=git-crypt diff=git-crypt

## 加密指定文件夹下的所有文件
Test/** filter=git-crypt diff=git-crypt

5. 提交更改

git add .gitattributes secret.txt
git commit -m "Add git-crypt configuration"
git push

6. 解密文件

git-crypt unlock

相关命令

$ git-crypt status
not encrypted: .gitattributes
    encrypted: secretfile

git-crypt 工作流示意图

(由 DeepSeek-R1 生成)

graph TD A[管理员] --> B[初始化仓库] B --> C[创建.gitattributes文件] C --> D[指定加密文件模式] D --> E[添加GPG用户/导出密钥] subgraph 有权限开发者 F[开发者] --> G[克隆仓库] G --> H[git-crypt unlock] H --> I[查看解密文件] I --> J[修改文件] J --> K[自动加密提交] end subgraph 无权限开发者 L[普通成员] --> M[克隆仓库] M --> N[看到加密内容] N --> O[修改非加密文件] O --> P[正常提交] end E --> F E --> L K --> Q[远程仓库] P --> Q Q --> G Q --> M