本文由“幣嗨Bihi內(nèi)容合伙人計(jì)劃”贊助
今天呼嚕繼續(xù)和大家一起學(xué)習(xí)區(qū)塊鏈安全盾之密碼學(xué)及算法(2)——橢圓橢圓曲線ECC算法。
在正式開始復(fù)雜而高深的學(xué)習(xí)前,我們理解下數(shù)學(xué)上橢圓的有意思的一面。
所謂的一個(gè)橢圓曲線是滿足一個(gè)特殊方程的點(diǎn)集,可用方程式y(tǒng)^2 = x^3 + ax + b表示。

也有其他橢圓曲線的代表,但學(xué)術(shù)上一個(gè)橢圓曲線是一個(gè)滿足一個(gè)變量為二階,另一個(gè)變量為3階的二元方程。一個(gè)橢圓曲線不僅僅是一個(gè)漂亮的圖片,它也有一些使它成為密碼學(xué)的一個(gè)好環(huán)境的性能。
它有幾個(gè)有趣的特性:
其中一個(gè)是水平對(duì)稱。曲線上的任何點(diǎn)以X軸反射并且仍然是同樣的曲線。一個(gè)更加有趣的特性是任何不垂直的線穿過曲線最多有三個(gè)交點(diǎn)。
讓我們來把曲線想象成一個(gè)奇異的桌球游戲。取曲線上的任意兩點(diǎn)并且把他們連起來;這條線與曲線有一個(gè)以上的交點(diǎn)。在這個(gè)桌球游戲里,你拿球從A射向B.當(dāng)它撞上曲線,這個(gè)球向上反彈(它位于X軸以下)或者向下反彈到曲線的另一邊。

我們把球移向兩點(diǎn)叫“打點(diǎn)(dot)”。曲線上的任意兩點(diǎn)能被同時(shí)打點(diǎn)得到一個(gè)新點(diǎn)。
A dot B = C
我們也能同時(shí)做一串移動(dòng)來用它自己反復(fù)“打點(diǎn)"。
A dot A = B
A dot B = C
A dot C = D
...
事實(shí)證明如果你有兩個(gè)點(diǎn),一個(gè)最初的點(diǎn)用它自己打點(diǎn)n次到達(dá)一個(gè)最終點(diǎn),在你只知道最重點(diǎn)時(shí)找到n和最初點(diǎn)是很難的。繼續(xù)我們的奇異桌球比喻,想象一個(gè)人在一段任意時(shí)間里在一個(gè)房間里單獨(dú)玩我們游戲。對(duì)他來說,他跟著上述規(guī)則來反復(fù)擊球是容易的。如果一個(gè)人后來走進(jìn)房間并且看到球最終的位置,即使他們知道這個(gè)游戲的所有規(guī)則和球的起點(diǎn),在沒有全程觀察游戲直到球到達(dá)同一點(diǎn)的情況下,他們也不能算出球擊打到那的次數(shù)。容易做,但很難解開。這就是一個(gè)非常棒的trapdoor函數(shù)的基礎(chǔ)。
在密碼理論中,橢圓曲線算法是一種非對(duì)程密碼,也稱公鑰密碼。
所謂非對(duì)程密碼是指加密用的密鑰和解密用的密鑰不同,用作加密的稱作私鑰,需要保密,用作解密的稱作公鑰,顧名思義是公開的,并且從一個(gè)密鑰不能推算出另一個(gè)密鑰。目前使用最廣泛的兩種非對(duì)程密碼為RSA和ECC,RSA歷史悠久,簽名較快,而驗(yàn)證較慢。相同密碼強(qiáng)度而言,ECC密鑰長(zhǎng)度較短,效率更高。RSA基于大數(shù)分解問題,ECC基于橢圓曲線離散對(duì)數(shù)問題。

下面介紹這種算法的作用和描述。
1. 作用
計(jì)算一個(gè)或多個(gè)消息的摘要可以保證消息不會(huì)被更改(一旦更改就能發(fā)現(xiàn)),所以消息與摘要是一一對(duì)應(yīng)的。但是如果攻擊者有摘要算法,他就可以同時(shí)替換消息和摘要,如果只驗(yàn)證摘要是無法得知消息已被替換(更改),如何解決這一消息真實(shí)性的問題,這就是公鑰密碼的用途之一,其原理:
???? (1)產(chǎn)生消息的人公開自己的密鑰,然后用私鑰對(duì)消息摘要進(jìn)行加密(俗稱簽名),與消息、消息摘要、摘要簽名一同發(fā)送給接收者;
????? (2)發(fā)送者的公鑰隨處可得,接收者使用公鑰對(duì)消息簽名進(jìn)行解密(驗(yàn)簽),如果結(jié)果正確則消息真實(shí)性得到驗(yàn)證,從而對(duì)消息摘要進(jìn)一步驗(yàn)證;如果結(jié)果錯(cuò)誤則消息不可靠。
?????? (3)公鑰是由權(quán)威機(jī)構(gòu)產(chǎn)生的,并且可驗(yàn)證,所以替換公鑰是不可能的。
2. 算法描述
??????? 相比RSA,理解橢圓曲線密碼算法的數(shù)學(xué)基礎(chǔ)困難的多。首先了解幾個(gè)概念。
??????? (1) ?射影平面坐標(biāo)系:它是對(duì)笛卡爾直角坐標(biāo)系的擴(kuò)展,增加了無窮遠(yuǎn)點(diǎn)的概念。在此坐標(biāo)系下,兩條平行的直線是有交點(diǎn)的,而交點(diǎn)就是無窮遠(yuǎn)點(diǎn)。兩者的變換關(guān)系為:笛卡爾坐標(biāo)系中的點(diǎn)a(x,y),令x=X/Z,y=Y/Z,則射影平面坐標(biāo)系下的點(diǎn)a的坐標(biāo)為(X, Y,Z),比如點(diǎn)(2,3)就轉(zhuǎn)換為(2Z,3Z,Z)。
? ??????(2) ?橢圓曲線:一條橢圓曲線在射影平面上滿足方程:Y^2Z+a1XYZ+a3yZ^2=X^3+a2X^2Z+a4XZ^2+a6Z^3的所有點(diǎn)的集合,且曲線上每個(gè)點(diǎn)都是非奇異的(連續(xù)的、可微分的)。該方程稱為維爾斯特拉斯方程。橢圓曲線并非是一個(gè)橢圓,只是其方程形式類似一個(gè)計(jì)算橢圓周長(zhǎng)的方程。
? ? (3)射影平面轉(zhuǎn)換為直角平面:橢圓曲線有一個(gè)無窮遠(yuǎn)點(diǎn)(0:1:0),那么把可以計(jì)算出直角平面坐標(biāo)系下的曲線方程:y^2+a1xy+a3y=x^3+a2x^2+a4x+a6。 這個(gè)方程代表的光滑曲線再加上一個(gè)無窮遠(yuǎn)點(diǎn),就組成了橢圓曲線。
? ?(4)橢圓曲線一點(diǎn)切線的斜率:因?yàn)闄E圓曲線平滑的,每一個(gè)點(diǎn)都有切線,斜率是切線的一個(gè)重要指標(biāo)。它將在橢圓曲線密碼算法中使用。

以上是初步的學(xué)習(xí),更深的函數(shù)學(xué)習(xí)待下期進(jìn)行。