Linux 文件加密完整方案:ECC + age
对于 Debian、Kali Linux、Ubuntu 上的 GB 级文件、压缩包和服务器备份,推荐使用 age。它是成熟的开源文件加密工具,使用 X25519 公钥加密体系,自动完成文件内容加密,不需要自己编写 AES、ECC 或密钥封装代码。
这套方案可以直接复制使用,支持:
-
生成一对公钥和私钥。
-
使用公钥加密文件,私钥可以保存在另一台机器。
-
加密 GB 级甚至更大的文件。
-
解密时验证加密数据的完整性。
-
校验文件 SHA-256,检查备份传输前后是否一致。
一、安装 age
Debian、Kali、Ubuntu 均可先尝试使用系统软件包安装:
sudo apt update
sudo apt install age
检查安装结果:
age --version
age-keygen --help
如果提示找不到软件包,可以查看 age 官方项目 获取其他安装方式。
二、生成 ECC 公钥和私钥
先创建一个专门存放密钥的目录:
mkdir -p "$HOME/.config/age"
chmod 700 "$HOME/.config/age"
cd "$HOME/.config/age"
生成密钥:
age-keygen -o private.txt
查看对应公钥:
age-keygen -y private.txt > public.txt
设置文件权限:
chmod 600 private.txt
chmod 644 public.txt
最终得到两个文件:
|
文件 |
用途 |
是否可以公开 |
|---|---|---|
|
|
解密文件的私钥 |
绝对不能公开 |
|
|
加密文件使用的公钥 |
可以分享 |
公钥通常以 age1 开头,私钥通常以 AGE-SECRET-KEY-1 开头。它们是 age 的密钥格式,不是 OpenSSL 的 PEM 格式。
查看公钥:
cat public.txt
示例输出:
age1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
这里的字符串只是格式示例,实际使用时必须使用你生成的真实公钥。
重要: 私钥 private.txt 应备份到安全位置。丢失私钥后,通常无法恢复已经加密的文件。
三、加密大文件
假设需要加密的文件是 /data/backup.zip。
1. 执行加密
age -r "$(cat "$HOME/.config/age/public.txt")" \
-o /data/backup.zip.age \
/data/backup.zip
生成文件:
/data/backup.zip # 原始文件
/data/backup.zip.age # 加密文件
加密完成后,原文件不会自动删除。确认加密文件能够正常解密之前,不要删除原文件。
2. 查看文件大小
ls -lh /data/backup.zip /data/backup.zip.age
age 使用混合加密,不需要把整个文件交给 ECC 算法直接处理,因此适合大文件。
四、解密文件
在持有对应私钥的 Linux 机器上执行:
age -d \
-i "$HOME/.config/age/private.txt" \
-o /data/backup_restored.zip \
/data/backup.zip.age
如果成功,会生成:
/data/backup_restored.zip
如果私钥不匹配,或者加密数据损坏,解密会报错。age 会对加密数据进行完整性认证,不会将未通过认证的数据作为有效解密结果输出。
五、验证文件完整性
建议同时使用两种验证方式。
方法一:比较原文件和解密文件的 SHA-256
在加密前记录原文件的哈希:
sha256sum /data/backup.zip > /data/backup.zip.sha256
解密后验证:
sha256sum -c /data/backup.zip.sha256
正常输出:
/data/backup.zip: OK
这表示解密后的文件与原文件的 SHA-256 一致。注意,校验文件应通过可信渠道保存;单独存放的哈希值本身并不能证明文件来自可信发送者。
方法二:直接比较文件
如果原文件仍然存在:
cmp -s /data/backup.zip /data/backup_restored.zip \
&& echo "验证成功:文件完全一致" \
|| echo "验证失败:文件不同"
六、加密整个目录
如果你要备份的是目录,例如 /data/important/,可以先打包,再加密。
加密:
tar -C /data -czf - important \
| age -r "$(cat "$HOME/.config/age/public.txt")" \
-o /data/important.tar.gz.age
解密并恢复目录:
age -d \
-i "$HOME/.config/age/private.txt" \
/data/important.tar.gz.age \
| tar -tzf -
上面的第二条命令只列出归档中的文件,不会恢复文件到磁盘。确认归档内容正常后,实际恢复可以使用:
mkdir -p /data/restore
age -d \
-i "$HOME/.config/age/private.txt" \
/data/important.tar.gz.age \
| tar -xzf - -C /data/restore
恢复后,目录位于 /data/restore/important/。不要对来源不可信的归档直接使用特权权限解压。
七、保护私钥
私钥泄露或丢失都可能导致严重后果。建议至少做好以下措施:
-
将
private.txt备份到离线 U 盘或其他安全介质。 -
不要把私钥上传到网盘、公开代码仓库或与加密文件放在同一个不受保护的位置。
-
需要密码保护私钥文件时,可以再用 age 的密码模式加密私钥。
例如,将私钥加密保存:
age -p \
-o "$HOME/.config/age/private.txt.age" \
"$HOME/.config/age/private.txt"
执行时会交互式要求输入密码。确认密码保护后的私钥可以正常使用后,再考虑删除未加密的私钥副本。不要因为有了密码保护的副本,就忘记备份密码。
八、最终命令速查
|
操作 |
命令 |
|---|---|
|
生成密钥 |
|
|
导出公钥 |
|
|
加密文件 |
|
|
解密文件 |
|
|
计算哈希 |
|
|
验证哈希 |
|
对于你的 Linux 服务器备份场景,使用 age 的 X25519 加密方案即可,不必手动组合 ECC 和 AES。只要妥善保管私钥、保留独立备份,并在删除原始文件前验证解密结果,就能建立一套简单可靠的大文件加密流程。
