0

Я создал открытый и закрытый ключ ECC, используя кривую secp192r1. Я получаю 75 для общедоступных и 125 для частной кодированной длины массива ключей. Почему закрытый ключ длиннее открытого ключа? Почему закрытый ключ больше не два раза, чем общедоступный? Почему закрытый ключ не 192 бит = 24 байта из-за secp192r1?Закрытый ключ ECC длиннее открытого ключа

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

ECNamedCurveParameterSpec ecSpec = ECNamedCurveTable.getParameterSpec("secp192r1"); 

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC"); 
g.initialize(ecSpec, new SecureRandom()); 
KeyPair pair = g.generateKeyPair(); 

System.out.println(pair.getPublic().getEncoded().length); 
System.out.println(pair.getPrivate().getEncoded().length); 
+1

кодированные формы содержат больше, чем просто голые ключи. Они являются закодированными версиями более сложных структур ASN.1, которые имеют дополнительную информацию. Кроме того, точки на эллиптической кривой могут быть закодированы либо полной (X, Y) парой, либо как более короткая «сжатая» форма, содержащая только координату X плюс знаковый бит. В вашем случае точки кодируются с использованием полной (X, Y) пары. Структура закрытого ключа включает открытый ключ как один из его компонентов. –

+0

Как получить ключ 24 байта, который можно использовать повторно в C lib micro-ecc? – Justas

+1

Передайте закрытый ключ ECPrivateKey и вызовите метод getS. –

ответ

0

фрагмент кода ниже выдает 24 байт закрытого ключа:

Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider()); 

ECNamedCurveParameterSpec spec = ECNamedCurveTable.getParameterSpec("secp192r1"); 

KeyPairGenerator g = KeyPairGenerator.getInstance("ECDSA", "BC"); 
g.initialize(spec, new SecureRandom()); 
KeyPair pair = g.generateKeyPair(); 
ECPrivateKey ecPrivateKey = (ECPrivateKey)pair.getPrivate(); 

System.out.println(ecPrivateKey.getS().toByteArray().length); 
Смежные вопросы