2010-03-31 14 views
1

J'essaye d'analyser un certificat X509 qui contient une clé publique DSA (Digital Signature Algorithm).Analyse du certificat DSS X509 pour obtenir P, Q, G et Y

Utilisation de la classe javax.security.cert.X509Certificate et méthode getPublicKey() Je suis en mesure d'obtenir P, Q, G et Y:

P: 0279b05d bd36b49a 6c6bfb2d 2e43da26 052ee59d f7b5ff38 f8288907 2f2a5d8e 2acad76e ec8c343e eb96edee 11 
Q: 036de1 
G: 03 
Y: 02790a25 22838207 4fa06715 1def9df5 474b5d84 a28b2b9b 360a7fc9 086fb2c6 9aab148f e8372ab8 66705884 6d 

Cependant, je ne suis pas sûr de ce que le format C'est et comment l'analyser pour le convertir en long \ BigInteger en Java.

Est-ce que quelqu'un sait comment faire cette conversion?

Je suppose actuellement qu'il est Hex et je l'analyse comme tel - mais je ne suis pas sûr à 100% si c'est correct.

Merci, Dave

+0

Travail à domicile? Ces paramètres sont si extrêmement faibles que quelqu'un doit les avoir choisis délibérément. – abc

Répondre

2

Vous devriez déjà avoir les grands entiers. Voici comment ça se passe pour moi:

X509Certificate xc = X509Certificate.getInstance(ecert); 
PublicKey pkey = xc.getPublicKey(); 
DSAPublicKey dk = (DSAPublicKey)pkey; 
DSAParams pp = dk.getParams(); 
System.out.printf("p = 0x%X\n", pp.getP()); 
System.out.printf("q = 0x%X\n", pp.getQ()); 
System.out.printf("g = 0x%X\n", pp.getG()); 
System.out.printf("y = 0x%X\n", dk.getY()); 

supposant le certificat codé est ecert. Les interfaces DSAPublicKey et DSAParams sont dans java.security.interfaces.

Vous pouvez également passer par un KeyFactory et utiliser la méthode getKeySpec() pour exporter la clé publique comme DSAPublicKeySpec, qui offrira les mêmes valeurs que BigInteger instances. Cependant, je ne suis pas certain s'il y a un avantage à passer par cette route.

Ce que vous montrez est probablement une sorte d'encodage, mais je ne sais pas lequel. Quoi qu'il en soit, le paramètre 'Q' doit avoir une largeur d'au moins 160 bits dans une clé publique DSA appropriée.

+0

Merci Thomas - Ça a marché pour moi –