En surface, l'inadéquation de la sécurité par l'obscurité est en contradiction directe avec le concept de secrets partagés (ie "mots de passe"). Ce qui revient à dire: si le secret autour des mots de passe est précieux, alors par extension, il doit sûrement être utile de garder secret l'algorithme qui utilise le mot de passe. De nombreuses organisations (sans doute erronées) peuvent même aller jusqu'à dire que le système est le mot de passe.
Mais dans quelle mesure peut-on se fier au secret d'un algorithme? Ou peut-être de manière plus appropriée, en quoi le secret entourant un algorithme est-il voué à l'échec alors que le secret entourant les mots de passe ne l'est pas?
Si, d'autre part, le secret d'un algorithme est souhaitable, alors quelle est son importance? Dans quelle mesure un développeur doit-il raisonnablement garder son secret cryptographique?
MODIFIER
Pour être clair, il ne s'agit pas de créer un nouvel algorithme non testé, mais de garder secret les détails de l'algorithme que vous choisissez. Par exemple, la technique utilisée par Windows pour hacher les mots de passe consiste à appliquer des algorithmes de hachage connus dans une séquence qui n'est pas publiée et qui semble changer entre les différentes versions de Windows.
Une grande partie du travail sur les mots de passe et les clés est liée au contrôle où ils sont stockés et copiés.
Un mot de passe est stocké dans l'esprit d'un utilisateur humain. Il est entré sur un clavier (ou équivalent) et passe par les registres d'un CPU et le RAM de l'ordinateur, pendant qu'il est en cours de traitement. À moins d'une gaffe terrible, le mot de passe n'atteint jamais une zone de stockage permanente comme un disque dur.
Un algorithme existe quelque part en tant que code source, sur la machine d'un développeur, un système de versioning source et des sauvegardes. Il existe des documents de conception, qui ont été montrés à diverses personnes (par exemple, ceux qui décident de financer le développement du système ou non), et souvent négligemment déposés sur une étagère anonyme ou dans une couche de croûte sur le bureau typique. Plus important encore, l'algorithme existe également en tant que fichier exécutable sur le système déployé lui-même; le binaire n'est pas aussi lisible que le code source mais l'ingénierie inverse fonctionne néanmoins.
Par conséquent, nous ne pouvons raisonnablement considérer que l'algorithme est secret, ou au moins aussi secret que le mot de passe (ou la clé).
Vraiment, les méthodes cryptographiques méthodes ont été divisées il y a un siècle en algorithme et clé précisément à cause de cela: dans un système qui fonctionne, une partie de la méthode fuit nécessairement des traces partout. Avoir une clé signifie concentrer le secret dans l'autre moitié, la partie que l'on peut garder secrète.
"La sécurité par l'obscurité" est une expression qui utilise le terme obscurité, pas secret. La cryptographie consiste à assurer la sécurité par le secret . C'est toute la différence: un mot de passe peut être secret; un algorithme est, au mieux, obscur. L'obscurité est dissipée dès qu'un gars intelligent pense à apporter une lanterne métaphorique. Le secret ressemble plus à un coffre-fort en acier: pour le percer, vous avez besoin d'outils plus puissants.
Un gars intelligent Auguste Kerckhoffs l'a déjà écrit il y a plus d'un siècle. Malgré l'invention de l'ordinateur et de toutes les technologies d'aujourd'hui, ses découvertes s'appliquent toujours. Il a fallu un certain temps aux praticiens de la cryptographie pour apprendre cette leçon; 60 ans plus tard, les Allemands mettaient encore beaucoup dans le "secret" de la conception de la machine Enigma . Notez que lorsque les Allemands ont mis en service l'énigme de la marine à 4 rotors, les cryptographes alliés n'étaient pas gênés (le craquage de routine s'est arrêté pendant quelques mois) mais n'était pas totalement dérouté car certains documents capturés de l'année précédente faisaient allusion au développement de la nouvelle version, avec un quatrième rotor "réflecteur". Voilà: l'algorithme secret n'a pas pu être atteint dans la pratique.
Une torsion supplémentaire est que l'obscurité de l'algorithme peut nuire à la sécurité . Ce que j'explique ci-dessus, c'est que l'obscurité n'est pas fiable pour la sécurité: elle pourrait augmenter la sécurité, mais pas beaucoup (et vous ne pouvez pas vraiment savoir "combien"). Il s'avère qu'il peut également diminuer la sécurité. Le problème est le suivant: il est très difficile de faire un algorithme cryptographique sécurisé. La seule méthode connue est de publier l'algorithme et d'attendre la sagesse collective des cryptographes du monde entier pour le ronger et parvenir à une conclusion qui peut être exprimée comme "peut être brisée de cette façon" ou "apparemment robuste". Un algorithme n'est déclaré "bon" que s'il résiste à l'assaut de dizaines ou de centaines de cryptographes compétents pendant au moins trois ou quatre ans.
Internet, la procrastination académique et l'orgueil humain sont tels qu'avec la bonne campagne de communication, vous pouvez demander à ces quelques centaines de cryptographes de faire ce difficile travail d'évaluation gratuitement - à condition que vous rendiez l'algorithme public ( et "attrayant" en quelque sorte). Si vous souhaitez maintenir l'algorithme obscur, vous ne pouvez pas bénéficier de ces conseils gratuits. Au lieu de cela, vous devez payer. Vingt bons cryptographes pour, disons, deux ans d'efforts: on parle ici de millions de dollars. Personne ne fait ça, c'est beaucoup trop cher. En conséquence, les algorithmes obscurs sont invariablement beaucoup moins soumis à des tests de résistance que les algorithmes publics, et donc moins sûrs.
(Notez les petits caractères: la sécurité ne consiste pas seulement à ne pas être rompue, mais aussi à avoir une certaine a priori connaissance que les violations ne se produiront pas. Je veux pouvoir dormir la nuit.)
Résumé:
Il n'est pas possible de garder votre crypto secret. Vous devez l'avoir là-bas, si c'était juste pour que les gens puissent le tester si cela fonctionne réellement. Je ne vois aucune raison de garder le crypto secret. Vous pouvez mettre un verrou sur la porte tout le monde peut voir votre serrure tout le monde sait comment fonctionne votre serrure et sait que sans la clé, c'est inutile. Le mot de passe est votre clé.
En plus de tout cela, il y a quelques règles d'or comme "ne réinventez pas la roue" et "n'essayez pas de créer votre propre crypto". Nous avons des normes de cryptographie car elles peuvent le tester à grande échelle. Voir également principe de Kerckhoffs
Il existe deux différences importantes entre les algorithmes et les mots de passe/clés:
Vous pouvez (et devez) modifier régulièrement les clés de chiffrement - ou lorsqu'un compromis est suspecté. Cela atténue la perte de secret. De même, vous devez modifier votre mot de passe chaque fois que vous avez des raisons de soupçonner que le mot de passe peut être compromis. En revanche, il est rarement possible de modifier l'algorithme de chiffrement utilisé en temps opportun, vous devez donc être en mesure de survivre (sans perte de sécurité) aux situations où l'algorithme devient connu.
Une copie de l'algorithme est incluse dans chaque logiciel pouvant crypter ou décrypter. Cela signifie qu'il suffit à un utilisateur du logiciel de procéder à une rétro-ingénierie de l'algorithme et de le publier sur Internet, et l'algorithme n'est plus secret. En d'autres termes, vous ne pouvez pas raisonnablement vous attendre à garder l'algorithme secret. En revanche, votre mot de passe ou votre clé de chiffrement sont stockés uniquement sur votre machine - pas sur la machine de millions d'autres utilisateurs.
Ces raisons ont été formulées par Auguste Kerckhoffs en 1883 - oui, il y a plus d'un siècle. (Il semble que ces gens n'étaient pas des nuls!) Voir Wikipedia sur le principe de Kerckhoff , en particulier la règle 2 ("[L'algorithme] ne doit pas être tenu secret, et il doit pouvoir tomber entre les mains de l'ennemi sans inconvénient ").
Je vous recommande également de lire d'autres questions ici sur la "sécurité par l'obscurité", y compris, par exemple, Comment définir les exigences de sécurité pour garantir que les développeurs ... ne fournissent pas la sécurité par l'obscurité? et Le rôle valide de l'obscurité et Démonstration de la façon dont la sécurité par l'obscurité ne fonctionne pas et NSA Suite A Cryptography: Security through obscurity? and Hiding version - sécurité précieuse ou juste par obscurité? . Ils couvrent des sujets connexes et la justification. N'oubliez pas d'utiliser la barre de recherche - ou regardez à droite la barre latérale "Connexes".
Il n'y a qu'une poignée de bons algorithmes, alors qu'il y en a peut-être 1040 bons mots de passe de 20 caractères ou moins. Il est donc assez facile pour un attaquant de deviner votre algorithme ou d'énumérer tous les algorithmes probables, alors qu'il leur est impossible de faire de même avec un mot de passe bien choisi. Imaginez la situation si les utilisateurs devaient choisir leur mot de passe dans une liste de dix possibilités, et c'était la même liste pour tout le monde - c'est essentiellement la position des algorithmes.
Une chose que tout le monde ici n'avait pas mentionnée est que le fait de supposer que l'algorithme de connaissance publique facilite beaucoup la preuve qu'un système de sécurité est vraiment sécurisé. En supposant que votre attaquant connaît le schéma que vous avez utilisé, il est plus facile de prouver qu'un schéma n'est pas sécurisé. Par conséquent, vous devez éviter d'utiliser le schéma.
La sécurisation de l'algorithme est beaucoup plus difficile que la sécurisation de la clé pour les différentes raisons mentionnées dans les autres articles, donc si quelqu'un peut obtenir la clé, il est très probable qu'il puisse également obtenir l'algorithme; mais l'inverse est beaucoup moins probable.
De plus, c'est un principe de sécurité général que moins le système s'appuie pour maintenir sa sécurité, plus le système est sécurisé. En fin de compte, cela se résume à: sur les systèmes les plus sécurisés, seule la clé doit être gardée secrète.
Cela ne signifie pas nécessairement que vous devez publier l'algorithme que vous utilisez. L'obscurité peut être utilisée comme couche de défense (bien que, comme mentionné, la publication opposerait le système à un examen plus approfondi du public), mais l'obscurité ne devrait jamais être utilisée comme seule couche de défense.