Vous êtes sur la page 1sur 59

Java Cryptography Extension

Didier DONSEZ
Universit Joseph Fourier
IMA IMAG/LSR/ADELE
'LGLHU'RQVH]#LPDJIU



Motivation
Fournit une API standard
pour lusage de fonctions cryptographique
Chiffrage, signature,

Plusieurs Cryptography Service Providers (CSP)


cohabitent (priorit du choix)

'LGLHU'RQVH]-&(

SPI : Interface pour implanter un provider


SUN fournit un Provider de rfrence
Conu pour tre export en dehors des USA



Principes
Indpendance
Introprabilit
Extensibilit
Nouveaux algorithmes (AES par exemple)

Architecture
Providers & Key Management

'LGLHU'RQVH]-&(

Concepts
Slection dimplmentations chez les Providers
fabriques pour lobtention des instances
XXX.getInstance(algo)
// le premier qui offre l implantation dans la liste des providers

XXX.getInstance(algo,provider)



Architecture du JCE
$SS

Cipher.getInstance("DES");
Cipher.getInstance("DES","ABA");
Cipher.getInstance("Cesar");

$SS

$SS

$3,

'LGLHU'RQVH]-&(

63,

-&(&LSKHU6HFXUH5DQGRP
.H\$JUHHPHQW.H\*HQHUDWRU.H\)DFWRU\
0HVVDJH'LJHVW0$&6LJQDWXUH
&63
6XQ-&(

&63
$%$

&63
&U\SWL[

56$

56$

56$

'(6

'(6

5LQGMDHO

,'($

+++++ Priorit -------

2.
2.
.2



Architecture du JCE
$SS

Cipher.getInstance("DES");
Cipher.getInstance("DES","ABA");
Cipher.getInstance("Cesar");

$SS

$SS

$3,

'LGLHU'RQVH]-&(

63,

-&(&LSKHU6HFXUH5DQGRP
.H\$JUHHPHQW.H\*HQHUDWRU.H\)DFWRU\
0HVVDJH'LJHVW0$&6LJQDWXUH
&63
6XQ-&(

&63
$%$

&63
&U\SWL[

56$

56$

56$

'(6

'(6

,'($

5LQGMDHO

&63
0RQ-&(
&HVDU

2.
2.
2.



Installation
Chargez et dcompressez le JCE de Sun
et dautres providers (ABA, )
Ajoutez les JAR

'LGLHU'RQVH]-&(

comme des extensions du JDK


ou au $CLASSPATH

Positionnez les permissions pour le JCE


$GGWR<jre home>\lib\security\java.policy WKHIROORZLQJ
grant codeBase "file:/work/sunjce_provider.jar" {
permission java.io.FilePermission
"/jdk1.2.2/jre/lib/ext/jce1_2_1.jar", "read";
permission java.lang.RuntimePermission
"getProtectionDomain";
permission java.security.SecurityPermission
"putProviderProperty.SunJCE";
};



Installation
Enregistrez les providers (selon leurs priorits)
Statiquement
Fichier -$9$B+20(MUHOLEVHFXULW\MDYDVHFXULW\
security.provider.1=com.sun.crypto.provider.SunJCE
security.provider.2=au.net.aba.crypto.provider.ABAProvider
security.provider.3=cryptix.jce.provider.CryptixCrypto
security.provider.4=

'LGLHU'RQVH]-&(

A lexcution

MDYDVHFXULW\6HFXULW\DGG3URYLGHU QHZFRPVXQFU\SWRSURYLGHU6XQ-&( 
MDYDVHFXULW\6HFXULW\DGG3URYLGHU QHZDXQHWDEDFU\SWRSURYLGHU$%$3URYLGHU 



Les classes et interfaces de lAPI


Les packages

java.security
java.security.cert
javax.crypto
javax.crypto.interfaces
javax.crypto.spec

Provider
Security
Cipher
SecureRandom
Key
KeyPair
KeyPairGenerator MessageDigest
MAC
Signature
KeyStore
Certificate (java.security.cert.Certificate)
CipherSpi

'LGLHU'RQVH]-&(

Les classes et interfaces



SecureRandom
Gnrateur de nombres alatoires

Motivation

strong pseudo-random number generator (PRNG)


pour la gnration de cls, dans les challenges,

Obtenir/construire une instance dun gnrateur


VWDWLF6HFXUH5DQGRPJHW,QVWDQFH 6WULQJ DOJRULWKP
VWDWLF6HFXUH5DQGRPJHW,QVWDQFH 6WULQJ DOJRULWKP6WULQJ SURYLGHU
algorithm = SHA1PRNG,

Gnrer la graine (seed)

E\WH>@ JHQHUDWH6HHG LQWQXP%\WHV QRPEUHGRFWHWVGHODJUDLQH

'LGLHU'RQVH]-&(

Initialiser et rinitialiser la graine du gnrateur

E\WH>@ JHQHUDWH6HHG LQWQXP%\WHV QRPEUHGRFWHWVGHODJUDLQH


VWDWLF E\WH>@JHW6HHG LQWQXP%\WHV 
YRLGVHW6HHG E\WH>@ VHHG DYHF VHHGVL]HRFWHWVGH VHHG
YRLGVHW6HHG ORQJ VHHG DYHFOHVRFWHWVGXORQJ

Gnrer un nombre pseudo-alatoire

LQWQH[W LQWQXP%LWV JpQpUp QXP%LWV ELWVGHSRLGVIDLEOHDOpDWRLUH

HWQXP%LWV ELWVGHSRLGVIRUWj

YRLGQH[W%\WHV E\WH>@E\WHV



Remarque sur la gnration des


nombres alatoires (PRNG)

Motivation

la gnration de cls
Ala de session

Risque

attaque brute de la recherche du nombre gnr partir d hypothse sur la


graine

Importance de la graine

Horloge de la machine n est pas suffisante


Doit tre complte par

'LGLHU'RQVH]-&(

Memory Statistics, Process Statistics,


Mouse Movement, Keystroke Timing,

Voir

KWWSZZZUVDVHFXULW\FRPVROXWLRQVGHYHORSHUVZKLWHSDSHUV$UWLFOH351*SGI
IWSIWSUVDVHFXULW\FRPSXESGIVEXOOSGI

10



11

Gnration des cls


Publique/prive
java.security.KeyPairGenerator
Cre une (ou des) cls partir d un objet existant ()

java.security.KeyFactory
Convertit (et verifie) une (ou des) cls partir d un objet existant ()
Exemple

'LGLHU'RQVH]-&(

X509EncodedKeySpec bobPubKeySpec
= new X509EncodedKeySpec(bobEncodedPubKey);
KeyFactory keyFactory = KeyFactory.getInstance("DSA");
PublicKey bobPubKey = keyFactory.generatePublic(bobPubKeySpec);
Signature sig = Signature.getInstance("DSA");
sig.initVerify(bobPubKey); sig.update(data); sig.verify(signature);

Secrte
javax.crypto.SecretKeyFactory
Convertit (et verifie) une (ou des) cls partir d un objet existant ()

Commun
javax.crypto.KeyGenerator



12

Gnrateur de cls prives/publiques


Interface java.security.Key

PrivateKey, PublicKey
DSAPrivateKey, DSAPublicKey,RSAPrivateCrtKey, RSAPrivateKey, RSAPublicKey
Mthodes : String getAlgorithm(), byte[] getEncoded(), String getFormat()
Obtenir/counstruire une instance dun gnrateur .H\3DLU*HQHUDWRU

VWDWLF.H\3DLU*HQHUDWRUJHW,QVWDQFH 6WULQJ DOJRULWKP


VWDWLF.H\3DLU*HQHUDWRUJHW,QVWDQFH 6WULQJ DOJRULWKP6WULQJ SURYLGHU
algorithm=,

Initialiser le gnrateur

'LGLHU'RQVH]-&(

YRLGLQLWLDOL]H $OJRULWKP3DUDPHWHU6SHFSDUDPV
YRLGLQLWLDOL]H $OJRULWKP3DUDPHWHU6SHFSDUDPV 6HFXUH5DQGRPUDQGRP
YRLGLQLWLDOL]H LQWNH\VL]H
YRLGLQLWLDOL]H LQWNH\VL]H 6HFXUH5DQGRPUDQGRP

 ,QLWLDOL]HVWKHNH\ SDLU JHQHUDWRU IRUDFHUWDLQNH\VL]H


 ZLWKWKHJLYHQ VRXUFHRIUDQGRPQHVV DQG D GHIDXOWSDUDPHWHU VHW 

Gnrer une paire de cls .H\3DLU

.H\3DLUJHQ.H\3DLU

3ULYDWH.H\JHW3ULYDWH
3XEOLF.H\JHW3XEOLF 

Rcuprer les cls de .H\3DLU



Gnration des cls prives/publiques


5DQGRPQXPEHU
6HFXUH5DQGRP UDQGRP 6HFXUH5DQGRPJHW,QVWDQFH 6+$351*681 

'LGLHU'RQVH]-&(

'LJLWDO6LJQDWXUH$OJRULWKP
.H\3DLU*HQHUDWRU NH\*HQ .H\3DLU*HQHUDWRUJHW,QVWDQFH '6$681 
LQWELWVL]H 
NH\*HQLQLWLDOL]H ELWVL]HUDQGRP 
.H\SDLU
.H\3DLU SDLU NH\*HQJHQHUDWH.H\3DLU 
3ULYDWH.H\SULY SDLUJHW3ULYDWH 
3XEOLF.H\ SXE SDLUJHW3XEOLF 

13



Convertion des cls prives/publiques


.H\)DFWRU\ IDFW .H\)DFWRU\JHW,QVWDQFH 56$$%$ 

'LGLHU'RQVH]-&(

IDEULTXHU ODFOpSULYpH
$VFLL(QFRGHG.H\6SHFSULY.H\6SHF QHZ$VFLL(QFRGHG.H\6SHF DUJV>@ 
3ULY.H\NH\3ULY IDFWJHQHUDWH3ULYDWH SULY.H\6SHF 
FKLIIUHU DYHFODFOpSULYpH
&LSKHUHQF &LSKHUJHW,QVWDQFH 56$(&%3.&63DGGLQJ$%$ 
HQFLQLW &LSKHU(1&5<37B02'(NH\3ULYUDQG 
IDEULTXHU ODFOpSXEOLTXH
$VFLL(QFRGHG.H\6SHFSXE.H\6SHF QHZ$VFLL(QFRGHG.H\6SHF DUJV>@ 
3XEOLF.H\NH\3XE IDFWJHQHUDWH3XEOLF SXE.H\6SHF 
GpFKLIIUHU DYHFODFOpSXEOLTXH
&LSKHUGHF &LSKHUJHW,QVWDQFH 56$(&%3.&63DGGLQJ$%$ 
GHFLQLW &LSKHU'(&5<37B02'(NH\3XE 

14



15

Cipher (1/2)
Fonction

De chiffrage/dchiffrage cl symtrique (SKC) ou asymtrique (DSK)

Obtenir une instance

VWDWLF&LSKHUJHW,QVWDQFH 6WULQJ DOJRULWKP


VWDWLF&LSKHUJHW,QVWDQFH 6WULQJ DOJRULWKP6WULQJ SURYLGHU
algorithmspcifie l algorithme / le mode / le padding (compltion)
Ex: "DES/CBC/PKCS5Padding", "DES/CFB8/NoPadding", "DES/OFB32/PKCS5Padding",
"RSA/ECB/PKCS1Padding"

'LGLHU'RQVH]-&(

Initialiser avec lopration (ENCRYPT_MODE | DECRYPT_MODE) et la cl

YRLGLQLW LQWRSPRGH.H\NH\
YRLGLQLW LQWRSPRGH.H\NH\$OJRULWKP3DUDPHWHUVSDUDPV
YRLGLQLW LQWRSPRGH.H\NH\$OJRULWKP3DUDPHWHU6SHFSDUDPV
YRLGLQLW LQWRSPRGH.H\NH\$OJRULWKP3DUDPHWHU6SHFSDUDPV 6HFXUH5DQGRPUDQGRP
YRLGLQLW LQWRSPRGH.H\NH\$OJRULWKP3DUDPHWHUVSDUDPV6HFXUH5DQGRPUDQGRP
YRLGLQLW LQWRSPRGH.H\NH\6HFXUH5DQGRPUDQGRP



16

Cipher (2/2)
Chiffrer/dchiffer lentre

E\WH>@XSGDWH E\WH>@LQSXW 
E\WH>@XSGDWH E\WH>@LQSXW LQWLQSXW2IIVHW LQWLQSXW/HQ 
LQWXSGDWH E\WH>@LQSXW LQWLQSXW2IIVHW LQWLQSXW/HQE\WH>@RXWSXW 
LQWXSGDWH E\WH>@LQSXW LQWLQSXW2IIVHW LQWLQSXW/HQE\WH>@RXWSXW LQWRXWSXW2IIVHW 

Finaliser

'LGLHU'RQVH]-&(

(car il reste des donnes qui n ont pas t chiffres dans l instance)
E\WH>@ GR)LQDO
E\WH>@ GR)LQDO E\WH>@LQSXW
LQWGR)LQDO E\WH>@RXWSXW LQWRXWSXW2IIVHW
E\WH>@ GR)LQDO E\WH>@LQSXW LQWLQSXW2IIVHW LQWLQSXW/HQ
LQWGR)LQDO E\WH>@LQSXW LQWLQSXW2IIVHW LQWLQSXW/HQE\WH>@RXWSXW
LQWGR)LQDO E\WH>@LQSXW LQWLQSXW2IIVHW LQWLQSXW/HQE\WH>@RXWSXW LQWRXWSXW2IIVHW

Extra

6WULQJJHW$OJRULWKP 3URYLGHUJHW3URYLGHU $OJRULWKP3DUDPHWHUVJHW3DUDPHWHUV 


,QW JHW%ORFN6L]H  5HWXUQVWKH EORFNVL]H LQE\WHV 
LQWJHW2XWSXW6L]H LQWLQSXW/HQ

5HWXUQVWKHOHQJWK LQE\WHV WKDW DQRXWSXWEXIIHUZRXOGQHHG WR EH LQRUGHU


WRKROGWKHUHVXOW RI WKHQH[WXSGDWH RU GR)LQDORSHUDWLRQ JLYHQWKH LQSXW OHQJWKLQSXW/HQ LQE\WHV 



javax.crypto.CipherInputStream
javax.crypto.CipherOutputStream

Motivation
Appliquer une fonction de chiffrage/dchiffrage
sur un InputStreamou un OutputStream
tendent java.io.FilterInputStream et java.io.FilterOutputStream

Constructeur
CipherInputStream(java.io.InputStream is, Cipher ciph)
CipherOutputStream(java.io.OutputStream is, Cipher ciph)
'LGLHU'RQVH]-&(

ciph doit tre compltement initialis

17



18

Exemples
SecretKey

Data

Cipher

(ENCRYPT_MODE)

Encrypted
Data

Cipher

Data

(DECRYPT_MODE)

'LGLHU'RQVH]-&(

SXEOLFYRLGHQFU\SW ,QSXW6WUHDP LV


SXEOLFYRLGGHFU\SW ,QSXW6WUHDP LV
2XWSXW6WUHDPRV6WULQJDOJR6HFUHW.H\VHF.H\ 
2XWSXW6WUHDPRV6WULQJDOJR6HFUHW.H\VHF.H\ 
WKURZV([FHSWLRQ^
WKURZV([FHSWLRQ^
&LSKHUF FLSKHUJHW,QVWDQFH DOJR 
&LSKHUF FLSKHUJHW,QVWDQFH DOJR 
FLQLW &LSKHU(1&5<37B02'(VHF.H\ 
FLQLW &LSKHU'(&5<37B02'(VHF.H\ 
&LSKHU,QSXW6WUHDPFLV
&LSKHU,QSXW6WUHDPFLV
QHZ&LSKHU,QSXW6WUHDP LVF 
QHZ&LSKHU,QSXW6WUHDP LVF 
LQW LZKLOH  L FLVUHDG !  ^
LQW LZKLOH  L FLVUHDG !  ^
RVZULWH L 
RVZULWH L 
``
``



19

Password Based Encryption (PBE)


Chiffrage/Dchiffrer partir dun mot de passe
Les mots de passe ne sont pas des cls sures

Ide
Appliquer une fonction de hachage scuris (MD5,SHA1, ) sur le mot de
passe pour fabriquer une cl secrte

Standard

Password

PBEWithMD5AndDES (PKCS#5)
MessageDigest
PBEWithSHA1And128BitRC4 (PKCS#12)

'LGLHU'RQVH]-&(

SecretKey

Data

Cipher

(ENCRYPT_MODE)

Encrypted
Data

Cipher

(DECRYPT_MODE)

Data



PBE Cration du chiffreur/Dchiffreur

'LGLHU'RQVH]-&(

6WULQJPRGH DUJY>@
6WULQJSDVVZRUG DUJY>@
E\WH>@VDOW ^
E\WH [F E\WH [ E\WH [ E\WH [F
E\WH [H E\WH [F E\WH [HH E\WH [
`
LQW FRXQW 
3%(3DUDPHWHU6SHFSDUDP6SHF QHZ3%(3DUDPHWHU6SHF VDOWFRXQW 
3%(.H\6SHFNH\6SHF QHZ3%(.H\6SHF SDVVZRUGWR&KDU$UUD\ 
6HFUHW.H\)DFWRU\NI 6HFUHW.H\)DFWRU\JHW,QVWDQFH 3%(:LWK0'$QG'(6 
6HFUHW.H\SDVVZRUG.H\ NIJHQHUDWH6HFUHW NH\6SHF 
&LSKHUF &LSKHUJHW,QVWDQFH 3%(:LWK0'$QG'(6 
LI PRGHHTXDOV HQFU\SW ^
FLQLW &LSKHU(1&5<37B02'(SDVVZRUG.H\SDUDP6SHF 

`HOVHLI PRGHHTXDOV GHFU\SW ^
FLQLW &LSKHU'(&5<37B02'(SDVVZRUG.H\SDUDP6SHF 

`HOVH^

20



21

MessageDigest (Hachage Scuris)


Fonction

produire un rsum avec une fonction de hachage scuris

Obtenir une instance


static MessageDigest getInstance(String algorithm)
static MessageDigest getInstance(String algorithm, String provider)
algorithm=SHA0, SHA1, MD5,

Alimenter le calcul

'LGLHU'RQVH]-&(

void update(byte input)


void update(byte[] input)
void update(byte[] input, int offset, int len)
void reset() // remise zro du calcul

Produire le rsum
public byte[] digest()
public byte[] digest(byte[] input)

Voir aussi
java.security.DigestInputStream, java.security.DigestOutputStream



Hachage scuris
des donnes dun fichier

2EWDLQDPHVVDJHGLJHVWREMHFW
0HVVDJH'LJHVWPG 0HVVDJH'LJHVWJHW,QVWDQFH 0' 

'LGLHU'RQVH]-&(

&DOFXODWHWKHGLJHVWIRUWKHJLYHQILOH
)LOH,QSXW6WUHDPILV QHZ)LOH,QSXW6WUHDP DUJV>@ 
%XIIHUHG,QSXW6WUHDPEXILQ QHZ%XIIHUHG,QSXW6WUHDP ILV 
E\WH>@EXIIHU QHZE\WH>@



LQW OHQJWK
ZKLOH OHQJWK EXILQUHDG EXIIHU   ^
PGXSGDWH EXIIHUOHQJWK 
`
EXILQFORVH 
E\WH>@UDZ PGGLJHVW 

22



MAC 0HVVDJH$XWKHQWLFDWLRQ &RGH

Fonction

produire un rsum avec une fonction de hachage scuris avec une cl

Obtenir une instance

VWDWLF0$&JHW,QVWDQFH 6WULQJ DOJRULWKP


VWDWLF0$&JHW,QVWDQFH 6WULQJ DOJRULWKP6WULQJ SURYLGHU

algorithm=DESMac,

Initialiser avec une cl

YRLGLQLW .H\ NH\


YRLGLQLW .H\ NH\ $OJRULWKP3DUDPHWHU6SHFSDUDPV

'LGLHU'RQVH]-&(

Alimenter

YRLGXSGDWH E\WHLQSXW 
YRLGXSGDWH E\WH>@LQSXW 
YRLGXSGDWH E\WH>@LQSXW LQW RIIVHW LQWOHQ
YRLG UHVHW  UHPLVHj]pURGXFDOFXOHWGHODFOp RQGRLWUpLQLWLDOLVHUDYHFXQHFOp

Gnrer le MAC

E\WH>@ GR)LQDO
YRLGGR)LQDO E\WH>@RXWSXW LQWRXW2IIVHW
E\WH>@ GR)LQDO E\WH>@LQSXW 

23



24

Signature
Fonction

Produire (vrifier) une signature partir d une cl prive (publique)

Obtenir une instance

VWDWLF6LJQDWXUHJHW,QVWDQFH 6WULQJ DOJRULWKP


VWDWLF6LJQDWXUH JHW,QVWDQFH 6WULQJ DOJRULWKP6WULQJ SURYLGHU

algorithm= SHA1withDSA, MD2withRSA, MD5withRSA, SHA1withRSA, .

Initialiser avec une cl prive pour la signature

YRLGLQLW6LJQ 3ULYDWH.H\SULYDWH.H\

Initialiser avec une cl publique pour la vrification

YRLGLQLW9HULI\ 3XEOLF.H\SXEOLF.H\

'LGLHU'RQVH]-&(

Alimenter pour la signature et la vrification

YRLGXSGDWH E\WHLQSXW 
YRLGXSGDWH E\WH>@LQSXW 
YRLGXSGDWH E\WH>@LQSXW LQW RIIVHW LQWOHQ
YRLG UHVHW  UHPLVHj]pURGXFDOFXO

E\WH>@ VLJQ

ERROHDQYHULI\ E\WH>@VLJQDWXUH7R9HULI\

Gnrer la signature VLLQLW6LJQ SULY


Vrifier la signature VLLQLW9HULI\ SXE



'LGLHU'RQVH]-&(

Signature Signer des donnes


*HWWKHSULYDWHNH\
3ULYDWH.H\SULY SDLUJHW3ULYDWH 
*HWUHDG\WRVLJQ
6LJQDWXUHGVD 6LJQDWXUHJHW,QVWDQFH 6+$ZLWK'6$681 
JLYHLW\RXUSULYDWHNH\
GVDLQLW6LJQ SULY 
JLYHWKHDOJ WKHGDWD
%XIIHUHG,QSXW6WUHDPEXILQ QHZ%XIIHUHG,QSXW6WUHDP QHZ)LOH,QSXW6WUHDP DUJV>@ 
E\WH>@EXIIHU QHZE\WH>@
LQWOHQ
ZKLOH EXILQDYDLODEOH   ^
OHQ EXILQUHDG EXIIHU 
GVDXSGDWH EXIIHUOHQ 
`
EXILQFORVH 
JHQHUDWHWKHVLJQDWXUH
E\WH>@UHDO6LJ GVDVLJQ 

25



'LGLHU'RQVH]-&(

Signature - Vrifier des donnes


*HWWKHVLJQDWXUHWRYHULI\
E\WHWR%H9HULI\6LJ 
*HWWKHSXEOLFNH\
3XEOLF.H\ SXE SDLUJHW3XEOLF 
*HWUHDG\WRVLJQ
6LJQDWXUHGVD 6LJQDWXUHJHW,QVWDQFH 6+$ZLWK'6$681 
JLYHLW\RXUSXEOLFNH\
GVDLQLW9HULI\ SXE 
JLYHWKHDOJ WKHGDWD
%XIIHUHG,QSXW6WUHDPEXILQ QHZ%XIIHUHG,QSXW6WUHDP
QHZ)LOH,QSXW6WUHDP DUJV>@ 
E\WH>@EXIIHU QHZE\WH>@LQWOHQ
ZKLOH EXILQDYDLODEOH   ^
OHQ EXILQUHDG EXIIHU 
GVDXSGDWH EXIIHUOHQ 
`
EXILQFORVH 
YHULI\WKHVLJQDWXUH
LI GVDYHULI\ WR%H9HULI\6LJ WUXH ^6\VWHPRXWSULQWOQ 6LJQDWXUHLVFRUUHFW `
HOVH
^6\VWHPRXWSULQWOQ 6LJQDWXUHLV127FRUUHFW `

26



27

Certificat
Motivation
Associer une identit (subject) avec sa cl publique
et certifier le tout par une autorit de certification (CA)
Support de stockage et du diffusion de la cl publique

Notions

'LGLHU'RQVH]-&(

PKI : Public Key Infrastructure

9RLUFRXUV3.,

Identity (Unix UID, X.500 Distinguished Name).


Entity (person, organization, program, computer, business, bank, )
Issuer (celui qui a mis le certificat : ie le CA)
CRL (Certificate Revocation List)

Classes
java.security.cert.CertificateFactory
java.security.cert.Certificat, java.security.cert.X509Certificat
java.security.cert.CRL, java.security.cert.X509CRL



28

CertificatFactory
Rcuprer une instance
static CertificateFactory getInstance(String type)
static CertificateFactory getInstance(String type, String provider)
type=X509

Gnrer le ou les Certificate(s)

'LGLHU'RQVH]-&(

prsents dans le inStream


Certificate generateCertificate(InputStream inStream)
Collection generateCertificates(InputStream inStream)

Gnrer le ou les CRL


prsents dans le inStream
CRL generateCRL(InputStream inStream)
Collection generateCRLs(InputStream inStream)



29

Certificate et X509Certificate
Consulter un Certificat

PublicKey getPublicKey() // rcupre la cl public (pour vrifier une signature)


byte[] getEncoded() // retourne lencodage ASN.1 DER

'LGLHU'RQVH]-&(

Consulter un Certificat X509

Principal getSubjectDN()
void checkValidity()
void checkValidity(Date date) // pour la priode donne.
Date getNotAfter() // date de fin la priode de validit
Date getNotBefore() // date de fin la priode de validit
Principal getIssuerDN() // DN de lmtteur (CA)
BigInteger getSerialNumber()
String getSigAlgName() // algorithme de signature
byte[] getSigAlgParams() // paramtre de lalgorithme
byte[] getSignature()

Vrifier un Certificate

Lve une exception CertificateException, SignatureException,


void verify(PublicKey key) throws CertificateException, SignatureException,
void verify(PublicKey key, String sigProvider) throws CertificateException,



30

CRL et X509CRLEntry
Motivation
Liste de rvocation des certificats
Cl corrompue, employ licenci,

Tester la rvocation dun Certificate dans une CRL


boolean isRevoked(Certificate cert)

Parcourir les entres dune CRL


X509CRLEntry getRevokedCertificate(BigInteger serialNumber) .
Set getRevokedCertificates()
'LGLHU'RQVH]-&(

Dtail dune X509CRLEntry

byte[] getEncoded() // retourne lencodage ASN.1 DER.


Date getRevocationDate()
BigInteger getSerialNumber()
boolean hasExtensions()



31

Stockage des paires de cls


Motivation
Stockage scuris de cls publiques, prives et certificats
dans un fichier (keystore)
L accs au fichier est protg par une cl (storepass)

Consultation/Modification
classe java.security.KeyStore
Outil keytool du JDK

Concepts

'LGLHU'RQVH]-&(

Reprsente la structure de stockage des entres (cls et certificats)


Key Entry
secret key, private key + rfrence vers le certificat.

Trusted Certificate Entry


Certificat appartenant une entity dans laquelle le keystore fait confiance

Chaque entre est dsigne par un alias



32

KeyStore
Protection
Le keystore est protg par un mot de passe
Chaque entre peut tre protge par un deuxime niveau de mot de passe

Obtenir une instance

VWDWLF.H\6WRUHJHW,QVWDQFH 6WULQJW\SH
VWDWLF.H\6WRUHJHW,QVWDQFH 6WULQJW\SH6WULQJ SURYLGHU
type=jks, PKCS12 (prsent dans JSSE)

VWDWLF6WULQJJHW'HIDXOW7\SH

Retourne la proprit Java keystore.type configure dans le fichier java.security

'LGLHU'RQVH]-&(

6WULQJJHW7\SH

Retourne le type du keystore

Charger/Stocker le KeyStore

YRLGORDG ,QSXW6WUHDPVWUHDPFKDU>@ SDVVZRUG

FKDUJHOHVHQWUpHVSURWpJpHVSDUXQPRWGHSDVVH

YRLG VWRUH 2XWSXW6WUHDPVWUHDPFKDU>@ SDVVZRUG 

VDXYHJDUGHOHVHQWUpHVHQSURWpJHDQWDYHFOHPRWGHSDVVH



33

KeyStore
Parcourir le KeyStore

LQW VL]H QRPEUHGHQWUpHV


(QXPHUDWLRQDOLDVHV
ERROHDQFRQWDLQV$OLDV 6WULQJDOLDV
&HUWLILFDWHJHW&HUWLILFDWH 6WULQJDOLDV 
&HUWLILFDWH>@ JHW&HUWLILFDWH&KDLQ 6WULQJDOLDV 
6WULQJJHW&HUWLILFDWH$OLDV &HUWLILFDWHFHUW
'DWHJHW&UHDWLRQ'DWH 6WULQJDOLDV
.H\ JHW.H\ 6WULQJDOLDVFKDU>@ SDVVZRUG
ERROHDQLV&HUWLILFDWH(QWU\ 6WULQJDOLDV
ERROHDQLV.H\(QWU\ 6WULQJDOLDV 

'LGLHU'RQVH]-&(

Modifier une entre

YRLGGHOHWH(QWU\ 6WULQJDOLDV 
YRLGVHW&HUWLILFDWH(QWU\ 6WULQJDOLDV &HUWLILFDWHFHUW
YRLGVHW.H\(QWU\ 6WULQJDOLDVE\WH>@ NH\ &HUWLILFDWH>@ FKDLQ
YRLGVHW.H\(QWU\ 6WULQJDOLDV.H\ NH\FKDU>@ SDVVZRUG &HUWLILFDWH>@ FKDLQ
OHQWUpHHVWSURWpJpHSDUXQDXWUHPRWGHSDVVH



34

KeyStore et formats
Formats de KeyStore
Contient des paires de cls
Requiert une passphase pour protger l accs aux paires de cls (PBE)

JKS
format propritaire de SUN
fournis et utilis par dfaut par les outils Java (Provider JCE)

PKCS#12 (.pfx, .p12)

'LGLHU'RQVH]-&(

format d change (import,export) pour les Navigateurs et les Mailers (IE, NS,
)
Fournis et utilis par JSSE (Provider JCE de JSSE)

Formats de Certificat
DER X509 (.cer)
PKCS#7 (.p7b) : contient une chane de certificats



35

Exemple avec KeyStore


.H\6WRUHNV .H\6WRUHJHW,QVWDQFH -.6 
NVORDG )LOH,QSXW6WUHDP DUJY>@ 0RW'H3DVVH.H\6WRUHWR&KDU$UUD\  SULQWDOLDV NV 
&HUWLILFDWH)DFWRU\FI &HUWLILFDWH)DFWRU\JHW,QVWDQFH ; 
,QSXW6WUHDPLV QHZ )LOH,QSXW6WUHDP DUJY>@ 
&HUWLILFDWHFHUW FIJHQHUDWH&HUWLILFDWH LV 
NVVHW&HUWLILFDWH(QWU\ P\ILUVW FHUW  SULQWDOLDV NV 

'LGLHU'RQVH]-&(

.H\3DLU*HQHUDWRUNSJ .H\3DLU*HQHUDWRUJHW,QVWDQFH 56$ 


SULYDWHVWDWLFYRLGSULQWDOLDV .H\6WRUH VWRUH ^
NSJLQLWLDOL]H QHZ 6HFXUH5DQGRP 
6\VWHPRXWSULQWOQ VL]H VWRUHVL]H 
.H\3DLU SDLU NSJJHQHUDWH.H\3DLU 
6\VWHPRXWSULQWOQ DOLDVHV  
3ULYDWH.H\SNH\ SDLUJHW3ULYDWH 

IRU (QXPHUDWLRQHQXP VWRUHDOLDVHV 


HQXPKDV0RUH(OHPHQWV  ^
6\VWHPRXWSULQW HQXPQH[W(OHPHQW WR6WULQJ  
`

&HUWLILFDWH>@ FHUWV ^ FHUW `


NVVHW.H\(QWU\ P\VHFRQG SNH\
0RW'H3DVVH.H\(QWU\WR&KDU$UUD\  FHUWV  SULQWDOLDV NV 

NVVWRUH )LOH2XWSXW6WUHDP DUJY>@ 0RW'H3DVVH.H\6WRUHWR&KDU$UUD\ 


&HUWLILFDWHFHUW NVJHW&HUWLILFDWH P\ILUVW 



36

KeyTool
Commande pour la gestion de fichiers keystore

keytool command [options]

Options

NH\VWRUHNH\VWRUHILOH VWRUHSDVVVWRUHSDVV NH\SDVVNH\SDVV DOLDVDOLDV

Commandes

Cration d un fichier keystore et de ses entres


JHQNH\
LPSRUW

LGHQWLW\GE

'LGLHU'RQVH]-&(

cre une entre avec une paire de cl dans un certificat autosign


importe soit un certificat considr de confiance (trusted certificate)
ou un certificat sign par un CA (il remplace le certificat autosign)
importe des informations d une base d identit (JDK 1.1)

Visualisation

OLVW
SULQWFHUW

Liste les entres du keystore


Affiche le contenu du certificat

Exportation d une entre


H[SRUW
FHUWUHT

Exporte la cl publique dans un certificat.


Gnre une demande CSR (Certificate Signing Request)
pour envoi et signature une autorit de certification (CA)

Gestion

GHOHWH
NH\SDVVZG
VWRUHSDVVZG

supprime une entre.


assigne un mot de passe une entre.
assigne un mot de passe un keystore.



'LGLHU'RQVH]-&(

KeyTool Exemple 1/5


le KS des CA

!NH\WRRO OLVW NH\VWRUH -$9$B+20(MUHOLEVHFXULW\FDFHUWV VWRUHSDVVFKDQJHLW


.H\VWRUH W\SH MNV
.H\VWRUHSURYLGHU681
<RXUNH\VWRUHFRQWDLQV HQWULHV
YHULVLJQFODVVFD0RQ -XQ &(67 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' ()%&%&%'%)'&)
YHULVLJQVHUYHUFD0RQ -XQ &(67 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' %)(%%(&%)$
WKDZWHVHUYHUFD )UL)HE &(7 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' &&$('&&&%''
WKDZWHSHUVRQDOEDVLFFD )UL)HE&(7 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' (%'&&$''%$(%(%
YHULVLJQFODVVFD0RQ -XQ &(67 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' (&'%&($)$))'
WKDZWHSHUVRQDOIUHHPDLOFD )UL)HE &(7 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' (&&&&(&)()&$$&'
WKDZWHSHUVRQDOSUHPLXPFD )UL)HE &(7 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' $%'($)('&'$('
WKDZWHSUHPLXPVHUYHUFD )UL)HE &(7 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' )%&&$&)$

38

Liste les certificats


des CA



39

KeyTool Exemple 2/5


!NH\WRRO OLVW
NH\WRROHUURU .H\VWRUH ILOH GRHV QRW H[LVWKRPHGRQVH]NH\VWRUH

/LVWHOH.6
SDUGpIDXW

!NH\WRRO JHQNH\ GQDPH FQ 'LGLHU 'RQVH]RX ,0$*R 8-)O *UHQREOHF )5 ?
&UpHXQHHQWUpHDYHF
DOLDV GLGLHU NH\SDVVWRWRWRWR NH\VWRUHPRQNVMNV VWRUHSDVVWXWXWXWX YDOLGLW\  XQHSDLUHGHFOp
!NH\WRRO OLVW DOLDV GLGLHU NH\VWRUHPRQNVMNV VWRUHSDVVWXWXWXWX
GLGLHU7XH 1RY &(7 NH\(QWU\
&HUWLILFDWHILQJHUSULQW 0' '''($$)'))$

/LVWHODOLDVGDQVOH.6
&UpHXQHDXWUHHQWUpH

'LGLHU'RQVH]-&(

!NH\WRRO JHQNH\ DOLDVV\OYDLQNH\SDVVWDWDWDWD NH\VWRUHPRQNVMNV VWRUHSDVVWXWXWXWXDYHFXQHSDLUHGHFOp


!NH\WRRO OLVW NH\VWRUHPRQNVMNV VWRUHSDVVWXWXWXWX
.H\VWRUHW\SH MNV
.H\VWRUHSURYLGHU681
<RXUNH\VWRUHFRQWDLQV HQWULHV
V\OYDLQ7XH 1RY&(7 NH\(QWU\
&HUWLILFDWHILQJHUSULQW 0' $%$'$&'$%'&)
GLGLHU7XH 1RY &(7 NH\(QWU\
&HUWLILFDWHILQJHUSULQW 0' '''($$)'))$

/LVWHOHVHQWUpHV
GX.6



40

KeyTool Exemple 3/5


!NH\WRRO H[SRUWDOLDV GLGLHU ILOHGLGLHUFHU ?
NH\VWRUHPRQNVMNV VWRUHSDVVWXWXWXWX
&HUWLILFDWHVWRUHG LQILOHGLGLHUFHU!

'LGLHU'RQVH]-&(

!NH\WRRO SULQWFHUW ILOHGLGLHUFHU


2ZQHU&1 'LGLHU 'RQVH]28 ,0$*2 8-)/ *UHQREOH& )5
,VVXHU&1 'LGLHU 'RQVH]28 ,0$*2 8-)/ *UHQREOH& )5
6HULDO QXPEHUFIG
9DOLGIURP7XH 1RY &(7 XQWLO )UL1RY &(7
&HUWLILFDWHILQJHUSULQWV
0''''($$)'))$
6+$(&(&'(''$%'$)
!NH\WRRO FHUWUHT DOLDV GLGLHU ILOHGLGLHUFVU?
NH\VWRUH PRQNVMNV VWRUHSDVVWXWXWXWX ?
NH\SDVVWRWRWRWR
!NH\WRRO OLVW NH\VWRUHGRQVH]SVWRUHW\SH 3.&6

([SRUWXQHQWUpH
VRXVODIRUPH
GXQFHUWLILFDW '(5;

$IILFKHFHFHUWLILFDW

*pQqUHXQHGHPDQGH
GHFHUWLILFDWLRQ
$IILFKHOHFRQWHQXGX.6
H[SRUWpGH16
XQGHVSURYLGHUVGRLW
VXSSRUWHU3.&6



41

KeyTool Exemple 4/5

'LGLHU'RQVH]-&(

!NH\WRRO LPSRUWDOLDV QDGLD ILOHQDGLDSE NH\VWRUHPRQNVMNV VWRUHSDVVWXWXWXWX


2ZQHU&1 1DGLD %HQQDQL28 ,6792 89+&/ 9DOHQFLHQQHV6 1RUG& )5
,VVXHU&1 1DGLD %HQQDQL28 ,6792 89+&/ 9DOHQFLHQQHV6 1RUG& )5
6HULDO QXPEHUF
9DOLGIURP7XH 1RY &(7 XQWLO6XQ0D\&(67
&HUWLILFDWHILQJHUSULQWV
0'$%$''$)%&&'
6+$$%'(''%()$())&'
7UXVW WKLVFHUWLILFDWH">QR@ \HV
&HUWLILFDWHZDVDGGHG WR NH\VWRUH
!NH\WRRO OLVW NH\VWRUHPRQNVMNV VWRUHSDVVWXWXWXWX
.H\VWRUH W\SH MNV
.H\VWRUHSURYLGHU681
<RXUNH\VWRUHFRQWDLQV  HQWULHV
QDGLD7XH 1RY &(7 WUXVWHG&HUW(QWU\
&HUWLILFDWHILQJHUSULQW 0' $%$''$)%&&'
V\OYDLQ7XH 1RY &(7 NH\(QWU\
&HUWLILFDWHILQJHUSULQW 0' $%$'$&'$%'&)
GLGLHU7XH 1RY &(7 NH\(QWU\
&HUWLILFDWHILQJHUSULQW 0' '''($$)'))$
!NH\WRRO GHOHWH DOLDVV\OYDLQNH\VWRUHPRQNVMNV VWRUHSDVVWXWXWXWX

,PSRUWHXQHHQWUpHjSDUWLU
GXQFHUWLILFDW 3.&6
FRQVLGpUpGHFRQILDQFH

6L>QR@OHFHUWLILFDWQHVW
SDVDMRXWpDX.6
/LVWHOHVHQWUpHVGX.6

6XSSULPHXQHHQWUpH



42

KeyTool Exemple 5/5

'LGLHU'RQVH]-&(

([SRUWGH1HWVFDSH &RPPXQLFDWRU DYHF


2XWLOV!2SWLRQ,QWHUQHW!&RQWHQX!&HUWLILFDWV!3HUVRQQHO
([SRUWGH,(DYHF
&RPPXQLFDWRU!2XWLOV!,QIRUPDWLRQVVXUODVpFXULWp!9RV&HUWLILFDWV
6pOHFWLRQQH]XQFHUWLILFDWHWH[SRUWH]OH

!NH\WRRO SULQWFHUW ILOH GRQVH]FHU


$IILFKDJHGXQFHUWLILFDW
2ZQHU (PDLO$GGUHVV GLGLHUGRQVH]#LPDJIU&1 'LGLHU 'RQVH]
;'(5VLJQpSDUXQ&$
28 'LJLWDO,'&ODVV 1HWVFDSH
HWH[SRUWpGH1HWVFDSH
28 3HUVRQD1RW 9DOLGDWHG
28 ZZZYHULVLJQFRPUHSRVLWRU\53$,QFRUSE\ 5HI/,$%/7' F 
28 9HUL6LJQ 7UXVW1HWZRUN
2 9HUL6LJQ ,QF
,VVXHU&1 9HUL6LJQ &ODVV&$ ,QGLYLGXDO6XEVFULEHU3HUVRQD1RW 9DOLGDWHG
28 ZZZYHULVLJQFRPUHSRVLWRU\53$ ,QFRUS%\ 5HI/,$%/7' F 
28 9HUL6LJQ7UXVW1HWZRUN
2 9HUL6LJQ ,QF
6HULDO QXPEHUHIIEIEGIHDEG
9DOLGIURP7XH 1RY &(7 XQWLO6XQ-DQ&(7
&HUWLILFDWHILQJHUSULQWV
0'&'&%%)')&'))
6+$$$$$)&%$()'$('&



43

Signature de code
Commande jarsigner
Ajoute 2 entres l archive pour chaque signataire (alias)
Aliasname.SF (Signature File)
Contient les noms des fichiers, le nom de l algo de signature (SHA, )
et les valeurs des rsum

Aliasname.DSA
Contient la signature du fichier Aliasname.SF

Ajoute le Manifest
Contient les rsums des entres

Fonctions
Signature d une archive Java
'LGLHU'RQVH]-&(

jarsigner [ options ] jar-file alias

Verification d une archive Java


jarsigner -verify [ options ] jar-file

Voir

-$9$B+20(docs/tooldocs/win32/jarsigner.html



Outils : Keytool et JarSigner

'LGLHU'RQVH]-&(

-$9$B+20(GRFVWRROGRFVWRROVKWPOVHFXULW\

44



JarSigner Exemple

'LGLHU'RQVH]-&(

!MDU FI DUFKLYHMDU FODVV MDYD


!MDUVLJQHU NH\VWRUH GGMNV VLJQHGMDUVDUFKLYHMDUDUFKLYHMDUGLGLHU
!MDUVLJQHU YHULI\ YHUERVHVDUFKLYHMDU
7XH 1RY &(70(7$,1)',',(56)
7XH 1RY &(70(7$,1)',',(5'6$
7XH 1RY &(70(7$,1)
VP7XH )HE &(7 6WURQJ&OLHQWFODVV
VP7XH )HE &(7 6WURQJ6HUYHUFODVV
VP7XH )HE &(7 6WURQJ&OLHQWMDYD
VP7XH )HE &(7 6WURQJ6HUYHUMDYD
V VLJQDWXUH ZDVYHULILHG
P HQWU\LVOLVWHGLQ PDQLIHVW
N DWOHDVWRQH FHUWLILFDWHZDVIRXQG LQ NH\VWRUH
L DW OHDVWRQH FHUWLILFDWHZDVIRXQGLQ LGHQWLW\ VFRSH
MDUYHULILHG

45



Echange scuris de cl
(KAP Key Agreement Protocol)

Motivation
change une cl secrte entre deux parties
Application : cl de session symtrique

Protocoles
Diffie-Hellman (PKCS#3),

'LGLHU'RQVH]-&(

JCE : classe javax.crypto.KeyAgreement


static KeyAgreementgetInstance(String algorithm)
void init(java.security.Key key)
Key doPhase(Key key, boolean lastPhase)
DH est fournit par JCE de Baltimore

8QGHU&RQVWUXFWLRQ
(Q&RQVWUXFWLRQ

46



Echange scuris de cl
Diffie-Hellman

 ,QLWLDOLVDWLRQ
2.

choisir un couple appropri de nombres premiers SHWD, tels


que 2<D<S
a et p sont publies publiquement

1.

Message

1.

 3URWRFROH

'LGLHU'RQVH]-&(

47



$ sends %: Dx % S, for any 1 <= x <= S-2


% sends $: Dy % S, for any 1 <= y <= S-2

$FWLRQV

% receives Dx and calculates K=(Dx)y


% receives Dy and calculates K=(Dy)x



50

Providers
La liste
http://java.sun.com/products/jce/jce12_providers.html

Quelques providers
Baltimore KeyTools http://www.baltimore.com
RSA Security http://www.rsasecurity.com
eSec (ex-ABA) http://www.openjce.org/jce.html

'LGLHU'RQVH]-&(

http://www.wumpus.com.au/crypto/aba.html
http://www.bouncycastle.org/

Cryptix http://www.cryptix.org/products/jce/
Phaos Technology http://www.phaos.com/
Entrust(R) Technologies http://www.entrust.com/toolkit/java/index.htm
DSTC http://security.dstc.edu.au/projects/java/release3.html
IAIK http://jcewww.iaik.at/



52

ABA JCE Provider


JDK 1.02, 1.1, 1.2, 1.3
Cipher
RSA, DES, DESede, IDEA, Twofish, Blowfish, and RC4.

Password Based Encryption (PBE)


MD5 with DES, SHA1 with RC4 128 bits

Message digests
SHA-0, SHA-1, and MD5.

MAC
'LGLHU'RQVH]-&(

DES, DESede, IDEA, HMACwithSHA1, and HMACwithMD5.

Keystore.
Key and Key pair generation
Signing
MD5withRSA.



53

Cryptix JCE Provider


URL http://www.cryptix.org
JDKs 1.1, 1.2 and 1.3
Ciphers

Blowfish, CAST5, DES, IDEA, MARS, RC2, RC4, RC6, 5LMQGDHO, Serpent, SKIPJACK, Square,
TripleDES, Twofish

Password Based Encryption (PBE)

none

KeyAgreements

Diffie-Hellman

Modes

CBC, CFB-(8, 16, 24, ..., blocksize), ECB, OFB-(blocksize), openpgpCFB

Hashes

MD2, MD4, MD5, RIPEMD-128, RIPEMD-160, SHA-0, SHA-1, SHA-256/384/512, Tiger

'LGLHU'RQVH]-&(

MACs

HMAC-MD2, HMAC-MD4, HMAC-MD5, HMAC-RIPEMD-128, HMAC-RIPEMD-160, HMAC-SHA0, HMAC-SHA-1, HMAC-Tiger

Signatures

RawDSA, RSASSA-PKCS1, RSASSA-PSS

Assymetric ciphers

RSA/PKCS#1, ElGamal/PKCS#1

SecureRandom SPIs

/dev/urandom on systems that support it (FreeBSD, Linux, OpenBSD and possibly other UNIXen)



54

Implmentation dun Provider JCE


Implmenter
Une classe final Provider et des classes SPI
CipherSpi, MessageDigestSpi,

Voir
'LGLHU'RQVH]-&(

%JAVA-HOME%\docs\guide\security\HowToImplAProvider.html

Exercice
Le faire pour l algorithme de CESAR !



55

Implmentation dun Provider JCE


Exercice
Un Provider pour l algorithme de CESAR !
La classe Provider installer

'LGLHU'RQVH]-&(

SDFNDJH PRQMFHMFHSURYLGHU
SXEOLFILQDOFODVV0RQ-&(3URYLGHUH[WHQGV MDYDVHFXULW\3URYLGHU ^
SULYDWHVWDWLF ILQDO6WULQJ1$0( 0RQ-&(
,1)2 0RQ-&( -&( :HDN &U\SWR 3URYLGHU
SULYDWHVWDWLF ILQDOGRXEOH9(56,21 
SXEOLF 0RQ-&(3URYLGHU ^
VXSHU 1$0(9(56,21,1)2 
&(6$5
SXW &LSKHU&(6$5PRQMFHMFHSURYLGHUFLSKHU&(6$5 
SXW $OJ$OLDV&\SKHU&$(6$5&(6$5 

SXW .H\*HQHUDWRU&(6$5PRQMFHMFHSURYLGHUNH\&(6$5.H\*HQHUDWRU 
SXW 6HFUHW.H\)DFWRU\'(6PRQMFHMFHSURYLGHUNH\IDFWRU\&(6$5.H\)DFWRU\ 

Extra JCE



PKCS 3XEOLF.H\ &U\SWRJUDSK\ 6WDQGDUGV

ensemble de standards pour la mise en place des IGC, coordonn par


RSA
dfinissent les formats des lments de cryptographie :

PKCS #1:RSA Cryptography Standard

'LGLHU'RQVH]-&(

Inclut PKCS #2 et PKCS #4

PKCS #3:Diffie-Hellman Key Agreement Standard


PKCS #5:Password-Based Cryptography Standard
PKCS #6:Extended-Certificate Syntax
PKCS #7:Cryptographic Message Syntax
PKCS #8:Private-Key Information Syntax
PKCS #9:Selected Attribute Types Standard
PKCS #10:Certification Request Syntax Standard
PKCS #11:Cryptographic Token Interface Standard
PKCS #12:Personal Information Exchange Syntax Standard
PKCS #13: Elliptic Curve Cryptography Standard
PKCS #15: Cryptographic Token Information Format Standard

Voir http://www.rsa.com/rsalabs/pkcs/

57



58

Cerificats X509, PKI et CA


PKI : Private Key Infrastructure
http://www.verisign.com/resources/wp/index.html
http://www.thawte.com/
https://www.entrust.com/developer/java/faqs.htm

CA
Public
Verign, Thawte, Entrust,
'LGLHU'RQVH]-&(

Priv
Motivation : une socit est sa propre autorit de certification pour ses
employs et ses applications dans les changes intranet.
iPlanet Certificate Management Server (developer.iplanet.com) ,
OpenCA (www.openca.org), IDX-PKI (idx-pki.idealx.org)



59

JSSE et JAAS
Java Secure Socket Extension (JSSE)
Extension aux sockets pour scuriser les protocoles bass sur
TCP/IP (HTTP, Telnet, NNTP, FTP, RMI )
SSL (Secure Sockets Layer) et TLS (Transport Layer Security)
SecureSocket, SecureServerSocket, HttpsURLConnection,

Utilise le JCE et ajoute un provider


Intgr au J2SE1.4

'LGLHU'RQVH]-&(

Remarque : Avant il fallait bricoler avec les SocketFactory

Java Authentication and Authorization Service


(JAAS)
Les PAM peuvent tre utiliss des moyens cryptographiques



60

XML et Scurit
Evolution vers le gestion des cls en XML
et vers les documents XML signs et chiffrs
Spcifications
XKMS XML Key Management Specification
http://www.xmltrustcenter.org/xkms

XML Digital Signature http://www.w3.org/TR/xmldsig-core/


XML Digital Encryption http://www.w3.org/TR/xmlenc-core/

'LGLHU'RQVH]-&(

API Java
JSR 104 XML Trust Service APIs
JSR 105 XML Digital Signature APIs (javax.security.xml.dsig)
JSR 106 XML Digital Encryption APIs



61

Cryptographie, JavaCard, Carte Crypto


Cartes puce pourvue de fonctions cryptographiques
(logicielles ou matrielles)

Cartes PKI (GemSafe, CryptoSafe, )

'LGLHU'RQVH]-&(

JavaCard
Packages javacard.security.* javacardx.crypto.*
pour les applets utilisant de la cryptographie

OCF
CardService



65

JCE et J2ME

8QGHU&RQVWUXFWLRQ
(Q&RQVWUXFWLRQ

Motivation
Faible mmoire, KVM, Processeur cryptographique

Pistes : les API JavaCard

'LGLHU'RQVH]-&(

Packages javacard.crypto.* javacardx.crypto.*



66

Bibliographie
Livre

Jonathan B. Knudsen , Java Cryptography, Oreilly, 1st Edition, May 1998, 156592-402-9
Scott Oaks, Java Security, Oreilly, 2nd Edition, May 2001, 0-596-00157-6
Jamie Jaworski & Paul J. Perrone, Java Security , Ed CampusPress, 24/9/2001,
570 pages, ISBN 2-7440-1230-0, (en Franais) http://www.campuspress.net

Guide

%JAVA_HOME%\docs\guide\security\CryptoSpec.html
%JAVA_HOME%\docs\guide\security\HowToImplAProvider.html

Tutorial

http://java.sun.com/docs/books/tutorial/security1.2/index.html

'LGLHU'RQVH]-&(

Prsentation JavaOne
http://servlet.java.sun.com/javaone/javaone99/pdfs/e611.pdf
http://java.sun.com/products/jsse/JavaOne00_JSSE.pdf
http://jsp.java.sun.com/javaone/javaone2000/pdfs/TS-1175.pdf

Articles
http://www.onjava.com/onjava/security/

Vous aimerez peut-être aussi