Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Non-deprecated OPENSSL, password secured RSA pkey, pretty logs & blocs encryption/decryption handling #33

Merged
merged 6 commits into from
Sep 5, 2022

Conversation

nathan-rabet
Copy link
Owner

Avancement

J'ai encore une fois bien travaillé sur le FS. Beaucoup de choses ont été ajoutés.

OPENSSL : structures RSA vers structures EVP_PKEY

Les structures de types RSA sont dépréciées (car elles sont trop bas niveaux et par conséquent gérées par le programmeur qui peut de temps en temps en avoir un peu rien à carrer de la sécurité des algorithmes de chiffrement).

De ce fait, toutes les fonctions faisant appel à des structures de ce type utilisent maintenant des structures de clés de plus haut niveau (géré par OPENSSL donc) : les EVP_PKEY.

Chiffrement de la clé privée RSA de l'utilisateur avec une phrase de passe

Avant cette fonctionnalité, la clé privée était stockée en clair sur le disque de l'utilisateur. Maintenant, dès le formatage d'un fichier/appareil (cf code/formater.c ainsi que les fonctions que ce programme appelle), l'utilisateur sera invité à entrer une phrase de passe (ou mot de passe pour les intimes) pour chiffrer sa clé privée avec de l'AES.

Bien évidemment, même si cela n'est pas recommandé, l'utilisateur peut très bien ne rentrer aucune phrase de passe.

Pour le montage du système de fichier (qui n'est pas encore fait bien sûr), il sera nécessaire de vérifier si la clé privée est chiffrée ou non (et par conséquent, il faudra déterminer s'il l'on doit demander une phrase de passe à l'utilisateur ou non). Fort heureusement Super Nathan est là et a déjà créé la fonction rsa_private_is_encrypted(), disponible dans include/passphrase.h, qui fait exactement cela !

Journalisation plutôt jolie

Afin de permettre une meilleure visualisation des événements du système de fichiers, j'ai mis en place des fonctions de journalisation avec différents degrés d'importance :

  • erreur interne (avec sortie du programme + affichage de la pile des appels),

La pile des appels ne s'affiche que si le flag DEBUG est activé à la compilation.

  • erreur (avec sortie du programme),
  • erreur (sans sortie du programme),
  • warning,
  • information,
  • succès.

Ces fonctions sont accessibles via l'en-tête include/print.h.

À partir de maintenant, privilégiez l'utilisation de ces fonctions plutôt que le fade printf() 👎

Chiffrement à l'écriture/déchiffrement à la lecture des blocs

J'ai rajouté les fonctions write_blocks_with_encryption() et read_blocks_with_decryption() (disponibles dans include/block.h). Ces fonctions sont équivalentes aux fonctions write_blocks() et read_blocks(), à la seule différence qu'elles prennent en premier argument une clé AES, ce qui leur permet de faire du chiffrement/déchiffrement à la volée.

@nathan-rabet nathan-rabet added the feature New feature or request label Aug 15, 2022
This was linked to issues Aug 15, 2022
@nathan-rabet nathan-rabet added this to the Last RUSH milestone Sep 5, 2022
@icare-sh icare-sh merged commit 81a750f into dev Sep 5, 2022
@icare-sh icare-sh deleted the fips branch September 5, 2022 18:20
@HyperLan-git HyperLan-git restored the fips branch September 12, 2022 11:00
@nathan-rabet nathan-rabet linked an issue Sep 13, 2022 that may be closed by this pull request
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
feature New feature or request
Projects
Development

Successfully merging this pull request may close these issues.

Manque l'information de ARGV[2] Je ne ferme pas les fichiers
3 participants