gpg --verify openresty-1.21.4.3.tar.gz.asc openresty-1.21.4.3.tar.gz
gpg: Signature made 2023-11-04 05:31:16 +0000 UTC
gpg: using RSA key B550E09EA0E98066
gpg: Can't check signature: No public key
解决办法
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key B550E09EA0E98066
这里的--recv-key是上面的RSA key
然后再
gpg --verify openresty-1.21.4.3.tar.gz.asc openresty-1.21.4.3.tar.gz
原理
数字签名是通过使用非对称加密算法生成的,一般步骤如下:
1.生成密钥对:首先,软件包的作者会生成一对非对称密钥,包括一个私钥和一个公钥。私钥只有软件包作者拥有,而公钥可以公开发布。
2.对文件进行哈希计算:软件包作者会对要发布的文件(比如 openresty-1.21.4.3.tar.gz)进行哈希计算,生成文件的哈希值。哈希算法通常选择安全的哈希函数,如 SHA-256。
3.使用私钥进行签名:接下来,软件包作者会使用自己的私钥对文件的哈希值进行加密签名。这个签名就是 openresty-1.21.4.3.tar.gz.asc 文件的内容。
4.发布签名文件:软件包作者将生成的签名文件 openresty-1.21.4.3.tar.gz.asc 公开发布,供用户下载。
5.验证签名:用户在下载软件包时,同时下载对应的签名文件。用户使用软件包作者公开的公钥对签名文件进行解密,得到文件的哈希值。然后,用户再对下载的软件包文件进行哈希计算,得到一个哈希值。
6.比较哈希值:最后,用户比较签名文件解密后得到的哈希值和自己计算得到的哈希值。如果两个哈希值一致,说明文件未被篡改,签名有效。
解析
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-key B550E09EA0E98066
是引入公钥
使用公钥加密的数据只能用对应的私钥解密,而使用私钥加密的数据只能用对应的公钥解密
不同的输入数据经过哈希函数计算得到的哈希值几乎是唯一的
假定私钥只有作者拥有,而使用私钥加密的数据(哈希值--对应文件)只能用对应的公钥解密,也就是公钥对应私钥,所以公钥可以正确解密就可以说明文件是作者的且没被修改过