GPG NOTE
GPG 是一种文件加密与数字签名的开源软件,支持对称加密与非对称加密。
对称加密
- 加密解密方需要共享一个密钥
- 加密命令
gpg [options] --symmetric myfile
,--symmetric
可以用短语法格式-c
- 系统对弹出输入密码的对话框,输入密码确认后会生成加密文件
- 示例:
gpg -o hello.gpg -c hello.txt
- 默认情况下,软件使用的是比较古老的
CAST5
加密算法,可以通过命令行选项指定加密算法,如指定AES256,可加选项--cipher-algo AES256
; 另外CASY5
默认是无完整性检测的,如果需要打开可以加选项--force-mdc
- 解密命令
gpg [options] --decrypt
,--decrypt
可以用短语法格式-d
- 示例:
gpg -o hello.txt -d hello.gpg
非对称加密
- 非对称加密的密钥分为公钥与私钥,私钥自己保存,公钥发布出去,其特点是公钥加密的只有私钥能解,反之亦然
密钥生成过程
gpg --gen-key
- 系统提示选择加密算法
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection? - 设置密钥长度
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048) - 设置密钥过期策略
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years
Key is valid for? (0) - 提示输入用户名、邮箱、注释,用来生成标识对应密钥的用户ID
GnuPG needs to construct a user ID to identify your key.
Real name: xxxxx
Email address: xxxxx@xxx.xxx
Comment: xxxxx
You selected this USER-ID:
"realname (comment) <xxxxx@xxx.xxx>" - 提示输入一个密码,用来保护刚生成的密钥
- 系统提示选择加密算法
生成的公钥可以发布到公钥服务器上,或者直接传给对方使用
- 发布到密钥服务器
- 命令格式
gpg --send-keys USER-ID --keyserver hkp://keyserverhost
- 命令格式
- 发布到密钥服务器
密钥导入
- 命令格式
gpg --import keyfile
- 从公钥服务器上下载
gpg --keyserver hkp://keyserverhost --search-keys USER-ID
- 命令格式
指纹机制
- 由于公钥服务器没有检查机制,任何人都可以用他人名义发布公钥,故 GPG 还提供了指纹机制,用来识别公钥的可靠性
- 生成指纹放到自己信赖的网站
- 命令格式
gpg --fingerprint USER-ID
- 命令格式
- 对方下载到公钥后,导入到自己机器,同样用此命令生成指纹,并与官方提供的指纹进行对比
加密文件
- 命令格式
gpg --recipient USER-ID --output hello.txt.gpg --encrypt hello.txt
- 命令格式
解密文件
- 命令格式
gpg --decrypt hello.txt.gpg --output hello.txt
- 解密命令可以不写选项,直接
gpg hello.txt.gpg
- 命令格式
文件签名
- 确保文件确实是本人发出的
- 命令格式
gpg --sign hello.txt
,会默认生成一个.gpg结尾的文件,或者也可以通过-o destfile
选项指定生成的文件名- ASCII格式
gpg --clearsign demo.txt
- 签名单独放一个文件,并采用ASCII码
gpg --armor --detach-sign demo.txt
会默认生成一个.asc结尾的文件,或者也可以通过-o destfile
选项指定生成的文件名
文件签名验证
- 命令格式
- 文件与签名合成
gpg --verify hello.txt.gpg
- 文件与签名分开
gpg --verify hello.txt.asc hello.txt
- 文件与签名合成
- 命令格式
加密同时签名
- 对于非对称加密
gpg --local-user LOCAL-USER-ID --recipient RECEIVE-USER-ID --armor --sign --encrypt hello.txt
- 对于对称加密
gpg -o hello.txt.gpg --cipher-algo AES256 --sign --symmetric hello.txt
- 不需要另外调用
gpg --verify xxx
, 解密的时候会自动进行签名验证
- 对于非对称加密