数字签名
数字签名的作用
在很多场合我们都需要在文件上签字,为什么不直接用电脑打呢, 这就是为了日后确认文件确实是你自己的签名,每个人的笔迹都不一样。
数字签名也是一样的作用:
保证B收到的是A发来的信息确实是A发的,而不是C冒充 A发的。
数字签名为何能保证信息来源确定呢
- 这就是非对称加密中的私钥和公钥的特性: 私钥加密只能公钥解密,公钥加密只能私钥解密。
- 其中 私钥加密的数据,只能由对应的公钥解密 正好可以做数字签名
- 签名及验证过程:
- 私钥将待传送数据计算sha256 hash摘要, 然后用私钥加密摘要得到数字签名, base64之后附带加密数据一起发送过去。
- 接收方 用公钥验证这个数字签名: 公钥解密数字签名(得到私钥加密的数据sha256 hash值),如果解密失败,则对方身份不正确
- 然后用解密数据部分,解密之后也计算一次sha256,如果hash值不一样,则表示文件被篡改, 如果文本被修改过。
公开密钥算法(非对称加密)
RSA算法既可以加解密,也可以做数字签名
非对称加解密只有对称加密速度的1/1000, 所以非对称只进行 加密密钥的交换 ,也就是把 对称加密密钥 通过私钥加密发给接对方,对方通过公钥解密得到对称密钥。数据真正是使用对称密钥加解密,私钥公钥加解密只要保证对称加密正确就ok了。
基于大整数因子分解问题, 数学原理简单 ,单位安全强度小, 容易实现。
DSA(Digital Signature Algorithm 数字签名算法)
DSA是基于整数有限域离散对数难题。只能做数字签名,不能用来加解密,据说有扩展
ECC算法
基于ECC 椭圆曲线算法和DSA的模拟结合。
基于椭圆曲线离散对数问题, 数学原理复杂 ,单位安全强度大, 不容易实现, 美国国家标准与技术局(NIST)已经公布了一列推荐的椭圆曲线用来保护5个不同的对称密钥大小(80, 112, 128, 192, 256), 发展势头猛,NSA就是采用ECC算法,来保护敏感数据。有望取代rsa。
市场份额RSA占据大头,ECC有望取代RSA
ECDSA 椭圆曲线数字签名算法
是 ECC 和DSA模拟 主要做数字签名流程类似DSA, 签名算法使用的是ECC。
ssl 中如何使用非对称密钥
非对称密钥因为加解密速度慢,所以只负责回话密钥的加解密,实际数据的加解密使用的是 协商出来的回话密钥。
密钥协商
RSA 客户端请求服务端, 服务端先发送自己的public key
客户端随机算法生成密钥s,发送到服务端,服务端私钥解密, 就确定了S为密钥。
DHE 基于DH改进的, E表示临时。
- 客户端随机值Xa,服务端随机值Xb;
- 然后客户端计算Pa = q^Xa mod p,Pa发送给服务端
- 服务端计算Pb = q^Xb mod p, Pb 发给客户端
- 然后客户端计算密钥Sa = Pb ^Xa mod p
- 服务端计算密钥Sb = Pa^Xb mod p
- 算法保证Sa=Sb = q^(Xa * Xb) mod p, 完成了密钥交换
ECDHE 使用ECC算法改进的DHE算法。