AES 256 -> AES 128.
[crypto_lab2.git] / notes.txt
1 Labo 2
2 ======
3
4 * Intégrité
5 * Authenticité
6 * Confidentialité
7
8 chiffrer -> signer -> stocker
9
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?
17
18 Attention aux méta-données des fichiers!:
19    * Nom
20    * Taille
21    * Date de modification/création
22
23
24 Inputs
25 ------
26
27 Chiffrement :
28    * Le fichier
29    * La clef publique
30
31 Déchiffrer :
32    * Le container
33    * La clef privée
34
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
40
41
42 Processus de chiffrement
43 ------------------------
44
45 inputs:
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
50
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 * Génération d'un IV pour le mode CBC -> iv
54 * Construction du plaintext, voir format ci dessous
55 * Chiffrement du plaintext avec AES-CBC256 et kc et iv -> ciphertext
56 * Calcul de MAC de ciphertext -> mac
57 * Signature de mac -> sig
58 * Chiffrement de kc + ka + iv avec kpub (RSA) -> keys
59 * Renvoie mac + sig + keys + ciphertext
60
61
62 Processus de déchiffrement
63 --------------------------
64
65 inputs.
66    d : contenu chiffrées
67    kpriv : clef privée
68    ksignpub : la clef publique de signature
69
70 * Déchiffrement de kc + ka avec kpriv (ECDSA)
71 * Vérification de l'intégrité avec MAC
72 * Vérification de la signature avec ksignpub
73 * Déchiffrement du ciphertext
74
75
76 Format du container
77 ===================
78
79 container = mac[256], signature[2048], keys[2048], ciphertext
80 ciphertext = AES(plaintext)
81 plaintext = header, file-content ;
82 header = file-size[64], meta-data-size[16], meta-data ;
83 meta-data = { key-value-pair } ;
84 key-value-pair = key[string], value[string]
85 string = size[8], content-utf8 ;
86