1. ECC橢圓曲線
??ECC(Elliptic Curve Cryptography),就是橢圓曲線密碼算法,它是基于橢圓曲線數(shù)學(xué)理論實(shí)現(xiàn)的一種非對(duì)稱加密算法。相比RSA,ECC優(yōu)勢(shì)是可以使用更短的密鑰,來實(shí)現(xiàn)與RSA相當(dāng)或更高的安全,RSA加密算法也是一種非對(duì)稱加密算法,在公開密鑰加密和電子商業(yè)中RSA被廣泛使用。據(jù)研究,160位ECC加密安全性相當(dāng)于1024位RSA加密,210位ECC加密安全性相當(dāng)于2048位RSA加密(有待考證)。
??ECDSA(Elliptic Curve Digital Signature Algorithm)算法是基于 ECC 的的一種簽名算法,廣泛用于區(qū)塊鏈、HTTPS 等需要非對(duì)稱加密的場(chǎng)景。
1.1 曲線類型
??曲線分為素?cái)?shù)域曲線、二元域曲線。
- 素?cái)?shù)域:P-192、P-224、P-256、P-384、P-521
- 二元域:K-163、K-233、K-283、K-409、K-571、B-163、B-233、B-283、B-409、B-571
1.2 曲線標(biāo)準(zhǔn)
??曲線標(biāo)準(zhǔn)主要有:SECG / NIST / WTLS / ANSI X9.62 / RFC 5639 / SM2
-
SECG
(1)SECG(Standards for Efficient Cryptography Group),高效密碼學(xué)標(biāo)準(zhǔn)組織(SECG),它是一個(gè)行業(yè)聯(lián)盟,成立于1998年,旨在開發(fā)商業(yè)標(biāo)準(zhǔn),輸出SEC標(biāo)準(zhǔn)規(guī)范;
(2)SECG成員包括信息安全行業(yè)的領(lǐng)先技術(shù)公司和關(guān)鍵行業(yè)參與者。主要輸出SEC的規(guī)范;
(3)SECG官網(wǎng):https://www.secg.org/; -
NIST
(1)NIST(National Institute of Standards and Technology),是美國(guó)國(guó)家標(biāo)準(zhǔn)技術(shù)研究所,前身是美國(guó)國(guó)家標(biāo)準(zhǔn)局,目前是隸屬于商務(wù)部的政府實(shí)驗(yàn)室。主要從事標(biāo)準(zhǔn)測(cè)量方面的研究,職能類似中國(guó)計(jì)量院或者法國(guó)的LNE,為業(yè)界提供國(guó)家計(jì)量標(biāo)準(zhǔn),計(jì)量檢測(cè)和校準(zhǔn)技術(shù),參加標(biāo)準(zhǔn)委員會(huì)制定標(biāo)準(zhǔn)等,但本質(zhì)上還是一個(gè)大型的實(shí)驗(yàn)室。有兩個(gè)分部,一個(gè)在馬里蘭州的Gaithersburg,一個(gè)在科州的Boulder;
(2)NIST是美國(guó)的標(biāo)準(zhǔn),并不是世界標(biāo)準(zhǔn);
(3)NIST官網(wǎng):https://www.nist.gov/ ; -
WTLS
WTLS(Wireless Transport Layer Security),無線傳輸層安全,它是無線應(yīng)用協(xié)議(WAP)的安全級(jí)別,特別是針對(duì)使用WAP的應(yīng)用程序。
官網(wǎng):https://www.techtarget.com/searchmobilecomputing/definition/Wireless-Transport-Layer-Security -
ANSI X9.62
該項(xiàng)目始于1995年,并于1999年正式作為ANSI標(biāo)準(zhǔn)頒布。ANSI X9.62具有高安全性和通用性。它的基域可以是Fp,也可以是F2m。F2m中的元素可以以多項(xiàng)式形式或正規(guī)基形式來表示。若用多項(xiàng)式形式,ANSI X9.62要求模多項(xiàng)式為不可約三項(xiàng)式,標(biāo)準(zhǔn)中提供了一些不可約三項(xiàng)式,另外還給出了一個(gè)不可約五項(xiàng)式。為了提高通用性,針對(duì)每一個(gè)域提供了一個(gè)模多項(xiàng)式。若使用正規(guī)基表示方法,ANSI X9.62規(guī)定使用高斯正規(guī)基。橢圓曲線最主要的安全因素是n,即基點(diǎn)階,ANSI X9.62的n大于2160。橢圓曲線是使用隨機(jī)方法選取的。ANSI X9.62規(guī)定使用以字節(jié)為單位的字符串形式來表示曲線上的點(diǎn),ASN.1語(yǔ)法可以清楚地描述域參數(shù),公鑰和簽名。 -
RFC5639
ECC曲線標(biāo)準(zhǔn)
官網(wǎng):https://www.rfc-editor.org/ -
FIPS 186-2
1997年,NIST開始制定包括橢圓曲線和RSA簽名算法的FIPS 186標(biāo)準(zhǔn)。1998年,NIST推出了FIPS186,它包括RSA與DSA數(shù)字簽名方案,這個(gè)方案也稱為FIPS 186-1。1999年NIST又面向美國(guó)G0vment推出了15種橢圓曲線。這些曲線都遵循ANSI X9.62和IEEE 1363-2000的形式。2000年,包含ANSI X9.62中說明的ECDSA,使用上述曲線的FIPS 186-2問世。 -
SM2
SM2是國(guó)家密碼管理局于2010年12月17日發(fā)布的橢圓曲線公鑰密碼算法。
SM2是基于橢圓曲線的非對(duì)稱算法,相對(duì)于RSA算法,SM2具有密鑰更小,運(yùn)算速度更快,相同密鑰長(zhǎng)度下具有更高安全性等優(yōu)勢(shì)。 -
IEEE 1363-2000
該標(biāo)準(zhǔn)于2000年作為IEEE標(biāo)準(zhǔn)問世。IEEE 1363的覆蓋面很廣,包括公鑰加密,密鑰協(xié)商,基于IFP、DLP、ECDLP的數(shù)字簽名。它與ANSI X9.62和FIPS 186完全不同,它沒有最低安全性限制(比如不再對(duì)基點(diǎn)階進(jìn)行限制),用戶可以有充分的自由。
OpenSSL | NIST | SECCG | ANSI |
---|---|---|---|
prime192v1 | nistp192 | secp192r1 | prime192v1 |
secp224r1 | nistp224 | secp224r1 | |
prime256v1 | nistp256 | secp256r1 | prime256v1 |
secp384r1 | nistp384 | secp384r1 | |
secp521r1 | nistp521 | secp521r1 | |
sect163k1 | nistk163 | sect163k1 | |
sect163r2 | nistb163 | sect163r2 | |
sect233k1 | nistk233 | sect233k1 | |
sect233r1 | nistb233 | sect233r1 | |
sect283k1 | nistk233 | sect283k1 | |
sect283r1 | nistb283 | sect283r1 | |
sect409k1 | nistk409 | sect409k1 | |
sect409r1 | nistb409 | sect409r1 | |
sect571k1 | nistk571 | sect571k1 | |
sect571r1 | nistb571 | sect571r1 |
1.3 表示方法
??橢圓曲線其實(shí)是一個(gè)數(shù)學(xué)方程,通常用下面的方程式來表示:y2 = (x3 + ax + b) mod p
??如果a和b取的值不同,那么對(duì)應(yīng)的曲線形狀也會(huì)不一樣,如下圖:
1.4 曲線運(yùn)算
??橢圓曲線的運(yùn)算有多種,包括:點(diǎn)加(Point Addition)、點(diǎn)乘(Point Multiplication)、倍點(diǎn)(Point Double)等。
1.4.1 點(diǎn)加(Point Addition)
- 兩點(diǎn)決定一條直線,也就是說,我們定義通過兩個(gè)點(diǎn)(P,Q) 做一條直線,找到這條直線和EC曲線相交的那個(gè)點(diǎn)(圖1中R’點(diǎn))
- 根據(jù)點(diǎn)加法運(yùn)算的定義,可以得到 P+Q+R’=0 ,那么 P+Q=?R’ , ? R’的定義是關(guān)于 x 軸對(duì)稱所得到的一個(gè)點(diǎn)R,如上圖所示,這就是點(diǎn)加法的定義
1.4.2 點(diǎn)乘(Point Multiplication)
??“點(diǎn)加”是ECC計(jì)算中最基本和原始的概念,它描述群當(dāng)中的兩個(gè)元素(點(diǎn))之間的操作,實(shí)際運(yùn)算中大量使用的是“點(diǎn)乘”。但是不要被點(diǎn)乘這個(gè)名字所迷惑,其實(shí)它描述的是:對(duì)同一個(gè)點(diǎn)進(jìn)行多次操作時(shí)的規(guī)則。
??很多常見的寫法例如 kG
,很容易誤導(dǎo)初學(xué)者,其實(shí)這個(gè)kG描述的其實(shí)是:針對(duì)點(diǎn)G進(jìn)行“k-1”次點(diǎn)加操作。比如k = 4,如何計(jì)算4G呢,既然我們知道如何任意兩個(gè)點(diǎn)的點(diǎn)加,那么計(jì)算4G無非就是:
??第1步:計(jì)算G+G得到2G
??第2步:計(jì)算2G+G得到3G
??第3步:計(jì)算3G+G得到4G,計(jì)算完成。
1.4.3 倍點(diǎn)(Point Double)
??倍點(diǎn)其實(shí)就是點(diǎn)加的特殊運(yùn)算,當(dāng)P和Q完全重合時(shí),就變成了倍點(diǎn)運(yùn)算。如下圖:
2. ECDSA
??ECDSA,即ECC橢圓曲線簽名算法。設(shè)私鑰、公鑰分別為d、Q,即Q = dG,其中G為基點(diǎn)。
2.1 私鑰簽名
簽名過程如下:
- 選擇隨機(jī)數(shù)r,計(jì)算點(diǎn)rG(x,y);
- 根據(jù)隨機(jī)數(shù)r,消息M的哈希值h、私鑰d,計(jì)算出 s = (h + dx)/r;
- 將消息M和簽名值(rG, s)發(fā)給接收方;
舉例:假設(shè)要簽名的消息是一個(gè)字符串:“Hello World!”。
- 是對(duì)“待簽名的消息”生成一個(gè)消息摘要,不同的簽名算法使用不同的消息摘要算法,而ECDSA256使用SHA256生成256比特的摘要;
- 產(chǎn)生一個(gè)隨機(jī)數(shù)k,利用隨機(jī)數(shù)k,計(jì)算出兩個(gè)大數(shù)r和s。將r和s拼在一起就構(gòu)成了對(duì)消息摘要的簽名;
2.2 公鑰驗(yàn)簽
- 接收方收到消息M、以及簽名{rG=(x,y), s};
- 根據(jù)消息求哈希h;
- 使用發(fā)送方公鑰Q計(jì)算:hG/s + xQ/s,并與rG比較,如相等即驗(yàn)簽成功(原理:hG/s + xQ/s = hG/s + x(dG)/s = (h+xd)G/s = r(h+xd)G / (h+dx) = rG))。
3. ECDH
??ECDH 是橢圓曲線的笛福赫爾曼算法的變種,它其實(shí)不單單是一種加密算法,而是一種密鑰協(xié)商協(xié)議,也就是說 ECDH 定義了(在某種程度上)密鑰怎么樣在通信雙方之間生成和交換,至于使用這些密鑰怎么樣來進(jìn)行加密完全取決通信雙方。
ECDH的工作流程如下:
(1)Alice 和 Bob 生成各自的私鑰和公鑰。
??Alice的私鑰為 dA,公鑰為 HA = dAG
??Bob的私鑰為 dB,公鑰為 HB = dBG
Alice 和 Bob 需要使用一樣的主要參數(shù):在同一條曲線的同一個(gè)有限域上選擇一樣的基點(diǎn) G。
(2)Alice和Bob通過不安全信道交換各自的公鑰 HA 和 HB,中間人可以竊聽到和,但是在無法攻破離散對(duì)數(shù)難題的情況下無法得到 dA 和 dB。
(3)Alice計(jì)算 S = dAHB(使用自身的私鑰和Bob的公鑰),Bob計(jì)算 S = dBHA(使用自身的私鑰和Alice的公鑰),雙方求得的S是一樣的,因?yàn)?S = dAHB = dA(dBG) = dB(dAG) = dBHA
4. SM2
??SM2是國(guó)家密碼管理局于2010年12月17日發(fā)布的橢圓曲線公鑰密碼算法。
??SM2是基于橢圓曲線的非對(duì)稱算法,相對(duì)于RSA算法,SM2具有密鑰更小,運(yùn)算速度更快,相同密鑰長(zhǎng)度下具有更高安全性等優(yōu)勢(shì)。
??國(guó)密SM2算法標(biāo)準(zhǔn)包括5個(gè)部分:
-
GMT 0003.1-2012 SM2橢圓曲線公鑰密碼算法第1部分:總則
主要介紹了ECC基本的算法描述,包括素?cái)?shù)域和二元擴(kuò)域兩種算法描述 -
GMT 0003.2-2012 SM2橢圓曲線公鑰密碼算法第2部分:數(shù)字簽名算法
這個(gè)算法不同于ECDSA算法,其計(jì)算量大,也比ECDSA復(fù)雜些,也許這樣會(huì)更安全吧 -
GMT 0003.3-2012 SM2橢圓曲線公鑰密碼算法第3部分:密鑰交換協(xié)議
與ECDH功能相同,但復(fù)雜性高,計(jì)算量加大 -
GMT 0003.4-2012 SM2橢圓曲線公鑰密碼算法第4部分:公鑰加密算法
使用ECC公鑰進(jìn)行加密和ECC私鑰進(jìn)行加密算法,其實(shí)現(xiàn)上是在ECDH上分散出流密鑰,之后與明文或者是密文進(jìn)行異或運(yùn)算,并沒有采用第3部分的密鑰交換協(xié)議產(chǎn)生的密鑰。 -
GMT 0003.5-2012 SM2橢圓曲線公鑰密碼算法第5部分:參數(shù)定義
給出了SM2使用素?cái)?shù)域256位橢圓曲線參數(shù)
??SM2與RSA的比較如下:
算法 | SM2 | RSA |
---|---|---|
算法結(jié)構(gòu) | 基于橢圓曲線(ECC) | 基于橢圓曲線(ECC) |
計(jì)算復(fù)雜度 | 完全指數(shù)級(jí) | 亞指數(shù)級(jí) |
存儲(chǔ)空間 | 192~256bit | 1024~8192bit |
秘鑰生成速度 | 較RSA算法快百倍以上 | 慢 |
解密加密速度 | 較快 | 一般 |
4.1 數(shù)字簽名
待添加文章來源地址http://www.zghlxwxcb.cn/news/detail-539564.html
4.2 秘鑰交換
待添加文章來源:http://www.zghlxwxcb.cn/news/detail-539564.html
4.3 加密
待添加
4.4 解密
待添加
5. SM9
待添加
6. 總結(jié)
待添加
到了這里,關(guān)于【密碼算法 之十四】非對(duì)稱算法,ECC橢圓曲線算法 之 ECDSA、ECDH、SM2、SM9等的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!