橢圓曲線ECC簽名算法的數(shù)學(xué)原理

一、“橢圓曲線”命名由來

橢圓曲線和橢圓其實(shí)是兩種不同的東西充包,它是指滿足特定方程的平面上的點(diǎn)的集合多柑。之所以帶上“橢圓”二字,是因?yàn)槿藗冊谟?jì)算橢圓周長引出橢圓積分瑞佩,第一類橢圓積分的反函數(shù)引出橢圓函數(shù)聚磺,橢圓函數(shù)可以參數(shù)化為非奇異三次代數(shù)曲線,有理域上的非奇異三次代數(shù)曲線被取名為 橢圓曲線炬丸。

二瘫寝、橢圓曲線方程及圖像

y^{2} = x^{3} + a*x+b,(4a^{3}+27b^{2} \ne 0)

方程中 ab 的取值是實(shí)數(shù)范圍蜒蕾,隨著兩個值的變動,其圖像大致如下焕阿,可以看到橢圓曲線是關(guān)于x軸對稱:

圖片來源參考1

三咪啡、定義在橢圓曲線上的運(yùn)算

3.1 加法運(yùn)算

加法運(yùn)算示意圖

在橢圓曲線上定義兩個點(diǎn) PQ,連接兩點(diǎn)使得所得直線與橢圓曲線相交于 R1 點(diǎn)暮屡,過 R1 點(diǎn)做 x 軸垂線交橢圓曲線于 R 點(diǎn)撤摸,由橢圓曲線的性質(zhì)可知 R1 點(diǎn)與R 點(diǎn)對稱,同時(shí)我們可以得到橢圓曲線的加法運(yùn)算:

P+Q = R

同理連接 P 點(diǎn)和R 點(diǎn)褒纲,交橢圓曲線于R2點(diǎn)准夷,同樣過R2 點(diǎn)做x軸的垂線交橢圓曲線于H 點(diǎn),如下圖所示:

這樣繼續(xù)連接P點(diǎn)和H點(diǎn)...就可以得到如下過程:
P+Q = R
R+P = H
H+P = ...

3.2 乘法運(yùn)算

乘法運(yùn)算示意圖

如圖所示莺掠,過P點(diǎn)做切線(因?yàn)橐WC橢圓曲線上的每個點(diǎn)都有切線衫嵌,所以限定(4a^{3}+27b^{2} \ne 0)),交橢圓曲線于R1點(diǎn)彻秆,同樣過R1點(diǎn)做x軸垂線交橢圓曲線于Q點(diǎn)楔绞,這樣我們認(rèn)為在這種 切點(diǎn) 情況下加法運(yùn)算為 P + P = 2P,即Q點(diǎn)為2P掖棉。同樣在2P點(diǎn)做切線,我們可以得到4P點(diǎn)膀估。而不在通過3P的結(jié)果來尋找4P幔亥。如此引入P+P的概念可以極大的降低運(yùn)算次數(shù),幫助我們快速尋找到要找的點(diǎn)察纯。例如我們想得到1029P帕棉,該怎么做呢?

1029P = 1024P+4P+1P
1029P = 2^{10}P+2^{2}P+2^{0}P

這樣一共需要計(jì)算12次即可得到1029P的結(jié)果饼记。

3.3 性質(zhì)說明

橢圓曲線密碼ECC是橢圓曲線在ElGamal體系下的應(yīng)用香伴,ElGamal體系就是定義在群上的,那么同樣的在橢圓曲線上的一些運(yùn)算需要具有“群”的性質(zhì):

  • 封閉性具则,定義在橢圓曲線上的點(diǎn)的運(yùn)算結(jié)果肯定還在橢圓曲線上即纲,要么就是無窮遠(yuǎn)點(diǎn)。
  • 結(jié)合律博肋,滿足低斋,三點(diǎn)共線并沒有規(guī)定順序,所以(P+Q)+R=0=P+(Q+R)
  • 單位元匪凡,就是無窮遠(yuǎn)點(diǎn)0膊畴,每個點(diǎn)加無窮遠(yuǎn)點(diǎn)還等于這個點(diǎn)
  • 逆元,每個點(diǎn)的逆元肯定存在病游,因?yàn)闄E圓曲線關(guān)于x軸對稱

四唇跨、橢圓曲線算法與數(shù)字簽名的關(guān)系

為什么說橢圓曲線可以用來做數(shù)字簽名呢?我們知道判斷某種方法是否適用于簽名或者加密的前提是對于正向操作是容易的,而對于是逆向操作是無法實(shí)現(xiàn)的或者說實(shí)現(xiàn)起來是非常困難的买猖。如下圖4.1所示:

圖4.1

選定P點(diǎn)改橘,在經(jīng)過10次相加后得到10P的位置,即Q點(diǎn)政勃。如果在不知道經(jīng)過幾次相加唧龄,只知道Q點(diǎn)的位置的情況下:Q = k*P,想通過k = Q / P的方式來計(jì)算k是無法實(shí)現(xiàn)的(P,Q均為坐標(biāo)點(diǎn))奸远。簡單打比方說既棺,我在一個房間前門開始踢球,踢了一段時(shí)間之后球落在房間的某個位置懒叛,這時(shí)讓你來回答我踢了多少次才將球踢到這個位置丸冕?對于你來說,能做的方法就是從前門開始將球向房間的各個方向踢一點(diǎn)一點(diǎn)的嘗試薛窥。我們從這個例子中可以看出對于我來講胖烛,踢球是簡單的,但是回答踢了幾次是困難的诅迷,所以這符合簽名或加密的要求佩番。

回到圖4.1中的問題,我們無法通過直接計(jì)算來確定K的值罢杉,只能通過比較來做:

2P == Q
3P == Q
.....
10P == Q

這樣最終確定k的值是10趟畏。那么如果這個k的值非常大呢?比如:

k = 0X9FAB78D58CA825723781EFA98A5BD235F1C

Z = K*P滩租,此時(shí)如果再一個一個的計(jì)算是非常費(fèi)時(shí)的赋秀,因此在非對稱加密算法中,將一個非常大的數(shù)K作為私鑰律想,而將K*P得到的Z點(diǎn)作為公鑰分發(fā)出去猎莲。限于算力的影響是無法推算出K的。

現(xiàn)在我們以實(shí)際應(yīng)用中的曲線來做說明:在橢圓曲線方程中取 a=0,b=7技即,是比特幣所使用的曲線 secp256k1

y^{2} = x^{3}+7

在比特幣中著洼,選擇的初始點(diǎn)或者基點(diǎn)是Generator,這里用G(\_G_{x} ,\_G_{y}) 來表示,注意當(dāng)選定一條曲線之后基點(diǎn)就已經(jīng)確定而叼,假如我們選定了一個很大的私鑰\_k郭脂,那么公鑰就是\_kG相加之后的結(jié)果:

Generator:
\_G_{x} =0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798
\_G_{y} =0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8

Private Key:
\_k = 0xD45E369D8C7D3F3D8FDBE7A1DC5D00C0291D8C58B5B9C6F7A6E9B1D45D754F1B

Public Key:
\_K_{x} = 0xBBA8D8A3F09D3F1F4E9B1D70EF3E8D3E1A2D8A4A9B704D2C3C20C3F8A0B2A7E4
\_K_{y} = 0x4F465D8F7D8F89D7A3E6E6B191EDC5FAFA5E2A55A7D08B807B46A5C9D0A2E1A9

注意這里公鑰通常是以未壓縮形式或者壓縮形式表示的,未壓縮形式的公鑰由標(biāo)識符0X04(\_K_{x},\_K_{y})組合而成澈歉,而壓縮形式的公鑰由標(biāo)識符0X02或者0X03x坐標(biāo)的值以及根據(jù)y坐標(biāo)的奇偶性計(jì)算出的一個比特組成展鸡。

好了現(xiàn)在我們有了公鑰K和私鑰\_k,即:

K = \_k * G

現(xiàn)在我們來根據(jù)上面的內(nèi)容來分析一下簽名驗(yàn)簽的過程:

Alice 向 Bob發(fā)送消息:“我愛你”埃难,假設(shè)這個消息為M莹弊,Alice 的私鑰為\_k涤久,所以簽名過程就是使用私鑰乘以M的哈希值作為簽名\_s\_s = \_k * hash(M)

現(xiàn)在將M\_s發(fā)送給 Bob,公鑰K在消息發(fā)送前就已經(jīng)給了Bob忍弛,Bob拿到消息后先使用公鑰KM的哈希值相乘得到X响迂,再使用\_s與基點(diǎn)G點(diǎn)相乘得到 Y,如果 X == Y 則驗(yàn)證通過细疚,示意圖如下:

可以看到 X == Y 是成立的蔗彤,同時(shí)可以明確沒有私鑰\_k 就無法證明,這個過程中的計(jì)算Alice是清楚的疯兼,但Bob不清楚然遏,但他只需要驗(yàn)證 X == Y 成立就明確消息是Alice發(fā)出的。

但這個過程是有問題的吧彪,Bob 是可以通過 \_s / hash(M) = \_k 得到私鑰 \_k的待侵,注意這里和上面的K = \_k * G不一樣,上面是坐標(biāo)點(diǎn)姨裸,而這里的每個值都是數(shù)字秧倾!所以就有如下解決方案:

引入 R,其存在類似公鑰傀缩,這樣同樣可以證明 X == Y那先,因此這種情況下簽名文件的內(nèi)容是 R_s 的組合,需要注意的是這兩個值是和曲線的位數(shù)有關(guān)赡艰,例如本例中 secp256k1 曲線售淡,則 R_s都是32字節(jié),secp192k1 曲線瞄摊,則 R_s都是24字節(jié)勋又,因此在不考慮ASN.1之類的存儲結(jié)構(gòu)苦掘,最精簡的簽名文件换帜,就是單純的R_s的組合,以本例來說是64字節(jié)鹤啡,secp192k1 曲線簽名文件則是48字節(jié)惯驼;

五、橢圓曲線的離散化

為什么要將橢圓曲線離散化递瑰,究其原因有如下幾點(diǎn):

1祟牲、橢圓曲線密碼學(xué)使用的有限域是一個離散域,其中元素?cái)?shù)量有限抖部,所有的運(yùn)算操作封閉
2说贝、安全性:離散化可以增強(qiáng)橢圓曲線密碼學(xué)的安全性,在橢圓曲線上慎颗。離散對數(shù)問題是一個非常困難的問題乡恕。
3言询、計(jì)算精度問題:在實(shí)數(shù)域上計(jì)算橢圓曲線時(shí),會涉及到除法傲宜,比如在ECDSA簽名需要計(jì)算一個參數(shù)K的逆元运杭,即 k^{-1}

因此需要對上面的橢圓曲線做取模運(yùn)算:

y^{2} \equiv x^{3} + a * x + b \bmod p

代入本例來說即:

y^{2} \bmod p = (x^{3}+7) \bmod p

這里需要說明的是模p需要盡可能的大,其位數(shù)由曲線位數(shù)決定函卒,比方說本例secp256k1曲線辆憔,模p的長度為256位。

參考文獻(xiàn)

[ 1. ] SM2國密算法/橢圓曲線密碼學(xué)ECC之?dāng)?shù)學(xué)原理 !
[ 2. ] 橢圓曲線演示工具

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末报嵌,一起剝皮案震驚了整個濱河市虱咧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沪蓬,老刑警劉巖彤钟,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異跷叉,居然都是意外死亡逸雹,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門云挟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來梆砸,“玉大人,你說我怎么就攤上這事园欣√溃” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵沸枯,是天一觀的道長日矫。 經(jīng)常有香客問我,道長绑榴,這世上最難降的妖魔是什么哪轿? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮翔怎,結(jié)果婚禮上窃诉,老公的妹妹穿的比我還像新娘。我一直安慰自己赤套,他們只是感情好飘痛,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著容握,像睡著了一般宣脉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上剔氏,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天塑猖,我揣著相機(jī)與錄音堪遂,去河邊找鬼。 笑死萌庆,一個胖子當(dāng)著我的面吹牛溶褪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播践险,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼猿妈,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了巍虫?” 一聲冷哼從身側(cè)響起彭则,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎占遥,沒想到半個月后俯抖,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓦胎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年芬萍,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搔啊。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡柬祠,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出负芋,到底是詐尸還是另有隱情漫蛔,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布旧蛾,位于F島的核電站莽龟,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏锨天。R本人自食惡果不足惜毯盈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绍绘。 院中可真熱鬧奶镶,春花似錦迟赃、人聲如沸陪拘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽左刽。三九已至,卻和暖如春酌媒,著一層夾襖步出監(jiān)牢的瞬間欠痴,已是汗流浹背迄靠。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喇辽,地道東北人掌挚。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像菩咨,于是被迫代替她去往敵國和親吠式。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容