Signature électronique

Digital signature.

Besoin

Authentifier l'émetteur d'un message.

Analyse

En théorie la signature d'un message consiste à envoyer 2 informations :

  1. le message en clair
  2. le même message signé avec la clé privée de l'auteur du message.

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 à :

  1. générer un condensé du message qu'on souhaite envoyer
  2. crypter ce condensé de message avec sa clé privée
  3. envoiyer le condensé crypté + le message en clair

Pour vérifier si le message est bien celui de l'émetteur, le récepteur :

  1. décrypte le condensé avec la clé publique de l'émetteur supposé
  2. vérifie si le condensé obtenu est égal au condensé du message en clair

Un algorithme de signature est donc toujours composé d'algorithmes :

Implémentation

Dans le monde Java, le concept de signature peut être appliqué dans divers buts :

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).

Limitations

Voir