OpenSSL vs GPG pour chiffrer les sauvegardes hors site?

étant donné l'option entre L'utilisation de GPG et OpenSSL pour le cryptage local avant de pousser les archives à un emplacement de sauvegarde hors site, Quels sont les avantages et les inconvénients de chaque solution?

arrière-plan: Je gère actuellement une infrastructure de Serveur Basée Sur Ubuntu 14.04.1 avec tous les correctifs actuels appliqués au fur et à mesure qu'ils deviennent disponibles.

tous ces systèmes sont sans tête, construits automatiquement à l'aide de pré-requis et d'outils d'automatisation, et fonctionnent en machines virtuelles via KVM sur un matériel Intel uniforme.

nous avons une préférence pour Ruby, mais une préférence plus forte pour"faire les choses correctement". Pour les deux, nous avons choisi le "backup" gem comme moyen de créer des archives cryptées de données que nous voulons conserver, car il va créer les mêmes archives cryptées pour un développeur utilisant Vagrant qu'il serait en production, quel que soit le mécanisme par lequel il est transmis.

tous les logiciels et la configuration est gérée via Puppet, donc aucune décision n'aura d'impact sur "l'expérience utilisateur" ou la commodité. L'une ou l'autre option créera des scripts pertinents pour gérer, vérifier ou restaurer à partir de n'importe quelles sauvegardes créées.

étant donné que l'une ou l'autre option de cryptage offre-t-elle un avantage par rapport à l'autre lorsqu'elle est utilisée à cette fin?

30
demandé sur K. Darien Freeheart 2015-01-31 06:24:16

1 réponses

je choisirais GPG pour le cryptage des fichiers, il a des décennies de cryptage sécurisé testé, et est très facile d'avoir plusieurs "destinataires" (clés de sauvegarde?) ou des signatures avec ses clés publiques et même des serveurs (si ils seraient utiles).

avec GPG, toutes les erreurs simples ont été évitées/corrigées, il choisit une clé "aléatoire" plus longue pour le chiffrement réel et fait un bon nombre de "tours" pour le rendre très sûr.

OpenSSL should être capable de faire toutes les mêmes choses, (il a été autour depuis 1998, mais si les numéros de version signifient quelque chose qu'il a atteint la version 1 en 2010) mais il est très facile de faire une erreur qui pourrait radicalement diminuer la sécurité. Et de ce post sur security.stackexchange.com (de janvier 2013) et un autre par un utilisateur de réputation 159K, la commande openssl enc pourrait laisser quelque chose à désirer:

le le format de cryptage utilisé par OpenSSL n'est pas standard: C'est "ce que fait OpenSSL", et si toutes les versions D'OpenSSL ont tendance à être en accord les unes avec les autres, il n'y a toujours pas de document de référence qui décrit ce format à l'exception du code source OpenSSL. Le format de l'en-tête est assez simple:

valeur magique (8 octets): les octets 53 61 6c 74 65 64 5f 5f salt value (8 octets)

D'où un en-tête fixe de 16 octets, commençant par l'encodage ASCII de la chaîne "Salés__", suivi par le sel lui-même. C'est tout ! Aucune indication de l'algorithme de cryptage; vous êtes censé garder une trace de vous-même.

le processus par lequel le mot de passe et le sel sont transformés en clé et IV N'est pas documenté, mais un regard sur le code source montre qu'il appelle la fonction spécifique D'OpenSSL EVP_BytesToKey () , qui utilise une fonction personnalisée fonction de dérivation de clé avec quelques hachures répétées. Il s'agit d'une construction non standard et mal étudiée (!) qui s'appuie sur la fonction de hachage MD5 de réputation douteuse (!!); cette fonction peut être changée sur la ligne de commande avec le drapeau undocumented -md (!!!); le" nombre d'itérations "est défini par la commande enc à 1 et ne peut pas être modifié (!!!!). Cela signifie que les 16 premiers octets de la clé seront égaux à MD5(mot de passe||sel) , et c'est tout.

C'est assez faible ! toute personne qui sait écrire du code sur un PC peut essayer de craquer un tel schéma et sera en mesure d ' "essayer" plusieurs dizaines de millions de mots de passe potentiels par seconde (des centaines de millions seront réalisables avec un GPU). si vous utilisez "openssl enc", assurez-vous que votre mot de passe a une entropie très élevée ! (c'est-à-dire supérieur à ce qui est habituellement recommandé; visez au moins 80 bits). Ou, de préférence, ne pas utiliser en tous; au lieu de cela, optez pour quelque chose de plus robuste ( GnuPG , en faisant le cryptage symétrique pour un mot de passe, utilise un KDF plus fort avec de nombreuses itérations de la fonction de hachage sous-jacente).

man enc a même ceci sous "BUGS":

il devrait y avoir une option permettant d'inclure un nombre d'itérations.

46
répondu Xen2050 2017-03-17 10:45:55