橢圓曲線簽名

今天終于了解了一番神奇的非對(duì)稱加密算法:橢圓曲線乘法為什么無法反推了,下面介紹一波.

1.橢圓曲線是一個(gè)二維的散點(diǎn)圖

這里用NIST設(shè)立的一條橢圓曲線函數(shù)來介紹,因?yàn)檫@條曲線就是比特幣使用的.這條曲線就是secp256k1標(biāo)準(zhǔn)定義的.公式如下:

    y^2 = {{x^3+7}\over{F_p}} 

    y^2 \mod p = (x^3+7) \mod p
    

mod p 表明曲線實(shí)在素?cái)?shù)p的限定域中的,也寫作F_p,p的取值為:p = 2^{256}-2^{32}-2^9-2^8-2^7-2^6-2^4-1,是一個(gè)很大的整數(shù)。容易看出橢圓曲線是一個(gè)二維的散點(diǎn)圖。

函數(shù)散點(diǎn)圖很難畫,本人手繪是畫不出來滴,那么我弄了一份簡化了n倍的圖用來做說明.

橢圓曲線

2.橢圓曲線加法

小學(xué)老師告訴我們:研究乘法,必須先研究加法

在橢圓曲線中,任意兩個(gè)點(diǎn)的和必然存在于曲線上.數(shù)學(xué)定義如下:

    p_3 = p_1 + p_2

這里的加法解釋為:p1和p2的連線延長會(huì)和曲線唯一相交,相交的點(diǎn)記為p_3' = (x,y),然后取相交點(diǎn)對(duì)于x軸的映射,得到p_3 = (x,-y)。

如果p1和p2是相同的,那么兩點(diǎn)的連線就是該點(diǎn)的切線.

如果p1是無窮遠(yuǎn)點(diǎn)(沒有坐標(biāo)點(diǎn)),那么p_1+p_2 = p_2,p2類比。

這就是橢圓曲線加法的定義。

3.橢圓曲線乘法

那么在乘法中的應(yīng)用就簡單了,無非就是兩兩相加。這里會(huì)介紹比特幣的那個(gè)乘法:
K = k * G。k是私鑰,G是一個(gè)隨機(jī)常數(shù),K則是計(jì)算出來的公鑰。
那么上面的乘法等效為:

    K = k * G = G+G+....+G

每兩個(gè)來看,G+G就是G的切線和曲線的交點(diǎn)對(duì)x軸映射取點(diǎn)。那么4G = 2G+2G = (G+G) + (G+G)。得G的乘法示意圖:

橢圓曲線乘法

從一個(gè)G開始,2G就是G+G。同理可得k*G的結(jié)果,當(dāng)然了,如果k是奇數(shù),那么就是(k-1)*G+G。運(yùn)算就是做一次兩點(diǎn)連線延長相交于曲線的點(diǎn)對(duì)x軸映射即可。

4.橢圓曲線簽名很難反推

接下來思考一下,對(duì)于K=k*G,為什么已知輸出KG,為什么推導(dǎo)不出k呢?

其實(shí)這里存在一個(gè)誤區(qū),這里的乘法是橢圓曲線乘法,并不是小學(xué)的乘法。從上面的計(jì)算可以得知,
$k*G$是在曲線上反復(fù)做切線,并對(duì)x軸取映射點(diǎn)。也就是說,你是無法通過輸出和常數(shù)點(diǎn)來知道你是通過多少次的運(yùn)算得來的,除非你一次計(jì)算每一個(gè)數(shù)值。而這個(gè)數(shù)值很大很大。
55066263022277343669578718895168534326250603453777594175500187360389116729240
這個(gè)數(shù)值是一個(gè)真實(shí)的隨機(jī)生成的私鑰k。如果你要反推,那么你一個(gè)個(gè)遍歷這個(gè)隨機(jī)數(shù),計(jì)算量就是到k的階乘的橢圓曲線乘法運(yùn)算量了,所以在得出了大家常知的結(jié)論:橢圓曲線簽名很難反推


2018-1-30 更新

前面關(guān)于橢圓曲線簽名有一點(diǎn)補(bǔ)充.

橢圓曲線簽名很難反推,它主要是因?yàn)槟阈枰茖?dǎo)的是它的計(jì)算路徑,而不僅僅是最終結(jié)果.

在橢圓曲線乘法中,你需要反推的是從常數(shù)點(diǎn)G開始畫切線到曲線交點(diǎn),再取x軸在映射點(diǎn).如此反復(fù),得到上圖中的折現(xiàn)路徑.

如果知道私鑰k,那么我折線的路徑是確定的。如果不知道,那么其實(shí)就是要試探每一條可能的折線路徑。而這需要的計(jì)算量是極大的,就目前的計(jì)算機(jī)而言,可以認(rèn)為不可被反推。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,979評(píng)論 25 709
  • 天天有網(wǎng)球團(tuán)隊(duì)培訓(xùn)課后匯總 ### 最新更新(更新至7月23日): ==++分級(jí)培訓(xùn)課程-各項(xiàng)技術(shù)要領(lǐng)匯總?。?!+...
    bjpopeye閱讀 1,711評(píng)論 0 0
  • 參加比特幣源碼研讀班后首次寫作,看到前輩black寫的有關(guān)密鑰,地址寫的很好了,就選了他沒有寫的橢圓曲線,斗膽寫這...
    高若翔閱讀 3,227評(píng)論 11 6
  • 上一篇文章(《曲線上的“加密貨幣”(一)》)介紹了Bitcoin網(wǎng)絡(luò)中對(duì)ECC的使用,說明了支付時(shí)解鎖腳本與鎖定腳...
    oceanken閱讀 1,548評(píng)論 1 5
  • 距科比雙球衣退役(12月19號(hào))已好幾天了,出于對(duì)籃球的愛好也該寫點(diǎn)什么了。 科比一生創(chuàng)造了無數(shù)的奇跡 2006年...
    鈍角閱讀 1,985評(píng)論 0 43

友情鏈接更多精彩內(nèi)容