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方式请求服务器的时候, ...
随机推荐
- Fragments碎片
A Fragment represents a behavior or a portion of user interface in an Activity. 在一个Activity活动中,一个Fra ...
- Selenium介绍
基于selenium的自动化测试,华为已经做了两代了,目前是做到SmartGUI2.0,基于他们自己的AutoSpace平台.不过目前支持的貌似只有IE和火狐(火狐3.6).控件录制支持ID,Name ...
- PHP 输出表格单元格的数据之用表单的方式;
echo "<table border=1 class="imagetable" >"; //使用表格格式化数据echo "<for ...
- 看病要排队(stl)
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission( ...
- PrintDocument 实践
简单使用,直接上代码 1.设置打印页大小 和页边距 this.printDocument1.DefaultPageSettings = new System.Drawing.Printing.Page ...
- SCU3185 Black and white(二分图最大点权独立集)
题目大概说有几个黑色.白色矩阵,问能选出黑白不相交的矩形面积和的最大值. 建二分图,黑色矩阵为X部的点,白色为Y部,XY的点权都为其矩阵面积,如果有个黑白矩阵相交则它们之间有一条边,那样问题就是要从这 ...
- Revit二次开发示例:ModelessForm_ExternalEvent
使用Idling事件处理插件任务. #region Namespaces using System; using System.Collections.Generic; using Autodesk. ...
- BZOJ3483 : SGU505 Prefixes and suffixes(询问在线版)
将每个串正着插入Trie A中,倒着插入Trie B中. 并求出每个串在A,B中的dfs序. 每次查询等价于查询在A中dfs序在[la,ra]之间,在B中dfs序在[lb,rb]之间的串的个数,用主席 ...
- BZOJ3658 : Jabberwocky
考虑将某线段下方的点取走: 将所有点从低到高排序 每扫描到一条水平线,对于上面每个点,找到它下面同色的前驱后继,统计中间点的个数 然后再把线上所有点插入数据结构中 最后再统计相邻的同色的点之间的点个数 ...
- XmlElement 类
构造函数 名称 说明 XmlElement(String, String, String, XmlDocument) 此 API 支持 产品 基础结构,不能在代码中直接使用. 初始化 XmlEle ...