После экспорта и повторного импорта закрытого ключа ECDSA на другой компьютер ключ отличается - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь экспортировать ECDSA PrivateKey из существующего (большого) проекта и импортировать его в новый - после этого ключ отличается. Вот как ключ генерируется в первую очередь:

KeyPairGenerator keyGen = KeyPairGenerator.getInstance("ECDSA", "BC");
SecureRandom random = SecureRandom.getInstance("SHA1PRNG");
ECGenParameterSpec ecSpec = new ECGenParameterSpec("secp256k1");
keyGen.initialize(ecSpec, random);
KeyPair keyPair = keyGen.generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();

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

byte[] privateKeyBytes = privateKey.getEncoded();
String keyString = getHexString(privateKeyBytes);

И импортировать его на другую сторону:

KeyFactory fact = KeyFactory.getInstance("ECDSA");
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(hexStringToByteArray(msg));
PrivateKey key = fact.generatePrivate(keySpec);

Теперь после печати ключа (System.out.println (ключ)) первая строка отличается:

Before:
EC Private Key [a7:3d:a5:d6:13:8f:42:d2:65:25:67:27:30:02:61:cb:1e:7a:1c:de]
After: 
EC Private Key [29:8c:4c:22:0a:eb:b4:2b:c0:2d:15:d6:52:dc:e1:df:c5:1f:05:6b]

в то время как X и Y остаются прежними. Я подтвердил, что массив байтов остается тем же после импорта / экспорта, за исключением getHexString / hexStringToByteArray.

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

Системная информация: java -version: версия openjdk "11.0.3" 2019-04-16 (обе машины), обе Ubuntu 18.04 64 бит

1 Ответ

0 голосов
/ 05 июня 2019

Только что обнаружил проблему - первая машина использовала «пользовательский» bcprov, который в некотором роде ведет себя по-разному.После его использования на второй машине ключи совпадают.

Спасибо за потраченное время!

...