數(shù)字簽名啃勉,就是只有信息的發(fā)送者才能產(chǎn)生的別人無法偽造的一段數(shù)字串又兵,這段數(shù)字串同時也是對信息的發(fā)送者發(fā)送信息真實性的一個有效證明竖配。
數(shù)字簽名涉及到區(qū)塊鏈的認(rèn)證機(jī)制哨鸭,它有兩個作用
1通今、證明消息確實是由信息發(fā)送方簽名并發(fā)送出來的
2粥谬、確定消息的完整性。
通過數(shù)字簽名我們主要實現(xiàn)了:
1辫塌、接收方能通過發(fā)送方的公鑰認(rèn)證發(fā)送方的身份
2漏策、通過私鑰方式簽名,別人偽造不了信息的簽名
3臼氨、發(fā)送方也通過私鑰簽名抵賴不了對信息的簽名
4掺喻、通過數(shù)字摘要技術(shù)保證了數(shù)據(jù)的完整性
5、哈希函數(shù)也保證了數(shù)據(jù)不可有任何篡改
發(fā)送報文時
發(fā)送方將報文利用數(shù)字摘要技術(shù)生成報文摘要
用非對稱密鑰加密技術(shù)中私鑰對報文摘要進(jìn)行加密
將原文和加密后摘要一同發(fā)送給接收方
接收報文時
接收方利用數(shù)據(jù)摘要技術(shù)對發(fā)送方發(fā)送的原文生成報文摘要
用公鑰對發(fā)送方發(fā)送的數(shù)據(jù)進(jìn)行解密储矩,得到發(fā)送生成的報文摘要
解密的報文摘要和接收方自己生成的報文摘要進(jìn)行對比
相同說明信息沒有被揣改
數(shù)字簽名的基本算法
1感耙、對稱加密算法
對稱加密指加密和解密使用相同密鑰的加密算法,就是加密密鑰能夠從解密密鑰中推算出來持隧,同時解密密鑰也可以從加密密鑰中推算出來即硼。而在大多數(shù)的對稱算法中,加密密鑰和解密密鑰是相同的屡拨,所以也稱這種加密算法為秘密密鑰算法或單密鑰算法只酥。它要求發(fā)送方和接收方在安全通信之前,商定一個密鑰洁仗。對稱算法的安全性依賴于密鑰层皱,泄漏密鑰就意味著任何人都可以對他們發(fā)送或接收的消息解密,所以密鑰的保密性對通信性至關(guān)重要赠潦。
對稱加密常用的算法包括:
(1)DES(Data Encryption Standard):數(shù)據(jù)加密標(biāo)準(zhǔn)叫胖,速度較快,適用于加密大量數(shù)據(jù)的場合;
(2)3DES(Triple DES):是基于DES她奥,對一塊數(shù)據(jù)用三個不同的密鑰進(jìn)行三次加密瓮增,強(qiáng)度更高;
(3)AES(Advanced Encryption Standard):高級加密標(biāo)準(zhǔn)怎棱,是下一代的加密算法標(biāo)準(zhǔn),速度快绷跑,安全級別高拳恋。
2、非對稱加密算法
非對稱加密算法需要兩個密鑰:公鑰(publickey)和私鑰(privatekey)砸捏。公鑰與私鑰是一對谬运,如果用公鑰對數(shù)據(jù)進(jìn)行加密,只有用對應(yīng)的私鑰才能解密;如果用私鑰對數(shù)據(jù)進(jìn)行加密垦藏,那么只有用對應(yīng)的公鑰才能解密梆暖。私鑰保存在所有者手中,需要對外人保密不可讓外人知道掂骏,公鑰可以向其他信息接收方公開轰驳。因為加密和解密使用的是兩個不同的密鑰,所以這種算法叫作非對稱加密算法弟灼。
常用的非對稱加密算法包括:
(1)RSA:因由 RSA 公司發(fā)明而命名级解,是一個支持變長密鑰的公開密鑰算法,需要加密的文件塊的長度也是可變的;公開密鑰算法總是要依據(jù)一個數(shù)學(xué)上的難題田绑。RSA基于大素數(shù)積難分解問題勤哗,給定兩個數(shù)p、q 很容易相乘得到n辛馆,而對n進(jìn)行因式分解卻相對困難俺陋。
(2)ECC(Elliptic Curves Cryptography):橢圓曲線密碼編碼學(xué)。橢圓曲線因為用二元三次方程y^2= x^3+ ax + b來表示昙篙,類似橢圓周長計算方程而得名腊状。公開秘鑰算法要基于一個數(shù)學(xué)難題,橢圓曲線算法就是基于離散對數(shù)問題苔可。有限域Fp上的橢圓曲線同樣有加法缴挖,但已經(jīng)不能給以幾何意義的解釋。
橢圓曲線上的加法如下定義:
無窮遠(yuǎn)點 O∞是零元焚辅,有O∞+ O∞= O∞映屋,O∞+P=P
P(x,y)的負(fù)元是-P(x,-y),有P+(-P)= O∞
P(x1,y1),Q(x2,y2)和R(x3,y3) 有如下關(guān)系:
x3≡k2-x1-x2(mod p)
y3≡k(x1-x3)-y1(mod p)
其中若P=Q 則 k=(3x2+a)/2y1 若P≠Q(mào)同蜻,則k=(y2-y1)/(x2-x1)
考慮如下等式:
K=kG棚点,其中 K,G為Ep(a,b)上的點,k為小于n(n是點G的階)的整數(shù)湾蔓,不難發(fā)現(xiàn)瘫析,給定k和G,根據(jù)加法法則,計算K很容易;但給定K和G贬循,求k就相對困難了咸包。這就是橢圓曲線加密算法采用的難題,我們通常稱作離散對數(shù)問題杖虾。我們把點G稱為基點(base point)烂瘫,k(k
ECC和RSA相比,在許多方面都有對絕對的優(yōu)勢奇适,主要體現(xiàn)在:抗攻擊性強(qiáng);計算量小坟比,處理速度快;存儲空間占用小;帶寬要求低。ECC的這些特點使它必將取代RSA滤愕,成為通用的公鑰加密算法温算,所以區(qū)塊鏈也使用了ECC。
區(qū)塊鏈中用到的簽名算法SECP256K1
區(qū)塊鏈中生成公鑰時用到的算法是SECP256K1间影,是一種橢圓曲線的標(biāo)準(zhǔn)化表達(dá)方式,其中256表示該橢圓曲線是256位茄茁, K代表Koblitz curve魂贬,相對應(yīng)的橢圓曲線的標(biāo)準(zhǔn)換表達(dá)還有,SECP192K1裙顽,SECP192R1付燥,SECP224K1,SECP224R1愈犹,SECP256R1键科,SECP384R1,SECP521R1等漩怎。
SECP256K1曲線由下述函數(shù)定義勋颖,該函數(shù)可產(chǎn)生一條橢圓曲線:
Y^2 = (x^3 + 7)} over (Fp)
如此選取的原因,也是為了和哈希算法SHA256的輸出值相一致勋锤,以及求解離散對數(shù)的困難性饭玲。
現(xiàn)在描述一個利用橢圓曲線進(jìn)行加密通信的過程:
用戶A選定一條橢圓曲線Ep(a,b),并取橢圓曲線上一點叁执,作為基點G茄厘。
用戶A選擇一個私有密鑰k,并生成公開密鑰K=kG谈宛。
用戶A將Ep(a,b)和點K次哈、G傳給用戶B。
用戶B接到信息后 吆录,將待傳輸?shù)拿魑木幋a到Ep(a,b)上一點M(編碼方法很多窑滞,這里不作討論),并產(chǎn)生一個隨機(jī)整數(shù)r(r
用戶B計算點C1=M+rK;C2=rG。
用戶B將C1葛假、C2傳給用戶A障陶。
用戶A接到信息后,計算C1-kC2聊训,結(jié)果就是點M抱究。因為C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
再對點M進(jìn)行解碼就可以得到明文,這是區(qū)塊鏈中用到簽名算法SECP256K1的基本原理带斑。