Informatique légale : FPGA vs. GPU Sylvain Collange, Yoginder S. Dandass, Marc Daumas et David Defour 03/06/2008
Problématiques Analyse de disque dur Recherche de contenu illégal connu Y compris dans des fichiers effacés Nécessité de parcourir chaque secteur du disque Récupération de mot de passe Temps d'analyse limité 2
Accélérateurs matériels FPGA VHDL GPU NVidia CUDA 1.1 3
Structure d'un disque Unité de base : secteur, 512 octets Groupés en clusters par le système de fichiers, typiquement 4 Ko Un fichier peut être partiellement effacé Cluster Secteur 0 Secteur 7 Nouveau fichier Reste d'ancien fichier 4
Bibliothéque de contenu recherché Découpé en clusters, puis en secteurs Calcul d'une clef de hachage pour chaque secteur Construction d'une base de données pour chaque secteur d'un cluster (8 pour des clusters de 4Ko) Cluster C n S 0 C n S 7 C n+1 S 0? 5
Hachage : CRC64 Secteur interprété comme un polynôme dans Z/2Z Division par le polynôme Correspond à des XOR et décalages Mais nécessite un traitement bit par bit Utilisation de table x 64 x 4 x 3 x 1 Traitement octet par octet (table à 256 entrées) 6
Architecture NVidia G80 (simplifiée) Unités de calcul Multiprocesseur Registres Mém partagée Mém constantes Unité mémoire Controleur memoire Mémoire globale Cœur (cluster) x8 7
Pipeline Utilisation des streams de CUDA CPU T0 T1 T2 GPU CRC 64 Accès Lecture de secteurs Transferts DMA Table de hachage Disques durs Mémoire centrale Mémoire GPU 8
Lecture des données CUDA : peut convertir 16 requêtes mémoires 32 bits simultanées en 1 requête 512 bits (coalescing) Si les 16 threads réclament des adresses successives Avec alignement sur 512 bit T0 T1 T2 T3 Bloc de 512 bits Dans notre cas, mauvais motif d'accès T0 T1 T2 T3 Secteur n Secteur n+1 Secteur n+2 Secteur n+3 9
Transposition en mémoire partagée Traitement par blocs Lecture avec coalescing Écriture du bloc en mémoire partagée Lecture dans l'ordre transposé T0 T1 T2 T3 Mémoire partagée Secteur n Secteur n+1 Secteur n+2 Secteur n+3 10
Transposition en mémoire partagée Traitement par blocs Lecture avec coalescing Écriture du bloc en mémoire partagée Lecture dans l'ordre transposé T0 T1 T2 T3 Mémoire partagée Secteur n Secteur n+1 Secteur n+2 Secteur n+3 11
Élimination des conflits Mémoire partagée divisée en 16 bancs Conflits lors de la lecture d'une colonne T0 T1 T2 T3 Banc 0 Banc 1 Banc 2 Banc 3 0 1 2 3 4 5 6 7 Fragment secteur 0 Fragment secteur 1 Fragment secteur 2 Fragment secteur 3 Solution : décalage par ajout de padding T0 T1 T2 T3 Mémoire partagée 0 1 2 3 4 5 6 7 12
Recherche dans la table de hachage Calcul du CRC avec une table en mémoire partagée Accès à la table de hachage Re hachage à partir du CRC Accès mémoire aléatoires en mémoire globale Lancer le maximum de threads simultanés pour masquer la latence (~2000) 13
Résultats sur FPGA Virtex 4 FX 100 (~4000 ) Interfaçage direct avec le disque Calcul du CRC pipeliné Recherche binaire sur base de données en DRAM Fonctionne à la vitesse de l'interface du disque 100 Mo/s 14
Résultats sur CPU Xeon 5148 2,33 GHz (500 ) Boost.CRC, STL C++ Disque test de 512 Mo, base de données de 128Mo 50 Mo/s 15
Résultats sur GPU NVidia GeForce 8500 GT (45 ) Cuda 1.1, Pentium 4 2,8 GHz sur i945g 128 threads/bloc, 16 blocs 16
PKCS#5 v2.0 Standard de chiffrement par mot de passe RSA laboratories Password Based Key Derivation Function Utilisé dans : Wi Fi Protected Access (WPA, WPA2) Microsoft Data Protection API (DPAPI) OpenDocument encryption d OpenOffice.org Outils de cryptage de disque FileVault par Mac OS X FreeOTFE (Windows Mobile) Linux Unified Key Setup (LUKS) TrueCrypt Cryptographic disk (NetBSD) Module GEOM ELI pour FreeBSD 17
PKCS#5 : principe PBKDF2(P, S, c) U:= SHA1((P opad) SHA1 ((P ipad) S Int(1))) K:= U for (i=1; i<c; i++){ U:= SHA1((P opad) SHA1 ((P ipad) U)) K:= K U; } return K; } P : message (512 bits) S : salt (128 bits) c : nombre d itérations (~4000) K : résultat (160 bits) : concaténation 18
HMAC-SHA-1 > 280 opérations par tour ET, OU, XOR, ROTATION 4,48 millions d opérations par mot de passe 19
Résultats préliminaires Attaque par dictionnaire CPU Intel Pentium 4 100 mdp/s FPGA Xilinx Virtex 4 FX 100 Implémentation pipelinée à 162Mhz 4 unités de calcul en parallèle Accès au dictionnaire sur disque dur via un contrôleur ATA (PowerPC) 510 mdp/s GPU Nvidia GeForce 8500 GT 670 mdp/s 20
FPGA et/ou GPU? GPU Prix, disponibilité Facilité de développement Débit des interfaces FPGA Souplesse de programmation Souplesse et latence des interfaces Cryptographie maintenant possible sur GPU Complémentarité des approches? 21