index | ~dongdigua

全面使用 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 在移动端的支持不好。

dongdigua CC BY-NC-SA 禁止转载到私域(公众号,非自己托管的博客等)

Email me to add comment

Proudly made with Emacs Org mode

Date: 2025-06-12 Thu 00:00 Size: 4.5K (≈ 0.6739 mg CO2e)