• Aucun résultat trouvé

Royal Military Academy Brussels, BELGIUM Secure Information Storage in the Cloud

N/A
N/A
Protected

Academic year: 2022

Partager "Royal Military Academy Brussels, BELGIUM Secure Information Storage in the Cloud"

Copied!
78
0
0

Texte intégral

(1)

Royal Military Academy Brussels, BELGIUM www.rma.ac.be

Secure Information Storage in the Cloud

Thibault-Alexandre SWENNEN 2014

(2)

Préface

Dans le cadre de la réalisation du mémoire de fin d'étude, parmi plusieurs sujets qui ont été proposés, celui au nom évocateur "Secure information storage in the cloud" a particulièrement attiré mon attention pour la raison suivante :

Ce sujet rassemble plusieurs facettes qui, selon moi, prennent de plus en plus d'importance dans l'ère actuelle. La première facette a trait à l'utilisation de l'informatique dans l'administration de manière généralisée. Cette évolution me semble une étape non seulement utile mais indispensable pour continuer à garantir une efficacité minimum dans notre monde où tout va de plus en plus vite. Le développement de ce point de passage obligé est déjà bien présent de nos jours et se développera bien d’avantage dans un avenir proche.

La deuxième facette du sujet concerne la sécurité informatique. Cet aspect de l’informatique fait de plus en plus parler de lui dans notre monde où tout est de plus en plus interconnecté au travers d’internet qui reste accessible à tout un chacun.

L'importance même de la sécurité informatique ne cesse donc de croître et plus particulièrement la sécurité liée à la confidentialité.

Pour la réalisation de ce travail, j'ai pu compter sur l'aide inestimable de mon promoteur, le Capitaine d'Aviation Thibault DEBATTY que je remercie beaucoup pour son aide et son appui.

Je tiens également à remercier tous ceux qui ont, de près ou de loin, contribué à la réalisation de ce travail: mes parents, mes frères et sœurs ainsi que mes camarades de promotion.

(3)

Table des matières

Préface ... i

Table des matières...ii

Liste des figures...iv

Liste des abréviations ... v

Introduction... 1

1 Le Chiffrement ... 3

1.1 Introduction ... 3

1.2 Choix des méthodes de chiffrement des données... 4

1.3 Symétrie de chiffrement ... 5

1.3.1 Chiffrement symétrique... 5

1.3.2 Chiffrement asymétrique... 8

1.4 Limitations de ces systèmes de chiffrement... 15

1.5 Le chiffrement homomorphique... 16

1.5.1 Introduction ... 16

1.5.2 Sur le plan technique ... 18

1.5.3 Conclusion intermédiaire ... 23

1.6 Les recherches (queries)... 24

1.6.1 Déterminisme ... 24

1.6.2 Chiffrement homomorphique ... 27

1.7 Conclusion partielle... 28

2 Le projet THEP ... 29

2.1 Introduction ... 29

2.2 Aperçu général ... 30

2.3 Création des clés ... 31

2.3.1 Clé privée ... 31

2.3.2 Clé publique... 33

2.3.3 Chiffrement ... 34

2.3.4 Opérations mathématiques ... 38

2.3.5 Déchiffrement... 41

2.4 Conclusion partielle... 43

3 Porticor ... 44

3.1 Introduction ... 44

3.2 Système de chiffrement utilisé ... 45

(4)

4 Conclusion... 57

5 Recommandations ... 58

Références ... 59

Annexes ... 62

Annexe1 :EncryptedInteger.class... 62

Annexe2 :PrivateKey.class ... 67

Annexe 3: PublicKey ... 68

Annexe 4: THEP.java ... 69

Annexe 5: Mail de Porticor... 71

(5)

Liste des figures

Figure1: SubBytes (http://fr.wikipedia.org/wiki/Advanced_Encryption_Standard) ... 6

Figure 2: ShiftRows (http://fr.wikipedia.org/wiki/Advanced_Encryption_Standard)... 6

Figure 3: MixColumns (http://fr.wikipedia.org/wiki/Advanced_Encryption_Standard)... 7

Figure 4: AddRoundKey (http://fr.wikipedia.org/wiki/Advanced_Encryption_Standard)... 7

Figure 5: clé privée et clé publique (http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique) ... 8

Figure 6: Chiffrement asymétrique (http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique)... 9

Figure 7: Signature (http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique)... 10

Figure 8: Chiffrement non-déterministe (http://research.microsoft.com/apps/pubs/default.aspx?id=192055) ... 26

Figure 9: privkey... 31

Figure 10: PrivateKey... 31

Figure 11: Clé publique... 33

Figure 12: PublicKey... 33

Figure 13: Chiffrement ... 34

Figure 14: Chiffrage de a et de b... 34

Figure 15: EncryptedInteger... 35

Figure 16: findRngCons... 36

Figure 17: findBICons ... 36

Figure 18: set... 37

Figure 19: L'addition ... 38

Figure 20: add ... 38

Figure 21: La multiplication... 39

Figure 22: multiply ... 39

Figure 23: Résultat du logiciel ... 40

Figure 24: decrypt ... 41

Figure 25: Porticor Virtual Key Management Service (https://www.porticor.com)... 45

Figure 26: La solution Porticor (https://www.porticor.com)... 47

Figure 27: Image OVA... 47

Figure 29: Ajout des disques durs... 48

Figure 28: Début avec VMWare Player... 48

Figure 30: Adresse IP du serveur web... 49

Figure 31: Login ... 50

Figure 32: Informations supplémentaires... 50

Figure 33: Début du projet Porticor... 51

Figure 34: Master Key... 51

Figure 35: Porticor Project Setup ... 52

Figure 36: Disques durs... 53

Figure 37: Type de stockage ... 53

Figure 38: Titre... 54

Figure 39: Adresse du Cloud ... 54

Figure 40: Premier dossier sur le Cloud ... 55

(6)

Liste des abréviations

COTS Commercial of the Shelf

AES Advanced Encryption Standard

XOR eXclusive OR (ou exclusif)

RSA Ronald Rivest, Adi Shamir et Leonard

Adleman

PGCD Plus Grand Commun Dénominateur

FHE Fully Homomorphic Encryption

PPCM Plus Petit Commun Multiple

THEP The Homomorphic Encryption Project

FIPS Federal Information Processing Standards

SSL Secure Socket Layer

OSI Open Systems Interconnection

AWS Amazon Web Services

IP Internet Protocol

NFS Network File System

iSCSI Internet Small Computer System Interface

(7)

Introduction

De nos jours, la Défense brasse une quantité énorme d´informations. En effet, grâce aux nouvelles technologies telles que le "Link16"1déjà présent dans nos F-16 et qui permet l'échange de données tactiques, le soldat actuel a accès en tous lieux et en temps réel à des masses d´informations dont celles indispensables à la réalisation de son métier. D´un autre côté, la gestion administrative de l'armée se réalise en majeure partie de façon électronique avec, entre autre, les logiciels ILIASetHarmony, ce qui a pour conséquence de générer également un flux gigantesque de données. Le stockage d´informations, d’informations sécurisées, est donc crucial pour une armée développée telle que la Défense belge.

Le coût engendré par ce stockage est non-négligeable. En effet, il requiert une équipe de spécialistes pour mettre en place le système, l'entretenir, veiller à son bon fonctionnement, en faire des sauvegardes régulières, etc. Pour diminuer ce coût, de plus en plus d´entreprises civiles se tournent vers le Cloud Computing pour le stockage de leurs données (certains exemples commerciaux sont, par ailleurs, déjà bien connus:

DropBox,iCloud, etc.).

Le Cloud Computing consiste à stocker des informations et à utiliser les capacités de serveurs informatiques d'une firme civile au travers d'internet. A l'heure actuelle, la baisse des coûts informatiques liés à cette technologie pourrait bientôt atteindre 30 à 40

%[2]. La Défense a donc tout intérêt à évaluer le potentiel de cette technologie comme solution à long terme pour réduire ses frais de stockage.

Mais l'utilisation de nouvelles technologies va de pair avec de nouveaux défis. Dans notre cas bien précis du Cloud Computing, le problème majeur reste celui de la sécurité de l’information car, à l'heure actuelle, le Net est parcouru par une quantité indénombrable de pirates (de hackers) en tout genre: les ennemis avérés de la Défense Belge, ses ennemis potentiels tels que les Etats voyous (les fameux "rogue nations"[3]), ceux qui piratent par défis, etc. La liste des attaquants potentiels est très longue; il est donc nécessaire de mettre en place une protection complète et sûre pour ne pas laisser la porte ouverte aux dérives en tout genre. De plus, pour le cas précis de la Défense, le propriétaire du Cloudest également une personne contre laquelle il faut se protéger car, comme les autres citoyens ordinaires, elle ne doit pas avoir accès aux informations sensibles.

(8)

Ce travail a l’ambition d'exposer au lecteur une petite facette de la sécurité de l’information dans le domaine du Cloud Computingau travers d'un aspect théorique qui reprend les différentes méthodes de chiffrement actuelles ainsi que de nouvelles découvertes dans le domaine de la cryptographie (le chiffrement homomorphique) mais aussi au travers d'un aspect pratique avec l'implémentation concrète d'une solution discutée dans la première partie (ce fameux chiffrement homomorphique) et finalement à l'aide d'un exemple Commercial of the Shelf (COTS), c'est-à-dire grâce à une solution civile deCloudchiffré. Le fil rouge de ces différents chapitres se situe dans la manière de protéger des données stockées dans unCloud:le chiffrement.

(9)

1 Le Chiffrement

1.1 Introduction

Pour contrer la menace que représentent les pirates du net, qu’ils le fassent par jeu ou pour des raisons commerciales, politiques ou terroristes, une solution évidente apparaît : le chiffrement des données.

En effet, rendre les données ou textes illisibles pour des tiers en les remplaçant par d’autres caractères au moyen d’un ou d’une série de moyens techniques contrôlés par l’auteur et mis à disposition du lecteur semble le moyen idéal de se protéger face à ces pirates.

Lorsque les informations restent en local, c'est-à-dire qu'elles restent uniquement sur une seule machine (et ne voyagent donc pas sur le réseau), le chiffrement peut sembler superflu en raison des protections multiples habituelles des accès au système local mais lorsque les données sortent sur la toile même temporairement, le chiffrement prend tout son sens.

La qualité du chiffrement qui se traduit par la difficulté de décoder son contenu est primordiale.

L’objet de ce présent chapitre est, dans une première partie, de présenter des solutions de chiffrement efficaces et plus particulièrement dans le cas de transfert d'instructions à un Cloudqui est un lieu virtuel de stockage de données sur le Net. Ces instructions sont typiquement des requêtes (GET, POST, etc.) vers les bases de données chiffrées contenues dans leCloudainsi que le rapatriement des réponses.

Dans une deuxième partie, le problème des recherches d'information à l'intérieur des bases de données cryptées sera abordé.

(10)

1.2 Choix des méthodes de chiffrement des données

Lorsque l'on place des données dans un Cloud, elles doivent pouvoir être manipulées.

Pour cela, il faut que l'utilisateur émette des requêtes. La logique de requête traditionnelle à unCloudnécessite plusieurs étapes:

1. Envoyer la requête au serveurCloudpour qu'il l'exécute:

a. Chiffrer la requête sur l'ordinateur du client (l'émetteur de la requête).

b. Ensuite l'envoyer au serveur qui contient la base de données (le Cloud) au travers du réseau.

c. Faire exécuter la requête par le serveur entre les étapes de déchiffrage de la requête et rechiffrage du résultat.

2. Récupérer les données chiffrées

a. Le serveur envoie les données chiffrées correspondantes à la requête.

b. Les données chiffrées sont déchiffrées sur la machine du client pour permettre leurs utilisations.

Le problème majeur qui se pose est de trouver le/les moyens pour chiffrer la requête en local et faire en sorte qu'elle soit utilisable par le serveur. De plus, il apparaît déjà que l'exécution, dans le cas d'un système de chiffrement traditionnel, se fait sans protection dans le Cloudlui-même car la requête est en effet déchiffrée puis exécutée en clair donc sans codage. Ce qui représente évidemment un danger en terme de protection face au propriétaire physique du Cloud ou toute autre personne ayant réussit à en prendre le contrôle de manière licite ou illicite.

Il existe, à ce jour, plusieurs solutions très différentes. Afin de les juger à leur juste valeur, certaines classifications seront faites.

Dans un premier temps, la distinction entre un chiffrement symétrique et asymétrique pour des solutions traditionnelles sera abordée.

Puis, dans un deuxièmes temps, le chiffrement homomorphique sera développé en tant que tel.

(11)

1.3 Symétrie de chiffrement

1.3.1 Chiffrement symétrique

Le chiffrement symétrique est une méthode de chiffrement "très ancienne" (1977 pour l'algorithme RSA [4] [5] [6]) qui consiste à chiffrer un message grâce à une clé, appelons la "A", de telle manière que ce message ne pourra être déchiffré que grâce à cette même clé "A"2.

Le concept de la clé est donc très important et ne s’utilise qu’avec un mécanisme qui, dans le chiffrage de données, est un algorithme. Plus précisément, une clé est donc une donnée qui, une fois insérée dans l'algorithme de chiffrage, permet de coder et de décoder un message.

Cette fameuse clé est le point crucial du système symétrique car pour que le système soit sûr, il faut que l'algorithme soit disponible (publié ouvertement) et que la clé "résiste" à une attaque de "brute forcing", c'est-à-dire à un essai par approche systématique et exhaustive de toutes les clés possibles, de manière à ce que le temps de décodage soit trop long pour être efficace. C'est ce que l'on appelle la sécuritécalculatoire.

Malheureusement, cette sécurité calculatoire s'est affaiblie avec le développement constant des technologies et performances informatiques. Mais les techniques de chiffrement actuelles sont encore suffisamment sûres pour assurer une relative sécurité.

Prenons l'exemple du chiffrement AES (Advanced Encryption Standard) [7], créé par deux concepteurs belges Joan Daemen et Vincent Rijmen, qui utilise des clés de 128 bits c'est à dire

(2���) ����������é� = (3,4028 ∗ 10��) ����������é�

Cet algorithme est considéré aujourd'hui comme relativement sûr: il existe certaines attaques possibles [8] mais elles restent complexes à mettre en place et demande énormément de temps.

1.3.1.1 L'algorithme AES

Pour être plus précis, l'algorithme AES [9] consiste à exécuter un nombre n de fois le même processus composé des mêmes étapes. Dans le cas de l'algorithme AES, le nombre minimum d'itérations est de 10 (ce nombre d'itérations peut atteindre 14 moyennant une clé de base de 256 bits).

(12)

La première itération démar bits), ce bloc sera nomméSta Les 16 octets du bloc de dép transformée à chaque itérati 1.3.1.1.1 Etape 1

Dans un premier temps, les préalable (c'est l'étape dite "S

Figure1: SubBytes (http://fr.wikipe

1.3.1.1.2 Etape 2

Les lignes de cette matrice gauche (l'incrément varie sel

Figure 2: ShiftRows (http://fr.wikip

rre avec un bloc de données de 16 octets ( ate, et une clé de 16 octets également.

part sont placés dans une matrice de 4x4 ion conformément aux quatre étapes.

s 16 octets vont être permutés grâce à un SubBytes" en anglais).

edia.org/wiki/Advanced_Encryption_Standard)

e subissent dans un deuxième temps un lon le numéro de la ligne), c'est l'étape "Shi

pedia.org/wiki/Advanced_Encryption_Standard)

(c'est-à-dire de 128

éléments qui sera

ne table définie au

n décalage vers la iftRows".

(13)

1.3.1.1.3 Etape 3

La troisième étape consiste e une multiplication binaire v auxiliaire (c(x)) selon certain

"MixColumns".

Figure 3: MixColumns (http://fr.wik

Etape 4

La quatrième et dernière éta dernière matrice obtenue e roundkey) est obtenue en eff le State.

en une transformation linéaire de la matri va être effectuée entre la matrice de dépa nes règles spéciales dites "des corps finis

kipedia.org/wiki/Advanced_Encryption_Standard)

ape est une opération XOR (l'opération "ou et une sous-clé (étape "AddRoundKey).

fectuant l'opération XOR bit par bit entre l

rice. Pratiquement, art et une matrice s". C'est l'étape du

u exclusif") entre la Cette sous-clé (la la clé principale et

(14)

1.3.1.2 Avantages et incon

La plus grande faiblesse du A veut transmettre un mess l'algorithme utilisé ainsi algorithmes actuels sont su

"brute forcing". Ils ne sont chiffrement. Par contre, la tr la clé doit absolument être tr de manière non chiffrée. Ell plus, pour augmenter la sécu risque de piratage ou pour l du transfert d'une clé en "c protection ou protégée pa sensiblement la précarité de Heureusement ce défaut pri asymétrique.

1.3.2 Chiffrement asymétri Le chiffrement asymétrique méthode de décodage qui s publiqueetune clé privée. L chiffré grâce à la clé publique

(http://fr.w

nvénients

chiffrement symétrique est sa clé. En effet sage codé à l'utilisateur B, il doit forcémen

que la clé utilisée. Comme décrit pr uffisamment résistants pour affronter les

t donc pas la vraie source de la faibless transmission de la clé reste un problème ré

ransmise "en clair", c'est-à-dire que la clé d lle est donc fort vulnérable lors de ce type urité, la clé doit être changée régulièremen

limiter les effets d'un éventuel piratage ré clair" au travers du Net implique qu'elle ar d'autres moyens que le cryptage, c

ce système de chiffrage symétrique.

incipal a été en grande partie corrigé grâ

ique

[10] [11], aussi appelé le chiffrement à clé se base sur l'utilisation de deux clés di Le principe consiste en l'obligation, pour dé

e, d'utiliser la clé privée correspondante et

Figure 5: clé privée et clé publique

wikipedia.org/wiki/Cryptographie_asym%C3%A9triq

et, si un utilisateur nt lui transmettre récédemment, les attaques dites de se de ce genre de écurrent. En effet, doit être transmise pe de transfert! De nt pour diminuer le éussit. Le principe doit voyager sans ce qui augmente

âce au chiffrement

é publique, est une ifférentes: une clé écoder un message

vice-versa.

que)

(15)

Les clés publiques doivent êt accès tandis que les clés priv les clés privées sont aussi dif sert à rien car les pirates ont Ce principe élimine le plus g donner via le réseau la clé un Tandis que, dans le cas d'un le réseau (et y est accessible pas du tout sur le réseau. Ce Illustrons ce principe à l'aide

Soit un utilisateur A, Alice, s Bob, sur un canal susceptible Alice va, dans un premier t privée APrivée.

Ensuite, elle va publier sa cl accès à cette clé. Ce faisant, Dans un deuxième temps, B

(http://fr.wikip

être diffusées sur tout le réseau pour que t vées doivent être conservées uniquement en iffusées (ne sont plus uniquement en local)

t accès aux deux clés et peuvent déchiffrer grand inconvénient du chiffrement symétr nique de chiffrement "en clair".

n chiffrement asymétrique, seule la clé pub e à tous) alors que la clé privée reste locale

eci permet de garantir nettement plus de sé e d'un exemple [10] :

souhaitant recevoir un message secret d'un e d'être écouté par un utilisateur C, Caro.

temps, générer deux clés: sa clé publique

lé publique APublique sur le réseau de manièr Caro aura aussi accès à cette clé publique.

Bob, récupère la clé publique d'Alice APub

Figure 6: Chiffrement asymétrique

pedia.org/wiki/Cryptographie_asym%C3%A9trique)

tout le monde y ait n local. En effet, si ), le chiffrement ne

les messages.

rique: le besoin de

blique transite sur e et ne voyage donc

écurité.

n utilisateur B,

e APublique et sa clé

re à ce que Bob ait

bliquevia le réseau,

(16)

La troisième et dernière étape consiste, pour Alice, à déchiffrer le message grâce à sa clé privée (APrivée) qu'elle seule possède.

L'utilisateur C, Caro, est donc incapable de déchiffrer le message codé par Bob même si elle parvient à l'intercepter.

Il y a différentes applications possibles de ce genre de système de chiffrement.

Un exemple des plus connus est sans nuls doutes celui de la signature.

La problématique de ces communications de données sensibles se situe dans le fait que, lors du transfert d'informations, l'identité de l'expéditeur d'un message (un e-mail par exemple) peut être usurpée.

Mais, grâce au chiffrement asymétrique, ceci peut être évité.

En effet, dans la continuité de l'exemple précédent, imaginons qu'Alice désire envoyer un message chiffré à Bob et ce dernier désirerait être certain qu'Alice soit bien l'émettrice de ce message. Il suffit alors à Alice de chiffrer sa signature avec sa clé privée APrivée et, ensuite, de chiffrer tout le message avec la clé publique de Bob BPublique. Ainsi, à la réception, Bob pourra déchiffrer le message en utilisant sa clé privée BPrivéeet il pourra également déchiffrer la signature d'Alice grâce à la clé publique d'Alice APublique. Or, comme un message chiffré par la clé privée d'Alice peut être déchiffré uniquement avec la clé publique d'Alice, Bob peut être sûr qu'il s'agit bien d'Alice et non d'un usurpateur.

Ce système est, entre autres, utilisé pour les signatures de payements bancaires au travers du Net.

Figure 7: Signature

(http://fr.wikipedia.org/wiki/Cryptographie_asym%C3%A9trique)

(17)

Une troisième application de cette méthode de chiffrement est la non-répudiation d'un message: lorsque Bob reçoit un message signé d'Alice, il est certain que ce message provient d'Alice et que elle seule peut l'avoir envoyé. Alice ne peut donc pas nier être l'auteur de ce message, c'est la non-répudiation.

1.3.2.1 L'algorithme RSA

L'algorithme de chiffrement RSA [4] [5] [6] (appelé d'après les noms de ses développeurs:

Ronald Rivest, Adi Shamir et Leonard Adleman) est un algorithme très utilisé à l'heure actuelle pour la protection des données sur internet.

C'est un chiffrement asymétrique dont les clés sont constituées uniquement de nombres premiers. Il s'appuie d'une part sur la congruence des nombres entiers (l'opération

"modulo n") et d'autre part sur le petit théorème de Fermat qui peut s'énoncer comme suit: "Si p est un nombre premier et siaest un entier non divisible par p, alors (ap-1 - 1) est un multiple dep".

En d'autres termes, si p est un nombre premier et a un entier non divisible parp, alors on a

���− 1 = 0 (������ �)

Ce qui revient à dire que sipest un nombre premier et queaest un nombre quelconque, alors (ap-1-1)est un multiple dep.

Une autre notion importante utilisée dans cet algorithme est la fonction mathématique appelée "indicatrice d'Euler". Cette fonction mathématique couramment notée (!) associe ànle nombre d'entiers strictement positifs inférieurs ou égaux ànet premiers à n. De manière plus formelle, on peut écrire:

⟶ ℕ

! ⟼ &�'� (( � ) ℕ| � ≤ ! ,� � �',��,' à !})

La dernière notion mathématique utile à la compréhension de ce chiffrement est l'algorithme d'Euclide étendu qui permet à partir de deux entiers a et b, de calculer non seulement leur plus grand commun diviseur (PGCD), mais aussi un de leurs couples de coefficients de Bézout (deux entiers x et y tels que a.x + b.y = PGCD(a, b)). Quand a et b

(18)

Pratiquement, l'utilisation de l'algorithme RSA passe par trois phases distinctes:

• La création des clés;

• Le chiffrement;

• Le décodage.

1.3.2.1.1 Création des clés

La création de clés se fait en cinq étapes:

1. La première étape consiste à choisir deux nombres premiers distinctspetq.

2. Ensuite, il faut calculerntel que:

! = � × 0

3. Le troisième temps consiste à calculer l'indicatrice d'Euler enn:

(!) = (� − 1) . (0 − 1)

4. La quatrième et avant dernière étape consiste à choisir l'exposant de

chiffrement. Ce nombre est un entier naturelequi doit être premier avec (!) et strictement inférieur à (!).

5. La dernière étape est le calcul ded, l'exposant de déchiffrement. Cedest l'inverse de(, ������ (!))et est strictement inférieur à (!). Ce nombre peut être calculé grâce à l'algorithme d'Euclide étendu.

Les clés peuvent enfin être exprimées:

2� &�é �����0�, = (,, !) 2� &�é �'�3é, = (�, !)

Illustrons ceci avec un exemple [13]:

Prenons 2 nombres premiers au hasard:

p = 29, q = 37 Alors,

n = pq = 29 * 37 = 1073

Il faut choisireau hasard tel queen'ai aucun facteur en commun avec(p-1)(q-1):

(19)

Prenons, par exemple,

e = 71

dest alors tel que

(71 × �) ������ 1008 = 1 d = 1079

Les clés sont donc:

La clé publique est(e,n) = (71,1073) (=clé d'encryptage) La clé privée est(d,n) = (1079,1073) (=clé de décryptage)

1.3.2.1.2 Chiffrement

Soit M un entier naturel strictement inférieur à n représentant un message, alors le message chiffréCsera:

5 ≡ 78(������ !) 1.3.2.1.3 Déchiffrement

Pour déchiffrer C, on utilise d, l'inverse de e modulo (p-1)(q-1), et on retrouve le message clair M par

7 ≡ 59(������ !)

La démonstration repose sur le petit théorème de Fermat, à savoir que comme p et q sont deux nombres premiers, siMn'est pas un multiple dep, on a la première égalité, et la seconde s'il n'est pas un multiple deq:

7��� ≡ 1 (������ �) , 7:�� ≡ 1 (������ 0)

(20)

En effet

59 ≡ ( 78)9 ≡ 789 (������ !)

Or

,. � ≡ 1 (������ (� − 1). (0 − 1))

Ce qui signifie que pour un entierk

,. � = 1 + <. (� − 1). (0 − 1)

Donc, siMn'est pas multiple depd'après le petit théorème de Fermat

789 ≡ 7�=>(���)(:��) ≡ 7 . (7���)>(:��) ≡ 7 (������ �)

et de même, siMn'est pas multiple deq, on peut tenir le même raisonnement et avoir

789 ≡ 7 (������ 0)

Les deux égalités sont en fait réalisées pour n'importe quel entier M, car si M est un multiple de p, M et toutes ses puissances non-nulles sont congrues à 0 modulo p (de même pourq).

L'entier?789− 7 @est donc un multiple de p et de q, qui sont premiers distincts, donc également de leur produitpq = n.

Il est dès lors possible de retrouver le message clairMdepuis le message codéCgrâce à l'opération

7 ≡ 59(������ !)

(21)

1.4 Limitations de ces systèmes de chiffrement

Comme nous l'avons vu dans les exemples de ces deux types différents de codage, le chiffrement symétrique et asymétrique, la seule possibilité qui s'offre à nous est celle d'encoder un message et de le décoder entièrement soit avec la même clé (chiffrement symétrique) soit avec deux clés différentes (chiffrement asymétrique). Dans les cas où la quantité de données reste limitée, ces méthodes peuvent être suffisantes car les opérations de rapatriement et de décodage seront limitées dans le temps. Mais si l'on applique ces méthodes à de grandes bases de données comme celles de la Défense où des centaines de gigas de données sont en jeux, il est clair que la puissance du réseau et des ordinateurs ne suffira pas pour assurer une efficacité maximum.

Or, dans le cas de l’entreposage de données chiffrées stockées dans unCloud, nous avons besoin de pouvoir exécuter , au sein même du Cloud, une recherche sur les données sans devoir, à chaque fois, tout déchiffrer et tout re-chiffrer. En effet, la méthode "primitive"

serait d'encoder d'abord en local nos données à stocker et de les envoyer ensuite une fois chiffrées vers le Cloud. Alors, pour toutes modifications, il faudra télécharger l'ensemble des données et les déchiffrer. Ce qui résulte en une perte considérable de puissance de calcul et de temps.

On en déduit qu'un simple algorithme de chiffrement brut symétrique ou asymétrique n'est pas efficace dans le cas du Cloud Computing. Cependant, ces principes sont essentiels pour arriver, à terme, à une méthode de chiffrement adaptée à notre situation.

Récemment, une solution théorique s'est développée: le chiffrement homomorphique.

(22)

1.5 Le chiffrement homomorphique

1.5.1 Introduction

"An encryption is homomorphic, if: from Enc(a) and Enc(b) it is possible to compute Enc(f(a, b)), where f can be: +, ×,⊕and without using the private key"[14].

Librement traduit cela donne: "Un chiffrement est homomorphique si: depuis Enc(a) et Enc(b) il est possible de calculer Enc(f(a, b)), où f peut être: +, ×,⊕ et ce, sans utiliser la clé privée".

Le cryptage homomorphique est une forme de cryptage qui permet d'effectuer certains types de calculs sur un texte chiffré et de générer un résultat chiffré qui, une fois déchiffré, correspond au résultat d'opérations effectuées sur le texte en clair [15].

Par exemple, un chiffrement capable de faire:

Dec [ Enc(1) + Enc(2) ] = 3

Appliquée au stockage des données chiffrées placées sur le Cloud, la définition de cette méthode de cryptage semble être une bonne solution permettant de traiter, au sein même duCloud, la requête sans devoir décrypter les données au niveau du serveur.

Pour exprimer ce type de chiffrement à travers une analogie concrète, prenons l'exemple d'un gérant d'une bijouterie [16].

Ce gérant aimerait que ses employés assemblent des pierres et des matériaux précieux pour en faire des bijoux finis mais il est très inquiet par rapport aux vols. Il résout le problème en construisant des boîtes pourvues de gants, boîtes dans lesquelles il stocke les pierres et matériaux précieux et dont il est le seul à posséder la clé. En utilisant les gants, un employé peut manipuler les pierres ou matériaux à l'intérieur des boîtes.

L'employé peut aussi introduire de nouveaux matériaux sans que rien ne puisse en sortir. Une fois le travail terminé, le gérant peut venir récupérer le travail terminé en utilisant sa clé.

Bien sûr, cette analogie n'est pas entièrement correcte car dans le cas d'un chiffrement totalement homomorphique, seul le produit final importe.

Plusieurs vieux systèmes de chiffrement connus tels que RSA (1977 [5]), Benaloh (1994 [17] ou Paillier (1999 [18] [19]) sont partiellement homomorphiques. En effet, ils permettent le calcul homomorphique d'une seule opération (l'addition ou la multiplication) sur des textes en clair . Un système de cryptographie qui supporte à la fois l'additionetla multiplication est appelé "cryptage entièrement homomorphique" (ou Fully Homomorphic Encryptionen anglais, abrévié: FHE) et est beaucoup plus puissant.

En outre, l'utilisation d'un tel système permet à un processus ou à un algorithme d'être

"homomorphisé".

(23)

C'est-à-dire que l'utilisation d'un cryptage homomorphique permettrait au système d'utiliser des données brutes cryptées homomorphiquement sans devoir les déchiffrer et, de ce fait, produire un résultat qui lui aussi sera chiffré homomorphiquement sans devoir implémenter un quelconque système de cryptage propre. De plus, comme un tel programme ne décrypte pas les données entrantes, il peut être exécuté par un tiers n'ayant pas accès aux algorithmes / clés de décodage (tiers "non approuvé") et, de cette manière, être exécuté sans révéler ses secrets.

L'utilité du cryptage entièrement homomorphique est reconnu depuis longtemps. La question de la mise en place d'un tel système a été posée à la suite du développement du crypto-système RSA car celui-ci étant partiellement homomorphique, la recherche s'est orientée vers une solution l'étant totalement. Trouver une solution s'est avérée plus difficile que prévu. En effet, pendant plus de 30 ans, il a été difficile de savoir si le cryptage entièrement homomorphique était réellement possible. Pendant cette période, la meilleure solution a été le système de chiffrement Boneh - Goh - Nissim [20] qui permettait l'utilisation d'un nombre illimité d'opérations d'addition, mais avec un maximum d'une seule multiplication.

C'est en 2009 que Craig Gentry a montré le premier schéma de chiffrement totalement homomorphique [16]. Son élaboration commence à partir d'un schéma de chiffrement peu (partiellement) homomorphique qui évolue ensuite selon un schéma le rendant

"bootstrappable". Dans ce cas-ci, l'adjectif "bootstrappable" fait référence aux petits programmes d'amorçage qui permettent d'en lancer de plus gros, c'est-à-dire qu'une petite partie partiellement homomorphique du schéma de Craig Gentry sert à démarrer une plus grosse partie qui, elle, sera totalement homomorphique. Il démontre enfin que tout système de chiffrement homomorphique bootstrappable peut être converti en un chiffrement totalement homomorphique avec peu de manipulation.

En ce qui concerne les performances, évaluées grâce au schéma de Gentry, elles restent encore faibles dans la mesure où le temps de compilation ne dépend pas du tout de la complexité de la fonction qui est appliquée sur les données chiffrées: le temps de calcul est lié linéairement au nombre d'opérations effectuées. Cependant, ce schéma n'est pas pratique pour de nombreuses applications, car la taille du texte à chiffrer et le temps de calcul augmentent fortement lorsque l'on désire augmenter le niveau de sécurité. Pour obtenir une sécurité suffisante contre les attaques connues, le temps de calcul et la taille du texte chiffré sont encore trop longs, bien qu'une amélioration ait déjà été apportée par Stehle et Steinfeld [13]. Ce phénomène est un des plus grands freins à l'utilisation de cette technologie pourtant très prometteuse.

En 2009, Marten van Dijk , Craig Gentry , Shai Halevi et Vinod Vaikuntanathan [21]

ont présenté un deuxième plan de cryptage entièrement homomorphique [15] qui utilise

(24)

Cette nouvelle approche est conceptuellement plus simple que le système originel de Gentry, mais possède des propriétés similaires en ce qui concerne les opérations et l'efficacité homomorphique ainsi que le temps de compilation.

1.5.2 Sur le plan technique

L'exigence minimale pour un schéma de cryptage homomorphique est d'être déchiffrable.

En effet, pour tout schéma B d'encryption homomorphique, il doit être possible de décrypter un texte encrypté en étant munis des clés publiques/privées nécessaires.

Le but final est de construire un schéma d'encryption B qui soit totalement homomorphique.

Pour l'exprimer autrement, l'essence même de l'encryption homomorphique est simple:

soit un texte original

C, C, C, … , CE et sa version chiffrée

B (C, C, C, … , CE)

un chiffrement homomorphique de ce texte sera tout chiffrement qui permet à n'importe qui (pas seulement le détenteur des clés de cryptage) de produire un texte chiffré qui encode

F(C, C, C, … , CE)

pour toute fonction f. C'est-à-dire que n'importe qui sera capable d'effectuer, à partir de B (C, C, C, … , CE),

B[ F (C, C, C, … , CE)]

Aucune information à propos de (C, C, C, … , CE) ou de n'importe quel produit intermédiaire n'est "lisible" car l'input, l'output et les produits intermédiaires sont toujours cryptés.

Pour satisfaire à cette définition, un cryptage entièrement homomorphique doit être homomorphique multiplicatif et homomorphique additif.

En effet, sans ces deux propriétés essentielles, il serait impossible de pouvoir appliquer une fonction quelconque f à C, C, C, … , CE, ce qui est le but final de l'encryptage homomorphique.

(25)

1.5.2.1 Homomorphique additif

Un cryptage homomorphique additif est un cryptage homomorphique qui respecte la propriété d'additivité. Cette propriété stipule qu'il est possible, connaissant la clé publique de p et de q et la méthode de chiffrement, de calculer le chiffrement de (p+q) [14].

Donc, un cryptage est additif si:

I!& (J⨁L) = I!& (J) M I!&(L)

ou, plus généralement,

I!& (N �O) = P I!& (�O)

Q

OR�

Q

OR�

C'est-à-dire que le chiffrement de la somme des blocs est égal à la multiplication des blocs chiffrés.

Pour illustrer ceci, prenons comme exemple le crypto-système de Paillier (1999 [18]).

Ce système , tout comme RSA, demande deux inputs:petq, deux nombres premiers.

Dans un premier temps, il faut calculernet λ tel que:

! = � × 0

S = TT573(� − 1, 0 − 1) Ensuite, il faut choisir gtel que:

U ∈ ℤXY

TZ5[ \2 ?U]������ !@, !^ = 1 �3,& 2_ = (� − 1)

!

Les clés sont alors

5�é �����0�, = (!, U) 5�é �'�3é, = (�, 0)

(26)

Pour chiffrer un messagemavec la clé publique, il faut d'abord choisirrtel que ' ∈ ℤX

Ensuite, on peut calculerc, le messagemchiffré avec ce système de Paillier:

& = U`× 'X������ !²

Pour déchiffrer ce messagec, en un message clairm, il faut procéder comme suit:

� = 2 ( &]������ !)

2 ( U]������ !) ������ !

Or, supposons deux textes chiffrés comme décris ci-dessusC1etC2tels que:

5= U`b. 'X. ��� ! 5= U`Y. 'X. ��� !

On peut ensuite réaliser la multiplication de ces deux messages:

5. 5= U`b. 'X. U. 'X��� != U`b=`Y. ('. ')X��� !

On peut dès lors remarquer que si l'on déchiffre ce message, le résultat sera égal à

cOXdQ= �+ �

Prenons un exemple pour clarifier les choses:

Soit� = 7 ,� 0 = 11

Alors! = 7 × 11 = 77 ,� U = 5652(g a été calculée grâce à Mathlab selon la formule ci- dessus).

Et donc la clé privée vaut(7,11)tandis que la clé publique vaudra(77,5652).

Soit un message�= 42avec'= 23et un message�= 56avec'= 29

(27)

Alors on a

&= [(5652)h�× (23)ii]������ 5929

&= [(5652)jk× (29)ii]������ 5929

Or si l'on multipliec1etc2, on obtient:

&× &= [(5652)h�× (5652)jk× (23)ii× (29)ii]������ 5929

= [(5652)h�=jk× (23 × 29)ii]������ 5929

Et si l'on déchiffrec1.c2, on a

cOXdQ = 42 + 56 = 98

Ce qui est bien l'addition de nos deux messages d'originesm1etm2.

On peut donc conclure que le système de Paillier réalise cette propriété d'additivité homomorphique.

Une application concrète d'un cryptage homomorphique additif est le vote électronique:

chaque vote est encrypté et seule la "somme" est décryptée.

1.5.2.2 Homomorphique multiplicatif

Un cryptage homomorphique multiplicatif est un cryptage homomorphique qui respecte la propriété de multiplication. Cette propriété stipule qu'il est possible, connaissant la clé publique de p et de q et la méthode de chiffrement, de calculer le chiffrement de (p.q) [14].

Comme précédemment cité, la notion de cryptage entièrement homomorphique a été introduite peu après le développement de la solution de cryptage RSA (Rivest, Shamir et Adleman) car cette solution RSA est en fait un schéma de cryptage homomorphique multiplicatif. Reprenons ce système RSA pour expliquer cette propriété de multiplication homomorphique.

Soit une clé publique RSA

�< = (,, !)

(28)

et le texte chiffré par ce système (ciphertexten anglais):

5O ≡ �O8(������ !) alors, on peut effectivement calculer:

P 5O

O

= (P mm

O

)8 ������ !

Ce qui est un texte chiffré résultant du produit des textes chiffrés mais qui est aussi le chiffrement du produit des textes originaux.

C'est en fait une propriété "accidentelle" du crypto-système RSA.

Outre le fait que cette propriété soit présente, il existe un problème de sécurité. En effet, supposons deux textes chiffrésC1etC2provenant des messagesm1etm2tels que:

5= �8������ ! 5= �8������ ! Alors

5 × 5= (�8× �8) ������ ! = (� × �)8������ !

Or, si le client envoie la paire (C1,C2) au serveur, celui-ci va effectuer l'opération demandée par le client et renvoyer le résultat (C1xC2) au client.

Si un pirate intercepte les deux textes C1 et C2, encrypté avec la même clé, il sera capable de décrypter tous les messages échangés entre le serveur et le client moyennant des techniques mathématiques complexes.

Prenons un exemple concret:

Soit

p = 3, q = 11, e =7 et d = 3

et soit une taille de bloc de 1 (pour plus de facilité, nous utiliserons également des messages de un bloc de longueur).

Les deux messages m1 et m2 et leur messages chiffrés respectifs C1 et C2 obtenus en utilisant le cryptage RSA:

m1= 9 etC1= 15 m2= 3etC2= 9

(29)

Appliquons maintenant la multiplication:

5× 5 = 15 × 9 = 135

Maintenant, si nous décryptons le texte chiffré (C1xC2) avec la clé privée, nous obtenons:

� = (5 × 5)9������ ! = 135������ 33 = 27

Ce qui est exactement la multiplication des deux messages originaux:

m1= 9 m2= 3 m1xm2= 27

Il est donc montré que le crypto-système RSA respecte bien la propriété de multiplicité homomorphique, propriété qu'il est essentiel de posséder dans le cadre d'un chiffrement totalement homomorphique.

1.5.3 Conclusion intermédiaire

Il a été démontré que certains systèmes de chiffrement possèdent, individuellement, des propriétés d'homomorphisme (additif ou multiplicatif) et qu'une solution rassemblant ces deux propriétés a été trouvée. Ces systèmes de chiffrement ne présentant qu'une seule des deux propriétés sont appelés "chiffrements partiellement homomorphiques" tandis que la solution qui joint les deux propriétés est appelée "totalement homomorphique".

Cette solution totalement homomorphique permet, comme il a été démontré, d'effectuer des additions et des multiplications sur les données chiffrées sans devoir les déchiffrer, ce qui représentait une des grandes failles de sécurité dans les chiffrements classiques.

Cette méthode de chiffrement est donc une bonne alternative mais elle présente un désavantage: sa complexité. Cet inconvénient mène a une certaine lenteur dans l'exécution de ce chiffrement, ce qui en fait son défaut principal.

(30)

1.6 Les recherches (queries)

La recherche (ou query en anglais) peut représenter un problème complexe dans le contexte des bases de données chiffrées. Ce problème est en fait plus large qu'il n'y paraît.

En effet, la recherche d'une information chiffrée dans une base de données elles-mêmes chiffrées n'est qu'une facette du problème qui consiste à effectuer une opération donnée dans cette base de données.

Pour le dire plus clairement, l'informatique n'a pas révolutionné les mathématiques: les opérations de bases sur lesquelles toute autre opération est basée restent l'addition, la soustraction, la multiplication et la division. Certains vont même plus loin en assimilant la soustraction à un cas particulier d'addition et la division à un cas particulier de multiplication. Une recherche dans une base de données sera donc, au final, une série d'instructions exécutées par le processeur. Dès lors, que la finalité de cette série d'instructions soit une recherche ou une addition ne change presque rien à notre problème: comment effectuer une opération dans une base de données chiffrées?

1.6.1 Déterminisme

La première partie de la solution est de classifier le type de chiffrement utilisé. En effet, il peut être déterministe ou non-déterministe. Cette section a donc pour fonction d'expliquer la différence qui existe entre un chiffrement déterministe et un chiffrement non-déterministe au travers d'exemples concrets.

1.6.1.1 Déterministe

Un système de chiffrement déterministe est un schéma de chiffrement qui produira toujours le même texte chiffré pour un texte clair donné et pour une certaine clé [22].

Dès lors, il devient plus aisé d'effectuer des opérations sur les parties chiffrées. En effet, prenons le cas très simple d'un schéma de chiffrement tel que pour chaque bloc, le chiffrement consiste à additionner la valeur de la clé (il s'agit donc d'un chiffrement symétrique car pour le déchiffrer, il suffit de soustraire la clé). On a donc, si la clé vaut un,

n��&opOccqé= n��&oQdOq+ 1

Supposons également que les données ne soient constituées que d'une matrice contenant des chiffres et qu'un bloc corresponde à un seul chiffre. Le système de chiffrement s'applique sur chaque élément individuellement (les éléments vont donc garder leur place initiale) avec une clé valant un.

(31)

ID élève Points ID* élève Points*

1 6 2 7

2 4 3 5

3 3 4 4

4 8 5 9

5 2 6 3

Matrice non-chiffrée Matrice chiffrée

Il est donc clair que la recherche dans ce genre de schéma de chiffrement est relativement aisée. Effectivement, il suffit de chiffrer la recherche de la même manière que les données ont été chiffrées pour que la recherche puisse s'exécuter sur les données chiffrées. Prenons un exemple simple,

Select*

FromNom_de_ma_Table whereID élève = 2

Select*

FromNom_de_la_Table whereID* élève = 3

Notons au passage que ce genre de chiffrement ne respecte pas l'additivité ni la multiplicité homomorphique. En effet, on a

1 + 2 = 3

2 + 3 4

De plus, on a également

1 x 2 = 1

2 x 3 2

Ce système de chiffrement n'est donc visiblement pas homomorphique en addition et en multiplication.

Le point fort de ce système est qu'il est aisé d'y effectuer une opération dans les données cryptées mais il souffre d'un point faible de taille: la sécurité!

Il est indéniable qu'un pirate informatique doué pourrait, par recoupements, réussir à déterminer l'emplacement de certaines informations etc.

Il est donc clair que ce genre de système n'est pas adapté à pour l'utilisation d'unCloud contenant des données sensibles car il n'offre pas assez de sécurité.

(32)

1.6.1.2 Non-déterministe

Un système de chiffrement non-déterministe, également appelé probabiliste, est un schéma de chiffrement qui utilise au moins un élément aléatoire de sorte que si le même message est codé plusieurs fois, les messages chiffrés résultants seront généralement différents (d'où l'idée de probabilité) [23]. Ce genre de mécanisme se rencontre essentiellement dans des schémas de chiffrements asymétriques mais certains schémas symétriques l'utilisent également.

Un exemple concret de ce genre de chiffrement peut être élaboré à partir du système AES décrit plus haut.

Le principe est de démarrer notre système de chiffrement par un vecteur initial de valeur aléatoire auquel on ajoute le premier bloc de notre message à coder. Ensuite, le résultat de cette opération est chiffré grâce à l'algorithme AES et une certaine clé (symétrique). Pour chiffrer le second bloc, on utilisera le résultat de ce chiffrement pour l'ajouter au bloc et ce n'est qu'après cette opération que l'on pourra utiliser AES pour chiffrer et ainsi de suite pour les autres blocs.

Il apparaît donc que le résultat d'un tel schéma est non-déterministe car le vecteur initial aléatoire implique une possible variation du résultat final liée à la probabilité d'utiliser le même vecteur initial aléatoire.

Figure 8: Chiffrement non-déterministe (http://research.microsoft.com/apps/pubs/default.aspx?id=192055)

(33)

Dans ce genre de schéma, la recherche et les autres opérations sur les données déjà chiffrées sont, si pas impossibles, très complexes. En effet, comme une même information peut être chiffrée différemment, il est donc presque impossible de l'identifier dans une base où chaque donnée peut prendre une valeur particulière parmi un panel de valeurs.

Certaines solutions approchent quand même la réalisation d'une recherche dans des données chiffrées grâce à un algorithme pseudo-non-déterministe telle que celle proposée par Porticor (voir ci-après). Mais aucune n'y arrive lorsque l'algorithme est réellement non-déterministe.

1.6.2 Chiffrement homomorphique

De par sa nature complexe, le chiffrement homomorphique permet de réaliser des additions et des multiplications: ce qui revient à dire qu'il permet d'effectuer des recherches sur les données codées.

Mais ce système de codage est-il déterministe ou non-déterministe? Le choix est crucial car il a été démontré plus haut que le danger inhérent aux systèmes de chiffrement déterministe est le fait de pouvoir déterminer où se situent les différentes informations.

Il est donc important de pouvoir utiliser un système de codage homomorphique non- déterministe.

Le système de chiffrement homomorphique échappe quelque peu à cette classification car, tout comme le système AES, il peut être utilisé de plusieurs façons le rendant tantôt déterministe et tantôt non-déterministe [16].

(34)

1.7 Conclusion partielle

Ce chapitre met en lumière les faiblesses des méthodes de chiffrement classiques. En effet, elles comportent des vulnérabilités inhérentes à leurs modes de fonctionnement;

vulnérabilités beaucoup trop importantes pour pouvoir être utilisées pour le stockage d'informations sensibles comme pourrait le faire la Défense.

De plus, il est maintenant clair que toutes les méthodes de chiffrement ne sont pas utilisables dans la perspective d'un Cloud. Il est indéniable que pour une telle utilisation, la fonction de recherche est primordiale et tous les systèmes de codage n'offrent pas cette possibilité. Le choix est donc réduit.

Le chiffrement homomorphique répond, en partie, à ces besoins de sécurité et de fonctionnalités mais n'est pas non plus la solution idéale. Il comporte, lui aussi, un point faible: le temps de calcul qui est très important. Or, dans l'optique de l'utilisation d'un Cloudpour sa gestion administrative, la Défense a besoin de manipuler ses informations très régulièrement et souvent sans délai. Le temps de calcul a donc une influence très significative et le temps de calcul du chiffrement homomorphique peut constituer un frein significatif dans l'utilisation quotidienne de ses données.

En définitive, il n'existe pas de solution miracle. La seule alternative envisageable est de trouver un bon compromis de l'utilisation de ces différentes techniques pour arriver à un système combinant sécurité et vitesse.

(35)

2 Le projet THEP

2.1 Introduction

Dans le cadre du développement informatique du chiffrement homomorphique, un projet dit "libre" (libre d'accès au code source et à la manipulation) est disponible sur Google Code dont le but est d'implémenter dans le langage informatique Java ce genre de chiffrement. Les parties les plus intéressantes du code sources de ce projet sont disponibles dans les annexes 1 à 4.

Ce projet porte le nom de THEP (The Homomorphic Encryption Project) et est au stade de la réalisation expérimentale. Cela signifie que le projet n'est pas finalisé et qu'il n'est disponible que sous forme de fichiers informatiques comme des librairies diverses ou des conteneurs java (fichier avec l'extension ".jar").

Ce projet se base essentiellement sur la thèse Craig Gentry: " A FULLY HOMOMORPHIC ENCRYPTION SCHEME" [16] consacrée au chiffrement homomorphique. Sa mise à disposition sur le Net indique qu'il y a une réelle volonté d'ouvrir la recherche à l'implémentation.

Dans un premier temps, le projet a été étudié et une ébauche de "programme"

fonctionnel a été développée. En effet, le projet en lui même ne consiste qu'en une collection de classes implémentant le chiffrement homomorphique, il a donc fallut créer une nouvelle classe permettant de mettre en application cette implémentation.

Les explications du fonctionnement du chiffrement homomorphique se baseront sur la classe développée par nos soins.

(36)

2.2 Aperçu général

Dans cette partie, le fonctionnement très global de la librairie sera abordé par le biais de l'articulation logique en quatre phases du logiciel développé:

1. Création des clés;

2. Chiffrement;

3. Opérations mathématiques (addition et multiplication);

4. Déchiffrement;

Pour être le plus didactique possible, le programme montre séparément l'addition et la multiplication. Bien sûr, ces opérations peuvent être combinées à l'infini pour créer des opérations des plus complexes.

Dès lors, les recherches (ou queries) dans des bases de données cryptées sont possibles comme vu précédemment. La classe Java que nous avons développé pourrait donc être utilisée pour le chiffrement de bases de données au prix de modifications ou améliorations relativement complexes et fastidieuses.

(37)

2.3 Création des clés

L'étape de la création des clés est une des plus essentielles. En effet, c'est elle qui va définir la taille et la complexité des clés et donc du chiffrement. Mais d'un autre côté, la connaissance du mécanisme de création de cette clé importe peut tant que le programme est capable de la reconnaître et de l'utiliser. Pour simplifier quelque peu le projet THEP, il a été décidé que ces clés seraient aléatoires, ce qui est beaucoup plus facile pour l'encodage.

Dans l'exemple développé, nous nous remettons entièrement aux classes Java intitulées

"PrivateKey"et"PublicKey"contenues dans le projet THEP.

2.3.1 Clé privée

Pour la création des clés aléatoires, le programme fait appel à la fonction PrivateKey avec un paramètre de longueur arbitrairement choisit de 128 bits. Cette clé privée sera appelée sans surprise "privkey".

Figure 9:privkey

La seconde ligne (ligne 22) ne sert qu'à afficher la clé privée lors de l'exécution du logiciel. Cette étape n'est pas du tout indispensable lors du développement d'un logiciel plus complexe et plus opérationnel. Elle n'est présente dans notre cas que pour assurer une bonne compréhension du mécanisme de chiffrement.

Pour clarifier le mécanisme de création de la clé privée aléatoire, il suffit de développer (ouvrir) la classe java PrivateKey. En effet, dans cette classe, tous les détails liés à sa création sont visibles:

(38)

Il paraît donc que le seul argument à fournir à cette fonction est bien sa longueur sous la forme d'un entier (integer en anglais, représenté par "int"). Dans l'exemple développé, la longueur est de 128 bits.

Lors de la création de cette clé, la première étape consiste à utiliser un générateur de nombres sécurisés. Il s'agit d'un nombre issu de la classe SecureRandom [24]. Cette classe fournit un générateur de nombre "fort" en terme de cryptographie. Ces nombres

"forts" se plient aux exigences de la norme FIPS 140-2 section 4.9.1 [25] qui spécifie:

"A cryptographic module shall perform the following power-up tests: cryptographic algorithm test, software/firmware integrity test, and critical functions test". De plus, le nombre fournit par cette classe est non déterministe (au sens vu ci-dessus), il ne peut donc pas être "deviné" à l'avance: il est imprévisible.

Les étapes suivantes consistent à créer deux nombres (i.e. p et q) qui sont

"probablement" premiers. On reconnaît par ailleurs les nombres p et q de l'algorithme RSA (le chiffrement homomorphique en est proche).

En effet, la classe BigInteger permet de construire un nombre positif qui est

"probablement" premier, avec une représentation en binaire de longueur du premier argument. La "probabilité" que l'entier soit premier dépasse:

T'��������érq8`O8q = s1 − 1

298_tOè`8 dqv_`8XEw

Il est évident que cette probabilité doit être la plus élevée possible pour le bon déroulement de la suite de la création de la clé. En effet, il est impératif que ces nombres soient premiers comme il a été démontré dans la section à propos des clés de chiffrement dans un système asymétrique. Malheureusement, le temps de création de cette clé dépend du degré de certitude que l'on veut atteindre. Il est donc important de trouver un juste milieu entre complexité (qui augmente la sécurité) et vitesse d'exécution.

Dans notre exemple, les deux nombres p et q sont créés avec une représentation en binaire de longueur de 64 bits (car la longueur de la clé vaut 128 bits, ces deux nombres sont donc de longueur128 / 2 = 64bits).

Toujours avec ce même exemple, la probabilité que l'entier soit premier dépasse:

T'��������érq8`O8q= s1 − 1

2�xw = 99,902 %

La probabilité que la création de cette clé aboutisse à un nombre premier est donc supérieure à 99,9%; ce qui semble tout à fait acceptable.

(39)

La suite de la création de la clé suit, essentiellement, le même système que la création des clés dans le chiffrement RSA développé précédemment.

En effet, l'étape suivante consiste à multiplierp etqpour obtenirn. Ensuite, l'indicatrice d'Euler est calculée (lambda) et l'exposant de chiffrementmuest déterminé pour arriver, finalement, à la création de la clé privée.

2.3.2 Clé publique

Pour la création de la clé publique, le logiciel suit exactement le même cheminement que pour la clé privée: il se repose sur la classePublicKey.

Figure 11: Clé publique

De la même manière que pour la clé privée, la seconde ligne (ligne 27, figure 11) représente la clé publique. Notons que cette étape du code est totalement dénuée de sens dans un logiciel qui ne se veut pas didactique.

La création de cette clé se fait grâce à la variable privkey. En effet, lors de la création de la clé privée, la clé publique est directement créée (ligne 28 de PrivateKey, figure 10) grâce à la classePublicKey. Il est logique, en effet, que la clé publique soit formée à l'aide de sa clé privée correspondante. Pour être précis, la méthode de création de la clé publique est la suivante:

Figure 12:PublicKey

Il est visible que la clé publique sera, elle aussi, longue de 128 bits dans notre exemple.

(40)

2.3.3 Chiffrement

Dans cette section, l'implémentation de la méthode de chiffrement sera discutée en elle- même.

Pour l'aspect de démonstration du logiciel, il est demandé à l'utilisateur de rentrer deux nombres qui seront, par la suite, transformés en BigInterger [26] pour de futures manipulations (ce format Java permet de manipuler des grands nombres).

Figure 13: Chiffrement

Sur la figure 13, il est clairement visible que grâce au scanner saisieUtilisateur, les nombres entier1 et entier2 sont récupérés (lignes 31 à 36). Ils sont ensuite transformés respectivement enBigInteger a1etb1(lignes 43 et 44).

L'avantage de transformer ces nombres en BigInteger réside dans le fait que cette classe permet de représenter des entiers ou des nombres flottants sans limitations de taille des types primitifs (int, float, etc.).

Le cœur même de cette étape de chiffrement réside dans l'utilisation des lignes 52 et 53:

Figure 14: Chiffrage deaet deb

En effet, c'est grâce à ces deux simples lignes de code que a1 et b1 sont chiffrés homomorphiquement! Bien évidemment, pour plus de clarté, il faut développer la classe EncryptedIntegerprésente dans le projet THEP.

Pour plus de lisibilité, seule la fonction EncryptedInteger accompagnée de deux arguments sera expliquée en détails.

(41)

Figure 15:EncryptedInteger

Il apparaît que, pour fonctionner normalement, la fonction EncryptInteger a besoin de trois arguments: le nombre à chiffrer, la clé publique et une classe c. Dans notre cas, si cette classe c n'est pas fournie, la fonction va lui fournir d'office la classe BigInteger comme décrit à la ligne 16.

Une fois en possession de ces trois arguments, la fonction va créer un nouveau nombre aléatoire de la classe SecureRandom ainsi que deux variables rngCons et biCons issues de deux méthodes, respectivement findRngCons et findBICons, décrites ci-après, qui renvoient des constructeurs.

Un constructeur dans le langage Java est une fonction particulière qui permet d'instancier, c’est-à-dire créer un objet en mémoire vive [27]. Pour l'exprimer plus vulgairement, c'est une fonction qui va créer une nouvelle sorte de variable.

La première méthode findRngCons n'a besoin que d'un seul argument, une classe, pour renvoyer son constructeur.

(42)

Figure 16:findRngCons

Cette méthode permet de vérifier que dans la classe c, il existe bien un constructeur acceptant deux variables: un entier (integer)et un nombre aléatoire (random).

Le second constructeur findBICons, comme le précédent ne requiert qu'un argument:

une classe.

Figure 17:findBICons

Cette méthode sert à vérifier que dans cette classec, il existe un constructeur acceptant un entier (integer).

Ces deux vérifications sont mises en place pour vérifier que la classe c ressemble suffisamment à un BigInteger. En effet, pour être plus souple, ce logiciel propose d'utiliser autre chose qu'un BigInteger comme variable pour la fonction EncryptedInteger.

(43)

Malheureusement, il ne peut pas accepter non plus n'importe quelle classe trop éloignée d'un BigInteger. Il est donc important de vérifier que la classe, dérivée d'un BigInteger, ressemble suffisamment à cette dernière.

Mais l'instruction la plus importante dans cette partie est "set (plainval)".

En effet, c'est elle qui est la vraie responsable de l'encodage du message. Sans surprise, il faut se rendre à la fonctionsetpour y retrouver le cœur des opérations.

Figure 18:set

Le premier point marquant est que cette fonction accepte comme argument un BigInteger. Heureusement, les deux constructeurs précédents nous ont permis de vérifier que l'élémentplainvalétait bien issu d'une classe ressemblante.

Ensuite, après avoir initialisé r(ligne 73), unBigInteger supérieur àn(le produit dep et q), et g (ligne 82), le même g que dans la classe PublicKey (où g = n + 1), la première étape est de calculer

5��ℎ,'3�� = UrQdOX{dQ������ (!) La seconde étape consiste à initialiserxtel que

J = 'X������ (!)

Après cela, le logiciel va multiplier la valeur de Cipherval par celle de x et stocker cette valeur dans la variableCipherval. Ensuite cette valeur subira unmodulo n².

Ce dernier résultat est alors la valeur finale de Cipherval. En résumant ce code en une seule ligne, on peut écrire:

(44)

On a donc notre texte chiffré Cipherval à partir du texte original Plainval et la clé publiquePub, comme il a été démontré dans la théorie au chapitre I.

Après ce long développement de chiffrage, a1 et b1 sont enfin cryptés de manière homomorphique. Ce qui permet donc de passer à l'étape suivante qui est l'application, à ces deux nombres chiffrés, d'opérations mathématiques de bases.

2.3.4 Opérations mathématiques

Dans cette section, une série d'opérations élémentaires sont appliquées aux nombres chiffrés pour vérifier si l'implémentation s'est effectuée correctement. En effet, le plus gros avantage du chiffrement totalement homomorphique réside dans le fait qu'on peut appliquer toute une série d'opérations élémentaires sans avoir recours à un déchiffrement des données.

Dans un premier temps, une addition est effectuée entre les deux nombres chiffrés.

Figure 19: L'addition

Cette opérationaddest décrite dans la bibliothèqueEncryptedInteger.

Figure 20:add

Pour permettre une addition, cette fonction commence par initialiser g(tout comme dans la fonction set, c'est-à-direg = n + 1) et tmp_int un EncryptedInteger. Ce tmp_inta donc une valeurCipherval.

Références

Documents relatifs

Le chiffrement affine est une méthode de cryptographie basée sur un chiffrement par substitution mono- alphabétique, c'est-à-dire que la lettre d'origine n'est remplacée que par

Le chiffre de Hill consiste à chiffrer le message en substituant les lettres du message, non plus lettre à lettre, mais par groupes de lettres.. Il permet ainsi de rendre plus

Le protocole de chiffrement symétrique décrit dans le présent document se fonde sur l'algorithme de chiffrement de la norme de chiffrement évoluée (AES, Advanced Encryption

Le présent document spécifie les conventions pour l’utilisation de l’algorithme de chiffrement de contenu de la norme de chiffrement évoluée (AES, Advanced Encryption Standard)

La présente spécification est destinée à satisfaire à l’exigence d’enveloppe de clé de l’Institut national des normes et technologies (NIST, National Institute of Standards

Le présent mémoire définit l’algorithme de chiffrement NULL et son utilisation avec l’encapsulation de charge utile de sécurité (ESP) IPsec [RFC2406] pour

CAST-128 est un chiffrement de Feistel à 12 ou 16 tours qui a une taille de bloc de 64 bits et une taille de clé allant jusqu'à 128 bits ; il utilise la rotation pour assurer

Objectif : Bob souhaite envoyer des données chiffrées à Alice en lui garantissant qu'il en est l'expéditeur. Bob et Alice créent une paire de clés asymétriques. Ils conservent la