簡體   English   中英

使用Crypto ++的curve25519基點乘法

[英]curve25519 base point multiplication using Crypto++

當我們將curve25519的curve25519乘以標量數時,將引發異常。

Integer gx(group.GetSubgroupGenerator().x);

Integer gy(group.GetSubgroupGenerator().y);

ECP::Point g(gx, gy);

ECP::Point P(group.GetCurve().ScalarMultiply(g, 3));

Exception thrown at 0x005B4412 in CryptoExample.exe: 0xC0000005: Access violation reading location 0x00000000.

除了該曲線的基點外,我們如何獲取發電機?

 Integer gx(group.GetSubgroupGenerator().x); Integer gy(group.GetSubgroupGenerator().y); ECP::Point g(gx, gy); ECP::Point P(group.GetCurve().ScalarMultiply(g, 3)); 

由於未設置曲線,因此group.GetCurve()可能返回NULL 但是,使用標准的處理方式,curve25519齒輪可能無法正常工作(如使用Crypto ++的secp521r1的標量乘法所示)。 實際上,如果您運行以下代碼:

GroupParameters group;
group.Initialize(ASN1::X25519());

然后,代碼將導致異常,因為eccrypto.heccrypto.cpp中缺少域參數:

$ ./test.exe
terminate called after throwing an instance of 'CryptoPP::UnknownOID'
  what():  BER decode error: unknown object identifier

curve25519齒輪在Crypto ++中是特殊的。 它沒有使用庫的底層Integer類和通過GroupParameters對象進行典型的字段操作,而是使用了來自Andrew Moon的稱為Donna的恆定時間實現。 該庫然后包裝Moon的Donna代碼,並使用PK_SignerPK_Verifier類的Crypto ++對象提供大多數預期的操作。

但是, “ ...並提供最期望的操作”恰好在您嘗試使用的接口DL_GroupParameters_EC類的較低級對象處停止。

您可能還想看看donna.h提供的功能:

int curve25519_mult (byte publicKey[32], const byte secretKey[32])
    Generate a public key. More...

int curve25519_mult (byte sharedKey[32], const byte secretKey[32], const byte othersKey[32])
    Generate a shared key. More...

這些是您要查找的標量乘法。 第一條curve25519_mult使用的基點為9。第二條curve25519_mult允許您指定任意基點。

donna.h應該是一個私有頭文件,但是由於缺少曲線操作,我們不得不公開它。 但是,Donna仍然缺少AddDouble函數,盡管如果需要可以將其導出。

另請參見Crypto ++ Wiki上的x25519ed25519 在堆棧溢出上使用Crypto ++secp521r1進行標量乘法


x25519ed25519 Wiki頁面實際上討論了您的問題:

Crypto ++庫使用Andrew Moon的恆定時間ed25519-donna。 Curve25519齒輪似乎與Crypto ++庫中的其他大多數可比較的公鑰對象相似,但主要是外觀。 Crypto ++類只是Moon的代碼的包裝,這些代碼為調用者提供了一些預期的接口。 集成的副作用是,沒有通用的Point,Curve或GroupParameters,因此您無法使用curve25519執行任意計算。


curve25519之所以與眾不同,是因為我們需要提供齒輪,但要避免為正確支撐齒輪而進行大量更改。 該庫很好地支持短Weierstrass曲線,但幾乎不支持Edwards和Twisted Edward曲線。

最終,curve25519將被正確添加到庫中。

暫無
暫無

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

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