在瞭解數字簽名和數字證書以前,能夠先了解一下加密算法的一些常見分類,我以前寫了一篇介紹常見加密算法的文章。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