matlab矩陣的值怎么算(matlab矩陣求值)
上一篇橢圓曲線算法(ECC)學(xué)習(xí)(一)中我們講述了橢圓曲線算法的基本數(shù)學(xué)常識(shí)和加密解密過(guò)程,作為橢圓曲線數(shù)學(xué)的一種公鑰密碼的算法,其優(yōu)點(diǎn)毋庸置疑。區(qū)塊鏈最近異?;馃?,那么今天我們就來(lái)講講區(qū)塊鏈的關(guān)鍵加密技術(shù),橢圓曲線secp256k1。
Secp256k1是指比特幣中使用的ECDSA(橢圓曲線數(shù)字簽名算法)曲線的參數(shù),并且在高效密碼學(xué)標(biāo)準(zhǔn)(Certicom Research,http://www.secg.org/sec2-v2.pdf)中進(jìn)行了定義。
0×01 前言
Secp256k1為基于Fp有限域上的橢圓曲線,由于其特殊構(gòu)造的特殊性,其優(yōu)化后的實(shí)現(xiàn)比其他曲線性能上可以特高30%,有明顯以下兩個(gè)優(yōu)點(diǎn):
1)占用很少的帶寬和存儲(chǔ)資源,密鑰的長(zhǎng)度很短。
2)讓所有的用戶(hù)都可以使用同樣的操作完成域運(yùn)算。
1)占用很少的帶寬和存儲(chǔ)資源,密鑰的長(zhǎng)度很短。
2)讓所有的用戶(hù)都可以使用同樣的操作完成域運(yùn)算。
橢圓曲線數(shù)字簽名算法(ECDSA)
用戶(hù)的密鑰對(duì):
( d, Q )
待簽名的信息: M
簽名:
簽名過(guò)程:
1)根據(jù)ECC算法隨機(jī)生成一個(gè)密鑰對(duì)
展開(kāi)全文
2)令
如果r = 0,則返回步驟1
3)計(jì)算
4)按照數(shù)據(jù)類(lèi)型轉(zhuǎn)換規(guī)則,將H轉(zhuǎn)化為一個(gè)big endian的整數(shù)e
5)
若s = 0, 則返回步驟1
6)輸出的
即為簽名。
驗(yàn)證過(guò)程:
1) 計(jì)算
2)按照數(shù)據(jù)類(lèi)型轉(zhuǎn)換規(guī)則,將H轉(zhuǎn)化為一個(gè)big endian的整數(shù)e
3)計(jì)算
4)計(jì)算
如果R = 零點(diǎn),則驗(yàn)證該簽名無(wú)效
5)令
6)若 v == r,則簽名有效,若 v ≠ r, 則簽名無(wú)效。
0×01 Secp256k1橢圓曲線
Secp256k1橢圓曲線形如:
橢圓曲線域參數(shù)由單元T =(p,a,b,G,n,h)指定
p= FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE FFFFFC2F
=
Fp上的曲線 E:由下式定義:
a= 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
b= 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
a= 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
b= 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000007
壓縮形式的基點(diǎn)G是:
G= 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
G= 02 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798
而在未壓縮的形式是:
G= 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
G= 04 79BE667E F9DCBBAC 55A06295 CE870B07 029BFCDB 2DCE28D9 59F2815B 16F81798 483ADA77 26A3C465 5DA4FBFC 0E1108A8 FD17B448 A6855419 9C47D08F FB10D4B8
最后,G的階為:
n= FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
n= FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFE BAAEDCE6 AF48A03B BFD25E8C D0364141
協(xié)因子:
h = 01
0×03 算法實(shí)現(xiàn)
在查閱資料時(shí),發(fā)現(xiàn)了GitHub上的一個(gè)關(guān)于secp256k1的一個(gè)項(xiàng)目,這是一個(gè)針對(duì)曲線secp256k1上的EC操作優(yōu)化的C庫(kù).
github地址:https://github.com/bitcoin-core/secp256k1
當(dāng)然在steem-python也有相似的secp256k1-py庫(kù),運(yùn)用pip安裝secp256k1-py庫(kù)、安裝pkg-config
pip install --no-binary:all: secp256k1 sudo apt-get install libtool sudo apt-get install autoconf sudo apt-get install pkg-config
當(dāng)準(zhǔn)備工作做好后,我們就可以使用這個(gè)庫(kù)
私鑰公鑰生成 python -m secp256k1 privkey -p
使用私鑰對(duì)明文進(jìn)行消息簽名
python -m secp256k1 sign \ -k c6e193266883a500c6e51a117e012d96ad113d5f21f42b28eb648be92a78f92f \-m hello 使用明文、公鑰、簽名,來(lái)檢驗(yàn)是否是對(duì)應(yīng)的私鑰的所加密的 python -m secp256k1 checksig \ -p 0314bf901a6640033ea07b39c6b3acb675fc0af6a6ab526f378216085a93e5c7a2 \ -m hello \ -s 3045022100a314a579fb9f30a804c172eec4881ed603e661eed692797149dfdbce24d671d202203ccfab0603ad97c34864caa22d42a24d0cb5750fcb159476b8ae30a11edc0ed6
0×04 總結(jié)
經(jīng)過(guò)兩期的介紹,希望大家理解這個(gè)復(fù)雜的非對(duì)稱(chēng)加密算法中的離散問(wèn)題。為了保護(hù)儲(chǔ)存在區(qū)塊鏈中的信息的安全與完整,區(qū)塊鏈就使用上述的包括另一種(哈希函數(shù))的密碼現(xiàn)代密碼學(xué)技術(shù)。希望各路大牛多加指正在下面評(píng)論中
相關(guān)鏈接:
[1] https://en.bitcoin.it/wiki/Secp256k1
[2] 區(qū)塊鏈指南 機(jī)械工業(yè)出版社
[3] Douglas R.Stinson. 密碼學(xué)原理與實(shí)踐(第三版)電子工業(yè)出版社 2009
[4] https://en.bitcoin.it/wiki/Elliptic_Curve_Digital_Signature_Algorithm
[5] Michael E.Whitman 信息安全原理(第五版) 清華大學(xué)出版社
掃描二維碼推送至手機(jī)訪問(wèn)。
版權(quán)聲明:本文由飛速云SEO網(wǎng)絡(luò)優(yōu)化推廣發(fā)布,如需轉(zhuǎn)載請(qǐng)注明出處。