博文

目前显示的是 一月, 2019的博文

使用GPG进行数据加密

图片
    这篇博客因为涉及的信息量太大、知识面太广,于是准备了许久时间。 概念     首先,提出几个概念:      什么是密钥?什么是公钥?          什么是私钥? 什么是数字签名和密钥指纹?     密钥,顾名思义,解密的钥匙。     使用GPG加密的文件(如果你是使用密钥加密的话)必须用密钥才能解密出来,以区别于常规的密码。     既然有了密钥的概念,那么就来讲一下私钥和公钥。 公钥(Public Key)与 私钥 (Private Key)是通过一种算法得到的一个 密钥 对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话 密钥 、验证 数字签名 ,或加密可以用相应的 私钥 解密的数据。通过这种算法得到的 密钥 对能保证在世界范围内是唯一的。使用这个 密钥 对的时候,如果用其中一个 密钥加密 一段数据,必须用另一个密钥解密。比如用 公钥加密 数据就必须用 私钥 解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。 上文引自百度百科      简单来说,公钥是用来加密数据的,被此公钥加密的数据只能用相对应的私钥才能解密。     再来解释一下数字签名。数字签名,就是只有信息的发送者才能产生的别人无法伪造的一段数字串(SHA1是可以被伪造的,详见上一篇文章),这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明(因为数字签名是使用数据的发送方的私钥对数据进行校验和其他与数据内容有关的变量进行加密处理)。     而密钥指纹则是用于标识较长公共密钥字节的短序列,旨在标识此密钥,可以方便密钥的管理。但是密钥指纹并不是安全的,详见以下: 公钥指纹主要的安全威胁是 原像攻击 ,攻击者构造一个密钥对,与受害者可生成的指纹相匹配,即可能伪装成受害者;某些系统的第二个威胁是 碰撞攻击 ,这可能允许攻击者否认他所创造的签...

文件完整性校验的必要性

图片
    本来这一篇应该是讲数据加密的,但是后来仔细想了想,文件完整性校验可以为数据加密做铺垫,于是就先写了文件完整性校验了。     文件校验是什么?文件为什么要校验?     先来看一下这张图吧。 图片来自GPG4Win     可能很多人在下载软件时都有注意过这个SHA256(SHA1/MD5),但是却不知道这个东西是干吗用的。     其实早在几年前,迅雷的会员加速和离线加速可以加速任何东西的时候,网上充斥着大量的盗版资源,而最流行的,就是Windows7的系统镜像了。     当时装系统可能是最没有技术含量的东西了。下个镜像,做一个U盘启动,然后用激活软件激活系统,一气呵成。     然后没过多久,就爆发了一种大范围的病毒。     后来经研究发现,有人在官方的系统镜像里植入了后门,也就是说下载的系统本来就不是干净的系统。那怎么在安装系统之前检查自己的系统是不是官方的版本呢。于是CRC(循环冗余校验)出来了。      循环冗余校验 ( 英语: Cyclic redundancy check ,通称“ CRC ”)是一种根据网络数据包或 计算机文件 等数据产生简短固定位数校验码的一种 散列函数 ,主要用来检测或校验数据传输或者保存后可能出现的错误。生成的数字在传输或者存储之前计算出来并且附加到数据后面,然后接收方进行检验确定数据是否发生变化。一般来说,循环冗余校验的值都是32位的整数。由于本函数易于用二进制的 计算机硬件 使用、容易进行数学分析并且尤其善于检测传输通道干扰引起的错误,因此获得广泛应用。 上文引自维基百科        最开始这个东西是为了验证数据在传输的过程中有没有完整的从一端传输到另一端,由于其特殊的算法,人们发现一个文件只要其中的1B(比特)数据发生改变,那么计算出来的字符串将与原字符串完全不一样,而计算的速度又非常快,所以逐渐应用在文件完整性校验这一块了。     那么SHA1/SHA2/MD5有什么区别? ...