关于使用ECC加密文件的方式(Linux)

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

最终得到两个文件:

文件

用途

是否可以公开

private.txt

解密文件的私钥

绝对不能公开

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"

执行时会交互式要求输入密码。确认密码保护后的私钥可以正常使用后,再考虑删除未加密的私钥副本。不要因为有了密码保护的副本,就忘记备份密码。

八、最终命令速查

操作

命令

生成密钥

age-keygen -o private.txt

导出公钥

age-keygen -y private.txt > public.txt

加密文件

age -r "$(cat public.txt)" -o file.age file

解密文件

age -d -i private.txt -o restored_file file.age

计算哈希

sha256sum file

验证哈希

sha256sum -c file.sha256

对于你的 Linux 服务器备份场景,使用 age 的 X25519 加密方案即可,不必手动组合 ECC 和 AES。只要妥善保管私钥、保留独立备份,并在删除原始文件前验证解密结果,就能建立一套简单可靠的大文件加密流程。

© 版权声明
THE END
喜欢就支持一下吧
点赞5 分享