8. #DevoxxFR 8
La méthode suivante
est parfaitement sûre en terme de
cryptographie
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.GeneralSecurityException;
public static byte[] decrypt(byte[] cipherText, byte[] iv) throws GeneralSecurityException {
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(KEY, "AES"), new IvParameterSpec(iv));
return cipher.doFinal(cipherText);
}
9. #DevoxxFR 9
… mais elle n’est pas sûre
si elle est appelée par la méthode
suivante :
public int processEncryptedMessage(byte[] cipherText, byte[])
int httpStatusCode;
try {
decrypt(cipherText, iv);
httpStatusCode = OK_CODE; // 200
process(plaintext);
} catch (GeneralSecurityException exc) {
httpStatusCode = INTERNAL_ERROR_CODE; // 500
}
return httpStatusCode;
}
15. #DevoxxFR
15
Ajout du padding au chiffrement
longueur 1 => … XX XX XX 01
longueur 2 => … XX XX 02 02
longueur 3 => … XX 03 03 03
16. #DevoxxFR
16
Padding valide (au déchiffrement)
… XX XX XX 01 => longueur 1
… XX XX 02 02 => longueur 2
… XX 03 03 03 => longueur 3
… XX XX 01 01 => longueur 1
18. #DevoxxFR
18
xx xx xxxxxx xx
Avant dernier bloc chiffré
xx xx xxxxxx xx
Dernier bloc chiffré
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx xx xx xxxxxx xx
+
Déchiffrement du bloc
+
Bloc intermédiaire
Bloc clair
19. #DevoxxFR
19
xx xx xxxxxx xx xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx xx xx xxxxxx xx
+
Déchiffrement du bloc
+
Connu
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
20. #DevoxxFR
20
xx xx xxxxxx xx xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx xx xx xxxxxx xx
+
Déchiffrement du bloc
+
ConnuAvant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
21. #DevoxxFR
21
xx xx xxxxxx xx xx xx xxxxxx xx
Déchiffrement du bloc
?? ?? ?????? ??
xx xx xxxxxx xx xx xx xxxxxx xx
+
Déchiffrement du bloc
+
Inconnu
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
22. #DevoxxFR
22
xx xx xxxxxx xx xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx ?? ?? ?????? ??
+
Déchiffrement du bloc
+
Inconnu
A déterminer
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
?? ?? ?????? ??
23. #DevoxxFR
23
xx xx xxxxxx xx xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx ?? ?? ?????? ??
+
Déchiffrement du bloc
+
Cible immédiate
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
?? ?? ?????? ??
24. #DevoxxFR
24
RR RR RRRRRR RR xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx RR RR RRRRRR RR
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
?? ?? ?????? ??
25. #DevoxxFR
25
RR RR RRRRRR RR xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR RR
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
26. #DevoxxFR
26
RR RR RRRRRR ?? xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR 01
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
Objectif
A déterminer
27. #DevoxxFR
27
RR RR RRRRRR 00 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
Inconnu
28. #DevoxxFR
28
RR RR RRRRRR 00 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
Padding KO≠ 1
29. #DevoxxFR
29
RR RR RRRRRR 01 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
2ème
essai
30. #DevoxxFR
30
RR RR RRRRRR 01 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
Padding KO
2ème
essai
≠ 1
31. #DevoxxFR
31
RR RR RRRRRR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
3ème
essai
32. #DevoxxFR
32
RR RR RRRRRR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
Inconnu
Padding OK
3ème
essai
33. #DevoxxFR
33
RR RR RRRRRR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR RRRRRR 01
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
?
Padding OK
3ème
essai
34. #DevoxxFR
34
RR RR RRRRRR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR 02RRRR 02
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
?
Padding OK
3ème
essai
35. #DevoxxFR
35
RR RR RRRRRR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR 0303RR 03
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
?
Padding OK
3ème
essai
36. #DevoxxFR
36
RR RR RR’RRRR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR XXRRRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
?
Validation
37. #DevoxxFR
37
RR RR RR’RRRR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx 03
xx xx xxxxxx xx RR RR XXRRRR 01
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
= 1
Validation
Padding OK
38. #DevoxxFR
38
RR RR RR’RRRR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR XXRRRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
≠ 1
Validation
Padding KO
39. #DevoxxFR
39
RR RR RRRR’RR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx RR RR ??XXRR ??
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
Validation
40. #DevoxxFR
40
RR RR 05RR’RR 02 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx 07xxxx 00
xx xx xxxxxx xx RR RR 02YYRR 02
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
= 2 Padding OK
41. #DevoxxFR
41
RR RR RRRRRR RR xx xx xxxxxx xx
Déchiffrement du bloc
xx xx 07xxxx 00
xx xx xxxxxx xx RR RR 0303RR 03
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
Cible
padding de 3
42. #DevoxxFR
42
RR RR 04??RR 03 xx xx xxxxxx xx
Déchiffrement du bloc
xx xx 07xxxx 00
xx xx xxxxxx xx RR RR 0303RR 03
+
Déchiffrement du bloc
+
Avant dernier bloc chiffré Dernier bloc chiffré
Bloc intermédiaire
Bloc clair
Cible
padding de 3
43. #DevoxxFR
43
xx xx xxxxxx xx
Avant dernier bloc chiffré
xx xx xxxxxx xx
Dernier bloc chiffré
Déchiffrement du bloc
xx xx xxxxxx xx
xx xx xxxxxx xx xx xx xxxxxx xx
+
Déchiffrement du bloc
+
Bloc intermédiaire
Bloc clair
Et ce bloc ?
45. #DevoxxFR 45
MAC : Message Authentication Code
Message MessageMessage
MAC
Algorithm
MAC MAC MAC
MAC
Algorithm
MAC
=?
Secret Key Secret Key
=?
Message is
authentic
Message has
bean altered
Y N
78. #DevoxxFR 78
$ gpg -d my_secure_script.sh.gpg | bash
gpg: AES encrypted data
gpg: encrypted with 1 passphrase
gpg: Signature made Sun Apr 17 21:59:14 2016 CEST using RSA
key ID E625A4BB
gpg: BAD signature from "Alice <alice@victime.com>”
gpg: WARNING: message was not integrity protected
… exécution de code “aléatoire” …
82. #DevoxxFR 82
gpg --passphrase=secret --decrypt my_secure_script.sh.gpg
| bash
You need a passphrase to unlock the secret key for
user: "Alice <alice@victime.com>"
2048-bit RSA key, ID 7EFCB32A, created 2016-04-17 (main key ID
E625A4BB)
gpg: encrypted with 2048-bit RSA key, ID 7EFCB32A, created
2016-04-17
“Alice <alice@victime.com>"
J'ai hacké la machine de alice
La victime
84. #DevoxxFR 84
Références
Les slides de ce talk: http://bit.ly/crypto-devoxx
Blog de Matthew Green (cryptologue) http://blog.cryptographyengineering.com/
Blog d’Adam Langley (cryptologue), https://www.imperialviolet.org/
Talk de Matthew Green, https://www.youtube.com/watch?v=uP6np_oKVCk
Talk d’Adam Langley, https://www.yahoo.com/news/video/yahoo-trust-unconference-
tls-adam-223046696.html?ref=gs
Post lié au talk précédent, https://www.imperialviolet.org/2015/05/16/aeads.html
Code de l’Oracle Padding Attack: http://bit.ly/oracle-padding-attack