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