数字签名与数字证书的原理

软件发布|下载排行|最新软件

当前位置:首页IT学院IT技术

数字签名与数字证书的原理

Mysticbinary   2020-04-01 我要评论
在了解数字签名和数字证书之前,可以先了解一下加密算法的一些常见分类,我之前写了一篇介绍常见加密算法的文章。https://www.cnblogs.com/mysticbinary/p/12615063.html 签名、证书的使用场景: - 需要加密传输的数据 - Https协议 - Android签名 - 客户端与服务端之间的通信
# 将军与士兵通信 ---- 数字签名原理 为了用最简单的方式来讲解数字签名,我下面模拟几个在军事角色来讲解,加密算法的起源就是为了战争服务的。下面的实验演示使用一个在线网站:http://tool.chacuo.net/cryptrsapubkey 假设有一个德国将军和一个德国士兵需要通信,那么他们为了安全考虑,决定采用RSA非对称加密算法。 ## 将军拿私钥、士兵拿公钥 将军拿着私钥: ```shell -----BEGIN PRIVATE KEY----- MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAOFLM8+cWfjWJrP6 3i0jiRtpc240U6wjyEV4Ji2XA8UpFsRMdsFLXRsy9Rs5YsW1GBlXcv3bgZD2itui YSYnWdbJpI7yIFtkDKJZQ/k8kmH9v2QePUwzAbvXZsZ9hg92ORGms2nNT3DhQHNQ wopSgdThz8Ztvhd4Er0s1M9ZAvhjAgMBAAECgYEAxwNLTUXsJGfn4Gzm/jC52MEZ +mu2zgT90IAGGZeg+PUG63gwHyeXo4MsCVRz7/m8xAX/ykew+IEQwFt8Pdvc+rrs 5yml4gOBPfhpau5QaI75xNjnyH7UA3mbRCZeyZrvuKqtY/f8pCgzy3EBWnRpkcsq eE6bsOQrD45mltr+0QECQQDynvhKEh+hD5xBpF/DIP8Fp6fizexHdA6+aZT/gLaF A4XgZ9HEDDBhvNdadyYUNOLWhkxRHv6CkT5azfLXsJEhAkEA7begtbBCDXDf1+DR h3j2S8zcv6+utYgcpjvxZqjbPi6UIWXLxI80PIwQ0uouHCUMjikBA6VX9vTbw9TZ /IelAwJBAKI3W7baiz86mrTg3A4w/5GeWQexuurDVCBHo5F5U493nYk+oOe9ZpPS mQIpa9JS0d+xB1GtsWlHBzPbQySnL0ECQA/btCjqvT1QTl6EbPXwp92eqQtQmQMb NW4RiaUjlpyrVs5zkAho1T9EyMqJPNI71n6VVa/8k8WxyAdkZ7ZlBikCQEkNe1+s AKnh+AFGCJ+6WAq1J2RuIgcA6bVL3ip7F2NHdE+N+tR9JqWw3JNCweWmAlzKIGs6 eKSVD5egzKaLXss= -----END PRIVATE KEY----- ``` 士兵拿着公钥: ```shell -----BEGIN PUBLIC KEY----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDhSzPPnFn41iaz+t4tI4kbaXNu NFOsI8hFeCYtlwPFKRbETHbBS10bMvUbOWLFtRgZV3L924GQ9orbomEmJ1nWyaSO 8iBbZAyiWUP5PJJh/b9kHj1MMwG712bGfYYPdjkRprNpzU9w4UBzUMKKUoHU4c/G bb4XeBK9LNTPWQL4YwIDAQAB -----END PUBLIC KEY----- ``` ## 士兵给将军写信的过程 1. `I am soldier.`就是士兵想要加密的文本; 2. 用公钥加密文本,得到密文(如下) ```shell l05JLkFyAY5W2AHnrufbPqPCU7VhfFmarBzLUgc/hIIdVVRZ2DUfCPACRUNmIhLWijaXYjHPvnD3QwxNmG4LynggWzDur2Ssj8Ng1EqmPEFA5ujlwUvZeqOENs/PnamTqrxlStxW2MOJZLUbxRsilIcK4807XBRYUThpsmUxZmU= ``` 3. 将这个密文通过邮件的方式发送给将军; 过程如下图: ![](https://img2020.cnblogs.com/blog/1552062/202004/1552062-20200401213820524-1712078931.png) ## 将军收到密文解密的过程 只要将军不把私钥泄露出去,那这个密文就是安全的,即使英国佬拦截到了这个密文,也破译不了,只能看到一堆乱码。 1. 将军收到密文; 2. 将军使用私钥来解密密文,得到信本身的内容; 过程如下图: ![](https://img2020.cnblogs.com/blog/1552062/202004/1552062-20200401214529660-1815223575.png) ## 将军给士兵写信的过程 1. `I am general.`是将军写的文本; 2. 用hash的方式,hash一下`I am general.` 得到hash文:`5244FAC4DB90120F1D833C687E0317FF` , 这个hash文叫做摘要(digest); 如下图: ![](https://img2020.cnblogs.com/blog/1552062/202004/1552062-20200401215546054-681859801.png) 3. 使用私钥加密这个摘要,得到一段密文,这个叫数字签名(signature); ```shell EtWBVFsxMeP1TMHwGLPdCy9fzmon09b7YGqfcKFNS7F4Db9iFSVKC6gABxuqL59eV6Fm/3hPXZ2NQ+4eq/rY57GiT0kMP4e86gFmUSLwJNHQyuue2zIJrrhLp7/CyVGjKFIyM0KLr+NERt2bv4t5ZkbIJLuN+QLNZUV6WCFugHQ= ``` 如下图: ![](https://img2020.cnblogs.com/blog/1552062/202004/1552062-20200401215935556-262516916.png) 3. 将军将`I am general.`文本和`数字签名`一起通过邮件的方式发送给士兵; ## 士兵接收将军信的过程 1. 士兵用公钥解密这个数字签名, 得到摘要`5244FAC4DB90120F1D833C687E0317FF` ; 如下图: ![](https://img2020.cnblogs.com/blog/1552062/202004/1552062-20200401220333599-90256192.png) 2. 拿到`I am general.`文本使用hash加密,得到`5244FAC4DB90120F1D833C687E0317FF` hash密文 3. 士兵通过对比摘要和hash密文是否一致,就能确认是将军发送的,并且没有被篡改。 这样就防止了英国佬拦截了将军的信,并作修改。 ## 签名的安全风险 1. 如果使用的是对称加密算法,那么不管是客户端还是服务端泄露了密钥就非常危险了。 2. 使用了非对称,但是将密钥参与了传输,并泄露,那真是666了。 3. 服务端的密钥写死在代码,而不是采用访问接口获取的方式,会导致离职的程序员带走密钥。 4. 如果多个客户端之间的公钥证书被篡改,那么也意味着身份认证也被篡改了。
# 为什么需要数字证书 ## 为什么需要数字证书 数字证书就是用来解决`4. 如果多个客户端之间的公钥证书被篡改,那么也意味着身份认证也被篡改了。`安全风险的第四条,防止客户端的公钥被篡改。 英国佬气急败坏,想出对策,既然将军不好搞,那就搞士兵,就派出英国美女间谍,美女间谍诱骗德国士兵后,偷偷使用了德国士兵的电脑,用自己的公钥替换了士兵电脑里的公钥。此时,士兵本地存储的是英国间谍的公钥,士兵还以为这是将军的公钥。因此,英国佬就可以冒充德国将军,用自己的私钥做成"数字签名",写信给士兵,让德国士兵用`假的将军公钥`进行解密,最后得到假信。 ## 数字证书是什么 德国士兵得到了几次假信之后,也觉得不对劲了,但是自己又无法确定公钥是否是将军的真公钥。士兵就想到了一个办法,要求德国将军去找德意志情报中心(证书中心 certificate authority,简称CA),为公钥做认证。德意志情报中心(CA)用自己的私钥,对将军的公钥和一些相关信息一起加密,生成"数字证书"(Digital Certificate)。 ![](https://img2020.cnblogs.com/blog/1552062/202004/1552062-20200401223123093-886616224.png) 将军拿到了德意志情报中心(证书中心 certificate authority,简称CA)的数字证书以后,就可以放心了。以后再给士兵写信,除了加上数字签名,再附上数字证书就行了。 士兵收信后,先去用德意志情报中心的公告板查看CA证书的真伪性,确认之后,就可以用CA的公钥解开数字证书,就可以拿到将军的真实的公钥了,然后就能证明"数字签名"是否真的是将军签的。 ## Https原理 系统和浏览会存储着CA机构的根证书,然后通过对比服务端发送过来的证书的过程(这里不展开讲),来保证数据不被中间人篡改。 ![](https://img2020.cnblogs.com/blog/1552062/202004/1552062-20200401230150343-325398032.png) ## 数字证书的应用场景 - Https - 移动端系统 - 使用非对称加密,又怕客户端的公钥被劫持的场景 # 参考 http://www.youdzone.com/signature.html https://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html

Copyright 2022 版权所有 软件发布 访问手机版

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 联系我们