带你读《2022技术人的百宝黑皮书》——HTTPS的原理浅析与本地开发实践(3)https://developer.aliyun.com/article/1340628?groupCode=taobaotech
数字签名(公钥数字签名)
定义
只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。数字签名算法一般使用 RSA(非对称加密) + SHA256(安全摘要算法)。
特点
解决了文件在发送过程中无法被篡改的问题,但是无法避免被中间人伪造。
RSA数字签名验证流程
RSA加密过程通式
,公钥 = (e,n)
RSA解密过程通式
,私钥 = (d,n) 秘钥对为 (e,d,n);
小明用自己的秘钥对生成签名过程:待签名的数据 => 哈希运算(SHA-256) => 文件哈希值(摘要) => 签名运算(RSA,私钥加密) => 数字签名;
小红拥有小明对外开发的公钥(PS:小红可能不知道,小明的公钥已经被替换成中间人的公钥),在收到小明的信息后,做签名验证;
公钥解密后的哈希值与待签名的文件哈希值对比,相同,则签名成立,否则签名不成立。
数字签名的问题
小明传输的数字签名可以被另外一个具有秘钥对的中间人替换传输的文件。相当于中间人模仿了小明的“签名”。
这个问题出现的核心原因在于:小明的公钥被中间人的公钥替换了,小红自己无法判断当前的公钥是否是小明的! 所以,我们需要证明的是接收方拿到的公钥是发送方提供的,而不是中间人提供的。
基于当前的案例,我们如何证明小红接收到的公钥就是小明发送的,而非被他人篡改的呢?这就需要有一种公开的权威的认证机制 ——数字证书机制。
数字证书
数字证书是利用非对称秘钥体系中,秘钥对的公钥和私钥是一一对应的特性,通过权威的证书签发机构(CA)签发证书预制秘钥,并将根证书预装在操作系统中,从而防止公钥被篡改。所以,数字证书可以用来证明公钥是属于某个认证用户的。
证书签发机构用自己的私钥对需要认证的人(或组织机构)的公钥施加数字签名并生成证书,即证书的本质就是对公钥施加数字签名。
带你读《2022技术人的百宝黑皮书》——HTTPS的原理浅析与本地开发实践(5)https://developer.aliyun.com/article/1340625?groupCode=taobaotech