Les programmeurs qui créent des sites Web / applications Web devraient-ils comprendre la cryptographie? Je n'ai aucune idée du fonctionnement de la plupart des algorithmes cryptographiques, et je ne comprends vraiment pas les différences entre md5 / des / aes / etc. L'un d'entre vous a-t-il trouvé le besoin d'une compréhension approfondie de la cryptographie?
Je n'en ai pas eu besoin, mais je me demande si je manque peut-être quelque chose. J'ai utilisé le hachage salt + md5 pour crypter les mots de passe et je dis aux serveurs Web d'utiliser SSL. Au-delà de cela, je ne peux pas dire que j'ai utilisé beaucoup d'autre chose, ni dire avec certitude à quel point ces méthodes sont sécurisées. Je ne les utilise que parce que d'autres personnes prétendent qu'elles sont sûres.
Avez-vous déjà trouvé un besoin d'utiliser la cryptographie dans la programmation Web en dehors de ces deux exemples simples?
la source
Réponses:
Les programmeurs Web doivent savoir qu'ils ne devraient jamais essayer d'implémenter eux-mêmes la cryptographie.
En particulier, cela signifie qu'aucun non-expert en sécurité ne devrait toucher directement l'une des primitives cryptographiques. Ils ne devraient pas penser au niveau AES, SHA-1, etc. Au lieu de cela, ils devraient utiliser des fonctions de haut niveau pour crypter et signer les messages, et pour "hacher" les mots de passe.
Pourquoi? Parce que sinon, les gens se trompent en pensant que:
Juste pour être sur la même page, aucun des éléments ci-dessus n'est correct . Si vous n'obtenez pas cela, alors vous ne devriez pas toucher à la crypto avec un poteau de 10 pieds! (AES-256 est un excellent cryptage, mais seulement si vous l'utilisez correctement. "Ce n'est pas la taille qui compte, c'est ce que vous en faites." :-))
De quel type de fonctions de haut niveau je parle? Je recommande personnellement l'utilisation d'une bibliothèque OpenPGP (pour les données au repos) ou SSL (pour les données en mouvement). Ces protocoles spécifient de manière rigide l'utilisation correcte des algorithmes asymétriques, symétriques et de hachage. Par exemple, avec OpenPGP:
EME-PKCS1-v1_5
). Le rembourrage est extrêmement important pour RSA. ( Certains pensent que l'utilisation du remplissage v1.5 est acceptable. D'autres pensent que l'OAEP est meilleur. )Résumé: si vous n'êtes pas un expert en sécurité et que vous pensez au niveau d'AES, ou SHA-1, ou (Dieu nous en préserve) MD5, vous vous trompez . Utilisez une bibliothèque écrite par des experts en sécurité (comme Bouncy Castle), qui implémente des protocoles conçus par des experts en sécurité (comme OpenPGP pour le chiffrement, ou bcrypt ou scrypt pour le hachage de mot de passe), au lieu de lancer le vôtre.
Je ne suis en aucun cas un expert en cryptographie, mais j'en sais assez pour ne pas essayer de concevoir mes propres protocoles ad-hoc. Juste pour être clair, tout ce post est du matériel Cryptography 101 . Donc, si ce message n'a pas de sens à 100%, vous ne devriez certainement pas vous approcher de la cryptographie.
la source
Vous n'avez pas besoin de savoir autre chose que les bases de la cryptographie (qu'est-ce qu'un hachage, qu'est-ce qu'un sel, à peu près à quel point il est difficile de casser ce cryptage ou cela et ainsi de suite), mais vous devez en savoir assez sur la sécurité dans général.
Les principaux domaines de sécurité que vous devez absolument connaître en tant que développeur Web:
la source
Je me souviens avoir vu cette conférence intitulée Ce que chaque ingénieur doit savoir sur la sécurité et où l'apprendre , le conférencier est Neil Daswani et c'est une conférence Google Tech qu'il a donnée, pourrait être un bon point de départ!
Ne s'applique pas uniquement aux programmeurs Web, mais la question devrait peut-être être renommée "Que doivent savoir les programmeurs sur la sécurité?" car ils n'ont pas besoin d'en savoir plus que les bases de la cryptographie (aussi intéressantes soient-elles)
la source
La crypto est utile dans de nombreuses situations. Un exemple que nous avons utilisé est le cryptage d'un cookie de session créé et défini par un hôte Win / IIS pour être utilisé sur un hôte LAMP.
Si vous devez implémenter le cryptage (par opposition au hachage md5 / sha1), certains termes de base sont importants - tels que la différence entre le cryptage symétrique et asymétrique. En plus de comprendre la différence entre les deux, vous devez comprendre ce que vous, en tant que développeur Web, devez faire pour stocker et sécuriser correctement les clés de déchiffrement. Par exemple, si vous développez une application à déployer sur un hôte sur lequel vous n'avez pas un contrôle administratif complet, comme un hôte partagé, par rapport au déploiement sur un serveur où tous les administrateurs sont connus et approuvés.
la source
À mon avis, vous devriez tout savoir sur la cryptographie que quelqu'un qui attaque votre code saura. Vous devez comprendre les hachages, le sel, le caractère non aléatoire du hasard, les principaux algorithmes de chiffrement (RSA, 3DES, AES, etc.), SHA-1 / MD-5 / et al. Vous n'avez pas besoin de les mémoriser, mais vous devez au moins savoir que l'efficacité d'un algorithme de hachage et comment le rendre plus fort. Vous devez savoir ce que sont les collisions et les faux positifs. Vous ne devriez pas être en mesure de réciter les algorithmes de chiffrement, mais vous devez connaître leurs repères, lesquels sont idéaux pour quels scénarios. Vous devriez être en mesure de décrire et d'expliquer le cryptage symétrique vs asymétrique et quand les utiliser. Vous devez savoir ce qu'est l'ICP et comment il est utilisé. Vous devez savoir ce qu'est une autorité de certification et comment elle interagit avec vos serveurs.
Connaître les tenants et aboutissants de tout n'est pas aussi important que d'en connaître l'arrière-plan. Quels sont les points de référence de certaines choses (à quelle vitesse, quelle force, faiblesses, etc.).
Ces recommandations concernent les informations de niveau senior ou architecte. Si vous êtes juste un singe web ramant une rame, vous n'avez pas besoin de savoir quoi que ce soit. Votre architecte devrait savoir ce genre de choses. Si vous êtes en charge du site, de sa conception, de sa mise en œuvre, etc ... alors vous devez être familier avec tous ces concepts et être capable de converser intelligemment à leur sujet. Il n'est pas nécessaire de pouvoir l'enseigner, il suffit d'accepter et de diffuser des informations à ce sujet.
la source
Vous devez utiliser bcrypt (Blowfish) pour stocker les mots de passe plutôt que MD5; c'est un algorithme beaucoup plus lent , ce qui signifie qu'il est beaucoup plus difficile pour un pirate de deviner et de vérifier. En outre, bcrypt prend un facteur de travail comme paramètre, ce qui signifie qu'il peut devenir encore plus lent à mesure que de nouveaux ordinateurs sont introduits, de sorte qu'il est intégré à la pérennité.
Voir Comment stocker un mot de passe en toute sécurité pour plus d'informations.
la source
Comme réponse assez générale à ce genre de questions, je pense toujours que vous devriez essayer d'avoir une compréhension de base de tout ce qui est lié à distance à ce que vous faites. Bien sûr, vous avez besoin d'une connaissance détaillée et précise de ce sur quoi vous travaillez réellement. Il est très difficile de prédire comment une certaine zone va évoluer, ce qui va être "à la mode" ou ce dont vous aurez besoin à l'avenir, donc avoir un large éventail de choses dont vous avez au moins "entendu" gardera de nombreuses portes s'ouvrent.
En ce qui concerne mon expérience personnelle dans la programmation Web, j'ai trouvé des notions de base de la cryptographie asymétrique et ce genre de choses utiles pour comprendre ce qui se passe sous le capot. J'aurais pu survivre sans cela, mais je dois dire que j'aime la cryptographie et les mathématiques, alors pourquoi pas.
la source