Question

Pendant des années, peut-être 10, j'ai été fasciné par la cryptographie. J'ai lu un livre sur le cryptage basé sur le bit XOR et je suis accroché depuis.

Je suppose qu'il est plus juste de dire que je suis fasciné par ceux qui peuvent casser diverses méthodes de cryptage, mais je m'éloigne du sujet.

Au fait - quelles méthodes utilisez-vous pour écrire de la cryptographie? L'obscurcissement est-il bon en cryptographie?

J'utilise deux méthodes de chiffrement XOR basées sur des clés, différentes techniques de hachage (SHA1) sur les clés et des opérations simples telles que l'inversion de chaînes ici et là, etc.

Je suis intéressé de voir ce que les autres pensent de et essaient lors de l'écriture d'une méthode de cryptage pas si prêt à l'emploi. Aussi - toute information sur la façon dont les pros agissent & "; Casser &"; diverses techniques de cryptographie seraient également intéressantes.

Pour clarifier, je ne souhaite pas utiliser cela dans aucun code de production, ni même dans aucun de mes codes. Je suis curieux d'apprendre comment cela fonctionne en jouant, et non en réinventant la roue. :)

Ian

Était-ce utile?

La solution

Pour contredire ce que tout le monde a dit jusqu'à présent, allez-y! Votre code contient peut-être des vulnérabilités liées au débordement de la mémoire tampon, il peut être lent, buggé, etc., mais vous le faites déjà. ceci pour FUN ! Je comprends tout à fait le plaisir de jouer à la crypto.

Cela étant dit, la cryptographie n'est pas du tout basée sur l'obscurcissement (ou du moins ne devrait pas l'être). Une bonne cryptographie continuera de fonctionner, même une fois que Eve a traversé votre code obfusqué et complètement comprend ce qui se passe. IE: de nombreux journaux ont code de substitution , ce que les lecteurs essaient de casser au petit-déjeuner. S'ils commençaient à faire des choses comme inverser toute la chaîne, oui, ce serait plus difficile, mais Joe Reader serait toujours en mesure de la casser, neve tuohtiw gnieb dlot.

Une bonne cryptographie est basée sur des problèmes supposés difficiles (rien n’a encore été prouvé, autant que je sache). prime d'affacturage , recherche du journal , ou tout autre NP-complet problème.

[Edit: snap, aucun de ceux-ci n'est éprouvé NP-complet. Ils sont tous non prouvés, mais différents. J'espère que vous voyez toujours ce que je veux dire: la cryptographie est basée sur des fonctions à sens unique. Ce sont des opérations faciles à faire, mais difficiles à annuler. c'est-à-dire multiplier deux nombres vs trouver les facteurs premiers du produit. Bonne affaire tduehr ]

Vous avez plus de pouvoir pour jouer avec une branche des mathématiques vraiment cool. Rappelez-vous simplement que la cryptographie est basée sur des choses difficiles, et non compliquées. De nombreux algorithmes de cryptographie, une fois que vous les comprenez vraiment, sont d'une simplicité déconcertante, mais fonctionnent quand même, car ils sont basés sur quelque chose de difficile, pas seulement de changer de lettre.

Note: Ceci étant dit, certains algorithmes ajoutent des particularités supplémentaires (comme le renversement de chaîne) pour rendre la brute forcée encore plus difficile. Une partie de moi a l'impression de lire ceci quelque part en faisant référence à DES , mais je ne le crois pas. ... [EDIT: J'avais raison, voir 5ème paragraphe de cet article pour une référence aux permutations comme inutiles.]

BTW: Si vous ne l'aviez pas trouvé auparavant, je suppose que le TEA / XTEA / La série XXTEA d’algorithmes serait intéressante.

Autres conseils

Le meilleur conseil que je puisse vous donner est: résistez à la tentation de réinventer la roue. La cryptographie est plus difficile que vous ne le pensez.

Récupérez le livre Cryptographie appliquée de Bruce Schneier et lisez-le attentivement.

La bonne réponse est de ne pas faire quelque chose comme ça. La meilleure méthode consiste à choisir l'une des nombreuses bibliothèques de cryptographie disponibles à cet effet et à les utiliser dans votre application. La sécurité par l'obscurité ne fonctionne jamais.

Choisissez également les normes les plus courantes pour les algorithmes de cryptographie. AES pour le chiffrement, SHA256 pour le hachage. Elgamal pour clé publique.

La lecture de la cryptographie appliquée est également une bonne idée. Mais une grande majorité du livre contient des détails sur les implémentations dont vous n’auriez pas besoin pour la plupart des applications.

Modifier: pour développer les nouvelles informations données lors de la modification. La grande majorité de la cryptographie actuelle implique beaucoup de mathématiques compliquées. Même les chiffrements de bloc qui ressemblent à toutes sortes de choses sont les mêmes.

Dans ce cas, lisez Applied Cryptography et obtenez le livre Manuel sur la cryptographie appliquée que vous pouvez télécharger gratuitement.

Ces deux éléments contiennent de nombreuses informations sur ce qui entre dans un algorithme de cryptographie. Quelques explications sur des choses comme la cryptanalyse différentielle et linéaire. Une autre ressource est Citeseer , qui contient un certain nombre de documents académiques référencés à télécharger.

La cryptographie est un domaine difficile qui nécessite une longue expérience académique pour aller n'importe où. Mais si vous avez les compétences nécessaires, c'est très gratifiant tel que je l'ai trouvé.

Faites les exercices ici:

http://www.schneier.com/crypto-gram-9910. html # SoYouWanttobeaCryptographer

Pour commencer, jetez un coup d'œil au document sur l'attaque de cube ( http://eprint.iacr.org/2008/ 385 ) et essayez de casser certains algorithmes avec. Une fois familiarisé avec les techniques de chiffrement cryptographiques, vous pourrez mieux les créer.

En ce qui concerne le code de production, je vais répéter ce qui a déjà été dit: il suffit d’utiliser ce qui est disponible sur le marché, car tous les systèmes classiques ont déjà subi de multiples cycles de cryptanalyse.

Tous les conseils ci-dessus sont judicieux. Obfuscation mauvaise. Ne mettez pas votre propre crypto en production sans d'abord laisser le public le battre pendant un moment.

quelques choses à ajouter:

  • Le codage est un cryptage pas . J'ai récemment contourné le système d'authentification d'un site Web en raison de l'incompréhension des développeurs.

  • Apprenez à casser les systèmes les plus fondamentaux. Vous seriez surpris de la fréquence à laquelle la connaissance des chiffres de rotation simples est réellement utile.

  • A ^ B = C. Vous avez indiqué que vous utilisiez un cryptage XOR à deux clés. Lorsque vous construisez un cryptosystème, vérifiez toujours que vos étapes sont réellement efficaces. dans le cas XOR à deux clés, vous utilisez en réalité simplement une clé différente.

  • A ^ A = 0. Le cryptage XOR est très faible contre les attaques en texte clair connues ou choisies. Si vous connaissez tout ou partie du texte en clair, vous pouvez obtenir tout ou partie de la clé. Texte en clair ^ Cyphertext = Clé

  • Un autre bon livre à lire est le Code Book de Simon Singh. Il retrace une partie de l'histoire de la cryptographie et des méthodes permettant de casser la plupart des systèmes cryptographiques qu'il couvre.

  • Deux algorithmes à apprendre (apprenez-les et leur histoire):

    • 3DES: oui, il est obsolète, mais c’est un bon point de départ pour apprendre fiestel et bloquer les cyphères. Il existe de bonnes leçons en matière de création à partir de DES. En outre, le raisonnement de la méthodologie de chiffrement, déchiffrement, chiffrement est une bonne chose à apprendre.
    • RSA: Je vais afficher mon geek de maths intérieur ici. Probablement l'algorithme de cryptage le plus simple utilisé aujourd'hui. Les méthodes pour le casser sont connues (il suffit de factoriser la clé) mais leur calcul est extrêmement difficile. m ^ d mod n où n = p * q (p et q premiers) et gcd (d, n) = 1. Un peu de théorie des groupes / nombres explique pourquoi cela ne s'inverse pas facilement sans connaître p et q. Dans mon cours de théorie des nombres, nous avons prouvé la théorie sous-jacente à au moins une demi-douzaine de façons.

Note pour PhirePhly:

La factorisation initiale et le log discret ne sont ni NP-Complete, ni NP-Hard. Ils sont tous deux inconnus en complexité. J'imagine que vous auriez une bonne réputation en découvrant cette partie. Cela dit, le reste de votre affirmation est correcte. Une bonne cryptographie est basée sur des choses faciles à faire mais difficiles à annuler sans la clé.

Sauf si vous (devenez) un expert dans le domaine, n'utilisez pas de crypto faite maison dans les produits de production. Assez dit.

NE PAS FAIRE!

Même les experts ont un très très difficile moment de savoir s’ils ont réussi. En dehors d'une classe de chiffrement CS, utilisez simplement le code d'autres personnes. Portez le code uniquement si vous en avez absolument besoin, puis testez la morve avec un code correct connu.

La plupart des experts conviennent que la transparence est plus utile que l’obscurcissement dans le développement de méthodes et d’algorithmes cryptographiques.

En d’autres termes, tout le monde semble être capable de concevoir un nouveau code que tout le monde peut déchiffrer sauf eux. La meilleure cryptographie survit au test selon lequel l’algorithme et certains messages cryptés sont envoyés et que les meilleurs pirates informatiques tentent de le casser.

En général, la plupart des méthodes d’obscurcissement et de hachage simple (et j’en ai fait plusieurs moi-même) sont très facilement brisées. Cela ne signifie pas qu'ils ne sont pas amusants à expérimenter et à apprendre.

Liste des ouvrages de cryptographie (à partir de Wikipedia)

Cette question a attiré mon attention parce que je relis actuellement Cryptonomicon de Neal Stephenson. , ce qui n’est pas mauvais en soi, même si c’est un roman ...

Pour faire écho aux autres (pour la postérité), ne mettez jamais en œuvre votre propre crypto. Utilisez une bibliothèque.

Cela dit, voici un article sur la mise en œuvre de DES:

http://scienceblogs.com/goodmath/2008/09/des_encryption_part_1_encrypti.php

La permutation et le bruit sont essentiels à de nombreux algorithmes de chiffrement. L’important n’est pas tant d’obscurcir les choses que d’ajouter des étapes au processus qui rendent les attaques par force brute impraticables.

Consultez également la cryptographie appliquée . C'est un bon livre.

Je suis d'accord avec les autres affiches. Ne le faites pas sauf si vous écrivez un article à ce sujet et que vous devez faire des recherches ou quelque chose du genre.

Si vous pensez en savoir beaucoup à ce sujet, consultez le cryptographie appliquée . livre. Je connais beaucoup de maths et ce livre m'a tout de même donné des coups de pied. Vous pouvez lire et analyser à partir de son pseudo-code. Le livre a aussi une tonne de références à l'arrière pour aller plus loin si vous voulez.

Crypto est une de ces choses que beaucoup de gens pensent être très cool, mais le calcul réel derrière les concepts est au-delà de leur portée. J'ai décidé il y a longtemps que cela ne valait pas l'effort mental pour moi d'atteindre ce niveau.

Si vous voulez juste voir comment cela est fait (étudiez les implémentations existantes dans le code), je vous suggère de jeter un coup d'œil au Bibliothèque Crypto ++ même si vous ne codez pas normalement en C ++, vous avez une bonne vue des rubriques et des éléments de la mise en oeuvre du cryptage.

Bruce possède également une bonne liste de ressources que vous pouvez obtenir sur son site

J'ai assisté à une session de sécurité du code chez Aus TechEd cette année. Lorsqu’il a parlé de l’algorithme AES dans .Net et de la façon dont il a été sélectionné, le présentateur (Rocky Heckman) nous a expliqué l’une des techniques utilisées pour casser le cryptage précédent. Quelqu'un avait réussi à utiliser une caméra thermique pour enregistrer la signature thermique d'un processeur pendant le cryptage des données. Ils ont pu utiliser cet enregistrement pour déterminer les types de calcul effectués par la puce, puis effectuer un reverse engineering de l'algorithme. Ils ont eu beaucoup trop de temps libre et je suis assez confiant pour ne jamais être assez intelligent pour battre des gens comme ça! : (

  • Remarque: j'espère sincèrement avoir correctement relayé l'histoire, sinon l'erreur est probablement la mienne, pas celle du présentateur mentionné.

Il a déjà été battu à mort de ne pas utiliser de crypto maison dans un produit. Mais j'ai lu votre question et vous dites clairement que vous ne le faites que pour le plaisir. Cela me semble être le véritable esprit geek / hacker / universitaire. Vous savez que cela fonctionne, vous voulez savoir pourquoi cela fonctionne et essayez de voir si vous pouvez le faire fonctionner.

J'encourage complètement cela et je fais de même avec beaucoup de programmes que j'ai écrits juste pour m'amuser. Je suggère de lire ce post ( http: //rdist.root .org / 2008/09/18 / dangers-of-amateur-cryptography / ) sur un blog appelé & "; rootlabs &"; Dans cet article, vous trouverez une série de liens que vous devriez trouver très intéressants. Un gars intéressé par les mathématiques et la cryptographie, titulaire d’un doctorat en informatique et travaillant pour Google, a décidé de rédiger une série d’articles sur la programmation cryptographique. Il a commis plusieurs erreurs non évidentes signalées par l'expert du secteur, Nate Lawson.

Je vous suggère de le lire. Si cela ne vous encourage pas à continuer d’essayer, il vous apprendra toujours quelque chose.

Bonne chance!

Je suis d'accord pour ne pas réinventer la roue.

Et rappelez-vous, la sécurité par l'obscurité n'est pas une sécurité du tout. Si une partie de vos mécanismes de sécurité utilise la phrase & "Personne ne le saura jamais! &", Ce n'est pas sécurisé. Pensez à AES - l'algorithme est accessible au public, de sorte que tout le monde sache exactement comment cela fonctionne, et pourtant personne ne peut le casser.

Selon d’autres réponses, l’invention d’un schéma de chiffrement appartient définitivement aux experts et tout nouveau schéma de chiffrement proposé doit être soumis à un contrôle public afin de confirmer tout espoir raisonnable de validation et de confiance en sa robustesse. Cependant, implémenter des algorithmes et des systèmes existants est une tâche beaucoup plus pratique & “Pour le plaisir &“; et tous les principaux standards ont de bons vecteurs de test pour vous aider à prouver l’exactitude de votre implémentation.

Cela dit, pour les solutions de production, les implémentations existantes sont nombreuses et il n’ya normalement aucune raison pour que vous ayez besoin de mettre en place un système vous-même.

Je suis d’accord avec toutes les réponses, à la fois " n’écrivez pas votre propre algorithme de chiffrement pour une utilisation en production " et & "; ouais, allez-y pour votre propre édification &"; mais je me souviens de quelque chose que je crois que le vénérable Bruce Schneier écrit souvent: & "; il est facile pour quelqu'un de créer quelque chose qu'il est incapable de casser lui-même. & <; strong>

La seule cryptographie à laquelle un non-expert devrait pouvoir s’attendre est la méthode de chiffrement en os simple et simple One Time Pad.

CipherTextArray = PlainTextArray ^ KeyArray;

Hormis cela, tout ce qui mérite d'être regardé (même pour les loisirs) nécessite un diplôme de haut niveau en mathématiques.

Je ne veux pas approfondir les réponses correctes qui ont déjà été données (ne le faites pas pour la production; un simple renversement ne suffit pas; une obfuscation est mauvaise; etc.).

Je veux juste ajouter le principe de Kerckoff, & "Un cryptosystème doit être sécurisé même si tout ce qui concerne le système, à l'exception de la clé, est de notoriété publique &";.

Pendant que j'y suis, je mentionnerai également le principe de Bergofsky (cité par Dan Brown dans Digital Fortress): & "; Si un ordinateur utilisait suffisamment de clés, il était garanti mathématiquement de trouver la bonne. La sécurité d'un code & # 8217; n'était pas que sa clé d'accès était introuvable, mais plutôt que la plupart des gens & # 8217; t n'avaient pas le temps ou l'équipement à essayer. & '; Quot.
Seulement, ce n'est pas vrai en soi; Dan Brown l'a inventé.

En réponse à PhirePhly et tduehr, sur la complexité de l’affacturage:

On peut facilement constater que l’affacturage est en NP et en coNP. Ce que nous avons besoin de voir, c’est que les problèmes & Quotients donnés n et k trouvent un facteur premier p de n avec 1 & Lt; p < = k " et & «montrez qu’un tel p n’existe pas &»; sont tous deux en NP (la première étant la variante de décision du problème de factorisation, la seconde étant la variante de décision du complément).

Premier problème: étant donné une solution candidate p, nous pouvons facilement (c'est-à-dire en temps polynomial) vérifier si 1 < p < = k et si p divise n. Une solution p est toujours plus courte (en nombre de bits utilisés pour la représenter) que n, la factorisation est donc en NP.

Deuxième problème: étant donné une factorisation première complète (p_1, ..., p_m), on peut rapidement vérifier que leur produit est n, et qu'aucun n'est compris entre 1 et k. Nous savons que PRIMES est dans P, nous pouvons donc vérifier la primalité de chaque p_i en temps polynomial. Comme le plus petit nombre premier est 2, il y a au plus log_2 (n) facteurs premiers dans toute factorisation valide. Chaque facteur est inférieur à n, ils utilisent donc au plus O (n log (n)) bits. Donc, si n n’a pas de facteur premier compris entre 1 et k, il existe une preuve courte (de taille polynomiale) qui peut être vérifiée rapidement (en temps polynomial).

L’affacturage est donc dans NP et coNP. S'il était NP-complet, alors NP serait égal à coNP, ce qui est souvent supposé être faux. On peut considérer cela comme une preuve que l’affacturage n’est en effet pas NP-complet; Je préférerais simplement attendre une preuve ;-)

Généralement, je commence par obtenir un doctorat en théorie des nombres. Ensuite, je fais environ une dizaine de recherches et je continue avec beaucoup de publications et d’évaluations par les pairs. En ce qui concerne les techniques que j'utilise, ce sont différentes de mes recherches et de celles de mes pairs. De temps en temps, quand je me lève au milieu de la nuit, je développe une nouvelle technique, je la mets en œuvre, je la trouve trouée (avec l'aide de mes pairs de la théorie des nombres et de l'informatique), puis je la peaufine.

Si vous donnez un algorithme à la souris ...

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top