技术&日志

PHP中GPG作用

PGP(英语:Pretty Good Privacy,中文含义“良好隐私密码法”)是一套用于消息加密、验证的应用程序,采用IDEA的散列算法作为加密与验证之用。
PGP的主要开发者是菲尔·齐默尔曼(Phil Zimmermann)。齐默曼于1991年将PGP在互联网上免费发布。PGP本身是商业应用程序;开源并具有同类功能的工具名为GPG(GnuPG)。PGP及其同类产品均遵守OpenPGP数据加解密标准.
PGP加密由一系列散列、数据压缩、对称密钥加密,以及公钥加密的算法组合而成。每个步骤支持几种算法,可以选择一个使用。每个公钥均绑定唯一的用户名和/或者E-mail地址。这个系统的第一个版本通常称为可信Web或X.509系统;X.509系统使用的是基于数字证书认证机构的分层方案,该方案后来被加入到PGP的实现中。当前的PGP加密版本通过一个自动密钥管理服务器来进行密钥的可靠存放。源于维基

GPG的作用是验证文件是否被篡改.

如果攻击者劫持了你从 php.net 的下载 tar.xz 和 tar.xz.asc 的请求,他想通过篡改你下载到的 php 压缩包来给你种上后门,他也并不能产生一个被你gpg --verfiy信任的文件和签名,也就不能通过验证 出错退出 by:v2ex-cy97cool

ENV GPG_KEYS 1729F83938DA44E27BA0F4D3DBDB397470D12172 B1B44D8F021E4E2D6021E995DC9FF8D3EE5AF27F
for key in $GPG_KEYS; do \
    gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \ # 查询公钥
done; \

gpg --batch --verify php.tar.xz.asc php.tar.xz;
#验证文件是否完整
ENV PHP_SHA256="92a745048912beb3f6c2a3c188ce695a51852c67201fdf9a21dafe59f51aecc1" PHP_MD5="" \
echo "$PHP_SHA256 *php.tar.xz" | sha256sum -c -; 

php中GnuPG版本

GnuPG v1 php7
GnuPG v2.0.22 (SunOS) php-5.3.29
GnuPG v1.4.10 (Darwin) php-5.3.28以下

扩展问题

Q: GPG_KEYS 从哪里来的?
A: PHP官方完整KEYS列表 每个 Key fingerprint 如:PHP 5.5 都适用于 5.5.x的所有文件.

Q: 如何在网站上查询密钥?
A: 用keys前面要加0x 查询示例 http://ha.pool.sks-keyservers.net/pks/lookup?search=0x0B96609E270F565C13292B24C13C70B87267B52D+&op=vindex

Q: ASC文件在哪下载?
A: 一般是在下载文件的地址中的文件名加上.asc 如:http://am1.php.net/get/php-7.1.10.tar.bz2/from/this/mirror -> http://am1.php.net/get/php-7.1.10.tar.bz2.asc/from/this/mirror

相关资料

GPG入门教程
v2ex-GPG的作用
密钥查询-pgp.mit.edu
密钥查询-ha.pool.sks-keyservers