Accueil Foire Aux Questions Trouver d'autres membres Rechercher Utilisez le vBpad pour stocker des notes personnelles Ici, vous pouvez voir les sujets auxquels vous avez souscris, vos messages privés; et modifier vos informations personnelles et préférences. Statistiques du forum Enregistrez vous gratuitement ! Se déconnecter  
Forum OXMO Forum OXMO > Section Technique > Réseaux / Sécurité > [HOWTO] Cryptographie, Certificats IGC et OpenSSL


Aller au Forum:
Notez ce sujet :

  Sujet précédent   Sujet suivant
Auteur
Sujet Poster un nouveau sujet    Poster une réponse
 soul^keeper  Rechercher tous les messages de ce membre Cliquez ici pour envoyer un message privé à cet utilisateur
Administrateur

Déconnecté

Niveau : 5
N° de Membre : 1

Ancienneté : 100%
Participation : 19%
Inscription: 22 Feb 2002
Localisation: La Défense
Age: 48
Messages: 16623
Sujets Lancés : 2412

Post [HOWTO] Cryptographie, Certificats IGC et OpenSSL

Cours Cryptographie, Certificats IGC et OpenSSL
Source: <a href="http://www.formation.ssi.gouv.fr/stages/documentation/architecture_securisee/cours_crypto_certif.html">Gouvernement(!)</a>

Citation:

La Cryptographie
Nous ne donnons ici que les concepts minimaux et simplificateurs nécessaires à la réalisation du TP. La cryptographie est une science difficile et délicate. On pourra consulter, par exemple, un cours en ligne à l'adresse suivante : http://www.cacr.math.uwaterloo.ca/hac/

Le besoin de masquer les messages sensibles aux yeux des lecteurs indiscrets remonte à Jules César, voire avant. Aujourd'hui, on appelle cryptographie l'ensemble des connaissances et des techniques ayant pour but de rendre illisibles des messages aux observateurs autres que les destinataires légitimes. On parle de chiffrer car les messages sont assimilés à des nombres et les opérations de "masquage" de message sont, pour l'essentiel, des opérations mathématiques.

Le vocabulaire stabilisé en français est le suivant :
- On chiffre des messages ;
- On déchiffre des messages si on a la clé ;
- On décrypte des messages si on n'a pas la clé.
Tous les autres termes sont à proscrire, et en particulier le cryptage, l'encryptage, le chiffrage, la chiffration !

On distingue deux types d'algorithmes cryptographiques : les algorithmes symétriques qui utilisent la même clé pour chiffrer et déchiffrer les messages et les algorithmes asymétriques qui utilisent des biclés, une clé servant à chiffrer et l'autre à déchiffrer.

Les algorithmes symétriques sont rapides et performants au niveau de la qualité de la cryptographie. Malheureusement, ils souffrent d'un défaut majeur : les deux parties doivent partager une clé secrète pour pouvoir communiquer. Si une personne désire communiquer avec N autres personnes, plusieurs scénarios s'offrent à elle. Elle peut partager la même clé avec les N correspondants, mais ce n'est absolument pas satisfaisant, puisque si un de ses correspondants perd la clé, toutes les communications sont compromises. Elle peut également générer autant de clé que de correspondants, ce qui est fastidieux.
De plus, c'est là que le second défaut de la cryptographie symétrique apparaît : la transmission de la clé de chiffrement. Après avoir généré les clés de chiffrements, la personne doit les envoyer par des canaux différents de ceux qu'emprunteront ses communications (poste, téléphone), ce qui s'avère en pratique peu réalisable.
Exemple d'algorithmes symétriques : DES, TripleDes (ou 3DES), AES.

Les algorithmes asymétriques n'ont pas ce défaut : chaque utilisateur dispose d'une paire de clés (une clé de chiffrement, dite clé privée, et une clé de déchiffrement, dite clé publique). Il est impossible de recalculer une clé à partir de l'autre. Pour chiffrer un message, on utilise la clé publique. Seul le possesseur de la clé privée peut alors déchiffrer le message. Les algorithmes de cryptographie asymétrique sont basés sur des propriétés mathématiques complexes qu'il est inutile d'aborder ici. L'inconvénient de ces protocoles est qu'ils sont très coûteux en ressources et donc très lents.
Exemple d'algorithme asymétrique : RSA.

Les solutions performantes sont donc des solutions hybrides où la communication est chiffrée par une clé dite de session basée sur un protocole symétrique. Cette clé est générée aléatoirement et transmise via un protocole asymétrique.

Le protocole entre A et B a donc la forme suivante :
- A tire une clé de session k.
- B envoie sa clé publique à A.
- A chiffre k avec la clé publique de B et envoie le résultat à B.
- B le déchiffre avec sa clé privée.
- A et B communiquent en utilisant un protocole symétrique donc la clé est k.

Le problème de cette méthode est que rien ne garantit à A que c'est bien la clé publique de B qu'il reçoit. Imaginons qu'un pirate se place au milieu de cette communication, s'il envoie sa clé publique à la place de B, il prend sa place dans toute la suite de la communication : ce problème est appelé "man in the middle".

Il faut donc utiliser la signature numérique pour garantir que la clé publique de B est bien celle de B (authentification), et n'a pas été modifiée (intégrité). On se base alors sur des protocoles de signatures (par exemple ceux basés sur RSA ou DSA).

Le mécanisme de signature est le suivant : on souhaite envoyer un message signé. Le message à envoyer est hashé, c'est à dire que l'on va calculer une somme de contrôle du texte. Pour cela, on utilise des algorithmes comme md5 ou sha1 (de préférence), qui garantissent que si le texte change, ne fût-ce que d'un octet, le hashé (ou condensat) changera considérablement. Ensuite le condensat est utilisé avec la clé privée de l'émetteur et la fonction de signature pour générer la signature numérique. Le destinataire récupère le message et cette signature numérique. Il recalcule le condensat et le vérifie avec la signature reçue et la clé publique de l'émetteur. Si la fonction de vérification de la signature valide le condensat, c'est que l'émetteur du message est bien le propriétaire de la clé privée associée à la clé publique utilisée pour la vérification ce qui garantit aussi bien l'identité de l'envoyeur que l'intégrité du message, pour peu que l'on soit sûr d'avoir la clé publique du correspondant.

Car, là encore, rien ne prouve que la clé publique que l'on possède est bien celle du correspondant légitime.

Pour la signature numérique, on pourra consulter la formation en ligne à l'adresse : http://www.formation.ssi.gouv.fr/au.../signature.html

Citation:

Les Certificats
Afin de pallier ce défaut, l'idée est d'utiliser des "objets" garantissant qu'une clé publique présentée appartient bien à son légitime propriétaire. Ce sont les certificats. En première approche, on peut considérer un certificat comme l'association d'une identité et d'une clé publique, le tout signé par la clé privée d'une autorité. Ces certificats pourront être vérifiés par la clé publique de cette autorité qui la diffuse le plus largement possible via un certificat.

Les certificats sont normalisés par la norme X509 qui définit des champs de bases (X509) ainsi que des extensions (X509v3) :
code:
Champs de base : version de la norme X509 utilisée objet (nom distingué du détenteur du certificat et de la clé privée associée) émetteur (nom distingué de l'autorité ayant signé ce certificat) numéro de série du certificat algorithme de signature date de début de validité du certificat date de fin de validité du certificat clé publique signature numérique

Les noms distingués sont en fait des enregistrements contenant de nombreuses informations comme le nom courrant (CN pour Common Name), l'organisation (O), le pays (C pour Country), l'adresse e-mail (E), une description (D)

Ces certificats ont également des extensions, notamment keyUsage et extendedKeyUsage (EKU). Ces deux extensions permettent de préciser le rôle du certificat et de la clé privée associée.
Exemples rôle pour KeyUsage : digitalSignature, keyEncipherment, dataEncipherment, keyCertSign, cRLSign, ...
Exemples de rôle pour extendedKeyUsage : serverAuth, clientAuth, codeSigning, emailProtection, ipsecEndSystem, ...

Ces certificats sont codés au format binaire ASN.1 : c'est le format DER. Les extensions généralement utilisées sont .cer ou .der.
Il existe aussi le format PEM utilisant le codage en base 64 avec des délimiteurs. L'extension généralement utilisée est .pem

Exemple de délimiteurs :
code:
----BEGIN RSA PRIVATE KEY---- ----END RSA PRIVATE KEY---- ----BEGIN CERTIFICATE---- ----END CERTIFICATE---- ----BEGIN CERTIFICATE REQUEST---- ----END CERTIFICATE REQUEST---- -----BEGIN X509 CRL----- -----END X509 CRL-----

Enfin, il existe un autre format, le PKCS#12, qui est un codage binaire incluant un certificat, sa clé privée associée et optionnellement d'autres certificats. Le fichier peut être chiffré à l'aide d'une passphrase. Ce format est utilisé par les IGC pour distribuer les certificats et les clés privées à leurs clients.
L'extension utilisée est .p12 ou .pfx

Citation:

Les Infrastructures à Gestions de Clés (IGC)
Une autorité est donc un organisme qui va donner à ses utilisateurs des certificats qui permettent de les identifier. Ces certificats pourront etre vérifiés par la clé publique de cette autorité qui diffuse le plus largement possible son propre certificat.

À propos de l'autorité, il faut distinguer plusieurs entités, même si dans le cadre du TP, elles sont confondues. Chaque autorité a un rôle précis. L'autorité d'enregistrement est l'entité qui enregistre la demande de certificat. Elle est chargée de vérifier l'identité du demandeur ainsi que la correspondance entre la clé publique présentée et sa clé privée. Ce rôle est donc très important puisque c'est sur ces vérifications que repose la confiance que l'on accorde à l'autorité. L'autorité de certification délivre le certificat en signant la requête présentée par l'autorité d'enregistrement. Il est évident que la clé privée de cette autorité, celle qui signe les certificats, doit être conservée de manière extrêmement sécurisée puisque c'est sur ce secret que repose toute l'infrastructure technique de l'IGC. Enfin, les services de publications mettent les certificats à la disposition des utilisateurs ; ils doivent également publier les listes de révocations contenant une liste de certificats invalidés pour diverses raisons (vol ou perte de clé privée en général). Ces trois services sont en général assumés par la même entité, appelée autorité de confiance. C'est sur la base de cette autorité que l'on construit une IGC.

La création d'une IGC commence par la création du certificat de cette autorité. Pour cela, on commence par générér un biclé et l'identité de l'IGC. Le certificat de l'IGC est ensuite signé avec la clé privée associée à la clé publique contenue dans le certificat. Ce certificat est donc auto-signé.
Ensuite, l'autorité doit diffuser largement et de façon fiable ce certificat notamment en l'intégrant dans les outils qui l'utiliseront.

Une fois que l'autorité est créée, son travail consiste à fournir des certificats à ses clients. Pour cela, on procède en deux temps.
On commence par générer un biclé et une identité pour le client. La clé publique et l'identité sont contenus dans une requête. Cette requête doit être présentée à l'autorité pour être signée.
Dans un deuxième temps, l'autorité signe cette requête (en y ajoutant des extensions). On obtient alors le certificat de l'utilisateur (l'association entre son identité et sa clé publique) signé avec la clé privée de l'autorité. Il ne reste plus qu'à délivrer au client son certificat et la clé privée associé.

Ainsi, lors d'une communication sécurisée, les interlocuteurs n'échangeront pas leur clé publique mais leur certificat. La vérification de ce certificat avec la clé publique du certificat de l'autorité (largement diffusé) garanti la non falsification des certificats. Les utilisateurs devront alors prouver qu'ils possèdent la clé privée associée au certificat présenté.

Citation:

OpenSSL
Openssl est un package logiciel incluant une librairie assez complète de cryptographie, un programme (openssl) qui permet d'utiliser la plupart des fonctionnalités de la librairie et un script (CA) pour automatiser les traitements compliqués. Il est configuré via un fichier nommé openssl.cnf

Voici quelques exemples d'utilisation de cette boîte à outils.
La syntaxe est la suivante : openssl < type de traitement > [ arguments spécifiques ... ]
Le premier argument spécifie le type d'opération que l'on souhaite effectuer (génération d'une clé, hashage d'un document, ...), puis suivent les arguments spécifiques à l'opération demandée. Les pages de manuel sont très bien documentées.
code:
#Génération d'une bi-clé RSA de 1024 bits protégée par 3DES: openssl genrsa -out macle -des3 1024 #Génération d'une requête de certificat au format PEM pour la clé générée : openssl req -new -key macle -outform PEM -out requete.pem #Chiffrement symétrique d'un document en AES 128 avec une clé dérivée d'un mot de passe : openssl enc -aes-128-cbc -in montexte -out textechiffre -salt -e -k MotDePasse #Affichage textuel des données d'un certificat : openssl x509 -in MonCertificat -text


Signaler ce message à un modérateur | IP: Logguée
Temps en ligne : 92 Jours, 20 Heures, 22 Minutes, 21 Secondes en ligne

Old Post 12-05-2005 19:52
Cliquez ici pour voir le profil de soul^keeper Cliquez ici pour lui envoyer un message privé  Trouver plus de messages de soul^keeper Ajouter soul^keeper à votre liste d'amis Editer/Effacer le Message Citer le message dans la réponse
Il est actuellement 01:32 (GMT) Poster un nouveau sujet    Poster une réponse   
  Sujet précédent   Sujet suivant
Forum OXMO > Section Technique > Réseaux / Sécurité > [HOWTO] Cryptographie, Certificats IGC et OpenSSL

Aller au Forum:
Notez ce sujet :


 Réponse Rapide
Titre: (Optionnel)
Message:

Convertir automatiquement les URLs Montrer la Signature
Afficher une version imprimable | Envoyer cette page par email | S'inscrire à ce sujet | Télécharger ce sujet
Règles du forum :
Créer de nouveaux sujets
Répondre aux messages
Attacher des fichiers
Editer vos messages
: not autorisé
: not autorisé
: not autorisé
: not autorisé
Le Code HTML est OFF
Le Code vB est ON
Les Smileys sont ONs
Le code [IMG] est ON
 
< Contactez-nous - Forum OXMO>

Uptime du serveur SQL : 3 jour(s) 1 heure(s) et 8 minute(s)
Page générée en 0.011455 secondes en exécutant 31 requêtes SQL.
Apache - Compression GZIP : Activée.