本文轉自微信公衆號「Wancloud萬雲」發佈的譯文: Panayotis Vryonis《Explaining public-key cryptography to non-geeks》微信
原文地址:http://mp.weixin.qq.com/s/E-i4a5sEKWRRq3f0zzXekQ區塊鏈
做爲區塊鏈技術的關鍵詞之一,密碼學是不可繞過的一座橋。非對稱加密又是什麼呢?非對稱加密其實並不如它聽起來的那麼複雜,咱們只須要換個方式解釋它,就能讓不是極客的你也秒懂。網站
爲何我想用一種通俗易懂的方式來解釋深奧的非對稱加密?是由於我正在研究一種會大量使用加密的產品,我本身最近不止一次向朋友解釋非對稱加密,而令我驚訝的是,網上所搜索到的任何相關信息都讓它看起來更加複雜,但事實並不是如此。加密
下面進入正題。文檔
首先,讓咱們先了解下「對稱」加密是如何工做的。產品
老王有一個帶鎖的盒子,同時老王也有一把屬於本身的鑰匙能夠開關這個盒子。當老王想要保存某些重要物品在盒子中,他會將其上鎖;只有他或其擁有備份鑰匙的人才能打開盒子。基礎
這就是對稱加密:你有一把鑰匙,你用它來關鎖(加密)和開鎖(解密)你的盒子(數據)。原理
對稱加密很好懂對不對,如今讓咱們在此基礎上來看看非對稱密碼學是如何工做的。搜索
小明也有一個盒子,這個盒子比老王的更高級一點,由於這是一個帶有特殊鎖的盒子。程序
它特殊在何處呢?
直接看圖▼
從上圖能夠看出小明的盒子上的鎖有三種狀態:A(鎖定),B(解鎖)和C(鎖定),必定要記住這三個字母分別表明的狀態。
同時,小明的盒子配有兩把不一樣的鑰匙。
第一個把鑰匙只能順時針轉動,從A轉到B轉到C,第二把鑰匙只能逆時針轉動,從C轉到B轉到A。
小明從這兩把鑰匙中挑選第一把鑰匙歸本身全部,這就是小明的私鑰,只有小明配擁有它,爲了保護好盒子,小明通常都把私鑰藏到別人找不到的地方。
小明盒子的第二把鑰匙是 「公開」鑰匙:他把第二把鑰匙複製了一百把(也能夠更多),給了他的朋友和家人,在辦公室的桌上也留下了一把,甚至直接掛了一把在辦公室門外。
如今,咱們整理一下思路,小明的私鑰,能夠從A轉到B到C,只歸他我的全部;小明的公鑰,能夠從C轉到B到A,其餘人只要想要均可以得到。(不明白的老鐵能夠再看下上文的圖)
小明的盒子特殊之處咱們搞清楚了,那小明能夠利用這個盒子作什麼羞羞的(正經的)的事情呢?
直接來舉個例子!
你想發送一個鏈圈大佬的大八卦給小明,可是又不想讓別人知道。如何是好呢?
你想起小明有個特殊的盒子!
因而你將這個八卦放在小明的盒子中,並用小明的公鑰副本將盒子上的鎖從C轉到B轉到A,這時候文件就被鎖在了盒子裏(A的狀態是鎖定)。是的,你清楚地記得:小明的公鑰只能逆時針旋轉,因此你把它轉到位置A,如今這個八卦就被鎖定了。
而後??????
小明回來了,他用他的私鑰把盒子上的鎖從A轉到B,B的狀態是解鎖,盒子打開了!小明看到了八卦,沒想到他崇拜的鏈圈大佬竟然作出這種事???
因此究竟是什麼大八卦???經過這個盒子來傳遞信息,只有小明和你知道。
由於,這個盒子惟一能夠順時針從A轉到B的鑰匙是小明的私鑰。
是否是豁然開朗! 這就是咱們所說的公鑰加密,也就是非對稱加密:每一個擁有小明公鑰的人(很容易找到它的一個副本,他處處都放了,記得嗎?)能夠將文檔放在他的盒子中,從C轉到B轉到A,造成鎖定狀態;而最終能解鎖的人只有小明,由於小明的私鑰是從A開始轉,轉到B就解鎖了。因此就算有人想知道你到底發了什麼八卦給小明,也沒法獲取哦!
知道這個原理的你,八卦之心碎了一地。
那,小明這個特殊的盒子還能作什麼呢?
再來舉個例子!
假設小明在盒子中放置了一個文件並用他的私人鑰匙將鎖轉到位置C來鎖定。
但是小明爲何要這樣作?????畢竟,任何擁有公鑰的人均可以從C轉到B,而後解鎖它!
等等!必定有什麼我沒發現的重要線索!
果真,有人送給我一個盒子,他說這是小明的,可是我並不能確認這個盒子就是小明的,爲了驗證它,我從保存各類好朋友公鑰的抽屜裏挑選小明的公鑰,而後嘗試我右轉,盒子一動不動;而後我嘗試左轉,砰!箱子打開!因而我驗證了這個盒子確實是屬於小明的。
小明經過私鑰加密這個方式證實是他本身而不是其餘任何人把文件放在箱子裏。咱們把這個證實方式稱之爲「數字簽名」。
好了,今天的例子就到這裏,咱們言歸正傳。
在數字世界中,「鑰匙(keys)」其實就是數字,有長有短。您能夠將您的私鑰,其實就是一串數字保存在文本文件或特殊應用程序中。 你能夠把你的公鑰,也是一個很長的數字,放在你的電子郵件簽名中,你的網站等等公開的地方。並且不須要特殊的盒子,你只需用一個應用程序和你的鑰匙來「鎖定」和「解鎖」文件(或數據)。
若是任何人,即便是你,用你的公鑰加密(鎖定),也就逆時針轉到鎖定狀態A,只有你能夠用你的私鑰解密(解鎖),所以別人經過公鑰傳送給你的加密文件,只有你可以解密,相信第一個例子已經解釋得很清楚了。
若是你用你的私鑰加密(鎖定),也就是轉到鎖定狀態C,任何人均可以解密(解鎖),這能夠做爲你對它加密的證據:它就是你的「數字簽名」。
還有許多更爲複雜的場景:咱們可使用咱們的私鑰來簽名文件,而後使用其餘人的公鑰對其進行加密,以便只有他能夠讀取它。 一個用戶或一個組織能夠對其餘用戶的密鑰進行數字簽名,以驗證其真實性等等。可是,全部這些實際上都是使用一個或另外一個密鑰並將其放入其餘盒子中,不屬於這篇文章的討論範圍。