First commit.
[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 * 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
59
60
61 Processus de déchiffrement
62 --------------------------
63
64 inputs.
65    d : contenu chiffrées
66    kpriv : clef privée
67    ksignpub : la clef publique de signature
68
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
73
74
75 Format du container
76 ===================
77
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 ;
85