在了解数字签名和数字证书以前,能够先了解一下加密算法的一些常见分类,我以前写了一篇介绍常见加密算法的文章。http://www.javashuo.com/article/p-qxopldbc-kw.htmlhtml
为了用最简单的方式来说解数字签名,我下面模拟几个在军事角色来说解,加密算法的起源就是为了战争服务的。下面的实验演示使用一个在线网站:http://tool.chacuo.net/cryptrsapubkeygit
假设有一个德国将军和一个德国士兵须要通讯,那么他们为了安全考虑,决定采用RSA非对称加密算法。程序员
将军拿着私钥:算法
-----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-----
I am soldier.
就是士兵想要加密的文本;l05JLkFyAY5W2AHnrufbPqPCU7VhfFmarBzLUgc/hIIdVVRZ2DUfCPACRUNmIhLWijaXYjHPvnD3QwxNmG4LynggWzDur2Ssj8Ng1EqmPEFA5ujlwUvZeqOENs/PnamTqrxlStxW2MOJZLUbxRsilIcK4807XBRYUThpsmUxZmU=
过程以下图:
安全
只要将军不把私钥泄露出去,那这个密文就是安全的,即便英国佬拦截到了这个密文,也破译不了,只能看到一堆乱码。网站
过程以下图:
ui
I am general.
是将军写的文本;加密
用hash的方式,hash一下I am general.
获得hash文:5244FAC4DB90120F1D833C687E0317FF
, 这个hash文叫作摘要(digest);
以下图:
.net
使用私钥加密这个摘要,获得一段密文,这个叫数字签名(signature);
EtWBVFsxMeP1TMHwGLPdCy9fzmon09b7YGqfcKFNS7F4Db9iFSVKC6gABxuqL59eV6Fm/3hPXZ2NQ+4eq/rY57GiT0kMP4e86gFmUSLwJNHQyuue2zIJrrhLp7/CyVGjKFIyM0KLr+NERt2bv4t5ZkbIJLuN+QLNZUV6WCFugHQ=
以下图:
I am general.
文本和数字签名
一块儿经过邮件的方式发送给士兵;士兵用公钥解密这个数字签名, 获得摘要5244FAC4DB90120F1D833C687E0317FF
;
以下图:
拿到I am general.
文本使用hash加密,获得5244FAC4DB90120F1D833C687E0317FF
hash密文
士兵经过对比摘要和hash密文是否一致,就能确认是将军发送的,而且没有被篡改。
这样就防止了英国佬拦截了将军的信,并做修改。
数字证书就是用来解决4. 若是多个客户端之间的公钥证书被篡改,那么也意味着身份认证也被篡改了。
安全风险的第四条,防止客户端的公钥被篡改。
英国佬气急败坏,想出对策,既然将军很差搞,那就搞士兵,就派出英国美女间谍,美女间谍诱骗德国士兵后,偷偷使用了德国士兵的电脑,用本身的公钥替换了士兵电脑里的公钥。此时,士兵本地存储的是英国间谍的公钥,士兵还觉得这是将军的公钥。所以,英国佬就能够冒充德国将军,用本身的私钥作成"数字签名",写信给士兵,让德国士兵用假的将军公钥
进行解密,最后获得假信。
德国士兵获得了几回假信以后,也以为不对劲了,可是本身又没法肯定公钥是不是将军的真公钥。士兵就想到了一个办法,要求德国将军去找德意志情报中心(证书中心 certificate authority,简称CA),为公钥作认证。德意志情报中心(CA)用本身的私钥,对将军的公钥和一些相关信息一块儿加密,生成"数字证书"(Digital Certificate)。
将军拿到了德意志情报中心(证书中心 certificate authority,简称CA)的数字证书之后,就能够放心了。之后再给士兵写信,除了加上数字签名,再附上数字证书就好了。
士兵收信后,先去用德意志情报中心的公告板查看CA证书的真伪性,确认以后,就能够用CA的公钥解开数字证书,就能够拿到将军的真实的公钥了,而后就能证实"数字签名"是否真的是将军签的。
系统和浏览会存储着CA机构的根证书,而后经过对比服务端发送过来的证书的过程(这里不展开讲),来保证数据不被中间人篡改。
http://www.youdzone.com/signature.html
https://www.ruanyifeng.com/blog/2011/08/what_is_a_digital_signature.html