Question:
Où puis-je apprendre la cryptographie / cryptanalyse à la dure, sans aller à l'école? Un bon livre?
jokoon
2011-07-26 18:07:48 UTC
view on stackexchange narkive permalink

Je ne suis pas si mauvais en mathématiques:

Je sais ce que sont les p-list et p-combinaisons, je connais l'algèbre matricielle, je sais ce qu'est un XOR, je sais comment dire si un nombre est un top, etc: je ne suis pas le programmeur qui déteste les maths parce qu'il est mauvais, mais je n'ai pas de doctorat non plus.

Je ne suis pas mal non plus en informatique, eh bien au moins en termes de culture informatique générale:

Je connais C, C ++ (tous deux appris à l'école), python, quelques haskell, quel encodage de texte existe-t-il, comment fonctionne UNICODE, je sais comment un fichier peuvent être compressés ou chiffrés, quels sont les algorithmes courants (diffie-hellman, l'algorithme LZMA, DES, AES, Serpent, Blowfish, SHA, MD5 ...). Je me suis beaucoup intéressé à la cryptographie sur wikipedia ou sur d'autres sites Web, mais je ne pense pas que wikipedia puisse m'apprendre la cryptographie sans détailler les algorithmes ou sans pratique; par exemple, je sais ce qu'est la cryptographie synchrone et ce qui est asynchrone (clé publique / privée).

J'aimerais apprendre comment implémenter correctement et en toute sécurité les algorithmes les plus populaires, et comment les rendre fiables: un livre ou de bons tutoriels ou cours. J'ai rapidement cherché sur Khan Academy, mais ce sujet n'est pas anodin et nécessite à la fois des connaissances en mathématiques, en informatique et / ou en électronique.

Je ne veux pas lire des pages et des pages de simple théorie sur les choses de base que je connais peut-être déjà ou ne sont pas vraiment pertinentes pour la cryptographie d'aujourd'hui, comme un article écrit par un chercheur, juste quelque chose de pratique, avec des problèmes et des problèmes de cryptanalyse, pour les étudiants.

J'ai actuellement beaucoup temps libre, je n'ai que 26 ans, et je suis sûr que je peux apprendre ce genre de choses, non seulement pour l'augmentation de salaire que cela peut m'apporter, mais aussi parce que j'ai toujours été fasciné par la cryptographie sans vraiment la comprendre, je peux juste '' Je ne trouve aucun bon matériel.

Parlez-vous d'apprendre la * théorie *, comment les algorithmes sont définis, etc., OU comment mettre en œuvre des solutions pratiques? Celles-ci sont presque mutuellement exclusives, pour la plupart des situations.
Apprends-tu mieux en lisant ou en faisant? Cela fera une différence.
plus en lisant, mais aussi en faisant, je veux dire que la cryptographie n'a pas de sens sans cryptanalyse.
@jokoon, Voir https://www.schneier.com/crypto-gram-9910.html. Il existe également de nombreuses ressources de lecture recommandées sur https://www.schneier.com/paper-self-study.html
Huit réponses:
Thomas Pornin
2011-07-26 19:24:07 UTC
view on stackexchange narkive permalink

(LZMA est un algorithme de compression, pas cryptographique.)

Dans le but de implémenter des algorithmes cryptographiques, la méthode générique consiste à obtenir le standard descriptif pertinent, en saisissant votre clavier, et essayer. La plupart des standards incluent des "vecteurs de test", c'est-à-dire des exemples de valeurs qui vous permettent de savoir si votre implémentation renvoie les bonnes réponses. À ce stade, les choses diffèrent selon le type d'algorithme que vous envisagez.

Cryptographie symétrique:

Les algorithmes symétriques couvrent le cryptage symétrique, les fonctions de hachage, et les codes d'authentification de message (MAC). Vous n'avez pas besoin de connaître beaucoup de mathématiques pour les gérer; la plupart concernent des ajouts d'entiers 32 bits et 64 bits (c'est l'arithmétique modulaire, avec 232 ou 2 64 comme module) et des opérations au niveau du bit (XOR, AND ...).

Ce code est généralement fait en C. De bonnes performances sont obtenues en ayant quelques notions sur la façon dont le compilateur C comprendra et traduire le code en instructions pour le CPU; la connaissance de l'assemblage n'est pas strictement obligatoire, mais très utile. Un paramètre important est la mémoire cache: le déroulement en boucle est généralement un bon outil, mais si vous en faites trop, les performances diminuent fortement.

Je suggère de commencer par implémenter les fonctions de hachage classiques (la famille SHA, décrite dans FIPS 180-3) et en essayant de les rendre rapides. À titre de comparaison, obtenez OpenSSL et utilisez l'outil de ligne de commande openssl speed pour voir quel type de performance peut être obtenu (cet outil est déjà inclus dans toute distribution Linux décente , et cela fonctionne aussi sur Windows et MacOS). Par exemple, sur mon PC:

  $ openssl speed sha256Faire sha256 pendant 3s sur 16 blocs de taille: 4842590 sha256 en 3.00sFaire sha256 pour 3s sur 64 blocs de taille: 2820288 sha256 en 2.99sFaire sha256 pour 3s sur des blocs de 256 tailles: 1262067 sha256 en 2,99s Faire sha256 pendant 3s sur des blocs de 1024 tailles: 395563 sha256 en 3,00s
Faire sha256 pendant 3s sur 8192 blocs de taille: 53564 sha256 en 3,00sOpenSSL 0.9.8o 01 juin 2010 construit le: mercredi 23 février 00:47:27 UTC 2011options: bn (64,64) md2 (int) rc4 (ptr, char) des (idx, cisc, 16, int) aes (partiel) blowfish (ptr2) compilateur: cc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN-DHAVE_DLFCN_H -m64 -DL_ENDIAN -DLFCN_H -m64 -DL_ENDIAN -Dexter -Wall -DMD32_REG_T = int-DOPENSSL_BN_ASM_MONT -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM options de synchronisation disponibles: TIMES TIMEB HZ = 100 [valeur de type sysconf] fonction de synchronisation utilisée: 1000 fois par nombre de fois par octets. 64 octets 256 octets 1024 octets 8192 bytessha256 25827.15k 60367.37k 108056.57k 135018.84k 146265.43k  

ce qui signifie qu'OpenSSL comprend une implémentation SHA-256 optimisée à la main dans l'assemblage, qui atteint 146 Mo / s lors du traitement de messages de 8 Ko. Sur la même machine, une implémentation en C pur devrait atteindre au moins 130 Mo / s.

Pour un exemple de la façon dont les fonctions de hachage sont implémentées en C et Java, et comment la vitesse de hachage peut être mesurée dans un manière significative, voir sphlib.

Ensuite, vous pouvez essayer le cryptage symétrique, en particulier l'AES ( FIPS 197). Cela aide un peu à savoir ce qu'est un champ fini de caractéristique 2, mais la norme est suffisamment claire pour vous guider à travers une implémentation superficielle. Ensuite, essayez d'optimiser les choses. OpenSSL peut servir de point de comparaison et s'inspirer des implémentations AES de Brian Gladman. En ce qui concerne la sécurité, il y a eu une certaine inquiétude quant aux informations dépendant de la clé qui pourraient être divulguées par l'utilisation de tables de recherche dans l'implémentation (essayez de rechercher «AES cache timing attack»); essayer de reproduire ce type d'attaque est un très bon exercice (attention, ce n'est pas facile, mais si vous réussissez à le démontrer en laboratoire, vous aurez beaucoup appris sur le fonctionnement des implémentations cryptographiques).

Cryptographie asymétrique:

La cryptographie asymétrique concerne les algorithmes qui impliquent plus d'une partie. Cela inclut le cryptage asymétrique (RSA, ElGamal), l'échange de clés (Diffie-Hellman) et les signatures numériques (RSA encore, DSA ...). Le contenu mathématique y est beaucoup plus vaste, et l'optimisation est un sujet beaucoup plus large que celui de la cryptographie symétrique, car il existe plusieurs façons d'implémenter chaque algorithme, au lieu d'un seul chemin d'implémentation "évident".

Une bonne référence est le Guide de la cryptographie par courbe elliptique. Bien qu'il s'agisse principalement de courbes elliptiques, il inclut un traitement général de la mise en œuvre d'opérations en champs finis, et il se trouve que c'est l'exemple de chapitre qui peut être téléchargé gratuitement à l'URL liée ci-dessus. Alors récupérez-le et lisez-le maintenant. Une autre référence indispensable est le Handbook of Applied Cryptography, qui peut être téléchargé gratuitement; le chapitre 14, en particulier, concerne une implémentation efficace.

RSA est assez simple et est correctement décrit dans PKCS # 1. Il existe des attaques de synchronisation possibles sur RSA, qui sont contrées par le masquage (oui, c'est un article "écrit par un chercheur", mais en matière de cryptographie, les chercheurs sont ceux qui comprennent ce qui se passe sur). Si vous maîtrisez l'arithmétique modulaire, vous pouvez essayer d'implémenter DSA ( FIPS 186-3). Diffie-Hellman est mathématiquement simple (il n'a besoin de rien de plus que nécessaire pour implémenter DSA) mais sa norme de description (ANSI X9.42) n'est pas téléchargeable gratuitement.

Les courbes elliptiques sont un futur remplaçant populaire pour modulaire arithmétique; Les variantes EC de DSA et Diffie-Hellman sont plus rapides et plus sûres avec des clés publiques plus courtes. Mais c'est plus des mathématiques. Là encore, le Guide to Elliptic Curve Cryptography est la référence incontournable.

Il existe d'autres types d'algorithmes de cryptographie asymétrique, par exemple le cryptosystème McEliece (chiffrement asymétrique; il existe une variante pour les signatures décrites par Niederreiter) et les algorithmes basés sur la réduction de réseau. Mais ils ne bénéficient pas (encore) des normes publiées qui prennent en charge les détails d'implémentation, et il n'y a pas tellement d'implémentations existantes avec lesquelles comparer. Vous feriez mieux de commencer par RSA et DSA.

Cryptanalyse:

La cryptanalyse utilise une dose beaucoup plus élevée de mathématiques que la mise en œuvre.

Pour la cryptographie symétrique, les deux principaux outils sont la cryptanalyse différentielle et linéaire; voir ce tutoriel.

Mon propre chemin vers la cryptographie a commencé par implémenter DES, puis par l'implémentation de la cryptanalyse linéaire de Matsui sur une version réduite de DES (8 tours au lieu de 16). DES est décrit dans la FIPS 46-3, qui est officiellement retirée, mais toujours disponible. De DES peut être défini Triple-DES (trois instances DES, avec trois clés distinctes, celle du milieu étant utilisée dans le sens "décryptage") et il existe des vecteurs de test publiés pour Triple-DES (également connu sous le nom de "TDES", "3DES", ou parfois "DES", ce qui est sans doute déroutant).

Pour les algorithmes asymétriques, la cryptanalyse implique principalement de travailler sur la structure mathématique des clés, par exemple en essayant de factoriser de gros entiers non premiers afin de casser les variantes RSA. Les mathématiques ici vont du non-trivial au totalement inimaginable, donc cela pourrait être une courbe d'apprentissage trop raide pour commencer la cryptographie en essayant de casser le RSA ...

Sensationnel. Excellente réponse. Vous avez proposé une belle étude de la cryptographie dans un langage facile à comprendre avec des références précieuses. Merci.
@Thomas, Votre message ne parle pas de comment devenir un ** cryptanalyst **.
Robert David Graham
2011-07-27 04:34:18 UTC
view on stackexchange narkive permalink

Deux choses, vraiment:

  1. Obtenez un bon livre. La «cryptographie appliquée» de Bruce Schneier est adéquate.
  2. Apprenez les outils 'openssl' et apprenez à les utiliser.

La chose la plus importante à apprendre sur la cryptographie est l'humilité . Vous ne voulez jamais créer une nouvelle solution à un problème - vous voulez copier du mieux que vous pouvez les solutions qui ont été bien testées par d'autres. La plupart des échecs de cryptographie sont dus au fait que des personnes ont une idée brillante, pensant qu'elles pourraient faire une optimisation pour améliorer une solution existante. Ce ne sont que les personnes extrêmement humbles qui parviennent finalement à trouver de nouvelles façons de faire.

La prochaine leçon est que vous avez désappris vos préjugés que vous avez tirés de la télévision et des films, où un hacker s'assoit un ordinateur et casse la crypto. Celles-ci ne sont pas liées à la cryptographie ou à une dramatisation de ce qui se passe réellement. Par exemple, le film "Sneaker" est une dramatisation de ce qui se passerait si quelqu'un développait une puce capable de factoriser de grands nombres entiers.

Le plus difficile dans l'apprentissage de la cryptographie est de faire la distinction entre les concepts techniques nécessaires pour comprendre le domaine en général et ceux dont vous aurez besoin uniquement lorsque vous vous spécialiserez dans un domaine restreint. Prenez, par exemple, le poste très apprécié ci-dessus. Vous devez comprendre la différence entre un algorithme "symétrique" et un algorithme "asymétrique" et un "hachage", mais lorsque l'auteur de cet article dit "Cela aide un peu à savoir ce qu'est un champ fini de caractéristique 2", Je ne serais pas d'accord: cela n'a de sens que pour les docteurs qui recherchent la cryptographie, pas pour le reste d'entre nous qui veulent simplement savoir comment l'utiliser correctement.

Un bon moyen de parcourir les détails techniques est de choisir une cible et de travailler à rebours. Par exemple, aujourd'hui, Apple a mis à jour le système d'exploitation iPhone / iPad vers la version 4.3.5 pour corriger un bogue dans la validation des chaînes de certificats X.509. Comprendre le problème et pourquoi ils ont dû le résoudre est exactement le genre de chose dont vous discutez dans votre message d'origine. Déterminez ce qu'est un certificat X.509, quelles sont les chaînes et pourquoi elles doivent être validées, et pourquoi si vous ne le faites pas, un pirate utilisant un outil comme «sslsniff» peut vaincre le cryptage. Une fois que vous aurez bien compris tout cela, vous aurez atteint une grande partie de votre objectif que vous décrivez dans votre message d'origine.

Un autre exemple est un article de blog sur la vérification de la clé du pirate informatique Comodo

Encore une fois, découvrez ce que le hacker Comodo a fait (créé des certificats signés pour Google et Yahoo), comment fonctionne la révocation de certificat et comment utiliser les outils pour valider ce certificat. Je le suggère comme un bon article car c'est un bon point de départ pour utiliser les outils 'openssl', qui sont standard dans notre industrie.

Bonne chance!

kroosec
2011-12-27 18:14:34 UTC
view on stackexchange narkive permalink

Inscrivez-vous au cours de cryptographie en ligne de Stanford qui commence en janvier prochain. C'est gratuit, en ligne, comprend à la fois la théorie (conférences vidéo et quiz) et la pratique (travaux de programmation), vous permet de travailler à votre propre rythme et vous obtiendrez une déclaration de réussite si vous réussissez. Compte tenu des divers échos que j'ai eu lors de la précédente session de cours en ligne de Stanford, je m'inscris définitivement à ce cours (ainsi qu'à celui sur la sécurité informatique).

  • Du côté de la théorie:

Principes de conception de l'ingénierie cryptographique et applications pratiques par Niels Ferguson et Bruce Schneier. Le livre se veut une mise à jour de la vénérable cryptographie appliquée, les auteurs sont bien connus dans le domaine et les critiques sont bonnes.

  • Du côté de la pratique:

Vous pouvez jeter un œil à diverses compétitions de piratage / sécurité CTF (Capture The Flag). Ils incluent généralement des défis de cryptographie. Ils sont amusants et vous sortent de votre zone de confort pour résoudre les problèmes dans un temps limité. Voici un bon calendrier des FFC. Aussi, regardez quelques récits de FFC précédents, j'ai trouvé que beaucoup étaient très instructifs et bien expliqués.

semble très intéressant et assez excitant, je me suis abonné, mais je ne sais pas, sera-ce gratuit?
@jokoon je me suis inscrit ... je pense que les frais sont pour obtenir un certificat.
bethlakshmi
2011-07-26 19:13:13 UTC
view on stackexchange narkive permalink

Pour les algorithmes cryptographiques:

La Cryptographie: Théorie et Pratique de Stinson

passe par le calcul de nombreux algorithmes cryptographiques d'une manière qui les rendrait équitables facile à mettre en œuvre, si c'est ce que vous vouliez faire.

La Cryptographie appliquée de Scheiner est également un livre de premier plan sur le sujet. Se chevauche probablement un peu mais avec des algorithmes différents.

En ce qui concerne un livre vous indiquant explicitement comment les implémenter, je n'ai rien. Sur le plan commercial, ceux-ci ne sont pas toujours implémentés dans les logiciels et c'est une industrie assez niche. Dans une perspective de jeu, je dirais que vous devez obtenir un livre expliquant l'algorithme, l'implémenter et comparer votre résultat avec une bibliothèque couramment utilisée pour le même algorithme.

De même, je n'ai rien sur la cryptanalyse , bien que je soupçonne que si vous choisissez un algorithme et Google pour des choses comme "faiblesse dans" et "touches faibles", vous trouverez des articles intéressants et d'autres informations. La dernière fois que j'ai dû écrire un article sur quelque chose comme ça (il y a 10 ans et plus), c'est essentiellement ce que j'ai fait ...

D.W.
2011-10-01 11:49:56 UTC
view on stackexchange narkive permalink

Je recommande l ' Ingénierie cryptographique: principes de conception et applications pratiques. C'est le livre parfait pour vous. Il décrit comment concevoir et implémenter des cryptosystèmes, du point de vue d'un concepteur et d'un réalisateur de systèmes. C'est un livre très pragmatique, avec une perspective dérivée des années d'expérience des auteurs. Le mot «ingénierie» dans le titre est vraiment approprié. Je pense que vous y trouverez une ressource inestimable qui vous aidera à prioriser ce que vous devriez dépenser la plupart de votre énergie, ce qui peut mal tourner et comment vous assurer que ces mauvaises choses ne vous arrivent pas.

user432944
2012-03-23 18:41:16 UTC
view on stackexchange narkive permalink

Si vous souhaitez comprendre la théorie de la cryptographie, écrite de manière accessible aux praticiens, essayez "Introduction à la cryptographie moderne" de Katz et Lindell.

ack__
2013-08-05 00:07:31 UTC
view on stackexchange narkive permalink

Je voudrais également ajouter que vous jetez un œil aux défis cryptographiques Matasano car vous avez déjà des compétences en programmation.

Depuis leur site Web:

COMBIEN DE CRYPTO DOIS-JE SAVOIR? Aucun. C'est le point.

Alors, que dois-je savoir? Vous voudrez être capable de coder efficacement dans n'importe quelle langue. Nous avons reçu des soumissions en C, C ++, Python, Ruby, Perl, Visual Basic, X86 Assembly, Haskell et Lisp.

Tous leurs défis sont basés sur des vulnérabilités cryptographiques du monde réel, vous devriez donc apprendre de belles choses à résoudre ces problèmes.

chris pete
2018-04-28 20:13:15 UTC
view on stackexchange narkive permalink

Apprendre la cryptographie à partir de zéro peut parfois sembler difficile, mais si vous disposez des bonnes ressources, vous allez adorer. Voici mes sites préférés pour vous aider à commencer à apprendre la cryptographie aujourd'hui.

  1. Apprenez la cryptographie à Kifanga pour les débutants aux niveaux plus avancés.
  2. La cryptographie pratique est vraiment bonne pour les articles de cryptanalyse
  3. Learncryptography est idéale pour les fonctions de hachage


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...