GitHub GPG签名 Tag签名 Verified认证,防伪造的github commits

10 篇文章 0 订阅
4 篇文章 0 订阅

1、首先生成一个密钥(可在Linux控制台,Windows下有Cygwin64等)安装好gnupg套件后

$ gpg --gen-key
gpg (GnuPG) 1.4.23; Copyright (C) 2015 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

请选择您要使用的密钥种类:
   (1) RSA and RSA (default)
   (2) DSA and Elgamal
   (3) DSA (仅用于签名)
   (4) RSA (仅用于签名)
您的选择?
RSA 密钥长度应在 1024 位与 4096 位之间。
您想要用多大的密钥尺寸?(2048)4096
您所要求的密钥尺寸是 4096 位
请设定这把密钥的有效期限。
         0 = 密钥永不过期
      <n>  = 密钥在 n 天后过期
      <n>w = 密钥在 n 周后过期
      <n>m = 密钥在 n 月后过期
      <n>y = 密钥在 n 年后过期
密钥的有效期限是?(0)

注意:生成GPG Key时所填写的邮箱地址必须跟注册GitHub账号所使用的邮箱相同

DSA和RSA的区别(密钥加密算法)


RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它。它既能用于加密,也能用于数字签名。

RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,
但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。
公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。
 
解密者拥有私钥,并且将由私钥计算生成的公钥发布给加密者。
加密都使用公钥进行加密,并将密文发送到解密者,解密者用私钥解密将密文解码为明文。

-------------------------------------------------------------------------------------

Digital Signature Algorithm (DSA)是Schnorr和ElGamal签名算法的变种,被美国NIST作为DSS(DigitalSignature Standard)

DSA的一个重要特点是两个素数公开,这样,当使用别人的p和q时,
即使不知道私钥,你也能确认它们是否是随机产生的,还是作了手脚。RSA算法却做不到

DSA是基于整数有限域离散对数难题的,其安全性与RSA相比差不多

DSA算法是美国的国家标准数字签名算法,它只能用户数字签名,而不能用户数据加密和密钥交换。
DSA 一般用于数字签名和认证,只用于签名,它比RSA要快很多

2、查看生成的密钥ID,这里的KeyID为886C8FB9

$ gpg -k
/home/kend/.gnupg/pubring.gpg
-----------------------------
pub   3072D/886C8FB9 2019-01-15        # 3072D为密钥长度和加密类型,886C8FB9才是KeyID
uid                  kend56 (Git签名) <kend56@qq.com>

3、导出公钥

$ gpg -a -o key.txt --export 886C8FB9    # 导出公钥,公钥可以随便公开,千万别公开私钥

4、用文本编辑器打开导出的key.txt文件,并将里边的内容放GitHub的Settings --- > SSH and GPG keys

 

5、设置 Git 全局要签名的Key

# 设置 Git 全局要签名的Key
git config --global user.signingkey 886C8FB9    # 886C8FB9为生成的GPG KeyID

# 如果要让当前git项目启用签名验证,使用下面的命令:
git config commit.gpgsign true			# 设置:false 为关闭

# 如果要让所有项目都启用签名验证:
git config --global commit.gpgsign true		# 设置 Git 全局提交都要签名

# 如果没有设置局部仓库或全局仓库默认开启 commits GPG 验证,提交时可以添加 -S 参数,要求进行 GPG 验证

# Git里填写的提交者信息,必须跟注册的GitHub帐号相同的邮箱,否则会显示 "Unverified"标志
git config --global user.email "kend56@qq.com"

6、commit 带签名提交

$ git commit -am "add"		# 提交
[master(根提交) 72064f0] add
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 t.txt

# 未设置git config --global commit.gpgsign true
# 可手动选择带签名提交:git commit -S -am "add"

$ git log --show-signature	# 查看带签名的提交
commit 72064f01e84f10497664f4a205832abff72b4cc2 (HEAD -> master)
gpg: 签名建立于 2019年01月15日,周二 20:43:55 CST
gpg:               使用 DSA 密钥 2CAF2804886C8FB9
gpg: 完好的签名,来自于“kend56 (Git签名) <kend56@qq.com>”
Author: kend56 <kend56@qq.com>
Date:   Tue Jan 15 20:43:54 2019 +0800

    add

7、带签名的tag提交

# -u 后面跟着的就是GPG KeyID
$ git tag -u "886C8FB9" -s v0.0.1 -m "说明"

$ git show v0.0.1    # 查看带签名tag信息
tag v0.0.1
Tagger: kend56 <kend56@qq.com>
Date:   Tue Jan 15 21:24:50 2019 +0800

说明
-----BEGIN PGP SIGNATURE-----

iF4EABEIAAYFAlw93yMACgkQLK8oBIhsj7kqRQEAldiUJ0m3i3A30WtrXZsp2rws
wrbyIAJd1WXZLxQHp3gA/3FHG7XJ3nFOuvu6lo4K5EVDWyrgNmedffaf9TAay2W0
=c5fI
-----END PGP SIGNATURE-----

commit 72064f01e84f10497664f4a205832abff72b4cc2 (HEAD -> master, tag: v0.0.1)
Author: kend56 <kend56@qq.com>
Date:   Tue Jan 15 20:43:54 2019 +0800

    add

diff --git a/t.txt b/t.txt
new file mode 100644
index 0000000..e69de29

8、提交后查看,如图(一个使用和注册GitHub相同邮箱,另一个为不同邮箱,所显示的认证标志)

点击认证标志可以看到用户相关内容

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值