Home |
---|
Digital signature.
Authentifier l'émetteur d'un message.
En théorie la signature d'un message consiste à envoyer 2 informations :
Ensuite le destinataire :
En pratique, ce principe n'est pas vraiment satisfaisant car :
En pratique donc, l'envoi d'un message signé (mais non crypté) consiste à :
Pour vérifier si le message est bien celui de l'émetteur, le récepteur :
Un algorithme de signature est donc toujours composé d'algorithmes :
Dans le monde Java, le concept de signature peut être appliqué dans divers buts :
keytool
a besoin :
Par exemple :
keytool -genkey -alias monNom -keypass monMotDePasse
(keytool vous demandera le mot de passe d'accès à la base
de clés) A la génération de votre paire de clés,
keytool en profite pour vous générer
un certificat auto-signé (signé par vous-même). Pour
générer un certificat en général, et ce certificat
en particulier, keytool a besoin de votre DN.
Une fois ces informations entrées, keytool
génère
une paire de clés et un certificat auto-signé et l'insère
dans la base de clés sous l'alias spécifié.
java.security.Signature
,
récupérable via un mécanisme de fabrique permettant de
spécifier la combinaison d'algorithmes utilisée :
import java.security.*;
Signature maSignature = Signature.getInstance ("SHA1withDSA");
La spécification des algorithmes est obligatoire pour l'objet Signature,
contrairement à keytool qui utilise SHA1withDSA
par
défaut. L'objet Signature
ne vous permet que de signer
des données avec une clé privée. La signature identifiant
l'émetteur de l'objet, elle nécessite ensuite la clé
privée de cet émetteur (de type java.security.PrivateKey
)
:
maSignature.initSign (maClePrivee);
La technique fournissant les données et générant la signature finale est ensuite similaire à celle du condensé de message. On fournit les données via la méthode update() :
byte[] donnees1 = { 1, 21, 3, 4 };
byte[] donnees2 = { 5, 2, 3, 7, 8, 12};
maSignature.update (donnees1);
maSignature.update (donnees2);
et la génération de la signature se faisant via la méthode sign().
byte[] donneesSignature = maSignature.sign();
les données retournées constituant le condensé (SHA, MD2, MD5) signé (DSA, RSA) du message dépendant des algorithmes spécifiés à la création de l'objet signature ;
java.security.Signature
.
La vérification consistant à vérifier l'identité
de l'émetteur de l'objet, elle nécessite ensuite la clé
publique de cette émetteur (de type java.security.PublicKey
)
:
telleSignature.initVerify (telleClePublique);
et la vérification de la signature se fait via la méthode verify().
boolean signatureOk = maSignature.verify();
jarsigner
MyApplet.jar monAlias
. Cette opération de signature
consiste en l'ajout de deux fichiers dans le répertoire META-INF/
cette archive :
alias.dsa
ou alias.rsa
contenant une signature pour le fichier
alias.sf ainsi que le certificat (et la clé
publique donc) du signataire.Un fichier JAR peut être signé par plusieurs entités (en lançant jarsigner plusieurs fois sur ce fichier), afin de permettre différents profils d'autorisations pour la même applet ;
Cependant, d'une manière générale, Java 2 ne permet que de signer dans un but d'authentification, c'est-à-dire avec une clé privée.
La plate-forme Java [1.2+] supporte par défaut (fournisseur de sécurité Sun) les combinaisons suivantes :
Algorithme de condensé | Algorithme de cryptage (clé) | Description |
---|---|---|
SHA1 | DSA | Pour les signatures définies dans documents FIPS PUB 186 |
MD2 | RSA | pour les signatures conformes à PKCS#1 |
MD5 | RSA | pour les signatures conformes à PKCS#1 |
SHA1 | RSA | pour les signatures conformes à PKCS#1 |
La classe Java 2 correspondante est java.security.Signature
, qui
permet de générer des signatures (signer des données) et
vérifier des signatures (des données signées).
Home |
---|