J'essaie actuellement de crypter les données au repos avec NodeJS, j'ai lu dans les documents Node API que createCipher
n'est pas recommandé .
L'implémentation de crypto.createCipher () dérive des clés à l'aide de la fonction OpenSSL EVP_BytesToKey avec l'algorithme de résumé défini sur MD5, une itération et sans sel. Le manque de sel permet des attaques par dictionnaire car le même mot de passe crée toujours la même clé. Le faible nombre d'itérations et l'algorithme de hachage non cryptographiquement sécurisé permettent de tester les mots de passe très rapidement.
Conformément à la recommandation d'OpenSSL d'utiliser pbkdf2 au lieu de EVP_BytesToKey, il est recommandé aux développeurs de dériver eux-mêmes une clé et un IV à l'aide de crypto.pbkdf2 () et d'utiliser crypto.createCipheriv () pour créer l'objet Cipher.
createCipher
est-il toujours un moyen viable et sécurisé de crypter les données au repos? Cette méthode doit-elle être considérée comme obsolète? Est-il possible pour un attaquant bien informé de déchiffrer potentiellement des données?
Une solution utilisant createCipheriv
doit-elle toujours être préférée à createCipher
?
Tous autres détails ou recommandations appréciés.
CreateCipher est-il toujours un moyen viable et sécurisé de crypter les données au repos?
Bien qu'il ne soit bien sûr jamais recommandé d'utiliser des appels d'API dépréciés, il est possible de créer un système sécurisé en utilisant createCipher
. Pour cela, le "mot de passe" donné doit être suffisamment solide pour résister aux attaques hors ligne et éventuellement parallèles. Pour cela, le mot de passe donné doit avoir suffisamment d'entropie (doit être suffisamment aléatoire) pour ne pas être deviné. Par exemple, vous pouvez créer des mots de passe d'environ 80 bits ou plus à l'aide d'un gestionnaire de mots de passe et les utiliser.
Une solution utilisant
createCipheriv
doit-elle toujours être préférée àcreateCipher
?
Oui, ne serait-ce que parce que l'auteur vous a déjà prévenu et que toute révision de votre code devra reconsidérer si createCipher
est toujours viable. Si la méthode est jamais supprimée du CryptoJS (peu probable, mais elle est finalement obsolète), votre code ne fonctionnera plus.
Néanmoins, l'utilisation de createCipheriv
sera moins sûre que createCipher
si vous utilisez un mot de passe directement comme clé. Vous devez toujours utiliser une fonction de dérivation de clé basée sur un mot de passe correcte telle que PBKDF2 pour dériver le matériau de la clé de sortie - comme indiqué dans la documentation mise à jour.
Tous autres détails ou recommandations appréciés.
Dans la plupart des cas, vous souhaitez utiliser une méthode de chiffrement/déchiffrement haut de gamme telle que la syntaxe de message cryptographique (CMS, spécifié dans PKCS # 7), PGP ou des protocoles/formats de conteneur haut de gamme similaires.
Si vous avez vraiment besoin d'utiliser directement un chiffrement, vous devriez essayer de voir si chiffrement authentifié tel que proposé par GCM est une option.
La fonction createCipher
désormais dépréciée ne permettait pas une iv
unique, c'est pourquoi createCipheriv
est préféré.
Tout en dérivant une clé à l'aide d'une fonctionnalité de dérivation de clé, il n'aide pas à protéger le texte chiffré contre les attaques de dictionnaire qu'un iv
empêche.