密碼學系列 - 橢圓曲線

密碼學 - 橢圓曲線

橢圓曲線是一系列滿足如下方程的點:
y^2 = x^3 + ax + b
並且
4a^3 + 27b^2 != 0

特性

  1. 封閉性:因爲橢圓曲線上的點相加,還是橢圓曲線上的點。
  2. 結合律:P+(Q+R) = (P+Q)+R = 0
  3. 單位元: 單位元是0, 即 P+0 = P
  4. 逆元: 一個橢圓曲線上的點P的逆元,是相對x座標的對稱點
  5. 交換律:P+Q = Q+P

標量乘法

nP = P + P + P + ... +P

  • 計算標量乘法,最簡單的方法是一個個P點相加
  • 有個快速的計算方法:double後相加. "Double"主要是依次獲得某個位對應的變量的結果。如果該位是1,就加到最後的結果中:

生成一個公鑰

通常使用橢圓曲線算法,先選擇曲線,計算橢圓曲線的階,然後在這條曲線上找到最大的子羣。找子羣,就是尋找子羣對應的生成元(G)。

從一個密鑰(形式上是一個隨機生成的數字k)開始,我們將它與曲線上預定義的點相乘,可以得到曲線上的另一個點,這就是相應的公鑰K,而這個預定義的點叫作生成點G。生成點是作爲secp256k1標準的一部分定義的,對於比特幣而言,其所有密鑰均使用相同G點

K=kG

k是密鑰,G是生成點,K是生成的公鑰,也是橢圓曲線上的一個點

找到生成點G的倍數kG。也就是G相加k次

在橢圓曲線中,一個點與其自身相加等同於在這個點上畫一條切線,找到切斜與曲線相交的點,相交點相對x軸對稱的點就是我們要找的點

在這裏插入圖片描述

演示G在橢圓曲線上被整數k相乘

兩大系列

  • NIST系列曲線
    • 美國國家標準與技術研究院(National Institute of Standards and Technology, NIST)
    • 目前廣泛使用
    • 代表: secp256k1
  • 25519系列曲線
    • 著名密碼學家Daniel J. Bernstein在2006年獨立設計的橢圓曲線加密/簽名/密鑰交換算法
    • 目前最快
    • 代表: ed25519

ED25519曲線

Curve25519/Ed25519/X25519 是著名密碼學家Daniel J. Bernstein在2006年獨立設計的橢圓曲線加密/簽名/密鑰交換算法,與現有的任何橢圓曲線算法完全獨立,其中Ed25519用於簽名。

25519系列曲線自2006年發表以來,除了學術界無人問津,2013年愛德華·斯諾登曝光棱鏡計劃後,該算法突然大火,OpenSSH迅速增加了對25519系列的支持,RFC增加了SSL/TLS對X25519密鑰交換協議的支持。

ed25519的橢圓曲線方程如下:
y^2=x^3+486662x^2+x,modulop=2^255-19

25519算法的特點如下

  • 完全開放設計。算法各參數非常明確,沒有任何可疑之處,而目前廣泛使用的橢圓曲線是NIST,係數有來歷不明的隨機種子, 如: secp256k1
  • 安全性高。 實踐上最安全的加密算法
  • 速度快。25519系列曲線是目前最快的橢圓曲線加密算法,性能遠遠超過NIST系列

參考:
https://mp.weixin.qq.com/s/-Pws7J_9DOvwxXJ-Ma9mig
http://mathworld.wolfram.com/EllipticCurve.html

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