Labo 2 ====== * Intégrité * Authenticité * Confidentialité chiffrer -> signer -> stocker * Signer les données de manière asymétrique (pair de clefs) * Clef symétrique unique par fichier? * Pair de clefs asymétrique pour chiffrer les clefs symétriques * Vérifier l'intégrité * Un seul fichier à protéger * Définir un format d'un 'container' avec header et tout le bordel * (pour la dernière partie), Comment stocker les clefs? Attention aux méta-données des fichiers!: * Nom * Taille * Date de modification/création Inputs ------ Chiffrement : * Le fichier * La clef publique Déchiffrer : * Le container * La clef privée Algorithmes et paramètres : RSA-2048 pour la signature RSA-2048 pour le chiffrage des clefs HMAC-SHA256 pour l'intégrité AES-CBC-256 pour le chiffrement symétrique Processus de chiffrement ------------------------ inputs: d : contenu du fichier metas : métas données associées au fichier kpub : clef publique RSA ksignpriv : clef privé de signature DSA * Génération d'une clef 256 bits pour AES -> kc * Génération d'une clef 256 bits pour MAC -> ka * Génération d'un IV pour le mode CBC -> iv * Construction du plaintext, voir format ci dessous * Chiffrement du plaintext avec AES-CBC256 et kc et iv -> ciphertext * Calcul de MAC de ciphertext -> mac * Signature de mac -> sig * Chiffrement de kc + ka + iv avec kpub (RSA) -> keys * Renvoie mac + sig + keys + ciphertext Processus de déchiffrement -------------------------- inputs. d : contenu chiffrées kpriv : clef privée ksignpub : la clef publique de signature * Déchiffrement de kc + ka avec kpriv (ECDSA) * Vérification de l'intégrité avec MAC * Vérification de la signature avec ksignpub * Déchiffrement du ciphertext Format du container =================== container = mac[256], signature[2048], keys[2048], ciphertext ciphertext = AES(plaintext) plaintext = header, file-content ; header = file-size[64], meta-data-size[16], meta-data ; meta-data = { key-value-pair } ; key-value-pair = key[string], value[string] string = size[8], content-utf8 ;