RF C 8410 перечисляет это как пример ключа Ed25519 publi c: MCowBQYDK2VwAyEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=
При декодировании с помощью декодера ASN.1 это становится:
30 2A
30 05
06 03 2B6570 // Algorithm Identifier
03 21 0019BF44096984CDFE8541BAC167DC3B96C85086AA30B6B6CB0C5C38AD703166E1
Как и ожидалось, это соответствует определению SubjectPublicKeyInfo
в RF C.
Используя поставщика криптографии Sun в Java 11+, я могу использовать этот код для генерации X25519 (не Ed25519 - это разница в идентификаторе алгоритма ниже) publi c key:
import java.security.KeyPairGenerator;
import java.util.Base64;
public class PrintPublicKey {
public static void main(String args[]) throws Exception {
KeyPairGenerator generator = KeyPairGenerator.getInstance("X25519");
byte[] encodedPublicKey = generator.generateKeyPair().getPublic().getEncoded();
System.out.println(Base64.getEncoder().encodeToString(encodedPublicKey));
}
}
Что выведет что-то вроде: MCwwBwYDK2VuBQADIQDlXKI/cMoICnQRrV+4c//viHnXMoB190/z2MX/otJQQw==
Декодирование с помощью ASN .1, это становится:
30 2C
30 07
06 03 2B656E // Algorithm Identifier
05 00 // Algorithm Parameters - NULL
03 21 00E55CA23F70CA080A7411AD5FB873FFEF8879D7328075F74FF3D8C5FFA2D25043
Это имеет явный NULL
после идентификатора объекта. Это действительно согласно спецификации? Он говорит:
В этом документе мы определяем четыре новых идентификатора OID для идентификации различных пар кривых / алгоритмов: кривые - это curve25519 и curve448, а алгоритмы - ECDH и EdDSA в чистом режиме.
Для всех OID параметры ДОЛЖНЫ отсутствовать.