ECDH размер закрытого ключа - PullRequest
0 голосов
/ 28 января 2019

Я знаю, что размеры ключей в ECDH зависят от размера эллиптической кривой.

Если это 256-битная кривая (secp256k1) , ключи будут:

Public: 32 bytes * 2 + 1 = 65 (uncompressed)
Private: 32 bytes

384-битная кривая (secp384r1):

Public: 48 bytes * 2 + 1= 97 (uncompressed)
Private: 48 bytes

Но с 521-битная кривая (secp521r1) ситуация очень странная:

Public: 66 bytes * 2 + 1 = 133 (uncompressed)
Private: 66 bytes or 65 bytes.

Я использовал криптомодуль node.js для генерации этих ключей.

Почему значение закрытого ключа 521-битной кривой является переменным?

1 Ответ

0 голосов
/ 30 января 2019

Закрытый ключ других кривых также является переменной, но они с меньшей вероятностью демонстрируют эту разницу, когда дело доходит до кодирования в байтах.

Открытый ключ кодируется как два статического размера целые числа с префиксом индикатора несжатой точки 04.Размер идентичен размеру ключа в байтах.

На самом деле закрытый ключ не имеет заранее установленной кодировки.Это одно случайное значение (или вектор) в диапазоне 1..N-1, где N - порядок кривой.Теперь, если вы закодируете это значение как переменное число число без знака, тогда обычно будет иметь тот же размер, что и ключ в байтах.Однако, это может быть случайно на один байт меньше, или два, или три, или больше.Конечно, вероятность того, что он будет на намного меньше, довольно мала.

Теперь 521-битный ключ немного странен, так как первый, самый старший байт порядка не начинается сбит установлен в 1;он имеет только наименьший значащий бит, установленный в 1. Это означает, что существует гораздо более высокая вероятность того, что старший значащий байт частного значения (обычно называемый s) будет на байт короче.

Точный шанс, конечно, зависит от полной стоимости заказа:

01FF FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF
     FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFA
     51868783 BF2F966B 7FCC0148 F709A5D0
     3BB5C9B8 899C47AE BB6FB71E 91386409

, но, как вы можете догадаться, он довольно близок к 1 из 2, потому что впоследствии многие биты устанавливаются в 1.Вероятность того, что два байта отсутствуют, - это, конечно, 1 из 512 и три байта 1 из 131072 (и т. Д.)


Обратите внимание, что размеры подписи ECDSA также могут колебаться.Схема подписи X9.42 использует два кодированных DER целых числа со знаком .Тот факт, что они подписаны, может вводить байт, установленный на все нули, если старший значащий бит старшего байта установлен в 1, в противном случае значение будет интерпретировано как отрицательное.Тот факт, что он состоит из двух чисел, r и s, и что размер кодирования DER также зависит от размера кодированных целых чисел, делает размер полного кодирования довольно трудно предсказать.

Еще меньшеОбычное (плоское) кодирование подписи ECDSA использует те же целые числа статического размера, что и открытый ключ, и в этом случае оно в два раза больше порядка N в байтах.


ECDH не имеетЭта проблема.Обычно общим секретом является статически закодированная X-координата точки, которая является результатом вычисления ECDH, или, по крайней мере, значение, полученное из него с использованием функции получения ключа (KDF).

...