在学习的过程中,用到了密钥学的一些知识,记录下来
本文参考
阮一峰的文章
http://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature
以及YuanFan的文章
https://www.jianshu.com/p/68274c364781

对称密钥(Symmetric Cryptography)

也称私钥加密,属于对称密码体制,是指双方用同一个密钥进行加密和解密。

安全性依赖于:1、加密算法的安全性。2、密钥的安全性
优点:算法公开,加/解密速度快,占用空间小
缺点:密钥的管理和分发难度大
用途:信息量大的加密
代表算法:DES算法、3DES算法、IDEA算法、AES算法。
存在问题:无法实现数字签名、在建立安全信道之前,密钥如何传输。


非对称密钥(Asymmetric Cryptography)

也称公钥加密,属于非对称密码体制。它使用了一对密钥,一个公钥,一个私钥。A产生了一对密钥,保留私钥,传播公钥,如果B需要给A发送加密信息,B用A的公钥加密,A收到以后,再用私钥解开。

优点:安全性高,不需要交换密钥
缺点:加/解密速度慢,不适合大量加密。
用途:关键性的、核心机密数据。
代表算法:RSA算法、ElGamal算法、椭圆曲线加密算法。
存在问题:
1、由于公钥公开,如果有人发给我消息,我不知道是谁发的。
2、用自己私钥加密的信息,任何知道我公钥的人都能看到。


混合加密体制

指对称加密和非对称加密混合在一起使用。
在对称加密中,我们提到密钥的分发是个大问题,可以用混合密钥加密来解决。
假设A和B要实现加密通信

1、A找到B的公钥
2、 A产生对称密钥,用B的公钥加密。
3、将加密后的信息发给B
4、B收到后,用私钥解密,得到对称密钥。
5、A和B可以使用对称密钥进行通信。


散列函数与信息摘要

Hash函数也称为散列函数,它能够对不同长度的输入信息,产生固定长度的输出。这种固定长度的输出称之为原消息的散列或者消息摘要,消息摘要长度固定且比原始信息小得多,一般情况下,消息摘要是不可逆的,即从消息摘要无法还原原文。但有些情况还是可以的,自行搜索。

散列算法:散列算法就是产生信息散列值的算法,它有一个特性,就是在输入信息中如果发生细微的改变,比如给变了二进制的一位,都可以改变散列值中每个比特的特性,导致最后的输出结果大相径庭,所以它对于检测消息或者密钥等信息对象中的任何微小的变化非常有用。

一个安全的散列算法H需要满足:

1、输入长度是任意的,输出是固定的
2、对每一个给定的输入,计算输出是很容易的
3、给定H,找到两个不同的输入,输出同一个值在计算上不可行
4、给定H和一个消息x,找到另一个不同的消息y,使它们散列到同一个值在计算上不可行
常见的散列算法:MD2、MD4、MD5、SHA、SHA-1


数字签名

数字签名是指发送方以电子形式签名一个消息或文件,表示签名人对该消息或文件负责。数字签名综合使用了消息摘要和非对称加密技术。可以保证接收者能够核实发送者对报文的签名,发送者时候不抵赖对报文的签名。

数字签名的功能

1、确认信息由签名这发送
2、确认信息未被篡改

A要发送信息给B,数字签名过程。

1、A将发送信息用散列函数形成信息摘要
2、A将自己的私钥对消息摘要进行加密,形成数字签名
3、A将数字签名附在消息后面,B得到后,用A公钥对签名信息解密,得到信息摘要。
4、B用同样的散列函数对接收到的消息进行散列,得到信息摘要
5、将两份信息摘要进行对比,如果完全一致,则信息没有被篡改,签名有效。否则拒收。

非对称密钥公钥格式 非对称密钥的优缺点_散列函数


数字证书

设想这样一种情况:

A和B用非对称密钥体制进行沟通,但此时C偷偷将B手中的A公钥替换为自己的公钥,C用自己私钥加密与B沟通,相当于C冒名顶替A,C可以产生“数字签名”证明自己是A。这时候,B如何确认自己手中的公钥是A的,而不是别人的呢?這时候就需要用到数字证书。

数字证书(CA)功能

1、信息保密
2、身份确认
3、不可否认性
4、数据完整性

B找到“证书中心”(certificate authority,简称CA)后,证书中心用自己的私钥对A的公钥以及一些其他信息进行加密,就形成了数字证书

1、A->B发信息,附上数字签名和数字证书,用私钥加密
2、B收到以后,用CA的公钥进行验证数字证书
3、验证通过,确认消息来自A