3.2 Théorie des codes
3.2.5 Codes LDPC
Les codes LDPC ("Low Density Parity-Check" en anglais) sont des codes linéaires proposés
par Robert G. Gallager en 1960 [79], ils tiennent leur nom du faible nombre d’entrées non nulles
dans leur matrice de parité. En effet, sont considérés LDPC, tous les codes dont la matrice de
parité a moins d’entrées non nulles que de 0.
Il est généralement difficile d’évaluer la distance minimale d’un code (problème NP-Hard) et
la structure des codes LDPC ne leur donne pas de moyen de le faire (contrairement aux codes
pré-sentés dans les sections précédentes). Cette distance minimale n’a pas de raison d’être grande, les
expériences le confirment [99]. Par contre il a été montré que certain codes LDPC atteignent une
capacité de décodage optimale lorsque les erreurs sont aléatoirement distribuées. Dans ces
condi-tions, certains codes LDPC font parti des codes les plus efficaces et performants aujourd’hui, la
structure de leur matrice de parité permettant de construire des algorithmes de décodage
probabi-liste de complexité linéaire [68, 180].
Bien que la complexité du décodage soit très faible (O(n)), le codage quant à lui peut coûter
plus cher ; il correspond à un produit de matrices ou à la résolution d’un système linéaire. Il existe
des sous-classes de codes LDPC qui possèdent des algorithmes de codage de complexité linéaire,
les codes "Repeat-Accumulate" [70] par exemple ou encore, les codes LDGM [78]("Low Density
Générator Matrix" en anglais) qui, comme leur nom l’indique, ont à la fois une matrice de parité
creuse mais aussi une matrice génératrice creuse.
II
Cryptologie à clé
secrète
Traitement parallèle 4
Sommaire
4.1 Stratégie de parallélisme pour chiffrements symétriques et hachage
cryp-tographique . . . . 52
4.1.1 Chiffrement par bloc . . . 52
4.1.1.1 Algorithme de chiffrement . . . 52
4.1.1.2 Modes Opératoires . . . 53
4.1.2 Fonction de Hachage . . . 55
4.1.2.1 Fonction de compression . . . 56
4.1.2.2 Modes Opératoire . . . 57
4.1.3 Conclusions . . . 58
4.2 Implémentation efficace de codes parallèles . . . . 60
4.2.1 Principe du vol de travail . . . 60
4.2.2 Ordonnancement dynamique de tâches par vol de travail . . . 60
4.3 Application aux chiffrements symétriques avec mode opératoire Compteur 61
La cryptographie à clé secrète est utilisée en permanence (contrairement à la crypto publique
qui n’intervient que de façon ponctuelle pour échange de clés ou authentification), il est donc
im-portant d’en optimiser les performances afin qu’elle ne ralentisse pas l’application qui la supporte.
Dans ce cadre nous avons étudié l’optimisation de fonctions de chiffrement en implémentation
logicielles et matérielles (cf. chapitre 7). Alors que ces techniques, à chiffre fixé, sont limités par
une borne inférieur incompressible (nombre d’opérations de la fonction), nous nous intéressons
maintenant à la parallélisation de fonctions cryptographiques, prenant ainsi avantage des capacités
des machines actuelles : multi-processeurs/coeurs, GPU.
Ce chapitre étudie, sur des construction génériques, la parallélisation "haut niveau" des
chiffre-ments symétriques et des fonctions de hachages.
4.1 Stratégie de parallélisme pour chiffrements symétriques et
ha-chage cryptographique
La construction "haut niveau" de chiffrements symétriques et fonctions de hachage
cryptogra-phiques est faite sur le même modèle. Une fonction limitée par la taille de ses entrées et de ses
sorties est itérée pour construire une fonction de chiffrement ou de hachage globale sur des entrées
de très grandes tailles (voire non bornées). La méthode d’itération est appeléemode opératoire.
La sécurité d’une telle fonction globale s’étudie en considérant indépendamment la fonction bloc
et le mode opératoire (celui-ci étant considéré sûr lorsque sa résistance cryptographique repose
entièrement sur la résistance de la fonction bloc).
Ainsi deux niveaux de parallélisme sont envisageables : soit "bas niveau" sur lafonction bloc,
soit haut niveau sur lemode opératoire. Ces deux niveaux de parallélisme sont complémentaires
et non exclusifs. Nous allons voir dans cette section comment ces deux niveaux de parallélismes
peuvent-être mis en oeuvre sur une plate-forme multi-coeurs/processeurs. Dans toute cette section
nous considérerons que toutes les unités de calcul de la plate-forme sont identiques (même
fré-quences, même taille de registres, taille de cache, etc ...), dans la section qui suit nous étudierons
une gestion efficace du parallélisme au niveau mode opératoire sur plate-formes multi-coeurs ou
multi-processeurs lorsque cette hypothèse n’est pas vérifiée.
4.1.1 Chiffrement par bloc
Un chiffre symétrique par bloc, tel que défini dans la section 3.1, est notéS = (P,C,K, E, D).
Dans la grande majorité des cas, l’ensemble des messages clairs et l’ensemble des messages
chif-frés sont tels que :P =C=❋n
2 (nétant lataille de blocdu chiffre). Pour chiffrer, à l’aide deS, un
message de longueurm > n, il est nécessaire d’appeler plusieurs fois l’algorithme de chiffrement
Esur des blocs de taillendu message.
4.1.1.1 Algorithme de chiffrement
Il s’agit ici de rendre parallèle l’exécution de la fonction de chiffrementE. Nous avons vu dans
le chapitre 3, section 3.1.2 une construction générique d’algorithme de chiffrement symétrique : les
réseaux de Substitution-Permutation en rondes itérées. Dans une ronde de chiffrement symétrique
de ce type, l’étape la plus lourde est souvent l’application des boîtes de substitution (en particulier
en implémentation hardware), cette étape est trivialement parallélisable puisque chaque boîte est
appliquée indépendamment sur une sous-partie de l’entrée. Il en va de même avec la fonction de
mélange avec la clé de ronde. Par contre la fonction linéaire de diffusion pose un problème. Son
rôle est de diffuser la confusion introduite par les boîtes-S, il est donc important qu’elle mixe entre
elles les sorties des boîtes-S, introduisant ainsi une grande dépendance de donnée (bête noire du
parallélisme). Il faudra donc travailler sur des données intermédiaires synchronisées en milieu et
fin de rondes.
Cette découpe est de grain très fin, i.e., les tâches exécutées en parallèle ne comportent que
quelques opérations atomiques. Si le coût dû au parallélisme (créations de tâches,
ordonnance-ment des tâches) est trop grand par rapport au coût d’une tâche, notamordonnance-ment pour une exécution
logicielle, l’exécution parallèle de l’algorithme de chiffrement est inutile, voir désastreux en terme
de performances. Pour une implémentation matérielle, ce parallélisme interne est souvent utilisé,
il s’agit de faire un compromis entre gain de temps et taille du circuit. De nombreuses
implémen-tations matérielles (ASIC ou FPGA) ont été proposées pour les algorithmes de chiffrement les plus
connus, tels que AES [46] ou Serpent [65].
4.1.1.2 Modes Opératoires
La figure 4.1 décrit l’exemple le plus simple demode opératoirepour le chiffreS. Il s’agit du
mode EBC(pour "Electronic CodeBook" en anglais), le message est divisé en⌈mn⌉ blocs,
indé-pendamment chiffrés. Le dernier bloc, si il n’est pas de taillen, doit être complété suivant une
convention adoptée publiquement ("padding" en anglais). Ce mode d’opération, le plus efficace
qui soit, possède un certain nombre de désavantages en termes de sécurité ; entre autres, tout les
blocs identiques du message correspondent à des blocs de messages chiffrés identiques,
permet-tant ainsi de reconnaître des paternes dans le message d’origine à partir du message chiffré.
Un mode opératoire plus utilisé est lemode CBC(pour "Cipher Block Chaining" en anglais)
décrit sur la figure 4.2. L’utilisation du chaînage permet de supprimer une grande partie des failles
de sécurité présentes pour le mode ECB. Il est important de faire attention auvecteur
d’initiali-sation, bien qu’étant une donnée publique, l’utilisation d’un même vecteur d’initialisation pour
deux messages différents sans changer la clé secrète donne lieu à des attaques parre-jeu ou par
le milieu ("man in the middle" en anglais). Le principal désavantage du mode CBC est qu’une
erreur dans le traitement d’un bloc du message affecte tout les blocs suivants et, pour les mêmes
raisons, le chiffrement/déchiffrement d’une partie du message ne peut se faire sans avoir au
préa-lable chiffré/déchiffré les blocs précédents. Plus important pour nous ici, le chiffrement ne peut se
paralléliser.
Le NIST ("National Institute of Standart and Technology") recommande 5 modes opératoires
pour les chiffrements symétriques [1]. Ils ont chacun leurs avantages et inconvénients [196], le
dernier en date est le modeCompteur(noté simplementCTRdans la suite).
Chif f reN
M essage1 M essage2 M essagei M essageN
Chif f rei Chif f re1 Chif f re2 E(X, K) K E(X, K) K E(X, K) K E(X, K) K
M essage M essage1 M essage2 M essageN
FIG. 4.1 – Mode Opératoire ECB
Mode Compteur Lemode CTR(figure 4.3) possède des avantages particulièrement intéressants
pour notre analyse, ainsi il permet un traitement complètement parallèle tout en ayant unesécurité
prouvéesi l’on suppose qu’une valeur initiale de compteur n’est utilisée qu’une seule fois pour
M essageN
M essage1
M essage M essage1 M essage2 M essageN
Chif f re1 V I E(X, K) K Chif f rei E(X, K) K Chif f reN E(X, K) K Chif f re2 E(X, K) K M essage2 M essagei
FIG. 4.2 – Mode Opératoire CBC
une clé secrète donnée [20, 93]. Pour un mode opératoire, avoir une sécurité prouvée signifie que
le mode est robuste sous l’hypothèse que le chiffrement par bloc qu’il emploie est lui-même sûr,
i.e., l’utilisation du chaînage n’introduit pas faiblesse.
f(Compteur, N−1) Chif f re1 E(X, K) K Chif f rei E(X, K) K Chif f reN E(X, K) K Chif f re2 E(X, K) K f(Compteur,1) M essageN
M essage1 M essage2 M essagei
M essage M essage1 M essage2 M essageN
V I:Compteur f(Compteur, i−1)