2011-12-27 7 views
3

Просто немного фона на моем проекте:X.509 сертификации для Android

Я реализует программу шифрования 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.

Любые советы были бы высоко оценены.

+0

Если это работает, то о чем вы спрашиваете? –

+0

Хотелось бы знать, является ли это правильным методом реализации X509. Я немного читал X509, и было упомянуто, что существует необходимость в CA. Это автогенерируется устройством, так как я ничего не указывал? – Caulibeam

ответ

3

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

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

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

Смежные вопросы