Coffre-fort virtuel sécurisé

Transcription

Coffre-fort virtuel sécurisé
Coffre-fort virtuel sécurisé
Projet individuel - master e-secure deuxième année.
Encadré par M. Gaétan Richard.
Année Universitaire 2012-2013
DI MANNO Jean-Luc
04/03/2013
04/03/2013
AMS
Coffre-fort virtuel sécurisé
PRESENTATION
AMS est une application orientée web permettant de stocker des documents
dans un Cloud. Ces données sont organisables et sécurisées. L’idée étant de
centraliser la gestion des documents domestiques autour d’un même système
d’informations.
Une sécurité optimale garantit l’authenticité, la confidentialité et l’intégrité
des fichiers enregistrés. AMS assure un chiffrement des informations à
différents niveaux sur le client et le serveur.
Entièrement pensée pour une prise en main ludique, simple et efficace. AMS
est à destination de toutes personnes, ayant des connaissances en
informatique ou non, désireuses de stocker des documents domestiques dans
un endroit sûr et accessible.
L’avantage d’une
conception
orientée web est l’accessibilité
offerte
par
Internet.
Ainsi
l’application peut évoluer au sein
d’un réseau privé mais également
sur internet dans un Cloud
sécurisé.
Stockez vos données de manière
sécurisée. Confidentialité et
authenticité garanties.
Conçu et développé dans le cadre d’un projet universitaire AMS dispose
d’une licence GPL et hérite également des licences et des communautés
inhérentes aux différents outils et du Framework utilisés.
« Ce projet individuel de fin d’études a été pour moi l’occasion de mettre en
pratique tous les acquis de ces 5 dernières années universitaires. J’ai
apprécié le challenge proposé et les défis à relever de ce projet. En plus
d’un moyen d’acquérir d’avantage d’expériences et d’épanouir mes
connaissances universitaires, j’en garderai un souvenir agréable. » -Jean-Luc
DI MANNO
1
04/03/2013
SOMMAIRE
Présentation ............................................................................. 1
Introduction.............................................................................. 4
Contexte.................................................................................. 5
Problématique ........................................................................... 5
Etude de l’existant ..................................................................... 6
Home-bubble .......................................................................... 6
Général ............................................................................ 6
Aspect sécurité ................................................................... 7
SecuriBox .............................................................................. 8
Général ............................................................................ 8
Aspect sécurité ................................................................... 9
myarchivebox ........................................................................ 10
Général ........................................................................... 10
Aspect sécurité .................................................................. 11
Conception .............................................................................. 12
Coffre-fort ............................................................................ 12
Fonctionnalités .................................................................. 12
Fonctions à implémenter .................................................. 12
Cas d’utilisations ............................................................ 13
Conception générale ............................................................ 14
Design Pattern ............................................................... 14
Export de fichier ............................................................ 16
Agenda et synchronisation google ........................................ 17
Gestion des utilisateurs .................................................... 18
Organisation des données .................................................. 19
Outils statistiques ........................................................... 20
Agenda et synchronisation google ........................................ 20
Export url ..................................................................... 20
..................................................................................... 20
Système modulaire .............................................................. 21
Problème rencontré ........................................................ 21
2
04/03/2013
Solution et mise en œuvre ................................................ 22
Sécurité ............................................................................... 24
Conception générale ............................................................ 24
Connexion SSL ................................................................... 24
Chiffrement client .............................................................. 26
Problème rencontré ........................................................ 26
Solutions ...................................................................... 26
Mode par chiffrement server .............................................. 27
Mode par chiffrement client .............................................. 30
Développement......................................................................... 33
Bootstrap et IHM ..................................................................... 33
Framework & Outils ................................................................. 34
Play ! .............................................................................. 34
JQuery ............................................................................ 36
DomCrypt ......................................................................... 37
Base de données ..................................................................... 37
Schémas (UML, use-cases).......................................................... 39
Modèles ........................................................................... 39
Controllers ....................................................................... 40
Outils .............................................................................. 41
Javascript ........................................................................ 41
Résultat.................................................................................. 42
Coffre-fort ............................................................................ 42
Agenda et synchronisation google ............................................ 42
Gestion de document ........................................................... 43
Dashboard ........................................................................ 46
Sécurité ............................................................................... 47
Mode chiffrement client ....................................................... 47
Base de données................................................................. 48
Conclusion............................................................................... 49
Remerciements ......................................................................... 49
Annexes.................................................................................. 50
3
04/03/2013
INTRODUCTION
Ce projet est inscrit dans le cadre de la formation universitaire du master ESECURE à l’Université de Caen Basse-Normandie.
L’objectif principal est de pouvoir répondre à une problématique en mettant
en œuvre toutes les compétences acquises au sein du cursus scolaire.
Le thème de mon projet s’oriente autour de la sécurité forte et son
utilisation dans un cas pratique. Aujourd’hui de nombreux services sur
internet proposent de stocker des informations personnelles. Mais ces
informations sont-elles chiffrées ? Qui peut y accéder ? Êtes-vous sûr d’être
la seule personne susceptible de lire ces informations ?
Les services les plus connus (google, microsoft, facebook,…) enregistrent vos
données personnelles et les analysent dans un but commercial. Exemple :
https://www.google.com/settings/ads/onweb/ permet de connaitre toutes
les informations recueillies par Google sur vous.
La sécurité forte (ou haute) est conçue pour pallier à ce problème. Vos
informations sont chiffrées et vous êtes la seule personne à posséder la clé
de déchiffrement. Dès lors personne ne peut plus collecter d’informations
vous concernant et ce à votre insu.
Cette sécurité reste théorique car difficile à mettre en œuvre à grande
échelle (sécurité intérieure, lois, commerce, profits,…)
Cependant mon projet a pour but de mettre en œuvre une telle sécurité
dans le cadre de l’utilisation d’un coffre-fort virtuel.
4
04/03/2013
CONTEXTE
« Mais où ai-je mis ma facture EDF ? »
Dans la vie actuelle nous avons tous de plus en plus de papiers administratifs
à conserver (factures, contrats, devis,…) et de moins en moins le temps de
s’en occuper. Dans ce paradoxe contemporain, l’usage de support numérique
va croissant au détriment du support papier, plus classique, jusque-là utilisé.
Dès lors, est-il possible de remplacer la gestion de ces documents par un
format numérique tout en conservant l’organisation et les habitudes de
classifications offertes jadis par le papier ?
PROBLEMATIQUE
Comment gérer les documents personnels autour d’un même système
d’informations ? Coffre-fort virtuel





Centraliser les ressources
Accéder rapidement aux données
Organiser efficacement et simplement les documents
Consulter les informations de n’ importe où
Sécuriser les données et les accès
5
04/03/2013
ETUDE DE L’EXISTANT
Il existe de nombreux coffres forts virtuels de par le web. J’en ai retenu
trois, principalement car ils se rapprochent de mon projet dans son
ensemble. Ils proposent un service de stockage, des outils d’analyses et de
sécurité.
Home-bubble
Général
« Home Bubble est un portail personnalisable et sécurisé, où il est possible
de regrouper toutes les informations qui concernent le foyer ».
Centralise et archive les documents et papiers importants (500 Mo).
Carnet d’adresses avec références clients.
Utilisation de web services.
Envoie d’email aux principaux interlocuteurs (alertes, échéances,
contacts).
 Agenda et rappels automatiques.




6
04/03/2013
 Outils de gestion de compte.
Home Bubble est le service le plus complet que j’ai pu observer. La gestion
des documents y est optimale et les outils annexes très utiles. L’ombre au
tableau est sa version gratuite limitée, son code propriétaire, la publicité sur
l’application.
Aspect sécurité




Connexion sécurisé SSL Verisign ® SecureSitePro
Serveurs dédiés : sécurité et redondance
Cryptage des informations (assez flou, pas plus d’informations…)
Déclaration à la CNIL
Voir http://www.home-bubble.com/securite/nos-engagements
Home bubble reste un service payant et propriétaire. Le chiffrement dans la
base de données est flou et peu détaillé. La charte de confidentialité laisse
supposer que certaines informations du client sont laissées en clair. « Vos
données personnelles ne sont en aucun cas revendues à des tiers, sauf accord
express de votre part. »
7
04/03/2013
SecuriBox
Général
Service le plus « automatisé » des trois. La majorité des documents sont
récupérés non par scan mais par webservice.





Rapatriement automatique des factures.
Webservices
Stockage 1Go gratuit
Sauvegardes régulières
Accords avec les banques (relevé de comptes, RIB,…)
8
04/03/2013
Aspect sécurité






Data-centers sécurisés,
Redondance des systèmes,
Cryptage des données,
Traçabilité,
Audits de sécurité,
Agrément CNIL
La version gratuite pour les particulier est correcte, la version
professionnelle et payante plus adaptée à la sécurité. Les outils de gestion et
de comptabilité ne sont disponibles qu’en mode payant. Les accords avec les
banques garantissent un bon niveau d’efficacité. Le chiffrement des données
stockées en BDD reste encore une fois flou et peu documenté.
9
04/03/2013
myarchivebox
Général
La particularité de ce service est la gestion d’un mode courrier postal. Les
utilisateurs peuvent envoyer par enveloppe T leurs documents à sauvegarder
dans le coffre-fort virtuel. Voir http://www.myarchivebox.com/
10
04/03/2013
Toutes les offres sont payantes
Le service propose des accords avec les banques et les assurances. De plus il
est possible également d’utiliser des outils administratifs. (Actes notariés,…)
Aspect sécurité
La sécurité est mal documentée et le fait que les utilisateurs peuvent
envoyer par courriers postaux leurs informations laisse supposer un
chiffrement peu optimisé.
 Agrément CNIL
 Données bancaires chiffrées.
11
04/03/2013
CONCEPTION
La seconde phase du projet a été la conception d’une solution répondant aux
besoins recensés lors de la première phase. Comment mettre en place une
telle solution ? Quels problèmes rencontrés et quelles solutions apportées ?
Coffre-fort
Le coffre-fort doit pouvoir permettre une gestion simple et ludique des
documents, proposer des outils statistiques pratiques et enfin faciliter
l’ajout de nouveaux types de fichiers différents (feuille de salaire, facture
edf,…).
Fonctionnalités
Fonctions à implémenter
Les fonctionnalités attendues de ce coffre-fort virtuel sont les suivantes :








Enregistrer des documents et leurs descriptions.
Organiser les documents par thèmes.
Trier les fichiers par dates, noms, ...
Outils visuels statistiques.
Répartition dans le temps des documents.
Synchronisation avec l’agenda google.
Haut niveau de sécurité (certificat X509 et chiffrement client)
Export sécurisé de fichier.
De plus l’interface devra être :




Ludique.
Epurée.
Simple.
Claire.
12
04/03/2013
Cas d’utilisations
Voici un cas général d’utilisation.
Se connecte à l’application AMS
Indique login et mot de passe
Se rend dans la rubrique « Vie courante »
Ajoute un pôle « EDF »
Se rend dans le pôle « EDF »
Ajoute une division « facture »
Ajoute un fichier à la division « facture »
Se déconnecte de l’application
Utilisateur
13
04/03/2013
Conception générale
Design Pattern
Mon choix c’est porté sur le pattern MVC (modèle-vue-contrôleur) pour un
souci de clarté de l’architecture.
Le patron MVC rencontrant des limites dans le cadre des applications utilisant
les technologies du web, il a fallu choisir un Framework implémentant des
couches supplémentaires et les mécanismes d’inversion de contrôle et
d’injection de dépendance. (cf annexe). Voir Framework.
MVC
14
04/03/2013
L’application se décompose donc de la manière suivante (voir UML pour plus
de détails) :
Modèles
1.
2.
3.
4.
5.
6.
Export
MyFile
Pole
SubDiv
User
TypeFile
1. Définit un export de fichier (url, délais, hash).
2. Définit la structure générale d’un fichier.
(dates, description, nom, division, file). Va être
utilisé pour de l’héritage (voir module) .
3. Définit un pôle et toutes ses propriétés
(statistiques sur les fichiers contenus, sur les
dates et les valeurs).
4. Définit la structure générale d’une division. Va
être utilisé pour de l’héritage (voir module).
5. Définit un utilisateur, ses propriétés.
6. Définit le type de fichier utilisé (division).
Contrôleurs
19. Application
20. Jsondata
16. Répond aux requêtes générales de l’application
(Nouvel utilisateur, ajout d’un pôle,
navigation,…)
17. Communique avec les appels JSON des scripts
JQuery. (diagrammes statistiques, informations
pour les outils de sécurité,…)
Vues
7. Agenda.html
8. Index.html
9. List.html
10. Login.html
11. Moncompte.html
12. Register.html
13. Stamperror.html
14. View.html
15. Sendmyfile.html
16. 404.html
17. 500.html
18. Main.html
7. Agenda de l’application avec synchronisation google
8. Page d’accueil
9. Affiche les pôles en fonction du thème
(professionnel, personnel, vie courante, autre) Voir
organisation des données
10. Page de connexion
11. Gestion du profil utilisateur
12. Page d’inscription
13. Gestion d’un lien cassé
14. Html du mail d’export du fichier
15. Affiche les différentes divisions en fonction d’un
pôle
20. Page principale (header et footer html)
15
04/03/2013
Vues (suite)
21. Logo.html
22. Menu.html
23. Phonemenu.html
24. Tables.html
21. affiche le haut de page
22. affiche le menu général
23. change la vue si l’on accède à l’application
via un smartphone (reponsive css)
24. affiche les fichiers selon leurs divisions
Les différentes interactions du patron de conception MVC seront assurées par
le Framework utilisé (voir Framework). De plus les objets définis dans les
modèles sont stockés en base de données selon leurs attributs. (Voir
Framework). Les dépendances entre les tables sont donc les mêmes que
celles qui existent entre les objets. . (Voir UML).
Export de fichier
L’export de fichier permet de récupérer un document sans se connecter à
l’application. Un lien temporaire est alors généré et sécurisé. Les
informations sur le fichier sont chiffrés (id, name) et un hash du document
permet de vérifier l’intégrité de l’élément téléchargé.
URL – 48h
Server
Déchiffrement
du document
Utilisateur
16
04/03/2013
Agenda et synchronisation google
Un agenda permet d’afficher la période de chaque division du coffre-fort.
Cet outil permet de visualiser dans le temps l’évolution et la répartition des
différents documents et éléments constituant les données de l’utilisateur.
Une synchronisation avec un agenda google permet d’afficher sur son agenda
AMS les évènements inscrits dans google.
Le système fonctionne avec un lien xml généré par google.
Se rendre dans les
paramètres de l’agenda
google
Cliquer sur XML pour obtenir le lien XML
privé de l’agenda. Puis renseigner ce lien sur
AMS – Voir résultats
17
04/03/2013
Gestion des utilisateurs
La première approche est la gestion des utilisateurs. Pas besoin de systèmes
de droits chaque utilisateur accède aux mêmes fonctionnalités. Par contre il
est important de définir les attributs et propriétés pour ces derniers.
Un utilisateur est un couple email/password et un jeu de données
(permettant entre autre de générer au besoin une carte de visite). Chaque
document déposé par l’utilisateur sera son unique propriété. Pas d’échanges
possibles entre propriétaires ni d’interactions entre eux.
User A
Informations
sur A
Coffre-fort de A
User B
Informations
sur B
Coffre-fort de B
18
04/03/2013
Organisation des données
L’ajout de documents et la gestion de ces derniers doit être simple et
intuitive. Chaque fichier de même type, et les informations qui y sont
rattachées, peut être associé à un ensemble appelé « division ». Chaque
division appartenant à un même thème peut être associée à un ensemble
appelé « pôle ».
Document 1
Données
supplémentaires
Fichier
(Dates, somme, …)
Division A
Doc 2
Doc 1
Doc 3
…
Pôle X
Division B
Division A
Division C
Division D
…
19
04/03/2013
Il est ainsi plus facile d’organiser les informations à conserver en
thématiques. L’utilisateur retrouve le même système qu’un classeur ou qu’un
porte document. Les informations sont triées et rapidement accessibles.
De plus, pour chaque division des informations statistiques sont générées sur
les propriétés intrinsèques des documents qui y sont contenus. Par exemple
s’il s’agit de facture, la totalité des sommes dépensées sur la période.
Division A
Doc 1
X1
Doc 2
X2
Doc 3
Outils statistiques
…
Agenda
X3 et synchronisation google
Export url
X = X1 + X2 +X3
De manière analogue des outils statistiques informent l’utilisateur du nombre
de documents disponibles dans chaque pôle créé. Ce système permet une
clarté et une ergonomie adaptée à une gestion plus ou moins massive de
données.
Enfin pour faciliter d’avantage l’utilisateur, les pôles sont regroupés selon 4
grands axes à savoir « professionnel », « Personnel », « Vie courante » et
« Autre ».
Professionnel
Personnel
Vie courante
Pôle E
Pôle C
Pôle A
Pôle F
Pôle D
Pôle B
…
…
…
Autre
Pôle G
Pôle H
…
20
04/03/2013
Chaque division, ou type de fichier, possède des propriétés propres
communes à tous les documents. Par exemple un devis aura pour information
le nom d’une entreprise, un siret une adresse postale,… Et chaque document
de cette division (ex : devis de l’entreprise A) aura en commun une somme,
une date,…
De cette façon les données sont structurées et facilement triables. Ce
système d’ordonnancement est proche des systèmes existants vus dans la
partie correspondante de ce présent rapport. (voir existants)
Système modulaire
Pouvoir ajouter des divisions (type de fichier) est indispensable pour un
coffre-fort virtuel. Il est important de laisser la possibilité à la communauté
d’ajouter des mises à jour. L’application est livrée avec des divisions de
base : facture, fiche de paie, devis, album photo, contrat.
Problème rencontré
Comment mettre en place un tel système d’ajout de divisions sans modifier
la structure de l’application ? En effet l’ajout d’une division doit être simple
et ne nécessiter aucun changement de code de l’application.
21
04/03/2013
Solution et mise en œuvre
L’idée est d’utiliser le pattern MVC utilisé dans AMS. En conservant ce
schéma d’implémentation on peut ainsi développer un « module » composé
d’un modèle type définissant la structure générale de la nouvelle division, un
contrôleur type pour la gestion des actions et une vue. Ce module se dépose
juste dans le fichier adéquat et ne nécessite que l’appelle de la méthode
« install() » du modèle pour être opérationnelle dans l’application. La vue se
rajoute à la vue tables.html, le contrôleur au package contrôleur et le
modèle au package modèle.
Module
Modèle
Extends SubDiv
Contrôleur
Extends Controller
Vue
<html>…..</html>
file_post() :void
Instal() :void
Arborescence
pole_subdive() :void
22
04/03/2013
Une fois le module ajouté, il est nécessaire d’ajouter « les routes » vers le
contrôleur. Ces instructions sont définies dans le fichier « routes » du dossier
« conf ». En effet ces routes vont permettre de faire la jonction entre les
liens de la nouvelle vue et l’appel au nouveau contrôleur.
Exemple
GET
/facture/{pole}/{type}
SubDivFacture.pole_subdive
Lien de type facture/2/4 vers la méthode pole_subdive du contrôleur
SubDivFacture
Une fois toutes ces étapes effectuées l’utilisateur appelle la méthode
« install() » du modèle et la nouvelle division est ajouté à la base de
données. L’application est désormais mise à jour et un nouveau type de
fichier est disponible.
Le modèle
C’est une classe qui hérite de SubDiv.
La méthode install() associe dans la base de données un identifiant au nom et
à la description du nouveau type de fichier. Exempe : 5498645 « facture »
« Système de facture classique »
Cette classe possède d’autres instructions nécessaires au bon fonctionnement
de l’application (constructeur, données de la division comme dates,
somme,…).
Le contrôleur
C’est une classe qui hérite de Controller.
Ce dernier récupère les requêtes d’ajout de fichier et d’ajout de division.
Mais il peut également permettre les modifications des informations de la
division. Exemple : en cas de type devis, le nom de l’entreprise, le Siret,…
Il possède donc deux méthodes obligatoires à savoir file_post() pour l’ajout
de fichier dans la division et pole_subdive() pour l’ajout de la division dans
un pôle. D’autres méthodes comme edit_post() peuvent être implémenter
pour modifier les informations de la division.
23
04/03/2013
Sécurité
Phase critique de la conception. Comment implémenter une authentification
forte qui répond à ce besoin de haute sécurité. En effet l’utilisateur peut
être amené à déposer dans son coffre-fort des documents sensibles et/ou
très confidentiels (bulletin de santé, relevés de comptes, codes
personnels,…). Il est donc primordial de choisir une sécurité empêchant
toutes « fuites » d’informations.
Conception générale
La sécurisation de l’application se fait en deux temps. Premièrement il faut
sécuriser le canal de communication entre le serveur et le client. Puis dans
un second temps sécuriser les informations qui transitent entre le serveur et
le client. Il faut que le client soit le seul à pouvoir accéder et déchiffrer le
contenu de son coffre-fort.
Connexion SSL
Pour la première partie la sécurité du canal de communication est effectuée
par un système de certificat X509.
24
04/03/2013
Le serveur génère un certificat (auto-signé) de type X509. La procédure
décrite dans le schéma précédent détail l’établissement du canal sécurisé
entre les deux entités. Le certificat du server ne dispose pas de chaine de
certification étant auto-signé.
La génération des clés privée et publique est faite par OpenSSL directement
implémenté dans le Framework.
Le dossier « conf » contient le certificat et la clé publique. La clé privé est
quant à elle stockée de manière sécurisé.
Certificat
25
04/03/2013
Chiffrement client
Cette partie a été la plus difficile à concevoir. L’idée générale est de pouvoir
chiffrer et déchiffrer les informations « côté client » c-a-d via le
navigateur. Et pour cela authentifier au préalable le navigateur et donc
l’utilisateur. Pour ce faire on utilise du chiffrement à clé publique et à clé
secrète (asymétrique et symétrique).
Principe général
Le navigateur génère un couple de clés privé/publique RSA. Une clé secrète
AES est générée par ailleurs. Le serveur stocke la clé AES chiffrée avec la clé
publique du client. La clé AES est utilisée pour chiffrer les informations dans
la base de données. Et la clé privée du navigateur permet d’utiliser la clé
secrète AES pour déchiffrer « à la volée » les informations affichées chiffrées
dans le navigateur.
Problème rencontré
Comment faire générer au navigateur un couple de clé RSA ? Et comment
utiliser le chiffrement et déchiffrement côté navigateur ?
Il existe plusieurs navigateurs et chacun d’entre eux a une structure propre.
Dès lors comment concevoir un système universel ? Avec une prise en compte
du navigateur et de sa version ? Et si le l’utilisation de fonctions
cryptographiques n’est pas possible ?
Solutions
L’idée est de créer deux modes, un à utiliser si le navigateur est compatible
avec des fonctions de chiffrements et un deuxième mode à utiliser le cas
contraire. Le « mode client » est enclenché si l’application détecte le
navigateur compatible. Le « mode server » quant à lui sert en cas
d’incompatibilité du navigateur aux fonctions de chiffrements.
Des recherches approfondies m’ont permis de choisir le navigateur Mozilla
Firefox 18.0.x et l’extension domCrypt pour l’utilisation du mode client. Voir
domCrypt dans Framework & outils.
26
04/03/2013
Mode par chiffrement server
Préalable : une connexion SSL avec certificats X509 entre le server AMS et le
navigateur MF (Mozilla Firefox). Voir connexion SSL. Ainsi qu’un couple
login/mot de passe.
Déroulement de la sécurisation
Création du compte utilisateur
Navigateur
L’utilisateur renseigne un mot de
passe Up (User Password)
Server
-Le serveur génère
un timestamp Ts
-Le serveur génère
une clé AES et une
passphrase Pa.
-Le serveur chiffre
avec l’algorithme
BasicTextEncryptor
(Hash(Up)+Hash(Ts)+
Pa)
Le serveur indique à l’utilisateur
que la connexion est établie.
-Le serveur
enregistre le résultat
dans la BDD
Connexions suivantes
L’utilisateur indique son mot de
passe Up
-Le serveur déchiffre
la passphrase avec
Up et TS.
-Le serveur stock la
passphrase en
variable de session
sécurisée
Le serveur indique à l’utilisateur
que la connexion est établie.
27
04/03/2013
Chiffrement
Page html avec formulaire
Navigateur
L’utilisateur voit
le formulaire
Server
Le serveur chiffre les
données du formulaire et
les enregistre dans la BDD
L’utilisateur remplit
le formulaire
Utilisateur
Le serveur utilise la passphrase stockée dans la variable de session pour retrouver la clé
secrète AES. Puis il chiffre les données et les enregistre dans la BDD. La sécurité côté
utilisateur revient au couple login/mot de passe. Cependant la sécurité côté serveur est plus
importante. Déchiffrer le contenu de la base de données revient à trouver la clé secrète
AES.
Cette clé est recalculée à chaque connexion et pas stockée en claire dans le serveur. Ainsi il
n’est pas possible de déchiffré « facilement » les informations de la BDD.
28
04/03/2013
Déchiffrement
Navigateur
Le serveur déchiffre les
informations de la BDD et les
transmet en clair dans le
HTML
Server
Le navigateur
retransmet à
l’utilisateur le visuel
en clair
Utilisateur
Le déchiffrement se fait côté serveur. Les informations affichées dans les
vues HTML sont déchiffrées avec la clé AES retrouvée par la passphrase
stockée en variable de session lors de l’authentification login/password.
Ce mode de fonctionnement est moins poussé et moins sécurisé que le mode
client décrit ci-après.
29
04/03/2013
Mode par chiffrement client
Préalable : une connexion SSL avec certificats X509 entre le serveur AMS et
le navigateur MF (Mozilla Firefox). Voir connexion SSL. Ainsi qu’un couple
login/mot de passe.
Déroulement de la sécurisation
Création du compte utilisateur
Demande de génération de clé
RSA et AES
Navigateur
Le navigateur
utilise
domCrypt
pour générer
un couple de
clé RSA et une
clé AES.
Envoie de la clé publique RSA et
de la clé secrète AES chiffrée
avec la clé RSA privée.
Utilisation d’un keystore avec
passphrase pour stocker la clé
RSA privée du navigateur. Voir
module Firefox DomCrypt
Server
Seules la clé
publique du
navigateur et la clé
AES (chiffrée) sont
stockées dans le
serveur sous la forme
d’un fichier texte.
Connexions suivantes
Le navigateur
demande la
passphrase à
l’utilisateur
pour utiliser
la clé privée
stockée dans
le keystore
Envoie d’un challenge signé par le
navigateur.
Si challenge correspond à la clé
publique connue d’AMS alors
Envoie de la clé AES (chiffrée) au
navigateur.
Le navigateur récupère grâce à la
passphrase de l’utilisateur la clé
privée du keystore et déchiffre la
clé AES. Cette dernière est
conservée temporairement (le
temps de la connexion) dans une
variable de session sécurisé
Le serveur stocke en
variable de session la
confirmation
envoyée par le
navigateur.
Envoie d’une confirmation au
serveur
LE navigateur peut chiffrer et déchiffrer à la volée avec la clé AES
30
Chiffrement
04/03/2013
Page html avec formulaire
Navigateur
Server
Le navigateur chiffre
les données du
formulaire et les
envoie au serveur
L’utilisateur remplit
le formulaire
L’utilisateur voit
le formulaire
Utilisateur
Un script JavaScript intercepte les envoie de formulaire et chiffre les champs
de ce dernier avant de les laisser poursuivre leur route vers le serveur. Le
server reçoit les données chiffrées et les sauvegarde dans la base de
données.
Ainsi le chiffrement s’opère côté client et aucune attaque du serveur ne
permettra de découvrir le secret. Les informations contenues dans la base de
données sont chiffrées et le serveur ne peut pas en déchiffrer les
informations.
31
04/03/2013
Déchiffrement
Envoie des informations
chiffrées (contenu de la
BDD), dans une page html
Serveur
Navigateur
Le navigateur déchiffre à la volée le texte
et le rend clair pour l’utilisateur
(modification de l’arbre DOM)
Utilisateur
Un script JavaScript récupère les informations contenues dans les
balises « .aes » et les déchiffre avant de les afficher à l’utilisateur. Il y a
donc une modification de l’arbre DOM directement sur le navigateur et
jamais de déchiffrement sur le server.
Le server ne manipule que des données chiffrées et ne possède pas les clés
nécessaires à leur déchiffrement.
32
04/03/2013
DEVELOPPEMENT
L’application étant orienté web le choix du langage impactait largement sur
les outils et technologies à utiliser par la suite. Mon choix c’est porté sur le
java car ce langage de programmation orienté objet permet une plus large
liberté et une efficacité idéale. De plus il dispose d’une large communauté
et de nombreux forum d’aide et de soutien.
Bootstrap et IHM
Pour l’interface HTML un Bootstrap basé sur le modèle twitter est utilisé. Ce
template amélioré possède une pré-intégration de nombreux effets et outils
visuels : Script JQuery, feuilles de Styles CSS, Responsive CSS, et des pages
html déjà construites. De ce fait, en plus d’un gain de temps, l’IHM d’AMS
est garantie compatible avec tous les navigateurs et conforme aux normes
W3C. Voir http://twitter.github.com/bootstrap/
33
04/03/2013
Framework & Outils
Après quelques recherches sur les outils et frameworks utiles pour
développer AMS les suivants ont été retenus.
Play !
Play Framework est un framework open source web qui permet d'écrire
rapidement des applications web en Java. Créé par Guillaume Bort en 2007,
Play Framework s'inspire d'autres frameworks comme Rails ou Django, en
visant à apporter un outil simple et productif sur la machine virtuelle Java.
Play Framework a pour particularité de ne pas être basé sur le moteur Java
de Servlet. Ce fut un choix délibéré de l'auteur afin de pouvoir offrir un
système plus simple et plus puissant pour développer une application Web en
Java. Voir http://www.playframework.com/
De plus Play! permet de travailler dans un environnement de développement
intégré comme NetBeans ou Eclipse en produisant un projet correspondant
avec toutes les sources et les JAR.
J’ai choisi d’utiliser la version 1.5 car les versions suivantes utilisent Scala et
non plus Java.
Structure de fichier
Table CRON
Class pour la gestion
d’envoie d’email
Clés AES chiffrées. Voir mode
chiffrement client
34
04/03/2013
Play utilise le pattern MVC ainsi que des couches supplémentaires et des
mécanismes d’inversion de contrôle et d’injection de dépendance. Voir main
MVC application model
Le cycle de vie d’une requête
35
04/03/2013
JQuery
jQuery est une bibliothèque JavaScript libre qui porte sur l'interaction entre
JavaScript (comprenant Ajax) et HTML, et a pour but de simplifier des
commandes communes de JavaScript. Voir http://jquery.com/
Cet outil permet en autre toutes les interactions dynamique d’AMS tels que
les pop-up, les paginations, les menus, les tris,…
De plus, le bootstrap étant fourni avec de nombreux script JQuery il était
naturel de prolonger son utilisation dans l’application.
AMS contient de nombreux script JS utilisant JQuery
javascript
Le script permettant de chiffrer et de déchiffrer à la volée les informations
du coffre-fort fonctionne avec les sélecteurs HTML de JQuery.
Voir mode chiffrement client
36
04/03/2013
DomCrypt
DomCrypt est un module développé pour FireFox qui ajoute un objet
javascript de type « window.mozCipher » à toutes les pages web. Il permet
entre autre la manipulation de fonctions de chiffrements et déchiffrements,
l’utilisation du keystore et des outils algorithmiques tels que RSA et AES. Voir
http://domcrypt.org/
DomCrypt a été intégré au W3C's Web Cryptography Working Group et
dispose d’une API. Cependant le concept de chiffrement client étant
relativement nouveau aucune documentation sur le sujet n’était disponible lors
du développement d’AMS. Les nombreux exemples d’utilisations et la lecture
du code source m’ont permis de mieux comprendre l’outil et l’utiliser à bon
escient.
Base de données
Play!
intègre
une
Java
Persistence
API (JPA),
interface
de
programmation Java
permettant
aux
d'organiser
des données
relationnelles dans des applications utilisant la plateforme Java.
Cycle de vie d’une entité JPA
Voir http://docs.oracle.com/cd/E16439_01/doc.1013/e13981/undejbs003.htm
37
04/03/2013
Dans Play ! L’utilisation de JPA est relativement simplifiée. On indique le
préfixe « @Entity » avant la définition d’un modèle et ce dernier est intégré
à la BDD. Il est possible également de spécifier des propriétés pour les
attributs de classes.
Exemple pour le modèle User :
…
Importation de la bibliothèque JPA
import play.db.jpa.*;
…
@Entity
Déclaration de l’entité
public class User extends Model{
@Required @MinSize(2)
public String name;
@OneToMany(mappedBy="user",cascade = CascadeType.ALL)
public List<Pole> poles;
…
Dépendances dans la BDD
La base de données est structurée en fonction des dépendances entre les
objets java. Pour manipuler la base de données Play ! propose une API simple
et puissante. Ainsi il suffit d’utiliser des méthodes JPA pour rechercher,
modifier, retrancher ou ajouter des informations dans la BDD.
De surcroît, à chaque lancement de l’application une vérification s’effectue
sur la consistance de la base et dans le cas d’une base vide Play ! la construit
automatiquement.
Il est possible d’utiliser les requêtes MYSQL classiques au sein des méthodes
JPA. Mais de nombreuses requêtes sont déjà pré-initialisées.
Exemple de requête à la BDD pour rechercher un utilisateur avec son email
et son mot de passe :
models.User user = models.User.find("byEmailAndPassword", email, passhash).first();
Objet de type
User
Requête
simplifiée
Fetch
38
04/03/2013
Schémas (UML, use-cases)
Modèles
MyFacture et SubFacture font partie du module Facture. Voir module
Il existe d’autre modules natifs (devis, contrats, album photo, fiche de paie)
39
04/03/2013
Controllers
40
04/03/2013
Outils
Javascript
NOTE : Les diagrammes UML ont été simplifiés et réduits aux classes
importantes. Le Framework n’est pas représenté ni les classes
« secondaires ».
41
04/03/2013
RESULTAT
Application AMS en mode chiffrement client. Voir mode chiffrement client
Coffre-fort
Agenda et synchronisation google
42
04/03/2013
Gestion de document
43
04/03/2013
44
04/03/2013
45
04/03/2013
Dashboard
Répartition totale des fichiers du
coffre-fort
Cumule des factures selon le pôle et l’année
46
04/03/2013
Sécurité
Mode chiffrement client
Sans déchiffrement à
la volée
Avec chiffrement à la volée lors de
l’envoie du formulaire
47
04/03/2013
Base de données
Les informations sont chiffrées dans la base de données
48
04/03/2013
CONCLUSION
Ce projet a permis de démontrer l’efficacité d’une sécurité forte dans la
sécurisation de données personnelles. La base de données étant entièrement
remplie de chiffré et l’utilisateur propriétaire étant le seul détenteur de
l’unique clé de déchiffrement, la confidentialité est optimale.
La première phase du projet a été de concevoir et de développer le coffrefort virtuel. Véritable projet à lui tout seul, ce développement m’a permis
de mettre en pratique les connaissances en programmation objet,
technologies web, et génie logiciel acquises au sein de mon cursus
universitaire. De plus le choix d’une application orientée web et les
contraintes qui lui sont associées m’ont permis de cultiver des qualités
essentielles tels que la ténacité face aux difficultés, la volonté de réussir et
de trouver des solutions.
La seconde phase du projet a été quant à elle un véritable parcours du
combattant. La communauté étant relativement peu documentée sur le sujet
il m’a fallu trouver des solutions par moi-même sans ou avec très peu d’aide
extérieure (forums, API,…). Le chiffrement côté navigateur pose, à grande
échelle, des problèmes évidents (ressources de calculs, lois, commerces,
sécurité intérieure,…). Néanmoins ce système de sécurité garantit un haut
niveau de confidentialité et d’authenticité. Malheureusement il est encore
peu répandu et difficile à mettre en œuvre.
REMERCIEMENTS
Je tiens à remercier mon tuteur de projet M. Gaétan Richard ainsi que les
administrateurs réseaux du département informatique pour leur aide et leur
soutien lors de ce projet.
49
04/03/2013
ANNEXES
domCrypt spécification
https://wiki.mozilla.org/Privacy/Features/DOMCryptAPISpec/Latest
Play ! Framework documentation
http://www.playframework.com/documentation/1.2.5/home
JQuery Documentation
 http://api.jquery.com/
Bootstrap
http://twitter.github.com/bootstrap/
50