Кривая25519 и Эд25519
А Кривая Монтгомери определено над полем $К$ определяется как; $$M_{A,B}: Bv^2 = u^3 + Au^2 + u$$
для некоторых $А,В\в К$ и с $B(A^2-4) \neq 0$.
Кривая25519 использует премьер $q = 2^{255} – 19$ чтобы сформировать конечное поле $\mathbb{F}_q$ и сначала определен для ECDH, а затем назван X25519. Уравнение Монтгомери $$v^2 = и^3+486662 и^2+и$$ с $486664$ это квадрат в $\mathbb{Z}_p$, т. е. это квадратичный вычет (QR). $u = 9$ выбрал в качестве отправной точки. Форма Вейерштрасса (одна нужна для SageMath)
$$y^2 = x^3 + A x + B $$
Эта кривая «Кривая 25519» бирационально эквивалентный над $\mathbb{Z}_p$ к кривой Эдвардса Эд25519 $$x^2 + y^2 = 1 + (121665/121666)x^2y^2$$ с;
$$x = \frac{\sqrt{486664}u}{v}, \quad y = \frac{(u = 1)}{(u + 1)}$$
Обратная операция;
$$u = \frac{(y + 1)}{(1 - y)}, \quad v = \frac{\sqrt{486664}u}{x}$$
Форма Эдварда имеет изоморфную кривую
$$-x^2 + y^2 = 1 - (121665/121666)x^2y^2$$ поскольку $-1$ QR в $\mathbb Z_p$
Вопросы
montgomeryX = (edwardsY + 1)*inverse(1 - edwardsY) mod p
можно перенести точку кривой Эдвардса (публичный ключ ed25519) на кривую Монтгомери.
Да, как указано выше, от Монтгомери до Эдвардса. $$u = \frac{(y + 1)}{(1 - y)}$$
Есть ли побочные эффекты, если открытый ключ ed25519 недействителен, например, в случае атаки небольшой подгруппы или неправильной кривой?
Ключ Edward25519 можно преобразовать в Curve25519, и если секретный ключ уже создан с помощью законная ответственность пользователя
- Предполагается, что законные пользователи генерируют независимые единые случайные секретные ключи. Пользователь может, например, сгенерировать 32 одинаковых случайных байта, очистить биты 0, 1, 2 первого байта, очистить бит 7 последнего байта и установить бит 6 последнего байта.
В определении набора нам нужны секретные ключи X25519 как
$$\{n: n \in 2^{254} +8\{0,1,2,\dots,2^{251}-1 \}\},$$ другими словами, выберите однородное случайное число между $[0,2^{251}-1]$ умножьте это на $8$ чем добавить $2^{254}$.
Порядок базовой точки (с прямым порядком байтов);
edd3f55c1a631258d69cf7a2def9de14000000000000000000000000000000010
Поляна $0,1,2$ убеждается, что
мы не входим в небольшую группу, для которой злоумышленник использует DHKE и максимально раскрывает информацию $\lceil log_2 ч\rceil$ биты (кофактор $ч=8$ в Curve25519).
и очистить 7 и набор 6 против возможной атаки по времени.
Ниже приведено максимальное значение (с прямым порядком байтов), и мы видим, что два закрытых ключа могут иметь один и тот же открытый ключ, однако это незначительное, но обнаружимое событие.
0x8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7
тогда в этом нет необходимости, поскольку бирациональная эквивалентность будет давать точки, которые имеют немалый порядок, если законный пользователь уже использовал правила.
При бирациональной эквивалентности Curve25519 и edwards25519 каждый открытый ключ X25519 соответствует двум возможным открытым ключам Ed25519). X25519 использует только $х$ координата (откуда идет название) и Эд25519 использует координаты точек. Когда у нас есть только $х$ координата точки, возможны две точки $(х,у)$ и $(х,-у)$ кроме $у=0$.
И если да, то какое решение было бы лучшим, чтобы справиться с этим должным образом?
Нет никакой опасности Проверка точек.
Некоторые дополнительные
Использование того же ключа
Я не могу прямо сказать, что это небезопасно, однако наше общее правило — не использовать один и тот же ключ для разных целей. Пока вы не докажете, что нет никакой опасности удержаться от использования одного и того же ключа для разных целей.
Возможно, было бы лучше иметь один единый случайный 256-битный ключ и получить два ключа с расширением HKDF для X25519 и Ed25519.
X25519
Помните, что открытый ключ фиксирован, и когда вы выполняете DHKE, это означает, что у вас статический статический DHKE. Это не имеет прямой секретности. Лучше то, что делает протокол Signal; двойной храповик и вы можете подписать новый открытый ключ с помощью Ed25519.