Сертификация X.509 для Android - PullRequest
3 голосов
/ 28 декабря 2011

Просто небольшая предыстория моего проекта:

Я внедряю программу шифрования SMS, используя ECDH для Android (BouncyCastle), и мне нужно отправить свои открытые ключи через SMS. С точки зрения функциональности все работает, но я немного скептически отношусь к коду X.509, который я реализовал.

На стороне отправителя:

        byte[] pubEnc = aKeyPair.getPublic().getEncoded();
        X509EncodedKeySpec  pubX509 = new X509EncodedKeySpec(pubEnc);

pubX509 затем кодируется в Base64 и отправляется через SMS

На стороне получателя:

        KeyFactory          keyFac = KeyFactory.getInstance("ECDH", "SC");
        X509EncodedKeySpec  pubX509 = new X509EncodedKeySpec(SharedS);
        ECPublicKey         pubKey = (ECPublicKey)keyFac.generatePublic(pubX509);

Полученное значение Base64 декодируется в SharedS, который приводится в новый pubX509

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

Любой совет будет высоко ценится.

1 Ответ

3 голосов
/ 29 декабря 2011

Тот факт, что Sun (теперь Oracle) назвал это X509EncodedKeySpec, объясняется просто тем, что открытый ключ кодируется с использованием формата, который был указан в гораздо большем стандарте сертификата X.509. Для Интернета надлежащая реализация сертификатов X.509 указана в RFC 5280 . Как видите, этот RFC составляет более 140 страниц. В целом документе эти 3 строки описывают, как представлять открытый ключ:

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

И это формат, который создается классом Java X509EncodedKeySpec. Вы можете игнорировать все остальные стандарты X509, вам не нужно использовать сертификаты.

...