第一步
插入yubikey
- win键,打开git bash 输入gpg --version
Shall@LAPTOP-BUE85051 MINGW64 ~
$ gpg --version
gpg (GnuPG) 2.2.16-unknown
libgcrypt 1.8.4
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: /c/Users/Shall/.gnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
- 或者登陆 https://www.gnupg.org/download/index.html 下载正式版gpg “Gpg4win”
- 进入gpg 使用 gpg --gen-key 生成密钥对, (如果失败可以用gpg --delete-keys 和 --delete-secret-keys删除私钥)如果没有选项,则可以使用--full-generate-key选项(这个官网2024版本默认生成ed25519版本的) 然后选择第一个
- 输入gpg --expert --edit-key +keyID 进入gpg后,输入addkey来添加子密钥,然后生成三个key:
签名 RSA (sign only)
加密 RSA (encrypt only)
认证 RSA (set your own capabilities)(略有不同)
sec(主密钥)ssb(私钥secret sub-key)sub(公钥)
生成第三个的流程(最后选Q finish)
最后save
备份公钥私钥(重要)
gpg --armor --output public.gpg.asc --export [KeyID]
gpg --armor --output private.gpg.asc --export-secret-keys [KeyID]
开始导入yubikey
然后使用key num命令选中key,然后使用keytocard命令移动到card里面(从此本机的密钥无法复制)
访问的时候需要输入ubk的admin PIN,就是八位数的那个(一开始没注意总是提示bad PIN)
疯狂测试
直接用kle加密一个文件,再删除本地私钥。然后解密该文件的时候,无论使用命令行还是图形界面都提示要插入智能卡(并且提示了智能卡的编号,即便重新导入私钥也是如此),难道用智能卡加密的文件只能用智能卡解密?难道不是用所谓的公钥加密的?一旦智能卡遗失了呢?
答案:经过测试,必须全部删除公钥私钥后,重新导入即可,删除后再解密会提示没有某某指纹的私钥,导入后直接解密
最后删除导入的私钥即可
加解密文件
参考:https://gist.github.com/jhjguxin/6037564
gpg -e -r username filename (-r 表示指定用户) # 加密文件
gpg -d filename.gpg # 此时会弹出输入ubk的PIN窗口
签名和验签
公钥的上传和set url 和fetch
gpg --keyserver hkp://pgp.mit.edu --send-keys 35023C1E8DEB09435105647FFE38FE1D457E8CB0
其他几个好像不稳定或者是被墙了,这个一下子就成功了
导入公钥
apt-get update 或者aptitude update出现以下错误:
The following signatures couldn't be verified because the public key is not available: : NO_PUBKEY B5B7720097BB3B58
解决方法:
1,从任何一个key server获得缺失的公钥B5B7720097BB3B58。
gpg --keyserver subkeys.pgp.net --recv-keys B5B7720097BB3B58
2,导入公钥B5B7720097BB3B58。
gpg -a --export B5B7720097BB3B58 | sudo apt-key add -
国内可用key server列表:
keyserver.ubuntu.com
pgp.mit.edu
subkeys.pgp.net
www.gpg-keyserver.de
上传的好像没下载成功,但是上传到我个人服务器的http下载链接,配置进去再删除本地公钥,最后进入 --edit-card,然后fetch就直接成功了,再运行--list-keys就能看到对应的公钥了。
多个主密钥指定公钥加密
开启PGP触摸验证
开启cmd梯子
set http_proxy=http://127.0.0.1:1081
set https_proxy=http://127.0.0.1:1081
安装:
pip install --user yubikey-manager
ykman openpgp keys set-touch SIG ON # 还是比较好用的,每一个层级都有对应的help