Как создать открытый ключ x25519 из координат XZ?
Насколько я понимаю, функция DH x25519, используемая на Curve25519, использует только X
координаты, как я могу прочитать в определении в Википедии:
The protocol uses compressed elliptic point (only X coordinates), so it allows efficient use of the Montgomery ladder for ECDH, using only XZ coordinates.[5]
Координаты XZ [запись в базе данных] представляют xy как XZ, удовлетворяющие следующим уравнениям:
x=X/Z
согласно этой документации.
Я нашел эти уравнения в этом ответе на обмен стеками:
Я посмотрел на X25519_public_from_private
функция и найдено:
/*
* We only need the u-coordinate of the curve25519 point.
* The map is u=(y+1)/(1-y). Since y=Y/Z, this gives
* u=(Z+Y)/(Z-Y).
*/
Я хотел бы знать, как создать открытый ключ из координат u,v или x,y (или X,Y). А особенно если это вообще возможно?
Например, с классическим ecdsa можно создавать общедоступные числа благодаря координатам x,y и кривой, следовательно, создавать на их основе открытый ключ.
Пример использования криптографической библиотеки Python:
public_numbers = ec.EllipticCurvePublicNumbers(x,y, curve)
public_key = public_numbers.public_key(backend)
Я бы хотел добиться того же с Curve25519.
Ссылки:
https://medium.com/@chain_66731/a-deep-dive-into-x25519-7a926e8a91c7
https://hackernoon.com/what-is-the-math-behind-elliptic-curve-cryptography-f61b25253da3
https://crypto.stackexchange.com/questions/74598/key-specifications-for-x25519-need-two-clarifications-please