Vous êtes sur la page 1sur 19

Sécurité informatique

Université Kasdi Merbah Ouargla


Département Mathématique et informatique

Les packages crypto en C/C++ et en Java

Master informatique ASR

Decembre 2017
Master informatique industrielle Sécurité informatique 1
Les packages de cryptographie en C/C++ et en Java
Plan (1)
1. Les librairies crypto en C&C++
– Crypto ++
– Boton
– Polar SSL
– Chilkat C++
– Open SSL
2. L’API de sécurité Java et l’architecture JCA/JCE
– JCA/JCE
– Les principes de conception de JCA/JCE
– L’API JCA/JCE et les providers de service crypto (CSPs)
– Les concepts de l’API de sécurité: les classes de moteurs et les
services crypto
Master informatique industrielle Sécurité informatique 2 2
Les packages de cryptographie en C/C++ et en Java
Plan (2)
– La classe provider
– La méthode getInstance
– Installer et configurer un provider
– Le provider JCE de Bouncy Castle
– L’ordre de préférence des providers
– Capacité de provider

Master informatique industrielle Sécurité informatique 3 3


1- Les librairies crypto en C&C++ (1)
Crypto ++
 Une librairie cryptographique gratuite de classes en
C++ tenue à jour par Wei Dai. Distribuée en code
source (version 5.6.1).
 Crypto++ ou Cryptopp est riche en algorithmes
crypto (symétriques Stream Cipher et Block Cipher,
asymétriques, MAC, fonctions de hachage, schémas
d’échange de clé DH… Et aussi la cryptographie
ECC : ECDSA, ECNR, ECIES, ECDH et ECMQV).
 Voir Crypto++ aux URLs suivantes :
http://www.cryptopp.com/ , et http://weidai.com/. On peut
aussi trouver des benchmarks de Crypto++ à l’URL :
http://www.cryptopp.com/benchmarks.html .
Master informatique industrielle Sécurité informatique 4 4
1- Les librairies crypto en C&C++ (2)
Botan (une librairie identique à Crypto++)
 Botan (OpenCL) est une autre librairie Open Source,
écrite en C++, et ressemble beaucoup à Crypto++
(Botan, a friendly C++ crypto library). Elle est
portable, facile à utiliser et efficace.
 Elle supporte la plupart des algorithmes
asymétriques (RSA, DH, DSA, NR, RW) mais pas
encore ECC. Pour en savoir plus, voir le manuel de
référence de l’API Botan à l’URL :
http://files.randombit.net/botan/api.pdf .

Master informatique industrielle Sécurité informatique 5 5


1- Les librairies crypto en C&C++ (3)
Polar SSL ( 1.1.3)
(PolarSSL library - Crypto and SSL made easy)
 Une librairie légère en C implémentant SSL/TLS. Elle
est Open source mais n’est pas riche en algorithmes
crypto.
 Elle supporte plusieurs architectures matérielles
(ARM, PowerPC, MIPS et MOTOROLA) et plusieurs
plateformes (UNIX, Windows Visual C++).
 Voir et télécharger Polar SSL à l’URL :
http://polarssl.org/
Master informatique industrielle Sécurité informatique 6 6
1- Les librairies crypto en C&C++ (4)
Chilkat C++
(Chilkat Encryption C / C++ Library)
 Une librairie crypto d’usage commercial en C++.
Disponible aussi dans plusieurs plateformes :
JavaScript, RUBY, PYTON, PERL. Riche en
algorithmes crypto.
 Elle implémente aussi les protocoles de sécurité
Internet comme S/MIME et HTTPS.
 Voir Chilkat à l’URL :
http://www.chilkatsoft.com/crypt-library.asp
Master informatique industrielle Sécurité informatique 7 7
1- Les librairies crypto en C&C++ (5)
OpenSSL (Cryptogaphie and SSL/TLS Toolkit)
 Un projet open source écrit en C avec une License libre
style Apache.
 Supporte le protocole SSL/TLS
 Un outil de commande en ligne openssl
 Un outil pour Benchmarking (openssl speed) : nombre
d’octets/s et temps nécessaire pour des cycles de
signatures&vérification.
 crypto : une librairie cryptographique supportant différents
types d’algorithmes (symétrique, à clé publique, des macs
et des fonctions de hachage, les certificats X.509, encodage
de données). Des algorithmes ECC ajoutés à partir de la
version 0.9.8 d’OpenSSL.
• Voir OpenSSL à l’URL :
http://www.openssl.org/docs/ssl/ssl.html
Master informatique industrielle Sécurité informatique 8 8
2- L’API de sécurité Java et l’architecture JCA/JCE (1)
 Le langage Java est sécurisé (des méthodes d’accès utilisées
pour accéder aux classes, méthodes et variables Java :
private, protected, public, static, package).
 Le code compilé Java est en byte-code s’exécutant sur une
JVM indépendante des plateformes matériel et O.S.
 Le vérificateur de byte-code vérifie le programme avant son
exécution par le JRE.
 L’API de sécurité Java s’appuie sur le package java.security :

Master informatique industrielle Sécurité informatique 9 9


2- L’API de sécurité Java et l’architecture JCA/JCE (2)
 JCA : des fonctionnalités de signatures numériques et
empreintes de message. JCA est construit sur le
package java.security (implémente des algorithmes de
signatures numériques DSA et empreintes de message
SHA1 et MD5). Le provider JCA de Sun est SUN
Provider.
 JCE : étend la JCA pour inclure des APIs pour le
chiffrement symétrique et asymétrique, l’échange de
clé et le calcul de Macs. L’API JCE s’appuie sur le
package javax.crypto. Le provider JCE de SUN est
SunJCE Provider.

Master informatique industrielle Sécurité informatique 10 10


2- L’API de sécurité Java et l’architecture JCA/JCE (3)
Les principes de conception des providers JCA/JCE :
 Indépendance de l’implémentation et interopérabilité des
providers.
 Indépendance des algorithmes et leur extensibilité (des
nouveaux providers de services et / ou des nouveaux
algorithmes peuvent être ajoutés).
 Architecture modulaire : utiliser les services crypto sans connaitre les
détails de l’implémentation, utiliser les services crypto de différents
providers.
 L’indépendance des algorithmes : définition des classes de services
crypto (moteurs de classes). Le CSP (Cryptography Service Provider)
implémente un ou plusieurs services crypto par exemple :
– un service particulier : une signature numérique,
– un type de signature : une signature DSA.
– La méthode de production getInstance() permet d’obtenir une
implémentation d’un service de signature type DSA d’un des
providers installés comme suit : Signature.getInstance(‘DSA’).
Master informatique industrielle Sécurité informatique 11 11
2- L’API de sécurité Java et l’architecture JCA/JCE (4)
L’API JCA/JCE et les providers de service crypto

Master informatique industrielle Sécurité informatique 12 12


2- L’API de sécurité Java et l’architecture JCA/JCE (5)
Les concepts de l’API de sécurité: les classes de moteurs et les
services crypto
 Classes de moteurs et algorithmes : une classe de moteur définit
un service crypto d’une manière abstraite sans aucune
implémentation concrète. Un service crypto est associé à un
algorithme tel que :
– Une signature numérique, une empreinte de message, un chiffre, un
mac (Signature, MessageDigest, Cipher, Mac, KeyAgreement)…
– Générer des clés et des paramètres pour les algorithmes crypto
(KeyFactory, KeyGenerator, KeyPairGenerator…).
– Générer des certificats enveloppant les clés utilisées dans les opérations
cryptographiques (X509Store,CertStore,)…
 Exemple : la classe Signature permet l’accès à un algorithme de
signature numérique DSA, la classe FactoryDSA pour fournir une
paire de clés DSA (privée et publique) d’un objet de signature DSA,
ces clés seront utilisées par les méthodes initSign() et initVerify()
de l’algorithme DSA.

Master informatique industrielle Sécurité informatique 13 13


2- L’API de sécurité Java et l’architecture JCA/JCE (5)
 Pour chaque classe, une sous classe SPI abstraite est
fournie, elle définit les méthodes que le CSP doit
implémenter pour fournir l’implémentation de service.
 Le provider crée une s/classe de la classe SPI
correspondante au service et fournit l’implémentation
de toutes les méthodes de la classe abstraite.
 Par exemple : la classe Signature, sa classe SPI est
SignatureSPI, une s/classe SignatureSPI spécifie le type
de l’algorithme de signature tel que : SHA1withRSA,
SHA1withDSA ou MD5withRSA.
 A partir de J2SE 5, des classes pour le support de la
cryptographie ECC ont été ajoutées par l’API JCE. Des
providers JCE peuvent fournir des services crypto basés
ECC.
Master informatique industrielle Sécurité informatique 14 14
2-L’API de sécurité Java et l’architecture JCA/JCE (6)
 La classe Provider : c’est l’interface des CSPs. Elle a
des méthodes statiques pour accéder aux
informations de provider (nom, numéro de version
et autres informations).
 Utiliser une implémentation d’un provider :
instancier une classe de moteur implémentant un
algorithme particulier :
Signature signature =
Signature.getInstance("SHA1withRSA", "BC").
 La méthode getInstance ramène une
implémentation qui satisfait l’algorithme spécifié
fourni par le provider BC.
Master informatique industrielle Sécurité informatique 15 15
2- L’API de sécurité Java et l’architecture JCA/JCE (7)
Installer et configurer des providers
 Installer les classes de provider : il ya deux façons :
– Placer le chemin du fichier ZIP ou JAR des classes du provider dans
CLASSPATH (variable d’environnement définissant le chemin des
packages utilisés)
– Déployer le fichier JAR des classes du provider comme une
extension de Java (un package optionnel dans le répertoire
jre/lib/ext de l’installation Java)
 Configurer le provider :
– Enregistrement statique : ajouter le provider à la liste des
providers existants (préféré) (dans le fichier java.security du
répertoire jre/lib/security : security.provider.n= masterClassName ou n
est l’ordre de préférence du provider)
– Enregistrement dynamique : l’application client appelle des
méthodes comme : Security.addProvider, ou
Security.insertProviderAt (non recommandée). La classe Security a
des méthodes pour ajouter ou supprimer un provider durant
l’exécution du programme.
Master informatique industrielle Sécurité informatique 16 16
2- L’API de sécurité Java et l’architecture JCA/JCE (8)
Le provider JCE de Bouncy Castle
 une implémentation d’algorithmes crypto pour Java. Le package
BC est conforme au Framework JCE. Pour les Applets et les Midlets
ne pouvant pas accéder aux librairies JCE, il y a une API légère
(lightweight) appropriée à l’environnement mobile de J2ME/MIDP.
Le provider BC et son API légère sont open source, riches en
algorithmes crypto et supportent la cryptographie ECC.
 Installer et activer le provider BC :
– Installer le fichier JAR du provider (le déployer comme une extension
Java). Télécharger les fichiers JAR du site de BC et les copier dans
Jre/Lib/ext.
– Activer le provider BC : l’ajouter dans le fichier java.security :
security.provider.n=org.bouncycastle.jce.provider.BouncyCastleProvide
r (n est le n° de préférence du provider)
– On peut afficher les providers installés avec les méthodes de la classe
Security : getProvider(), getName() et getVersion().
– Le package de Bouncy Castle peut être téléchargé à l’URL:
http://www.bouncycastle.org/latest_releases.html
Master informatique industrielle Sécurité informatique 17 17
2-L’API de sécurité Java et l’architecture JCA/JCE (9)
L’ordre de préférence des providers
 chaque provider installé a un n° (un ordre de préférence).
L’ordre de préférence (priorité) est basé 1 : 1 est le plus préféré,
suivi de 2 et ainsi de suite :
Cipher.getInstance(‘Blowfish/ECB/NoPadding’): aucun provider
n’est spécifié. Dans ce cas, le JRE ramène le 1er provider dans la
liste des providers du fichier java.security qui peut satisfaire
l’algorithme crypto demandé.
Cipher.getInstance(‘Blowfish/ECB/NoPadding’,’BC’) : le
provider BC est spécifié.
 En utilisant un programme de test de précédence, on peut avoir
les providers satisfaisant l’algorithme
‘Blowfish/ECB/NoPadding’ : SunJCE version 1.6, BC version
1.45.
Master informatique industrielle Sécurité informatique 18 18
2-L’API de sécurité Java et l’architecture JCA/JCE (10)
Capacité de provider
 On peut aussi interroger les providers existants pour avoir
les services crypto fournis par chaque provider. BC est le
seul provider qui fournit le plus grand nombre
d’algorithmes et de services cryptographiques.
 La méthode getInstance pour produire un objet JCA/JCE de
BC (Cipher, MessageDigest, MAC, Signature,
keyAgreement,…).
Exemple : MessageDigest.getInstance(‘SHA-1’, ‘BC’).
 NB: pour avoir ces concepts en pratique, réétudier le code
source des pgms java livrés dans TP4_BC_Java et aussi
TP_RSA_Java.
Master informatique industrielle Sécurité informatique 19 19

Vous aimerez peut-être aussi