[英]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.h
和eccrypto.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_Signer
和PK_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仍然缺少Add
和Double
函數,盡管如果需要可以將其導出。
另請參見Crypto ++ Wiki上的x25519
和ed25519
; 在堆棧溢出上使用Crypto ++對secp521r1進行標量乘法 。
x25519
和ed25519
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.