橢圓曲線爲什麼不可逆

原文鏈接:https://www.9mblog.com/252.html

說起比特幣加密,橢圓曲線是被經常提到的詞,之前讀《精通比特幣》是也只是大致瀏覽了一下。認爲太過高深,所以沒有仔細研究。

最近幾天偶然間有翻起了這段,難得有閒,便沉下心來仔細研讀了一番,自認還是有些收穫的,分享出來,爲外人解謎的同時也權當最近學習的一個記錄。

正文

生成公鑰

以一個隨機生成的私鑰 k(可以理解爲一個極大的數) 爲起點,我們將其與曲線上已定義的生成點 G 相乘以獲得曲線上的另一點,也就是相應的公鑰 K。生成點是 secp256k1 標準的一部分,比特幣密鑰的生成點都是相同的:

{K = k * G}

其中 k 是私鑰,G 是生成點,在該曲線上所得的點 K 是公鑰。因爲所有比特幣用戶的生成點是相同的,一個私鑰 k 乘以 G 將得到相同的公鑰 K。k 和 K 之間的關係是固定的,但只能單向運算,即從 k 得到 K。這就是可以把比特幣地址(K的衍生)與任何人共享而不會泄露私鑰(k)的原因。

因爲其中的數學運算是單向的,所以私鑰可以轉換爲公鑰,但公鑰不能轉換回私鑰。爲實現橢圓曲線乘法,我們以1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD作爲私鑰 k 與生成點 G 相乘得到其公鑰 K:

K =1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD * G

公鑰 K 被定義爲一個點 K = (x, y):

K = (x, y)

其中,

x =F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A

y =07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB

爲了展示整數點的乘法,我們將使用較爲簡單的實數範圍的橢圓曲線。請記住,其中的數學原理是相同的。我們的目標是找到生成點 G 的倍數 kG。也就是將 G相加 k 次。在橢圓曲線中,點的相加等同於從該點畫切線找到與曲線相交的另一點,然後映射到 x 軸。

 

曲線上得到 G、2G、4G 的幾何操作

下面針對上面這張圖說一下kG的計算過程,這裏我們假定k的值爲8。

1.已知橢圓曲線上的一點G,我們做其在曲線上的切線,此時切線與原本的橢圓曲線就會產生一個交點,這個點我們記作-2G,那麼與-2G關於x軸對稱的點就是2G了。

2.重複上面的動作,對點2G做切線,使得切線與橢圓曲線相交,交點記爲-4G,再取-4G關於x軸的對稱點,就得到了4G。

3.再次重複前面的動作,對點4G做切線,使得切線與橢圓曲線相交,交點記爲-8G,再取-8G關於x軸的對稱點,就得到了8G。

這裏8G點就是我們所說的公鑰K,點的座標就是公鑰K的x和y。

好了,上面的整個過程如果看明白了,我們接着來說爲什麼通過公鑰K得不到私鑰k。

假定我們現在已知點8G(公鑰K),我們可以反向推出它關於x軸的對稱點-8G。到了這一步我們會發現,想通過-8G反向堆出4G變成了不可能的事情。因爲-8G是橢圓曲線上的一個點,在平面上過這個點有無數條直線,這裏或許會有一條或者幾條與橢圓曲線相切,但這些切線我們卻無從求得。或許我們可以逐條測試,通過窮舉法找出過點-8G且與橢圓曲線相切的直線,進而得到可能的點4G。但不要忘記,我們只是進行了反向推理的第一步,我們想從4G得到2G也需要同樣的計算量。這還只是我們將私鑰k定爲了8,如果私鑰k真的是我們上面的1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD,那麼計算量將是不可想象的。

這就是我理解的橢圓曲線不可逆,如果大家還有其他的見解,歡迎在下面評論。大家共同學習。



作者:櫟楓x
鏈接:https://www.jianshu.com/p/34dfea41615d
來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章