Question:
Écrire mon propre algorithme de chiffrement
Confuto
2015-11-22 21:16:00 UTC
view on stackexchange narkive permalink

J'étudie actuellement l'informatique à l'université (UK college aka pas l'université) et les cours m'ennuient à mort. Je codifie depuis un certain temps maintenant principalement dans des langages OO tels que C # et Java, mais je m'ennuie souvent et abandonne rapidement parce que la majorité d'entre eux sont des trucs d'interface utilisateur ennuyeux que je déteste faire, les projets que je propose ont rarement beaucoup à faire avec la conception de code et la création d'algorithmes. Je veux commencer à écrire mes propres algorithmes et commencer à m'éloigner de la convivialité et commencer à apprendre des choses qui m'intéressent, à savoir la cryptographie et la compression. Je veux écrire mon propre algorithme de cryptage, pour crypter les octets d'un fichier ou d'une chaîne. J'ai quelques questions:

  • Par où commencer, quels livres / matériels sont recommandés pour débuter avec la cryptographie?
  • Ai-je besoin de connaissances approfondies en cryptographie pour commencer un algorithme de base?
  • C # sera-t-il OK pour mettre en pratique un algorithme de chiffrement?

Toute aide serait sincèrement appréciée. Je veux commencer à écrire du code donc quand il s'agit de postuler à l'université, j'ai quelque chose à montrer pour toutes mes affirmations en gras sur mon application!

"Ai-je besoin de connaissances approfondies en cryptographie pour me lancer dans un algorithme de base"? OUI. La conception et la mise en œuvre d'algorithmes cryptographiques sont extrêmement difficiles, effectuées uniquement par des professionnels en équipe. Jouez tout ce que vous voulez, apprenez, appréciez ... mais ne pensez même pas à utiliser votre propre algorithme de cryptage pour le cryptage dans le monde réel.
cette question est bien trop large pour être résolue. Concevoir un algorithme de chiffrement peut être n'importe quoi, des choses qu'un élève de l'école primaire pourrait faire (césar-chiffre par exemple) à des problèmes mathématiques complexes qui poussent les mathématiciens au désespoir.
@S.L.Barth Merci pour le commentaire. Je vois, peut-être mieux si je trouve autre chose sur quoi travailler alors. Je n'oserais pas du tout utiliser quoi que ce soit que je conçois dans le monde réel haha!
`C # sera-t-il acceptable pour mettre en pratique un algorithme de cryptage?` L'algorithme de cryptage SOme devrait fonctionner indépendamment de toute langue. Si vous utilisez quelque chose qui ne peut pas être fait par exemple. C, votre algorithme peut être jeté.
«Quand il s'agit de postuler à l'université, j'ai quelque chose à montrer» Ne fais pas ça. Il y a (trop) de nombreuses façons de se retourner contre un algorithme de chiffrement
C # ira bien car vous ne faites cela que pour la pratique de toute façon et les performances ne sont donc pas une priorité (encore une fois, vous ne devriez jamais utiliser le cryptage homebrew en production et les performances de la merde sont en fait un avantage car elles seront dissuasives de le faire. ).
si vous recherchez un ensemble de défis de programmation liés à la cryptographie, je vous recommande de consulter http://cryptopals.com/
@deviantfan Je ne vois pas le problème avec cela - la crypto homebrew est définitivement un non-non en production, mais le montrer comme un projet de passe-temps devrait être bien et à tout le moins démontrer des connaissances en programmation même si la crypto elle-même est mauvaise.
Pourquoi voulez-vous écrire un nouvel algorithme? Les existants sont-ils insuffisants? Quel problème particulier des algorithmes existants espérez-vous résoudre? Ou voulez-vous simplement le faire comme exercice d'apprentissage?
@RоryMcCune Je ne peux pas vous remercier assez pour cette référence. Je suis mathématicien et la plupart de mon expérience en programmation vient de la résolution d'énigmes. Ces ensembles de problèmes semblent être une manière amusante d'explorer le côté implémentation des algorithmes cryptographiques!
@JamesRyan C'est vrai, mais je m'enseigne moi-même comme passe-temps et me forcer à démarrer un projet peut parfois être difficile, encore moins faire quelque chose que je déteste. Je suis conscient qu'un jour si j'arrive à en faire une carrière je devrai faire des choses ennuyeuses, mais pas encore: D
@Superbest Oui, c'est juste un exercice d'apprentissage, je ne m'attends pas à créer quoi que ce soit pour être utilisé par d'autres. Je ne m'attends pas à résoudre des problèmes pour être honnête, juste pour acquérir des connaissances sur le fonctionnement des choses et me lancer un défi.
@Confuto Pour les exercices d'apprentissage, pourquoi ne pas essayer une base de données à problèmes en ligne comme ProjectEuler (non spécifique à la cryptographie) ou les exercices à chaque fin de chapitre d'un manuel de cryptographie populaire?
@S.L.Barth Des connaissances approfondies sont nécessaires pour construire un algorithme de cryptage * fort *, mais pas pour un algorithme * basique *, ce que veut l'OP. Je crains que votre commentaire ne l’ait induit en erreur et qu’il renonce à l’effort sur la base de sa réponse! Je pense que l'OP peut facilement écrire un algorithme de cryptage de base et apprendre quelques concepts utiles de l'exercice.
["J'ai construit ma propre crypto"] (https://twitter.com/old_sound/status/602996592531091456)
Quand j'ai lu le titre, je n'ai pas pu m'empêcher de dire "uh-oh" ...
Les gars, comment est-ce bien documenté? Si vous recherchez sur Google quelque chose à voir avec la cryptographie, c'est soit un article publié par des mathématiciens divins ou "NE FAITES PAS CELA VOUS-MÊME". Je suis surpris que Google ne dise pas simplement "non" si vous recherchez ceci.
Je suis juste venu ici pour les commentaires.
Vous pouvez également vous amuser si vous pouvez rassembler un groupe de programmeurs novices et les mettre au défi de créer un algorithme de cryptage qu'aucun des autres ne peut casser (ce qui ne signifie pas qu'il est incassable, bien sûr), puis de se casser les uns les autres. algorithmes.
Neuf réponses:
fr00tyl00p
2015-11-22 22:59:12 UTC
view on stackexchange narkive permalink

Bien sûr, vous pouvez commencer petit et implémenter vos propres algorithmes. Mais ne supposez pas qu'ils fournissent une sécurité au-delà de l'obfuscation .

La chose difficile en matière de cryptographie est de trouver les raisons pour lesquelles quelque chose est sûr. Vous ne pourrez pas décider que dans quelques mois et si vous sentez que vous êtes à ce point, vous avez probablement tort.

Il est beaucoup plus facile de trouver les raisons pour lesquelles les choses ne sont pas sécurisées que les raisons pour lesquelles elles sont sécurisés, donc si vous voulez commencer quelque part, développez vos propres algorithmes jusqu'à ce que vous pensiez qu'ils sont sécurisés, puis essayez de découvrir pourquoi ils ne le sont pas et trouvez des moyens de les attaquer.

La plupart des erreurs sont commises lorsque mettre en œuvre des algorithmes. Donc, si vous voulez obtenir un emploi bien rémunéré, vous pouvez apprendre à mettre en œuvre ce genre de choses correctement.

Je recommanderais de commencer à implémenter quelque chose comme AES et de continuer à différents modes de fonctionnement comme CBC ou CCM et découvrir pourquoi le hasard est important. Continuez avec SHA-2 et HMAC et passez à la cryptographie asymétrique. Vérifiez toujours ce que les autres ont fait et pourquoi ils l'ont fait et jetez un œil spécial aux attaques par canaux secondaires et comment elles sont exécutées. Si vous êtes à ce stade, vous trouverez votre chemin pour continuer.

La référence pour commencer serait le "HAC", qui est disponible gratuitement en ligne: http://cacr.uwaterloo.ca/hac/

[Edit] Une suggestion de JRsz qui ne doit pas être enfouie dans les commentaires. Un bon livre pour les débutants: http://crypto-textbook.com/

Le HAC est un excellent texte de référence pour ceux qui implémentent sérieusement de nouvelles crypto-mathématiques, mais il est probablement trop dense pour un débutant.
+1 pour `Bien sûr, vous pouvez commencer petit et implémenter vos propres algorithmes. Mais ne supposez pas qu'ils fournissent une sécurité au-delà de l'obscurcissement. »Beaucoup de gens n'arrêtent pas de dire" ne le faites pas! ", Mais c'est une bonne occasion d'en savoir plus. Ce petit avertissement est excellent.
Je suis plus que conscient que tout ce que je fais ne sera pas utilisable dans le monde réel, c'est simplement pour me donner quelque chose à apprendre et à travailler.
Non pas que je sois en désaccord avec votre message global, mais ... * "Le plus difficile en matière de cryptographie est de trouver les raisons pour lesquelles quelque chose est réellement sécurisé. Vous ne pourrez pas le décider d'ici quelques mois et si vous vous sentez comme vous. à ce stade, vous vous trompez probablement. "* Alors, les gens savent-ils * pourquoi * un algorithme comme RSA est sécurisé? Autant que je sache, c'est parce que personne n'a pu trouver un moyen de le casser. Alors pourquoi un étudiant devrait-il croire que son algorithme est pire?
@Mehrdad Je pense que c'est tout simplement parce que son algorithme n'existe plus depuis 35 ans et n'est toujours pas interrompu.
@mbrt: Selon votre logique, il est impossible d'inventer un algorithme de cryptage sécurisé.
@Mehrdad La raison pour laquelle RSA est sécurisé est que le problème RSA est difficile. Tu as raison. C'est difficile parce que personne n'a trouvé le moyen de le casser. Un étudiant doit croire que son algo est faible parce que c'est une attitude défensive. IMHO qui est plus raisonnable que de supposer que leur algorithme est sécurisé à moins que quelqu'un ne le casse, car ceux qui essaient peuvent être beaucoup moins que ceux qui ont déjà essayé de casser RSA.
@fr00tyl00p: Encore une fois, je ne suis pas en désaccord avec votre message général ou votre conclusion. Ce avec quoi je ne suis pas d'accord, c'est votre hypothèse selon laquelle les cryptographes «trouvent des raisons pour lesquelles [leur algorithme] est réellement sécurisé». Au mieux de ma compréhension, ils ne font vraiment pas cela: la raison vient après que l'algorithme a déjà été inventé, par le fait qu'il n'est pas cassé. Jusque-là, tout cela est basé sur le fait qu'ils ont juste le sentiment instinctif que leurs algorithmes devraient être sécurisés, et ils n'ont aucune preuve du contraire. Votre réponse donne l'impression que les cryptographes prouvent la non-craquabilité ou quelque chose du genre.
@Confuto Il pourrait tout aussi bien être utilisable dans le monde réel dans le sens suivant: aucun robot ne pourrait vous cibler sans supervision si vous faites un cryptage standard + cryptage non standard (c'est-à-dire que votre cryptage ne sera cassé que s'il y a de vraies personnes en direct après vous; ce n'est pas toujours vrai lorsque vous n'utilisez que des éléments de bibliothèque qui ont tendance à devenir périmés comme DES). Cela peut être important ou non.
@fr00tyl00p: Pour mettre les choses en perspective, j'ai beaucoup de mal à croire que l'ECC est réellement sécurisé. Cela ne ressemble pas à ce que cela devrait être, et cela ressemble à quelque chose que je pourrais trouver pendant un week-end car je n'ai besoin d'aucune preuve de dureté ou de quoi que ce soit, juste un sentiment d'intestin. La seule chose qui me manquerait, c'est une bonne réputation pour inciter les gens à prendre un algorithme similaire au sérieux, mais que manquerais-je d'autre? Je pourrais simplement prétendre que c'est difficile et attendre que quelqu'un me prouve le contraire. Alors pourquoi les gens considèrent-ils l'ECC comme plus sûr qu'un algorithme aléatoire que je pourrais proposer?
le hac est très compliqué pour les débutants. Je recommande ce livre pour un bon début: http://crypto-textbook.com/
J'aime le fait que cela encourage l'utilisateur à l'essayer avec des * attentes gérées *. Ce serait un bon exercice (et je dirais nécessaire) que des pairs tentent de briser le cryptage.
Sélectionné comme réponse, merci. Accablé par les réponses impressionnantes d'ici, merci beaucoup à tous!
@Mehrdad - les cryptographes ont des raisons de croire que RSA est sécurisé autrement que "il n'est pas encore cassé". En étudiant les mathématiques sous-jacentes, ils peuvent prouver qu'il est très difficile de briser le RSA. Il y a des hypothèses impliquées (comme que la factorisation des nombres premiers est lente), mais ces hypothèses peuvent être énoncées et quantifiées et sont beaucoup plus fortes que simplement "personne n'a encore trouvé de hack". Un bon livre de cryptographie mathématique d'introduction devrait expliquer cela en détail, ou essayez de rechercher par ex. "pourquoi RSA est sécurisé".
@Rich Il n'y a pas de preuves mathématiques ou informatiques pour la sécurité RSA. L'hypothèse est que la factorisation prend un temps exponentiel. Mais ce n'est qu'une hypothèse, pas une preuve. Encore une fois, cela signifie en pratique que RSA "n'est pas encore cassé" et rien de plus.
@mbrt: Non, mon point était que la force de RSA repose sur le fait que la factorisation n'est pas encore cassée, ce qui est une affirmation bien plus forte que "X pas encore cassé" pour tout nouveau chiffrement X, car la factorisation est bien mieux comprise que X. Comme je l'ai dit dans mon commentaire, il y a des hypothèses impliquées, mais ces hypothèses peuvent être énoncées et quantifiées et sont beaucoup plus fortes que simplement "personne n'a encore cassé le chiffre 7 de mbrt".
@Rich: * "Ils peuvent prouver que casser RSA est très difficile." * ... pouvez-vous me relier à cette preuve? Tout ce sur quoi il repose, c'est que la factorisation est difficile; il n'y a aucune preuve derrière cela. Je ne sais pas si vous suivez l'actualité, mais il y a eu un développement très récent sur un algorithme en temps quasi-polynomial pour l'isomorphisme des graphes, et après en avoir entendu parler, certaines personnes commencent à se demander si la factorisation peut être résolue en quasi-polynôme- le temps aussi. Pouvez-vous dire la même chose pour ECC? Les gens pensent que l'ECC est difficile parce que personne n'a pu non plus le casser. Y a-t-il une preuve? Non.
@Mehrdad: oui, wikipedia a les citations: "Miller a montré que - en supposant l'hypothèse de Riemann étendue - trouver d à partir de n et e est aussi difficile que de factoriser" via https://en.wikipedia.org/wiki/RSA_(cryptosystem)# Integer_factorization_and_RSA_problem. Comme je l'ai déjà dit, les cryptographes ont énoncé leurs hypothèses: c'est-à-dire l'hypothèse de Riemann étendue et la factorisation principale difficile, puis ont prouvé la sécurité de RSA sous ces hypothèses. Mon point est que ces hypothèses sont bien mieux comprises et plus susceptibles d'être vraies que n'importe quelle ancienne affirmation "mais X n'est pas encore rompue".
@Rich: Et qu'en est-il de l'ECC? De plus, si vous énoncez vos hypothèses, cela ne rend pas votre algorithme plus sûr. Je peux également proposer un algorithme et énoncer mes hypothèses. Cela signifie-t-il que c'est sécurisé maintenant? J'ai l'impression que vous manquez mon point ...
@Mehrdad: Je pense que vous me comprenez mal. Je n'ai pas dit qu'il existe une preuve que RSA est «sécurisé». J'ai dit qu'il y avait une preuve que RSA est sûr, étant donné certaines hypothèses bien comprises. J'essaie de répondre à votre question initiale "pourquoi un étudiant devrait-il croire que son algorithme est pire [que RSA]" - c'est parce que les hypothèses utilisées dans ces preuves sont très fortes et bien plus fortes qu'une simple affirmation vague de " personne n'a encore brisé la crypto de l'étudiant X ".
"si vous énoncez vos hypothèses qui ne rendent pas votre algorithme plus sûr" - c'est le cas, si vos hypothèses sont solides et que vous * prouvez * un lien entre vos hypothèses et la sécurité de votre algo
@Rich: (1) L'hypothèse selon laquelle l'affacturage est difficile n'est "forte" que parce que personne n'a été en mesure de la casser. Pourquoi cela implique-t-il une nouvelle hypothèse sur laquelle personne n'a travaillé est faible? (2) Quelle est l'hypothèse qui dément la force de l'ECC? Vous évitez toujours de répondre à cela.
Laissez-nous [continuer cette discussion dans le chat] (http://chat.stackexchange.com/rooms/32069/discussion-between-rich-and-mehrdad).
Construire votre propre algorithme de cryptage sans suffisamment de connaissances mathématiques / cs / crypto ne s'appelle pas * encryption * mais * en-crap-tion *. Mieux que d'essayer d'apprendre en implémentant un algorithme, vous devriez apprendre plus de mathématiques (sujets mathématiques profonds et difficiles) et CS, et réimplémenter des algorithmes déjà existants et étudier leurs points faibles.
StackzOfZtuff
2015-11-22 22:56:30 UTC
view on stackexchange narkive permalink

Coursera

Voici mes deux centimes:

Rejoignez le cours en ligne Coursera Cryptography:

Le cours dure six semaines. Chaque semaine, il y a plusieurs vidéos de cours, un quiz noté et un devoir de programmation facultatif. (Et ces missions impliquent la mise en œuvre de parties cryptographiques.)

À la fin des six semaines, il y a un test.

Si vous voulez être mis au défi, alors c'est la bonne façon de aller. C'est beaucoup de travail. Je vous suggère de prévoir plus de 10 heures par semaine. Plus si vous voulez également faire le devoir de programmation.

( Modifier: Voici une table des matières pour une précédente exécution de ce cours. )

Clarification: Les affectations de programmation sont juste là pour générer une compréhension plus profonde du sujet. Ce n'est PAS explicitement quelque chose que vous êtes censé relâcher dans la nature.
Au contraire: Le message "Ne l'implémentez jamais vous-même!" est répété encore et encore. (Et sans en dire trop: chaque fois que "Implémentez-le vous-même!" est sur l'un des tests à choix multiples, alors c'est faux.)

J'ai oublié Coursera, merci! Je suis abonné à Lynda.com mais ils n'ont pas grand-chose sur la crypto.
+1 sur la classe. C'est assez difficile. Notez que les affectations de programmation sont en C.
En fait, n'importe quelle langue fera l'affaire. Seuls les résultats sont soumis. Pas la mise en œuvre. Sur les forums, il y a des implémentations dans différentes langues. Des exemples sont cependant en Python2.
Adam Shostack
2015-11-22 23:17:53 UTC
view on stackexchange narkive permalink

Commencez par casser, pas construire le vôtre. Il y a un nombre inquiétant de publications de stackexchange par des personnes qui ont écrit leurs propres algorithmes. Regardez autour de vous et découvrez ce qui ne va pas avec eux. (Ne regardez pas les réponses publiées.) [Les bonnes recherches incluent "Est-ce sécurisé" et "Qu'est-ce qui ne va pas avec cet algorithme".]

Vous ne devriez passer à essayer de mettre en œuvre les algorithmes d'autres personnes. (Le commentaire de @ stackzofztuff sur Coursera n'est pas mauvais - si je me souviens bien, Dan Boneh commence de cette façon, avec plus de structure que de pousser ici.)

* Jetez un oeil autour * Pouvez-vous s'il vous plaît expliquer comment trouver ces messages? Doit-on filtrer les questions par tag, sites Web, etc.?
@A.L, je pense qu'une recherche par plusieurs balises serait la plus efficace. Quelque chose comme [cryptographie + algorithme] (http://security.stackexchange.com/questions/tagged/cryptography+algorithm) ou [cryptographie + algorithme] (http://security.stackexchange.com/questions/tagged/encryption+algorithm ). Vous devrez creuser un peu, mais en un coup d'œil, je vois quelques questions. Bien qu'ils soient largement enfouis sous des choses plus petites comme le mélange d'algorithmes ou de petites obfuscations ajoutées à l'algorithme existant. Beaucoup de choses qui n'améliorent pas la sécurité ni ne l'affaiblissent. Je ne suis pas d'accord avec Adam Shostack pour dire que c'est efficace.
J'ai recherché "Est-ce sécurisé" et je pense que les 5 premières questions sont de bons points de départ; J'ai modifié ma réponse pour être plus nette.
dr_
2015-11-23 15:56:01 UTC
view on stackexchange narkive permalink

La Cryptographie appliquée de Bruce Schneier est une lecture incontournable si vous souhaitez commencer à étudier ce domaine. Je suis surpris que personne ne l'ait suggéré auparavant.

Et oui, vous devez en savoir beaucoup sur la cryptographie avant même d'essayer de lancer vos propres algorithmes pour le plaisir. Ne pensez même pas à les utiliser pour des problèmes du monde réel - il y a déjà beaucoup de mauvais crypto autour.

Concernant la programmation, évitez les langages propriétaires comme le fléau. Je suggérerais C, ou même C ++.

Pourquoi dites-vous * "Concernant la programmation, évitez les langages propriétaires comme la peste" *? Mon expérience est que le code peut être converti en C / C ++ assez facilement (souvent presque identique, ligne pour ligne) si vous écrivez du code optimisé en C # (pas que beaucoup de gens le font, cependant…). De plus, le compilateur C # est maintenant open source (publié sous Apache 2.0).
C # a également toujours été documenté publiquement en tant que norme, via ECMA si je me souviens bien (et c'est la norme à laquelle le compilateur de Microsoft est censé adhérer).
+1 pour le livre de Bruce Schneier.
@Toothbrush Alors pourquoi ne pas utiliser directement C qui est ouvert, mature et répandu.
@dr01 Bien sûr, si vous écrivez un algorithme de cryptage sérieux, vous devez absolument l'écrire en C afin qu'il puisse être formellement examiné. Cependant, si vous ne faites que créer du code pour comprendre ce qu'est le cryptage, pourquoi ne pas utiliser la langue avec laquelle vous êtes le plus à l'aise? Si les seules personnes qui le verront sont lui et son chat, quelle différence cela fait-il s'il est écrit en AutoLisp! Peut-être qu'Applescript reviendra et deviendra le nouveau standard de chiffrement ...;)
@dr01 Lorsque vous apprenez quelque chose de plus général qu'une langue spécifique, il est utile si la langue utilisée ne vous donne pas une arme chargée, armez-la et collez-la sur votre taille en pointant vers votre pied. Un langage qui a un «comportement indéfini» comme concept de base n'est pas adapté à l'apprentissage des algorithmes. Bien que C ait beaucoup de choses à faire et ait sa place, il nécessite une expertise spécifique qui est totalement indépendante des algorithmes d'apprentissage.
Et rappelez-vous toujours la règle de Schneier ... N'importe qui peut créer un algorithme de chiffrement vraiment étonnant qu'il ne peut pas briser. c'est-à-dire ... un examen par les pairs est nécessaire pour prouver qu'il fonctionne réellement.
Scott C Wilson
2015-11-22 21:36:27 UTC
view on stackexchange narkive permalink

Un bon début serait d'implémenter les algorithmes existants et d'apprendre comment ils fonctionnent en profondeur. Par exemple, l'algorithme de pad ponctuel est facile à apprendre et à mettre en œuvre, et étudier ses forces et ses faiblesses vous permettra de démarrer. Cela vous mettra également à l'aise avec le type de bit-twiddling qui est important en cryptographie. Faire une recherche sur "pad unique" vous permettra de démarrer.

Mais notez que ontimepad est "étrange" (algorithme ainsi que son utilisation possible), cela n'aidera pas beaucoup à comprendre AES etc., qui est beaucoup plus utilisé dans la pratique et a de nombreux concepts que l'on retrouve dans d'autres algos aussi (etc.)
le point qui serait pertinent pour OP concernant les algorithmes de chiffrement n'est généralement pas la logique qui est implémentée, mais les mathématiques derrière. AES en est un très bon exemple. Dans le code, tout ce que l'on peut voir se trouvent de simples décalages de bits et des instructions mathématiques de bas niveau. L'algorithme lui-même est conçu de manière à donner aux données cryptées un aspect purement aléatoire, ce qui nécessite de nombreuses compétences de la part du concepteur, c'est le moins qu'on puisse dire.
Un time pad est cependant un cas intéressant - c'est un algorithme assez simple, et dans des conditions optimales - incassable. Ses faiblesses proviennent de l'évolutivité et de l'échange de clés, qui ne sont pas triviaux pour les applications du «monde réel». Mais je ne sais pas que cela aide vraiment à comprendre les autres options cryptographiques, qui sont beaucoup plus compliquées en raison de la nécessité de gérer la confiance, l'échange de clés, etc.
Michael B
2015-11-24 03:47:41 UTC
view on stackexchange narkive permalink

Juste pour empiler les bonnes réponses qui sont ici, avec quelque chose d'un angle différent.

Si vous supposez que votre algorithme v1 va être non sécurisé et horrible, et que votre v100 ne sera que très légèrement meilleur, mais tout aussi peu sûr. (tout comme votre v1000)

Avec cette hypothèse à l'esprit, vous pouvez apprendre beaucoup en résolvant les problèmes que la cryptographie a dû résoudre pour devenir la science qu'elle est aujourd'hui. c'est-à-dire réinventer la roue.

Personnellement, je trouve que réinventer la roue est un excellent moyen d'apprendre une tâche complexe. Cela vous donne quelque chose à résoudre. Si c'est votre truc, il y a moins de choses plus délicates à résoudre que la cryptographie.

De cette façon, vous pouvez aller à l'université et dire, eh bien, j'ai conçu mon propre algorithme de cryptographie pour apprendre à résoudre des problèmes difficiles. À la v50, l'algorithme est nul, mais ce sont les leçons que j'ai apprises, les solutions que j'ai trouvées, et c'est ainsi qu'elles sont résolues dans le monde réel.

Il y a une grande différence entre dire que j'ai écrit un «bon» protocole de cryptographie et dire que j'ai écrit un protocole qui est presque certainement très faible mais que le but n'était pas de créer un protocole sécurisé. Personnellement, j'aurais beaucoup de respect pour quelqu'un qui a dit cela. (Je ferais probablement un signe de tête au premier - et lui montrerais rapidement la porte)

Ce. OP est à la recherche d'un défi intéressant - une chance d'apprendre, pas de devenir l'inventeur de la prochaine grande chose.
JRsz
2015-11-23 02:42:30 UTC
view on stackexchange narkive permalink

Vous pouvez implémenter des algorithmes de chiffrement déjà existants, mais la conception de votre propre algorithme de chiffrement est l'une des questions les plus complexes que vous puissiez traiter. Pour une introduction générale, je recommande vivement cette chaîne: https://www.youtube. com / channel / UC1usFRN4LCMcfIV7UjHNuQg / videos ou le livre "Understanding Cryptography" de Christoph Paar et Jan Pelzl ( http://crypto-textbook.com/). Je suppose que vous visez algorithmes symétriques et je vous recommande de commencer à lire beaucoup de théories à leur sujet, ce qui est sûr, ce qui était dangereux (historicle) et comment les algorithmes de pointe ont-ils atteint ce qu'ils sont (comment AES a-t-il été développé, choisi, etc.).

Vous rencontrerez de nombreux problèmes de mathématiques lorsque vous traitez avec différents modèles d'attaquants, même dans la partie symétrique. La cryptographie asymétrique est basée sur des problèmes mathématiques et il existe des attaques très délicates qui sont très puissantes contre la cryptographie asymétrique.

En bout de ligne, ne développez pas vos propres algorithmes, sauf si vous avez de nombreuses années d'expérience et que vous êtes très familier avec le sujet (toutes ses parties). En implémenter quelques-uns est néanmoins une bonne idée, mais si vous cherchez une sorte de projet, pourquoi n'écrivez-vous pas un programme qui utilise des algorithmes déjà existants et décrypte certaines données pour vous. Vous aurez suffisamment de problèmes pour gérer cela, car un algorithme sécurisé n'est pas du tout une garantie pour un cryptage sécurisé. Différents modes de fonctionnement seront importants à ce sujet et sur d’autres questions également.

Count Iblis
2015-11-23 12:25:57 UTC
view on stackexchange narkive permalink

Vous pouvez suivre la suggestion de Scott Wilson concernant le pad One-Time, mais avec de vraies données aléatoires. Vous pouvez par exemple considérez le bruit de la webcam de l'ordinateur. Laissez la webcam prendre quelques photos d'une scène statique, convertir les images en images à virgule flottante 32 bits, normaliser les images à la même luminosité, prendre la moyenne, puis soustraire l'une des images de la moyenne. Si vous mappez des valeurs de pixels négatifs à 0 et des valeurs de pixels positives à 1, vous avez presque des bits parfaitement aléatoires, qui ne sont pas corrélés lorsque les pixels ne sont pas trop proches. Application de l'algorithme de von Neumann à des paires de bits provenant de pixels distants:

(0,1) ---> 0

(1,0) ---> 1

(0,0) et (1,1) sont ignorés

donnera des bits aléatoires parfaits avec 0 et 1 ayant exactement 50% de probabilité.

Je ne suis pas sûr que cela réponde à la question
Une source facile de hasard à partir d'un ordinateur. Merci!
Hanky Panky
2015-11-23 13:15:40 UTC
view on stackexchange narkive permalink

Allez-y, écrivez un algorithme mais à la fin confiez une tâche à l'un de vos amis / camarades qui s'occupe régulièrement de la cryptographie; dites-leur de casser votre cryptage s'ils le peuvent.

Vous remarquerez qu'ils seront capables de le casser en quelques minutes et vous serez étonné de penser au nombre de failles qui ont donné le jeu à des personnes ayant une connaissance approfondie de la cryptographie (pour faire passer vos mots)

C'est exactement ce qui m'est arrivé lorsque j'apprenais à programmer il y a longtemps et que je voulais défier certains gars qui étaient intelligents dans ce genre de choses et j'ai lamentablement échoué. À tel point qu'ils pourraient même déchiffrer le message imprimé sur un papier en utilisant uniquement leur esprit et leurs compétences.

Vous pouvez certainement en écrire un et le perfectionner au fil du temps, mais il ne peut en aucun cas être sécurisé de si tôt contre le des gens avec ces connaissances.

Ce sera un bon point de départ (ou peut-être même un point d'arrêt) dans votre quête pour écrire votre propre algorithme :)



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...