如何在Java中爲橢圓曲線生成基點或發生器?爲橢圓曲線密碼學生成橢圓曲線的基點(G)
我正在開發可用於實現一些橢圓曲線加密算法的Java包,並且我想使用自己的曲線。然而,我被困在了必須獲得曲線的生成器基點的位置,以便我可以擁有一組域參數。
任何幫助,非常感謝。
如何在Java中爲橢圓曲線生成基點或發生器?爲橢圓曲線密碼學生成橢圓曲線的基點(G)
我正在開發可用於實現一些橢圓曲線加密算法的Java包,並且我想使用自己的曲線。然而,我被困在了必須獲得曲線的生成器基點的位置,以便我可以擁有一組域參數。
任何幫助,非常感謝。
鑑於 「幾乎素」 爲了一個橢圓曲線u
= k
r
,你應該:
P
G
= k
P
G
= 0轉到1r
G
不是0(如果它是0,曲線di d沒有訂單k
r
)。r
。這是針對Java,C或任何相同....
讓我先假設你創建了一個ECC域與黃金集團階q自己,想用它來加密。 然後選擇一個隨機的x座標,然後從weierstrass形式的橢圓曲線方程計算y^2。 希望你選擇了一個3模4的質數模p。在這種情況下,如果存在,確定平方根p mod是微不足道的。如果它不存在,請嘗試另一個x。 我很少需要2次以上的嘗試,主要是第一次嘗試導致已經在新創建的域中有效的生成器。
您可以使用我的開放源代碼程序「Academic Signature」來達到此目的。 Manual and link to download page。 如果您將新域導入域列表,您可以爲該域嘗試任意生成器。在導入學術簽名後檢查發生器。如果它不是橢圓曲線上的有效點,則會增加測試點的x座標,直到遇到有效的x y座標對。如果隨後導出域,則新的生成器將包含在域參數的純文本文件中。
在這個頁面上ECC Domain page你可以找到我創建的一些域,我用上面提到的程序來獲取包含一些「十六進制字」的生成器。
如果您自己沒有創建域,如果它是主要順序的,並且在某些實現中已經有了一個用於它的生成器,則更容易:將舊實現生成器與隨機數相乘,給自己一個新的發生器,你可以使用它來分隔你的密鑰空間和其他實現的密鑰空間。
Registers Michael Anders
謝謝! 你能否澄清一下k和r究竟是什麼?基數或點數或輔助因子?我用來閱讀有關橢圓曲線的文章使用了不同的命名約定。 從我的數字來看,k是順序,r是點數。我對嗎?另外,如何設置G = kP?對不起,這樣的菜鳥。 –
k * r是橢圓曲線組的階數。 r是一個大素數,k是小因子。你需要一個命令點r,Rasmus提供的程序給你一個。 –