8 chiffrer -> signer -> stocker
10 * Signer les données de manière asymétrique (pair de clefs)
11 * Clef symétrique unique par fichier?
12 * Pair de clefs asymétrique pour chiffrer les clefs symétriques
13 * Vérifier l'intégrité
14 * Un seul fichier à protéger
15 * Définir un format d'un 'container' avec header et tout le bordel
16 * (pour la dernière partie), Comment stocker les clefs?
18 Attention aux méta-données des fichiers!:
21 * Date de modification/création
35 Algorithmes et paramètres :
36 RSA-2048 pour la signature
37 RSA-2048 pour le chiffrage des clefs
38 HMAC-SHA256 pour l'intégrité
39 AES-CBC-256 pour le chiffrement symétrique
42 Processus de chiffrement
43 ------------------------
46 d : contenu du fichier
47 metas : métas données associées au fichier
48 kpub : clef publique RSA
49 ksignpriv : clef privé de signature DSA
51 * Génération d'une clef 256 bits pour AES -> kc
52 * Génération d'une clef 256 bits pour MAC -> ka
53 * Construction du plaintext, voir format ci dessous
54 * Chiffrement du plaintext avec AES-CBC256 et kc -> ciphertext
55 * Calcul de MAC de ciphertext -> mac
56 * Signature de mac -> sig
57 * Chiffrement de kc + ka avec kpub (RSA) -> keys
58 * Renvoie mac + sig + keys + ciphertext
61 Processus de déchiffrement
62 --------------------------
67 ksignpub : la clef publique de signature
69 * Déchiffrement de kc + ka avec kpriv (ECDSA)
70 * Vérification de l'intégrité avec MAC
71 * Vérification de la signature avec ksignpub
72 * Déchiffrement du ciphertext
78 container = mac[256], signature[2048], keys[2048], ciphertext
79 ciphertext = AES(plaintext)
80 plaintext = header, file-content ;
81 header = file-size[64], meta-data-size[16], meta-data ;
82 meta-data = { key-value-pair } ;
83 key-value-pair = key[string], value[string]
84 string = size[8], content-utf8 ;