Путать с длиной открытого ключа ECC - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь найти длину открытого ключа ECC.Я прочитал, что открытый ключ ECC составляет около 64 байтов.Я пытался проверить это сам, но результат отличается от обычного.При условии, что я использую эту спецификацию (secp256k1).Код, который я использовал для вычисления длины открытого ключа, приведен ниже.

байт publicKeyLength [] = pk.getEncoded ();

System.out.println («Длина PK равна» + publicKeyLength.length);// он печатает 311 байтов?

Как я читаю на этом форуме, это должно быть 64 байта.Но почему, когда я тестировал его, он выдает 311 байт?

1 Ответ

1 голос
/ 26 июня 2019

Если вы обратитесь к rfc5480 , вы увидите, что байты, полученные из метода PublicKey::getEncoded, на самом деле кодируются с помощью DER SubjectPublicKeyInfo:

SubjectPublicKeyInfo  ::=  SEQUENCE  {
       algorithm         AlgorithmIdentifier,
       subjectPublicKey  BIT STRING
}

И subjectPublicKey будет ECPublicKey в кодировке DER OCTET String, и этот ключ состоит из первого байта, который определяет, сжат или нет ключ, а затем из координат X, Y точки EC открытого ключа.

А длина полей X, Y зависит от того, на какой кривой определена точка. Для вашей кривой это будет 32 байта для каждой координаты. Поэтому в несжатом виде необработанный ключ будет иметь 65 байтов (1 + 32 + 32). Разница между сжатой и несжатой формами была объяснена в этом вопросе .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...