簡體   English   中英

如何添加兩個curve25519點

[英]How do I add two curve25519 points

我在curve25519上有兩個點([32]字節)。 我如何添加它們(a + b)。 我顯然不能使用 big.Int 來做到這一點,因為它們不是數字而是曲線上的點。 到目前為止,我還沒有找到任何庫來做類似於我可以使用edwards25519做的事情:

a := [32]byte // I get that from another function
b := [32]byte // also from another function
pointA, _ := new(edwards25519.Point).SetBytes(a)
pointB, _ := new(edwards25519.Point).SetBytes(b)
pointC := pointA.Add(pointA, pointB)

fmt.Println(pointC.Bytes())

我已經嘗試使用它並使用&edwards25519.Point{}.BytesMontgomery()將結果轉換為蒙哥馬利曲線,但我無法將ab都導入 edwards25519 曲線,因為它們是曲線 25519 上的點。

您可以通過兩個步驟使用libsodium來實現此目的。

  1. Edwards25519/Ed25519密鑰開始,生成兩個公鑰/點,然后調用crypto_core_ed25519_add文檔)。

  2. 通過雙有理 map(文檔)使用crypto_sign_ed25519_pk_to_curve25519將結果轉換為curve25519

Go有綁定。 您需要小心,不要使用一些“隨機”庫,這些東西很難在恆定時間內正確且難以完成(避免側通道)。

RFC 7748將公式提供給 map (x, y) Ed25519 Edwards指向(u, v) Curve25519 Montgomery點,反之亦然。

雙有理圖是:

 (u, v) = ((1+y)/(1-y), sqrt(-486664)*u/x)
 (x, y) = (sqrt(-486664)*u/v, (u-1)/(u+1))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM