亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在golang中簽署curve25519密鑰?

如何在golang中簽署curve25519密鑰?

Go
臨摹微笑 2022-06-13 15:33:59
我正在嘗試從 Signal in Go 中實現 X3DH 算法。但是,我在如何簽署 Public Signed PreKey 上陷入了困境。根據規范,它應該是 X25519 密鑰。在查看 Github 上的先前實現時,他們[32]byte從curve25519包中生成了一個密鑰,然后將其轉換為一個ed25519密鑰,然后對其進行簽名。但是,他們用于轉換的包已被棄用 ( github.com/agl/ed25519)。因此,我要么需要能夠將密鑰轉換為,ed25519以便我可以使用當前ed25519包 ( golang.org/x/crypto/25519) 對它們進行簽名,要么實現curve25519密鑰的簽名和驗證功能。
查看完整描述

2 回答

?
12345678_0001

TA貢獻1802條經驗 獲得超5個贊

Ed25519鍵可以X25519很容易地轉換為鍵,使用的扭曲愛德華茲曲線Ed25519和使用的蒙哥馬利曲線X25519是birationally等效的。


愛德華茲曲線上的點通常稱為 ( x, y),而蒙哥馬利曲線上的點通常稱為 ( u, v)。


您不需要庫來進行轉換,它真的很簡單......


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

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

這是Google 的 Golang 安全主管 Filippo Valsorda 撰寫的一篇很棒的博客,討論了這個話題。


查看完整回答
反對 回復 2022-06-13
?
飲歌長嘯

TA貢獻1951條經驗 獲得超3個贊

這需要一個公共的curve25519 密鑰并將其轉換為一個ed25519 的公共密鑰。我沒有編寫此代碼,但似乎正在做上面伍德斯托克所說的事情。歡迎提供更多信息:


func Verify(publicKey [32]byte, message []byte, signature *[64]byte) bool {


publicKey[31] &= 0x7F


/* Convert the Curve25519 public key into an Ed25519 public key.  In

particular, convert Curve25519's "montgomery" x-coordinate into an

Ed25519 "edwards" y-coordinate:

ed_y = (mont_x - 1) / (mont_x + 1)

NOTE: mont_x=-1 is converted to ed_y=0 since fe_invert is mod-exp

Then move the sign bit into the pubkey from the signature.

*/


var edY, one, montX, montXMinusOne, montXPlusOne FieldElement

FeFromBytes(&montX, &publicKey)

FeOne(&one)

FeSub(&montXMinusOne, &montX, &one)

FeAdd(&montXPlusOne, &montX, &one)

FeInvert(&montXPlusOne, &montXPlusOne)

FeMul(&edY, &montXMinusOne, &montXPlusOne)


var A_ed [32]byte

FeToBytes(&A_ed, &edY)


A_ed[31] |= signature[63] & 0x80

signature[63] &= 0x7F


var sig = make([]byte, 64)

var aed = make([]byte, 32)


copy(sig, signature[:])

copy(aed, A_ed[:])


return ed25519.Verify(aed, message, sig)

這使用“golang.org/x/crypto/ed25519/internal”中的函數


查看完整回答
反對 回復 2022-06-13
  • 2 回答
  • 0 關注
  • 326 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號