GPG体系介绍
GPG体系
介绍
GnuPG(GNU Privacy Guard) 是对 OpenPGP 标准(RFC 4880/4880bis) 的自由实现,包括了加密解密,非对称加密体系,签名体系等。
能够保障机密性,完整性和不可否认性,分别代表着对数据进行安全加密,保障数据的完整无损和对数据进行不可否认签名。
一个GPG密钥由一个bundle模型组成一个密钥束,包含了一个主密钥和若干个功能密钥。
主密钥类似于根证书,可以签署子密钥,而主密钥一般不经常使用,日常通过子密钥来进行签名加密等。
子密钥的三个常见用途分别是加密(对称加密),签名(对某个实体进行签名操作)以及认证(例如SSH)
安装Gpg4win
Gpg4win是GPG的Windows平台,通常由一个前端加上若干组件组成,Git和cygwin64也会自带GPG组件
在 https://www.gpg4win.org/ 下载gpg4win
以下均通过gpg4win的前端组件kleopatra进行演示
创建或导入密钥
新建密钥对:
在文件->新建OpenPGP密钥对中输入信息

一般需要一个唯一的邮件,建议使用个人常用或公司约定的邮件,例如提交代码的邮件

其他配置保持默认即可,通常会以最佳安全实践方式配置其他安全参数

随后得到指纹,新建的密钥对会自动生成两个子密钥

两个子密钥分别用于加密以及认证签名。
导入密钥直接选择asc文件即可,通常导入的密钥需要私钥
导出公钥

通常导出公钥是可公开的,放置在验证平台或代码托管平台
而备份私钥是不能公开的,可以保存在安全介质或离线环境中。
加密操作
利用OpenPGP的私钥对内容进行加密,安装gpg4win后通常会在Windows的右键中注册一个加密选项,例如

但需要在安装时选中GPGEX拓展组件
点击加密后

注意到这里的指纹和自己的密钥对指纹是一致的

加密完成通常会生成一个gpg文件
当再次打开时,如果没有正确的密钥,则会提示无法解密

此时需要导入正确的密钥才能进行解密
若存在正确密钥,则可以正确解密

签名操作

在选择需要签名的账户后,会生成一个sig文件,用于签名
在双击sig文件后,程序会自动进行签名验证

注意签名和加密是可以同时进行的

此时只会生成一个gpg文件,而gpg文件里面包含了签名信息,则sig文件会自动集成在gpg文件中。
额外注意
若一个文件被同时加密和签名,那么只有同时拥有加密密钥和证书的情况下才能进行加密并验签,无法通过加密的gpg文件直接进行验签,除非sig文件被单独提供。
即gpg文件会先进行解密,然后才能看到是否存在签名信息。
如果一个文件进行了签名提供了sig文件,那么在对方只导入公钥的情况下即可进行验证签名
其他场景
对代码签名
在仓库中需要保障签名邮箱和指纹ID一致

但需要注意需要使用自己下载的GPG程序(gpg4win)而不是git自带的GPG程序,

通常默认提交命令不带有签名(如果不显式指定)
可以通过显式配置指定签名的行为
git config --local commit.gpgsign true