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