區塊鏈100講又一個不得不說的是密碼算法,若是把區塊鏈系統比做一我的,那密碼算法就是他的骨骼,若是沒有骨骼,整個體系就會坍塌。今天咱們來看看區塊鏈系統的密碼算法有什麼獨特之處。算法
發送者和接收者: 發送者想要發送消息給接收者,而且這個消息是安全的(讓偷聽者不能閱讀這個消息)安全
消息和加密:消息被稱做 明文。經過某種方法假裝消息以隱藏它的內容的過程稱做 加密。被加密的消息被稱做 密文。相應的,把密文轉變成明文的過程叫做 解密。網絡
算法和密鑰:密碼算法也叫 密碼,是用於加密和解密的數學函數。若是算法的保密性是針對於保持算法的祕密,這種算法稱爲受限制算法。按如今的標準,這種受限制算法保密性已經遠遠不夠。現代密碼學使用 祕鑰來解決了這個問題。有些算法使用兩個不一樣的密鑰,即加密密鑰和解密密鑰不一樣。這些算法的安全性就是基於密鑰的安全性,而不是算法細節的安全性,這就意味着算法能夠公開,即便偷聽者知道算法,可是不知道具體使用的密鑰,就不可能閱讀消息。函數
密碼系統:由全部可能的明文、密文、密鑰、以及算法組成。性能
對稱算法:又叫傳統密碼算法,加密祕鑰能從解密密鑰中推算出來,反過來也成立。一般加密和解密使用同一個密鑰,稱做 單密鑰算法或者是 祕密密鑰算法。學習
公開密鑰算法(非對稱算法):用做加密的祕鑰不一樣於用做解密的解密祕鑰,並且解密祕鑰不能經過加密祕鑰計算出來(至少在合理假定的長時間內)。之因此叫做公開密鑰算法,由於加密祕鑰可以公開,可是偷聽者只能使用加密祕鑰加密信息,只有用相應的解密祕鑰才能解密信息。這裏,加密密鑰又被稱做 公開密鑰(簡稱公鑰),解密祕鑰稱做 私人密鑰(簡稱私鑰)。區塊鏈
混合密碼系統:將對稱密碼和公鑰密碼結合起來的密碼方式稱爲混合密碼系統。編碼
密碼分析:密碼分析是在不知道密鑰的狀況下,恢復出明文的科學。成功的密碼分析能恢復明文或者密鑰。也能夠發現密碼體制的弱點而獲得明文和密鑰。(密鑰經過非密碼分析的方式的丟失叫 泄露 )加密
算法的安全性:那麼什麼樣的算法纔是安全的呢?若是破譯算法的代價大於加密數據的價值;若是破譯算法所須要的時間比加密數據保密的時間更長;若是用單密鑰加密的數據量比破譯算法須要的數據量少得多。那麼你多是安全的。ip
現比特幣仍繼續使用公開密鑰加密(public-key cryptography,也稱爲非對稱加密)方式進行數據加密,實質是一對數學算法相關的公鑰密鑰解密的關係,使用經過私鑰解開公鑰(公開的密鑰)後獲取本真的信息,此過程是非對稱加密算法。
公鑰的主要做用:加密;驗證簽名。
私鑰的主要做用:簽名;解密。
特性:
經過私鑰能夠計算出公鑰,反之則不行。
公鑰加密:公鑰加密的內容能夠用私鑰來解密——只有私鑰持有者才能解密。
私鑰簽名:私鑰簽名的內容能夠用公鑰驗證。公鑰能驗證的簽名都可視爲私鑰持有人所簽署。
使用原則:
① 每個公鑰都對應一個私鑰。
② 密鑰對中,讓你們都知道的是公鑰,不告訴你們,只有本身知道的,是私鑰。
③ 若是用其中一個密鑰加密數據,則只有對應的那個密鑰才能夠解密。
④ 若是用其中一個密鑰能夠進行解密數據,則該數據必然是對應的那個密鑰進行的加密
舉個栗子:
咱們來認識兩個密碼學上的知名人士Alice和Bob,如今他們是一對地下情侶,以及一個自做多情的第三者Eve。
Alice和Bob想互相寫情書,可是他們不想讓Eve偷看到他們互遞情書內容,因而他們準備給情書加密。Alice加密後,把情書給Bob看,可是情書已經加密了,Bob看不懂,Alice意識到她還得把解密的密鑰給一塊兒發送給Bob。
可是若是Alice直接把密文和密鑰一塊兒發送給Bob行不行呢?若是一塊兒發送,Eve兩個都會拿到就能夠像Bob同樣看情書的內容了,也就是說,同時發送密鑰,Eve也能完成解密。Alice束手無策,密鑰必須發送給Bob,但又不能發送,哎呀她要糾結死了。
後來,Alice想到,既然必須給鑰匙,那麼我能夠準備兩把鑰匙啊,因而她和Bob商量這麼作:
1)兩人準備兩把配對鑰匙,一把用來加密(公鑰),一把用來解密(私鑰)。
2)Bob把他的公鑰發送給Alice,這時被Eve截獲,Eve很興奮,「嗨呀,拿到大家的鑰匙了」
3)而後Alice收到Bob的公鑰後,用Bob的公鑰加密,而後把密文發送給Bob。這時又被Eve截獲,「嗨呀,看我破解你的密碼,咦?怎麼打不開呢?」
4)Bob拿到Alice給他的密文後,用本身的私鑰對密文解密。(今後之後,Alice和Bob的地下戀情就不怕被Eve曝光了,咱們只是在談論學習,你是不會懂的。Eve仍是一臉懵逼)
以上就是公鑰密碼在傳輸過程當中的原理。
一、RSA算法
RSA是第一個比較完善的公開密鑰算法,它既能用於加密,也能用於數字簽名。RSA以它的三個發明者Ron Rivest, Adi Shamir,LeonardAdleman的名字首字母命名,這個算法經受住了多年深刻的密碼分析,雖然密碼分析者既不能證實也不可否定RSA的安全性,但這偏偏說明該算法有必定的可信性,目前它已經成爲最流行的公開密鑰算法。
這套密碼系統,是當今世界上、史上最強加密系統,沒有之一,咱們平常全部的與金錢有關的信息往來,所有用這套系統加密。RSA算法的一個最大的優勢就是,我不怕被人知道個人加密方法,我不怕告訴別人個人一個密鑰,由於告訴你也沒用。RSA的安全基於大數分解的難度。其公鑰和私鑰是一對大素數(100到200位十進制數或更大)的函數。從一個公鑰和密文恢復出明文的難度,等價於分解兩個大素數之積(這是公認的數學難題)。
RSA的公鑰、私鑰的組成,以及加密、解密的公式可見於下表:
二、舉個栗子,看看這個系統是怎樣工做的。
假設兩我的:龐涓和孫臏,龐涓要給孫臏一個特別的數字m=520,固然不能讓別人知道了,那樣太尷尬了對吧。
第一步,孫臏選擇兩個不相等的質數。如p=61和q=53
第二步,計算兩個質數的乘積,n=pq=61×53=3233
第三步,計算n的歐拉函數,φ(n)=60×52=3120(關於歐拉函數,另文撰寫)
第四步,隨機選擇一個整數e,1<e<φ(n),且e與φ(n)互質,龐涓選了e=17
第五步,解不定方程ex+φ(n)y=1,即17x+3120y=1得x=2753,y=-15(關於這個方程的解法,另文撰寫,數字小的話直接試試就好),則d=2753
公佈公鑰(n,e)=(3233,17),保護好本身的私鑰(n,d)=(3233,2753)
第六步,加密。計算m^e除以n的餘數,即c=mod(520^17,3233)=1077。(這個計算用Excel就能夠完成,不須要計算器)因而龐涓將c=1077發給了孫臏。
第七步,解密。孫臏拿到c=1077後,用本身的私鑰(n,d)=(3233,2753)來解密。計算c^d除以n的餘數,即mod(1077^2753,3233)=520(孫臏臉上泛着幸福的紅暈)
這個加密系統中,私鑰(n,d)是最關鍵的,要保護好,一旦丟失,就等於失去祕密。
問題:有沒有可能由(n,e)倒推出(n,d)呢?
要知道d,由第五步得,必須知道φ(n)
要知道φ(n),由第三步得,必須分解質因數n=pq
要倒推出d,必須對n進行分解質因數。而對於大整數n的分解質因數,數學上毫無辦法,唯一能實現的辦法就是暴力破解,也就是一個質數一個質數去試。目前公開能分解的最大整數是1230 1866 8453 0117 7551 3049 4958 3849 6272 0772 8535 6959 5334 7921 9732 2452 1517 2640 0507 2636 5751 8745 2021 9978 6469 3899 5647 4942 7740 6384 5925 1925 5732 6303 4537 3154 8268 5079 1702 6122 1429 1346 1670 4292 1431 1602 2212 4047 9274 7377 9408 0665 3514 1959 7459 8569 0214 3413
這是個232位整數,也是暴力破解的上限,固然之後量子計算機出現了,估計這個上限還會增長,但只要數學沒有突破,無非就是密碼長必定罷了。
如此完成了一個完整的信息傳遞過程。咱們看到,若是不知道d,其餘人是不管如何也算不出m=520的,而要知道d,就必須對n進行分解質因數,而這又是極端困難。即使本例,n只有區區3233四位數,分解質因數就已經很是困難,不得不借助計算機了。
RSA算法實際上是三個步驟。
計算公鑰和私鑰。隨機選擇質數p,q,n=pq,隨機選擇與φ(n)互質的數e,解方程ex+φ(n)y=1,其中d=x
加密,c=mod(m^e,n)
解密,m=mod(c^d,n)
三、RSA算法的特色
算法簡單,計算容易,破解困難,這是RSA加密的最大特色。缺點嘛……密碼實在太長了,1000位如下的密碼根本就不放心。通常金融須要至少1024位,國防須要2048位。其次,這個算法的所有依託是如今的數學水平,假如哪天某個數學家突破了這個難題,他很容易就能分解大整數,這我的就太可怕了,不敢想象。
橢圓曲線密碼學(英語:Elliptic curve cryptography,縮寫爲 ECC),一種創建公開密鑰加密的算法,基於橢圓曲線數學。橢圓曲線在密碼學中的使用是在1985年由Neal Koblitz和Victor Miller分別獨立提出的。在區塊鏈網絡中,ECC一般被應用在數字簽名等環節。
橢圓曲線密碼學的主要優點是在某些狀況下它比其餘的方法使用更小的密鑰——好比RSA加密算法——提供至關的或更高等級的安全。橢圓曲線密碼學的另外一個優點是能夠定義羣之間的雙線性映射,基於Weil對或是Tate對;雙線性映射已經在密碼學中發現了大量的應用,例如基於身份的加密。不過一個缺點是加密和解密操做的實現比其餘機制花費的時間長。
雙線性映射解釋:在數論中,一個雙線性映射是由兩個向量空間上的元素,生成第三個向量空間上一個元素之函數,而且該函數對每一個參數都是線性的。
橢圓曲線加密算法本質是數標軸上曲線的方程式計算,經過數的計算獲得加密/解密。
例如:公開密鑰算法老是要基於一個數學上的難題。好比RSA 加密算法依據的是:給定兩個素數p、q很容易相乘獲得n,而對n進行因式分解卻相對困難。那橢圓曲線上有什麼難題呢?
假設以下方程等式:
K=kG [其中 K,G爲Ep(a,b)上的點,k爲小於n(n是點G的階)的整數]
不難發現,給定k和G,根據加法法則,計算K很容易;但給定K和G,求k就相對困難了。
這就是橢圓曲線加密算法採用的難題。咱們把點G稱爲基點(base point),k(k<n,n爲基點G的階)稱爲私有密鑰(privte key),K稱爲公開密鑰(public key)。
咱們看下圖,下圖描述一個利用橢圓曲線進行加密通訊的過程:
用戶A選定一條橢圓曲線Ep(a,b),並取橢圓曲線上一點,做爲基點G。
用戶A選擇一個私有密鑰k,並生成公開密鑰K=kG。
用戶A將Ep(a,b)和點K,G傳給用戶B。
用戶B接到信息後,將待傳輸的明文編碼到Ep(a,b)上一點M(編碼方法不少,這裏不做討論),併產生一個隨機整數r(r<n)。
用戶B計算點C1=M+rK;C2=rG。
用戶B將C一、C2傳給用戶A。
用戶A接到信息後,計算C1-kC2,結果就是點M。由於
C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
再對點M進行解碼就能夠獲得明文。
在這個加密通訊中,若是有一個偷窺者H ,他只能看到Ep(a,b)、K、G、C一、C2 而經過K、G求k 或經過C二、G求r 都是相對困難的。所以,H沒法獲得A、B間傳送的明文信息。
密碼學中,描述一條Fp上的橢圓曲線,經常使用到六個參量:
T=(p,a,b,G,n,h)。
(p 、a 、b 用來肯定一條橢圓曲線,
G爲基點,
n爲點G的階,
h 是橢圓曲線上全部點的個數m與n相除的整數部分)
這幾個參量取值的選擇,直接影響了加密的安全性。參量值通常要求知足如下幾個條件:
p 固然越大越安全,但越大,計算速度會變慢,200位左右能夠知足通常安全要求;
p≠n×h;
pt≠1 (mod n),1≤t<20;
4a3+27b2≠0 (mod p);
n 爲素數;
h≤4。
ECC是RSA的強有力競爭者,其與RSA相比有如下優勢:
安全性能更高:如160位ECC與1024位RSA有相同的安全強度;
計算量小、處理速度快:在私鑰的處理速度上(解密和簽名),ECC遠比RSA快得多;
存儲空間佔用小:ECC的密鑰尺寸和系統參數與RSA相比要小得多,因此佔用的存儲空間也小得多;
帶寬要求低:這一優點使ECC具備更普遍的應用前景。
ECC的這些優勢使其必將取代RSA,成爲通用的公開密鑰算法。目前,SET協議(安全電子交易協議)的制定者已把它做爲下一代SET協議中不可缺乏的公開密鑰算法。
儘管ECC有以上優點,但仍存在兩大技術難題:
第一,怎麼選取合適曲線;
第二,怎麼快速實現橢圓曲線密碼。
因此,在嚴謹的密碼學體制下還需進一步研究,以攻克更多技術難題,最終保障用戶信息安全。
內容來源:
公衆號:大轉轉FE、EETOP、區塊鏈技術資訊、數學佬、Nervosfans、幣鏈天
如下是咱們的社區介紹,歡迎各類合做、交流、學習:)