004 : Cybersécurité

Chiffrement : Développer une version pour RSA et une autre pour AES. Mission : ajouter deux nouveaux champs du nom de "cypherAES" et "cypherRSA" dans les documents de la collection person. Mise en place de deux fonctions (réversibilité du chiffrement valeur en clair => valeur chiffrée => valeur en clair): - Encryption_AES - Encryption_RSA - Decryption_AES - Decryption_RSA -> id du document en entrée pour déchiffrer la valeur RSA et puis l'afficher. Conformité quant aux moyens cryptographiques à utiliser définit dans la SSI. Encryption_AES Mission : réaliser un chiffrement symétrique qui comprend <"nom + prénom + mail"> séparés par des espaces pour constituer un nouveau champ "cypherAES". Utilisation de la librairie AES-JS qui propose une implémentation en JavaScript pure de l'algorithme de chiffrement par bloc AES et de tous les modes d'opération (CBC, CFB, CTR, ECB et OFB). Création d'une fonction "EncryptionAES" qui va être stockée sur le serveur (dans la collection system.js) pour être utilisé par le shell mongo. Celle-ci contient à ce jour : - une fonction load() pour charger AES-JS - une requête afin de chercher uniquement les collections n'ayant aucun champ "cypherAES" mais dont les champs "firstname", "lastname" et "mail" sont présents - une clé de 256 bits construite avec Uint8Array() qui représente un tableau d'entiers non signés sur 8 bits - une fonction "insertPseudoEncryptionAES" pour mettre en place le processus de chiffrement pour chaque document contenant un forEach() qui va boucler sur l'ensemble des documents défini par la requête de recherche - une variable de récupération <"nom + prénom + mail"> pour chaque document - une variable de concaténation avec ajout des espaces - une méthode pour la conversion du texte en octet - une méthode pour le chiffrement du pseudo basé sur un compteur (mode d'opération CTR), dans ce mode, le flux de clé est obtenu en chiffrant les valeurs successives d’un compteur (par défaut le compteur commence à 1, dans notre cas initialisé à n) - une méthode qui retourne comme résultat des données sous forme hexadécimale car par soucis de lisibilité on va convertir les données binaires, ils seront donc visibles en clair sous forme hexadécimale dans le document - une requête pour insérer le résultat chiffré dans le document sous sa forme hexadécimale sur lequel le forEach boucle - on appelle la fonction "insertPseudoEncryptionAES" - on instancie également un objet pour calculer le temps d'exécution du script à des fins de tests (à retirer plus tard) Encryption_RSA Mission : réaliser un chiffrement asymétrique qui comprend <"nom + prénom + mail"> séparés par des espaces pour constituer un nouveau champ "cypherRSA". Utilisation de la librairie Cryptico qui propose une implémentation en JavaScript pure des algorithmes de chiffrement RSA et AES. Création d'une fonction "EncryptionRSA" qui va être stockée sur le serveur (dans la collection system.js) pour être utilisé par le shell mongo. Celle-ci contient à ce jour : - une fonction load() pour charger cryptico - une requête afin de chercher uniquement les collections n'ayant aucun champ "cypherRSA" mais dont les champs "firstname", "lastname" et "mail" sont présents - une phrase secrète pour générer la clé RSA - une taille en bits pour la clé RSA (1024 dans notre cas) - une fonction "insertPseudoEncryptionRSA" pour mettre en place le processus de chiffrement pour chaque document, contenant un forEach() qui va boucler sur l'ensemble des documents défini par la requête de recherche - une variable de récupération <"nom + prénom + mail"> pour chaque document - une variable de concaténation avec ajout des espaces - une méthode pour générer la clé privée - une méthode pour générer la clé publique - une méthode pour le chiffrement du pseudo - une méthode pour écrire sous forme de chaîne de caractères le résultat chiffré - une requête pour insérer le résultat chiffré dans le document en base64 - on appelle la fonction "insertPseudoEncryptionRSA" - on instancie également un objet pour calculer le temps d'exécution du script à des fins de tests (à retirer plus tard) Déchiffrement : Développer une version pour RSA et une autre pour AES Decryption_AES Mission : réaliser un déchiffrement pour l'afficher en clair avec une chaîne de caractères d'un encodage UTF-8 de préférence. Utilisation de la même librairie que pour le chiffrement (AES-JS) Création d'une fonction "DecryptionAES" qui va être stockée sur le serveur (dans la collection system.js) pour être utilisé par le shell mongo. Celle-ci contient à ce jour : - une fonction load() pour charger AES-JS - une requête afin de chercher uniquement le document ayant pour id celui passé en paramètre dans la fonction DecryptionAES avec un forEach() - une méthode pour convertir la valeur en hexadécimale en octets - une méthode pour maintenir compteur à la même valeur (3772) que celle pour le chiffrement - une méthode pour convertir les octets en texte - un appelle de print() pour afficher le résultat du texte déchiffré - une instanciation d'un objet pour calculer le temps d'exécution du script à des fins de tests (à retirer plus tard) Decryption_RSA Mission : réaliser un déchiffrement pour l'afficher en clair avec une chaîne de caractères d'un encodage UTF-8 de préférence. Utilisation de la même librairie que pour le chiffrement (cryptico) Création d'une fonction "DecryptionRSA" qui va être stockée sur le serveur (dans la collection system.js) pour être utilisé par le shell mongo. Celle-ci contient à ce jour : - une fonction load() pour charger cryptico - une requête afin de chercher uniquement le document ayant pour id celui passé en paramètre dans la fonction DecryptionRSA avec un forEach() - une phrase secrète pour générer la clé privée - une taille en bits pour la clé RSA (1024 dans notre cas) - une méthode pour le déchiffrement contenant la clé privée et le pseudo chiffré en paramètre - un appelle de print() pour afficher le résultat déchiffré en texte - une instanciation d'un objet pour calculer le temps d'exécution du script à des fins de tests (à retirer plus tard)