GPG操作——签名验证
问题描述:
可能大家都遇到过软件在下载过程中由于网络原因导致下载的软件体积与实际软件体积不符。最常见的办法是对待下载文件附加一个摘要文件。这种做法比较常见,也比较容易实现。但是,还是会有一个问题:如果我篡改了网站,改变了文件的内容,并对该文件做了一次摘要,替换了原有的摘要文件。那用户下载的文件就失去了摘要验证的意义。如何避免这种问题呢?
解决方案:
软件提供者对文件做签名,软件使用者对文件做验证。
签名/验证,是一种用于对网络数据传输有效性鉴别的常见方法,属于非对称加密算法领域。
使用私钥对数据进行签名,使用公钥对数据签名做校验。
在这里的理解可以是,私钥由软件提供者保留,而公钥由软件提供者在网站上公布,并且,该公钥经过更权威认证机构的签名。是不是很想CA审核数字证书的系列流程?其实大同小异,只是这种方式更自由一些,也省去了CA认证的费用。这种开放的数字安全模式有别于我们熟悉的PKI,它属于GunPG/PGP。
实践操作:
用commons-cdec下载为例,上图:

以commons-codec-1.8-bin.tar.gz为例,左边MD5的方式就不说了,看看pgp打开是个什么样的东西。

加有“PGP SIGNATURE”标识的一段BASE64编码的数字签名。
前面说过,要对签名校验,就需要有对应的公钥。那么公钥在那里呢?
就是那个红框的KEYS。
下载公钥:
- wget http://www.apache.org/dist/commons/KEYS
接下来,导入公钥,并对commons-codec-1.8-bin.tar.gz进行签名验证。
- $ gpg --import KEYS
- $ gpg --verify commons-codec-1.8-bin.tar.gz.asc commons-codec-1.8-bin.tar.gz
得到如下提示:
gpg: Good signature from "Gary David Gregory (Code signing key) <ggregory@apache.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg: There is no indication that the signature belongs to the owner.
Primary key fingerprint: 2DB4 F1EF 0FA7 61EC C4EA 935C 86FD C7E2 A112 62CB
gpg: Good signature from "Gary David Gregory (Code signing key) <ggregory@apache.org>"说明这个签名有效。
有个警告,是因为本地密钥库不信任该公钥。
需要对这个公钥签名:
- $ gpg --sign-key A11262CB
- gpg: checking the trustdb
- gpg: 3 marginal(s) needed, 1 complete(s) needed, PGP trust model
- gpg: depth: 0 valid: 1 signed: 1 trust: 0-, 0q, 0n, 0m, 0f, 1u
- gpg: depth: 1 valid: 1 signed: 0 trust: 1-, 0q, 0n, 0m, 0f, 0u
- gpg: next trustdb check due at 2014-05-30
- pub 2048R/A11262CB created: 2011-04-12 expires: never usage: SC
- trust: unknown validity: full
- sub 2048R/AD3D7F94 created: 2011-04-12 expires: never usage: E
- [ full ] (1). Gary David Gregory (Code signing key) <ggregory@apache.org>
- "Gary David Gregory (Code signing key) <ggregory@apache.org>" was already signed
- by key 23E8E553
- Nothing to sign with key 23E8E553
- Key not changed so no update needed.
这时候就不会有警告了。
GPG操作——签名验证的更多相关文章
- 有关linux的GPG签名验证错误的解决方法。
GPG签名验证错误:由于没有公钥,下列签名无法进行验证: NO_PUBKEY 6AF0E1940624A220 找了下原因,虽然不知道原理,不过大概意思还是能才出来的,解决方法如下: gpg --ke ...
- gpg的一些常用操作
(1)列出keys # gpg --list-keys /root/.gnupg/pubring.gpg ------------------------ pub 2048R/98681A63 2 ...
- C#调用GPG命令进行加密解密文件操作
public void GPG() { string password = "1234567890"; System.Diagnostics.ProcessStartInfo ps ...
- GpG使用指南
1. 简介 1991年,程序员Phil Zimmermann为了避开政府监视,开发了加密软件PGP.这个软件非常好用,迅速流传开来,成了许多程序员的必备工具.但是,它是商业软件,不能自由使用.所以,自 ...
- 加密和数字签名工具GPG
转载: 源文件位置:http://blog.chinaunix.net/uid-9525959-id-2001824.html GPG [功能] GPG是加密和数字签名的免费工具,大多用于加密信息的 ...
- GPG入门
GPG入门 摘自https://www.jianshu.com/p/1257dbf3ed8e Nitroethane 关注 2016.07.19 17:36* 字数 1003 阅读 6560评 ...
- GPG终极指南(加密/签名)
我们平时都听过非对称加密,公钥和私钥,签名验证,但这些证书都是怎么得到的呢?本篇文章会解答这些问题. 背景介绍 加密的一个简单但又实用的任务就是发送加密电子邮件.多年来,为电子邮件进行加密的标准一直是 ...
- WebApi安全性 使用TOKEN+签名验证
首先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候,会面临着许多的安全性问题, ...
- 开放api接口签名验证
不要急,源代码分享在最底部,先问大家一个问题,你在写开放的API接口时是如何保证数据的安全性的?先来看看有哪些安全性问题在开放的api接口中,我们通过http Post或者Get方式请求服务器的时候, ...
随机推荐
- Linux常用命令_(磁盘管理)
磁盘信息:df.du df命令–功能:检查文件系统的磁盘空间占用情况–语法:df [选项]–选项:-a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统.-k 以 ...
- WCF 超时情形
在做WCF开发时,会经常碰到超时的情况,总结了一下,主要是由一下原因引起: 1.客户端没有正确地Close. 确保每次客户端调用完毕之后,就要调用Close,保证连接数. 另外,服务端配置最大连接数: ...
- POJ3252 Round Numbers(不重复全排列)
题目问区间有多少个数字的二进制0的个数大于等于1的个数. 用数学方法求出0到n区间的合法个数,然后用类似数位DP的统计思想. 我大概是这么求的,确定前缀的0和1,然后后面就是若干个0和若干个1的不重复 ...
- BZOJ3742 : Painting
设f[i][j]表示以i为根的子树,i与父亲之间的边染成j的最小代价 DP的过程中转移时相当于求一个最小权匹配,用费用流即可 感觉复杂度飞起来了… #include<cstdio> con ...
- NSMutableArray 存放BOOL
注意BOOL是不能直接存放在NSMutableArray中的 NSNumber* yesObj = [NSNumber numberWithBool:YES]; NSMutableArray* arr ...
- 【C语言】14-返回指针的函数与指向函数的指针
前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...
- (译)V8引擎介绍
V8是什么? V8是谷歌在德国研发中心开发的一个JavaScript引擎.开源并且用C++实现.可以用于运行于客户端和服务端的Javascript程序. V8设计的初衷是为了提高浏览器上JavaScr ...
- python 操作mysql
安装模块: #pip install .... MySQLdb(2.x) pymysql(3.x) import MySQLdb as sql con = sql.connect( host = &q ...
- 在Windows上启用LDAPs
公司的环境比较特殊, Windows server + Linux desktop, 所以我们希望在server端启用LDAP over SSL功能. 当中走了不少弯路, 网上文章也搜了一大堆, 千辛 ...
- 字符串&数组的相互转换
字符串 -> 数组 方法一: $str = "abcd" $s2 = $str.GetEnumerator() #$s2是无法使用下标的方式进行索引的,因为其不是array ...