全面使用 SSH 取代 PGP
$Id: pgp_to_ssh.org,v 25.6 2025/06/16 19:41:12 dongdigua Exp $
再见了,老朋友 PGP,你对于开源和自由运动与集权抗争的象征意义,已经大于实际作用。
现有的 PGP 公钥已吊销
file:///home/runner/git/dongdigua.github.io/pgp
请使用
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIEaLa1tljedAITIh6+VJ9Aqv3bX+HJT+Rn/tHKdDlYCp digua@arch-pc 256 SHA256:0cvOPPW2ZkYEgXhlBepvtLyOex/ERVfqR1Ipm1pJT4g digua@arch-pc (ED25519) +--[ED25519 256]--+ | . o*+o B| | ..oE.+ *.| | ..o ..X o| | + . B.= | | S + =.+ .| | + * +.. | | = =.+ | | +.o+o | | o+o=o | +----[SHA256]-----+
Why
简而言之:PGP 太难用了,既然 SSH 能满足我的需求,为何不使用更易用,更现代的方案呢?
Authentication
很显然,SSH 的本职工作就是 authentication
Signing
OpenSSH8 及之后 可以对任意数据签名
ssh-keygen -Y sign -f ~/.ssh/id_ed25519 -n file file_to_sign
git >= 2.34.0 可以使用 ssh 签名
git config --global commit.gpgsign true git config --global gpg.format ssh git config --global user.signingKey ~/.ssh/id_ed25519.pub
至于为什么 commit 签名很重要,见:震惊! 竟然有人在 GitHub 上冒充我的身份!
Encryption
SSH 本身不能用来加密文件,但是 age 可以使用 SSH key
$ age-keygen -o key.txt Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p $ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age $ age --decrypt -i key.txt data.tar.gz.age > data.tar.gz
也可以看看 SHRIK3 的笔记 https://vnoid.de/~shrik3/docs/age.txt
pass 可以迁移到 passage,并且 pull#52 很好的解决了 gpg key-id 顺序的问题(如果我同时有硬盘上的和智能卡上的key,gpg 总会先选择智能卡上的)
但是现在支持不是很广泛,passage 在移动端的支持不好。