區塊鏈淺談4
交易數據
礦工驗證交易流程
- 確認交易內容做Hash演算與交易Hash值是否一致
- 確認交易發起人是否有此錢包地址的簽章
- 確認錢包地址儲存金額是否足夠支付此交易
- 打包放入區塊
加密演算法
1.Hash算法
Hash並不是可解密的演算法,因為他是單向不可逆,可以確保加密前資料沒有被竄改。他可以將任一訊息轉成一段固定長度的字串,且有以下兩個特點:
- 同一訊息做Hash的結果字串是固定一致的
- 只要訊息不一致,即使再微小,Hash加密出的字串也是隨機無規律,無法預測
用途
- 驗證內容是否相同:只要兩個Hash值一樣,則保證加密前是一樣。
- 驗證訊息持有者:只有擁有原文持有者可以利用Hash做出相同結果,其他無訊息者無法逆向得知
2.RSA算法
RSA加密算法是利用對一個大整數去做因數分解很困難,但驗證很簡單的原理去做編寫
生成公開金鑰和私密金鑰: 1、生成一對大質數p,q,求出n=p*q和f=(p-1)*(q-1)。 2、生成一個亂數e,滿足e<f且e,f互質。 3、求出e關於f的模逆d,即求出e*d=1 mod f。 設明文為m,密文為g。 用公開金鑰n,e加密:m^e=g mod n 用私密金鑰n,d解密:g^d=m mod n 證明解密後的明文就是原先的明文: 根據加密解密規則,將g=m^e mod n代入g^d=m mod n後,發現只要證明m^(e*d)=m mod n即可(同余運算的原理)。 由於e*d=1 mod f,所以只需證明m^(f+1)=m mod n即可。根據歐拉定理,f是歐拉函數所以得證
3.橢圓曲線加密演算法ECDSA
在橢圓曲線系統中,已知a,b,可以算出c = a*b。但已知c,b,無法算出a = c/b。利用這乘法特性就可以做非對稱加密。
用公開金鑰a,c=a*b,r(亂數)加密:
設明文m,密文g1,g2。
g1=m+r*c
g2=r*a
用私密金鑰a,b解密:m=g1-b*g2
證明:
g1-b*g2
=m+r*c-b*r*a
=m+r*c-r*c
=m
我們還可以利用這種乘法進行簽名認證。
用私密金鑰a,b,r(亂數)簽名:
設原文m,簽名g1,g2。
x=r*a
g1=SHA(m,x)
g2=r-g1*b
用公開金鑰驗證:
g2*a+g1*c
=(r-g1*b)*a+g1*c
=r*a-g1*b*a+g1*c
=r*a-g1*c+g1*c
=r*a
=x
計算SHA(m,x)是否和g1相等。
這就是加密解密層面上的橢圓曲線加密演算法。
整理ECDSA有以下特性:
- 無須公布私鑰可證明擁有此公鑰之私鑰
- 無法從公鑰逆推私鑰
用途
比特幣錢包地址就是橢圓加密演算法中的公鑰,而用戶持有私鑰則表示他擁有這個公鑰地址所存的錢。礦工驗證時只需要給簽名認證就能不需要公布私鑰也能證明此錢包地址是屬於誰的。
下篇介紹共識演算法