• [^] # Re: Crypto pas crypto

    Posté par (site web personnel) . En réponse au journal Passprotect - Gestionnaire de mot de passe. Évalué à 4. Dernière modification le 03 octobre 2016 à 13:04.

    En théorie, tu n’as même pas besoin de clef maître, puisque tu pourrais la baser sur le mot de passe via une dérivation de clef.
    Tu en as besoin en pratique pour permettre le changement de mot de passe et d’éviter de le stocker au login.

    La subtilité est d’arriver à obtenir une clef et un iv (même si c’est moins grave pour le 2nd) unique pour chaque chiffrement à réaliser. Réutiliser une clef de chiffrement est une erreur grave en crypto (on est potentiellement capable de deviner des choses sur les textes en clair à partir des données chiffrées uniquement).

    À la création de l’utilisateur :

    • on génère un sel S de 64 bits via un CSPRNG
    • on génère une clef maîtresse MK de chiffrement de 256 bits via un CSPRNG
    • on calcule une clef de chiffrement K et un IV IV via K, IV = PBKDF2(password, S)
    • on chiffre MK via C, T = AES-256-GCM(MK, K, IV)
    • on stocket S, T et C en bdd, associé à l’utilisateur

    Au login utilisateur :

    • on calcule K, IV = PBKDF2(password, S)
    • on déchiffre MK via MK = AES-256-GCM(C, K, IV, T)

    Pour chiffrer une donnée :

    • on génère un salt s de 64 bits via un CSPRNG
    • on calcule une clef de chiffrement k et un iv de 256 bits à partir de de la master key via k, iv = PBKDF2(MK, s) (en résumé c’est cette étape qui manque chez toi)
    • on chiffre les données d via c, t = AES-256-GCM(d, k, iv)
    • on stocke s, t et c en bdd

    Pour déchiffrer une donnée :

    • on lit s, t et c en bdd
    • on recalcule la clef et l’iv via k, iv = PBKDF2(K, s)
    • on déchiffre les données d via d = AES-256-GCM(c, k, iv, t)