當前位置:首頁 » 操作系統 » ecc演算法實現

ecc演算法實現

發布時間: 2024-07-19 03:37:02

① 什麼是ECC加密演算法

ECC(Elliptic Curve Cryptosystems )橢圓曲線密碼體制,美國SUN公司開發的,它的體制根據其所依據的難題一般分為三類:大整數分解問題類、離散對數問題類、橢圓曲線類。有時也把橢圓曲線類歸為離散對數類,是目前已知的公鑰體制中,對每比特所提供加密強度最高的一種體制,如果你能理解RSA演算法,也算是對ECC有大概的了解,建議你去買些相關書籍看看。

② ECC橢圓曲線加密演算法(一)

btc address:
eth address:

隨著區塊鏈的大熱,橢圓曲線演算法也成了密碼學的熱門話題。在Bitcoin 生成地址 中使用到了橢圓曲線加密演算法。

橢圓曲線的一般表現形式:

橢圓曲線其實不是橢圓形的,而是下面的圖形:

Bitcoin使用了 secp256k1 這條特殊的橢圓曲線,公式是:

這個東西怎麼加密的呢?

19世紀挪威青年 尼爾斯·阿貝爾 從普通的代數運算中,抽象出了加群(也叫阿貝爾群或交換群),使得在加群中,實數的演算法和橢圓曲線的演算法得到了統一。是什麼意思呢?

我們在實數中,使用的加減乘除,同樣可以用在橢圓曲線中!
對的,橢圓曲線也可以有加法、乘法運算。

數學中的群是一個集合,我們為它定義了一個二元運算,我們稱之為「加法」,並用符號 + 表示。假定我們要操作的群用𝔾表示,要定義的 加法 必須遵循以下四個特性:

如果在增加第5個條件:
交換律:a + b = b + a

那麼,稱這個群為阿貝爾群。根據這個定義整數集是個阿貝爾群。

岔開一下話題, 伽羅瓦 阿貝爾 分別獨立的提出了群論,他們並稱為現代群論的創始人,可惜兩位天才都是英年早逝。

如上文所說,我們可以基於橢圓曲線定義一個群。具體地說:

在橢圓曲線上有 不重合且不對稱的 A 、B兩點,兩點與曲線相交於X點, X與 x軸 的對稱點為R,R即為 A+B 的結果。這就是橢圓曲線的加法定義。

因為橢圓曲線方程存在 項,因此橢圓曲線必然關於x軸對稱

曲線: ,
坐標:A=(2,5),B=(3,7)
A、B正好在曲線上,因為坐標滿足曲線公式


那如何找到相交的第三個點呢?

通過 A、B兩點確定直線方程,
設直線方程: ,m為直線的斜率

進一步得到c=1。

聯立方程:

X(-1,-1)的x坐標-1代入方式正好滿足方程,所以A、B兩點所在直線與曲線相交於 X(-1,-1),則點X的關於x軸的對稱點為R(-1,1),即A(2,5)+B(3,5)=R(-1,1)。

根據橢圓曲線的 群律(GROUP LAW) 公式,我們可以方便的計算R點。

曲線方程:
當A=(x1,y1),B=(x2,y2) ,R=A+B=(x3,y3),x1≠x2時,
, m是斜率
x3=
y3=m(x1-x3)-y1

A=(2,5), B=(3,7) , R=(-1,1) 符合上面的公式。

橢圓曲線加法符合交換律么?

先計算(A+B),在計算 A+B+C

先計算B+C, 在計算 B+C+A

看圖像,計算結果相同,大家手動算下吧。

那 A + A 呢, 怎麼計算呢?

當兩點重合時候,無法畫出 「過兩點的直線」,在這種情況下,
過A點做橢圓曲線的切線,交於X點,X點關於 x軸 的對稱點即為 2A ,這樣的計算稱為 「橢圓曲線上的二倍運算」。

下圖即為橢圓曲線乘法運算:

我們將在 ECC橢圓曲線加密演算法(二) 介紹有限域,橢圓曲線的離散對數問題,橢圓曲線加密就是應用了離散對數問題。

參考:

https://eng.paxos.com/blockchain-101-foundational-math
https://eng.paxos.com/blockchain-101-elliptic-curve-cryptography
https://andrea.corbellini.name/2015/05/17/elliptic-curve-cryptography-a-gentle-introction/

③ 理解橢圓曲線加密演算法

橢圓曲線加密演算法,即:Elliptic Curve Cryptography,簡稱ECC,是基於橢圓曲線數學理論實現的一種非對稱加密演算法。相比RSA,ECC優勢是可以使用更短的密鑰,來實現與RSA相當或更高的安全。據研究,160位ECC加密安全性相當於1024位RSA加密,210位ECC加密安全性相當於2048位RSA加密。

一般橢圓曲線方程式表示為:(其中a,b,c,d為系數)
> y2=ax3+ bx2+cx+d
典型的橢圓曲線如:y2=x3−4x2+16

先擺一個栗子:

小米很難算到的那個數,就是公鑰密碼演算法中的私鑰(一個公鑰密碼演算法安全的必要條件(非充分)是「由公鑰不能反推出私鑰」),公鑰密碼演算法最根本的原理是利用信息的不對稱性:即掌握私鑰的人在整個通信過程中掌握最多的信息。
橢圓曲線加密演算法是一個基於加法階數難求問題的密碼方案。 對於橢圓曲線來講,橢圓曲線的基點就是例子裡面的5,而私鑰就是基點的加法階數(例子裡面的11),公鑰是基點(5)進行對應階數的加法(11次)得到的結果(55)。

簡單描述就是:G * k = K (G,K公開,k保密)

上述例子相對簡單,橢圓曲線加密演算法里的加法建立在 「有限域上的二元三次曲線上的點」上 ,組成一個「有限加法循環群」。具體的說,這個加法的幾何定義如下圖,兩個點的加法結果是指這兩點的連線和曲線的交點關於x軸的鏡像。

如果我們從某一點出發(所謂的單位元,比如正整數域的1,代表一個空間里的最基本單元),不停做自增操作(所謂群操作,比如++),枚舉出整個空間的集合元素。如圖:

因此給定橢圓曲線的某一點G,從G出發,不停做切線,找對稱點,依次得到-2G,2G,-4G,4G,-8G,8G... 。即:當給定G點時,已知x,求xG點並不困難。反之,已知xG點,求x則非常困難。即Q = NG,N就是我們的私鑰,Q就是我們的公鑰。

現在我們知道了公鑰(Q)和私鑰(N)的生成的原理,我們在看看橢圓曲線數字簽名演算法(ECDSA)的過程,橢圓曲線數字簽名演算法(ECDSA)是使用橢圓曲線密碼(ECC)對數字簽名演算法(DSA)的模擬。ECDSA於1999年成為ANSI標准,並於2000年成為IEEE和NIST標准。

私鑰主要用於 簽名,解密 ;公鑰主要用於 驗簽,加密 ,可以通過私鑰可以計算出公鑰,反之則不行。
公鑰加密:公鑰加密的內容可以用私鑰來解密——只有私鑰持有者才能解密。
私鑰簽名:私鑰簽名的內容可以用公鑰驗證。公鑰能驗證的簽名均可視為私鑰持有人所簽署。

通常需要六個參數來描敘一個特定的橢圓曲線:T = (p, a, b, G, n, h).
p: 代表有限域Fp的那個質數 a,b:橢圓方程的參數 G: 橢圓曲線上的一個基點G = (xG, yG) n:G在Fp中規定的序號,一個質數。 h:余因數(cofactor),控制選取點的密度。h = #E(Fp) / n。

這里以secp256k1曲線(比特幣簽名所使用的曲線)為例介紹一下公私鑰對的產生的過成。
secp256k1的參數為:

本質上ECDSA的私鑰就是一個隨機數滿足在曲線G的n階里及k∈(0,n),根據Q=kG可以計算出公鑰,生成的私鑰一般為32位元組大小,公鑰通常為64個位元組大小。如:

ECDSA簽名演算法的輸入是數據的哈希值,而不是數據的本身,我們假設用戶的密鑰對:(d, Q);(d為私鑰,Q為公鑰) 待簽名的信息:M; e = Hash(M);簽名:Signature(e) = ( r, s)。

簽名介面:

驗證介面:

一個例子:

④ 奼傝茶ВECC錛 128浣嶆暟鎹浣嶏紝9浣嶆牎楠屼綅鐨勭畻娉

ECC錛圗rror Correction Code錛夋槸涓縐嶇敤鏉ユ嫻嬪拰綰犳e唴瀛樹腑鐨勬暟鎹閿欒鐨勬妧鏈錛屽畠鍙浠ユ彁楂樼郴緇熺殑鍙闈犳у拰紼沖畾鎬с侲CC浣跨敤涓縐嶆洿楂樼駭鐨勫囧伓鏍¢獙鏂規硶錛屽嵆瀵規瘡64浣嶆暟鎹鐢熸垚7浣嶆牎楠屼綅錛岀劧鍚庢牴鎹榪欎簺鏍¢獙浣嶆潵鍒ゆ柇鏁版嵁鏄鍚﹀彂鐢熶簡閿欒錛屼互鍙婂備綍淇澶嶉敊璇銆

鐢–璇璦緙栧啓涓涓128浣嶆暟鎹浣嶏紝9浣嶆牎楠屼綅鐨凟CC綆楁硶錛岄渶瑕佷互涓嬪嚑涓姝ラわ細

  • 瀹氫箟涓涓緇撴瀯浣擄紝琛ㄧず涓涓128浣嶇殑鏁版嵁瀛楋紝浠ュ強涓涓9浣嶇殑鏍¢獙瀛椼傛垜浠鍙浠ヤ嬌鐢ㄤ竴涓闀垮害涓4鐨勬棤絎﹀彿鏁村瀷鏁扮粍鏉ュ瓨鍌ㄦ暟鎹瀛楋紝姣忎釜鍏冪礌鍗32浣嶏紝鍏辮128浣嶃傛垜浠鍙浠ヤ嬌鐢ㄤ竴涓鏃犵﹀彿瀛楃︽潵瀛樺偍鏍¢獙瀛楋紝鍗8浣嶏紝鍐嶅姞涓婁竴涓甯冨皵鍊兼潵琛ㄧず絎9浣嶏紝鍏辮9浣嶃

  • 瀹氫箟涓涓鍑芥暟錛屾牴鎹緇欏畾鐨勬暟鎹瀛楃敓鎴愬瑰簲鐨勬牎楠屽瓧銆傛垜浠鍙浠ヤ嬌鐢ㄥ紓鎴栬繍綆楁潵璁$畻姣忎竴浣嶇殑濂囧伓鏍¢獙鍊礆紝鐒跺悗灝嗚繖浜涘肩粍鍚堟垚涓涓鏍¢獙瀛椼

  • 瀹氫箟涓涓鍑芥暟錛屾牴鎹緇欏畾鐨勬暟鎹瀛楀拰鏍¢獙瀛楁嫻嬫槸鍚︽湁閿欒鍙戠敓銆傛垜浠鍙浠ヤ嬌鐢ㄥ紓鎴栬繍綆楁潵姣旇緝鏁版嵁瀛楀拰鏍¢獙瀛椾腑鐨勬瘡涓浣嶏紝濡傛灉鏈変笉鍚岋紝鍒欒存槑鏈夐敊璇鍙戠敓銆傛垜浠鍙浠ヤ嬌鐢ㄤ竴涓鏁村瀷鍙橀噺鏉ヨ板綍閿欒鍙戠敓鐨勪綅緗錛屽傛灉娌℃湁閿欒錛屽垯榪斿洖-1銆

  • 瀹氫箟涓涓鍑芥暟錛屾牴鎹緇欏畾鐨勬暟鎹瀛楀拰閿欒浣嶇疆淇澶嶉敊璇銆傛垜浠鍙浠ヤ嬌鐢ㄥ紓鎴栬繍綆楁潵緲昏漿鏁版嵁瀛椾腑鍑洪敊鐨勯偅涓浣嶏紝浠庤屾仮澶嶆g『鐨勫箋

熱點內容
ios儲存密碼哪裡看 發布:2024-09-08 09:30:02 瀏覽:869
opensslcmake編譯 發布:2024-09-08 09:08:48 瀏覽:653
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:744
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:173
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:780
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:101
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:209
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566
linux搭建mysql伺服器配置 發布:2024-09-08 06:50:02 瀏覽:995
加上www不能訪問 發布:2024-09-08 06:39:52 瀏覽:811