Partage
  • Partager sur Facebook
  • Partager sur Twitter

Cryptographie et programmation

Anonyme
9 novembre 2011 à 15:56:00

Bon voilà, j'ai une petite demande à faire.

Dans le cadre des TPE, je dois réaliser un travail sur la cryptographie (enfin tel fut notre choix).
La problématique serait un truc du genre: "La cryptographie, une arme secrète offensive et défensive?" (bon c'est nul car il faut reformuler la fin, j'en ai conscience). Les deux matières choisies sont les maths (d'un point de vue algorithmique) et l'histoire (code de césar, mary stuart ...)

Ainsi, j'aimerais réaliser un programme qui serait basé sur le décryptage (et le cryptage, pourquoi pas ...).
Voici un exemple (le but suprême étant d'avoir mon programme personnel): Décrypteur

Je vous explique le fonctionnement.
En gros, quelqu'un pense à un message et l'écrit. Par exemple Bonjour. Ensuite d'après le Code de César, il crypte son message. Par exmple, il remplace chaque lettre par la troisième qui le suit dans l'alphabet, ici BONJOUR deviendrait ERQMRXU. (ce cryptage pourrait se faire à l'aide d'un autre programme).

Mais voici le plus intéressant, un programme serait capable de décrypter ce message en se basant sur La fréquence des lettres (en France, c'est le E qui est le plus utilisé, ... ).
Ainsi, dans un texte, il s'aperçoit qu'il y a 20 % de H, ce qui laisserais supposer que le H est en réalité un E.

Ensuite, ce programme fait pareil pour toute les autres lettres est aboli à un texte "traduit" même si au début il ne connaissait pas quelle était la clé (que A=D).


Après, si j'arrive à faire sa, je me suis dit pourquoi pas continuer de bluffer les profs en insérant un petit plus: le choix de la langue (français-anglais-allemand-espagnol) puisqu'il ne suffirait que de modifier les fréquences.

Voilà tel est mon souhait mais je ne sais pas trop me débrouiller sur l'ordi (je suis plutôt bien débrouillard en Ti-Basic) alors je ne sais pas comment faire :
- Est-ce réalisable?
- Faut-il le faire en Python ou en C (le python semblant être plus adapté aux débutants), sachant que nous avons prévu de rendre au final un site web (se pose après le problème de l'insérer sur le site mais nous ne sommes pas encore là!).

Je suis bien entendu ouvert à toute question.

Merci par avance de votre aide que vous serez en mesure d'apporter,

Magiik0Rel
  • Partager sur Facebook
  • Partager sur Twitter
9 novembre 2011 à 16:02:43

C'est très réalisable, et c'est mieux en python.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
9 novembre 2011 à 16:07:51

Donc tu me conseille personnellement de le réaliser en python? Je n'en ai jamais fais mais bon, c'est comme tout sa s'apprend, et j'ai deux mois devant moi :p

Après ya un tuto précis sur le site du zéro à lire? (ou déjà les bases en python?)
  • Partager sur Facebook
  • Partager sur Twitter
9 novembre 2011 à 16:15:31

Bonjour,

Pour Python c'est par ici.
Pour la cryptographie, c'est ici et


EDIT: Pour se faire, regarde du côté des fonctions ord() et chr():

Exemple:
ord('a') #donne 97 (type entier)
chr(97)  #donne 'a' (type string)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
9 novembre 2011 à 16:24:26

Pour le lien vers Wikipedia, c'est exactement ce que je voudrais faire (grâce au fréquence).

Ensuite, je vais me plonger donc dans l'apprentissage du python mais pouvez-vous juste m'expliquer ces deux fonctions?
  • Partager sur Facebook
  • Partager sur Twitter
9 novembre 2011 à 16:33:44

Comme tu le sais sans doute déjà, aucune lettre ne peut être stockée dans la mémoire (dans une adresse pour être plus précis). Seulement sa valeur ASCII y est inscrite (représentée par un nombre).

En conséquence:
  • ord('a') donne la valeur ASCII de la lettre 'a', à savoir l'entier 97.
  • chr(97) quant à lui, fait exactement l'inverse ^^ .

Tu en auras sans doute besoin pour cette exercice.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
9 novembre 2011 à 16:36:32

D'accord, oui j'en aurais surement besoin, il faut associer un nombre premier ou pas?
  • Partager sur Facebook
  • Partager sur Twitter
10 novembre 2011 à 12:15:02

Plusieurs choses :

Premièrement, quand on essaye de retrouver l'original d'un chiffré sans la clé, ça ne s'appeller pas déchiffrer, mais casser le code. Déchiffrer, c'est inverser le chiffrement lorsque l'on dispose de la clé. Un peu de vocabulaire de base :
  • Cryptologie : ensemble de la cryptographie et de la cryptanalyse (cf. ci-dessous).
  • Cryptographie : art de chiffrer des données, c'est-à-dire de les rendre illisible à tout intrus en les laissant lisible pour certains initiés.
  • Cryptanalyse : art de trouver les failles de la cryptographie afin de déchiffrer des données chiffrées sans être un des fameux initiés.
  • Chiffrer : rendre un message illisible par une méthode inversible (afin de pouvoir recouvrir les données).
  • Déchiffrer : inverser le chiffrement à l'aide d'une clé.
  • Casser : inverser le chiffrement sans connaître la clé utilisée.



Ensuite, se limiter au chiffrement de César pour un TPE, c'est un peu léger. C'est surtout une méthode historique, ça peut servir d'introduction, pas plus. Si tu veux continuer un peu sur le chiffrement par substitution alphabétique, parle un peu de la méthode de Vignère (une sorte de César amélioré) dont la méthode de cassage est à peine plus compliqué.
Et puis, il te faut absolument parler de ce qui est utilisé dans la réalité : le DES (de moins en moins) et l'AES pour la cryptographie à clé privée (cryptographie symétrique) et le RSA pour la cryptographie à clé publique (cryptographie asymétrique). Expliquer leur fonctionnement vous fera sortir un petit peu du programme (de maths), mais pas de façon excessive, donc juste ce qui est recherché pour un TPE. Si vous avez du temps et que vous comprenez bien le sujet, vous pouvez même aller jusqu'à une présentation "avec les mains" de pourquoi il est difficile de casser RSA (ou même AES). En revanche, ne passez pas trop de temps sur les méthodes effectives de cassage existente, elles font souvent appel à des mathématiques du supérieur (type L3).
Enfin, d'un point de vue historique, il peu être intéressant d'aborder les principes de la cryptologie matérielle : le scytale (chez les Grecs antiques), la machine Enigma, ou même la cryptanalyse assistée par la mesure de consommation des serveurs, etc.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 13:41:40

D'accord, donc e programme que j'aimerais créer est un programme de cassage?

Qu'entend-tu par "vous pouvez même aller jusqu'à une présentation "avec les mains" de pourquoi il est difficile de casser RSA (ou même AES)"

Si j'arrive à créer un programme su césar et/ou vigenère, j'envisagerais pourquoi pas de me baser sur le python pour faire un code en rapport avec la méthode RSA.

Pour les TPE, selon vos expériences, qu'est-ce que les profs préfèrent?
Un programme de César fais tout seul ou un programme de la méthode RSA fait à 70 % par quelqu'un d'autre? (ésar est mieux je pense). Enfin, ya-t-il un choix judicieux a faire (parce que un programme par cde, ils ne vont pas trouver sa lourd nn?)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 14:12:45

Bon je ne suis pas expert, mais clairement, avant de se lancer dans un programme il faut que tu décide quel langage utiliser et que tu l'apprennes. Une fois que tu sauras utiliser un langage correctement (un minimum quoi...) tu verras que le cesar c'est trop simple (pas besoin de s'enquiquiné avec des fréquences d'apparition et compagnie...). Le RSA, si c'est pour un TPE en math, c'est tout de suite plus intéressant.

Après, plus simple et ça te permettra de parler du traitement bit à bit des données en informatique, tu peux regarder du coté de vernam.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 14:28:18

D'accord, pour l'instant j'ai commencé à visionner les pythoneries. C'est une bonne base?

Mais pourquoi dis-tu que j'ai pas besoin d'utiliser les fréquence pour César si je ne connais pas la clé, c'est obligé non?
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 15:19:31

Citation : magiik0rel

D'accord, pour l'instant j'ai commencé à visionner les pythoneries. C'est une bonne base?



Tous les tutoriels quels qu'ils soient sont bon à prendre. Après chacun a sa manière d'apprendre, certains préfèrent les vidéos comme Pythonnerie et d'autres préféreront des tutoriels en pdf ou même sur papier.
Pour débuter, commence plutôt par les tutoriels qualifiés de cours magistraux, mais ce n'est pas une obligation.
Apprendre, comparer, tester, telles sont les clefs de la réussite. :)
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 16:13:53

Citation

Tous les tutoriels quels qu'ils soient sont bon à prendre

Non, pas un tutoriel qui t'apprend des conneries. Pythonneries, par exemple.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 19:37:56

Ouch, j'ai pas tout suivi. Les pythoneries, c'est des conneries ?
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 20:06:23

Dans les sujets d'annales prologin, il y a plusieurs exemples plus ou moins 'simples' de cryptage/décryptage. (il faut pas être débutant)
Il y en a deux pour 2011, et un en 2004, et sûrement d'autres.
http://www.prologin.org/training

Tu peux choisir Python pour faire tout ça, c'est une bonne idée.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 20:56:06

Citation : magiik0rel

Ouch, j'ai pas tout suivi. Les pythoneries, c'est des conneries ?


C'est un joli jeu de mots, non ? :-°

Comme VainEntetement, j'aurais aussi tendance à déconseiller ce tutoriel. Après tu es libre de choisir, bien sûr.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
11 novembre 2011 à 22:17:37

Attention les pythonneries, c'est du 2.x, faut adapter, mais faut le savoir et j'aime pas les cours vidéos, c'est perso, mais le pdf et le papier c'est top quand les 2 sont liés
  • Partager sur Facebook
  • Partager sur Twitter
11 novembre 2011 à 22:28:43

C'est pas uniquement une question de vidéo, aussi de (mauvais) contenu.
  • Partager sur Facebook
  • Partager sur Twitter
12 novembre 2011 à 12:37:55

Salut,

Si tu veux bluffer tes profs, tu peux faire encore mieux. Il existe un ancien mode de chiffrement polyalphabétique basé sur une clef choisie par les utilisateurs. Par exemple, je choisis la clef PYTHON. Cela veut dire que si je décide de chiffrer un rapport par exemple, le premier caractère sera chiffré selon un cesar A->P, B->Q etc comme tu connais. Puis ensuite le second par un autre cesar A->Y etc.. jusqu'au 6eme caractère, chiffré par un césar A->N.
Puis pour le septième caractère, on reprend le césar A->P et on boucle ainsi.

Un tel chiffrement est plus dur à casser à la main qu'un chiffrement ce Cesar. En effet, une simple analyse de fréquence ne marche plus car tous les caractères ne sont pas codés selon le même césar.

Il existe donc des méthodes pour casser ça, faites en plusieurs étapes. D'abord trouver la longueur de la clef, puis casser chacun des sous-textes et recoller le tout.

Voilà, si ça t'intéresses, dis-le moi !
  • Partager sur Facebook
  • Partager sur Twitter
12 novembre 2011 à 13:16:39

Le codage avec une clef en XOR de longueur fixe.
Un exemple qui est facile, car le caractère ' ' (espace) est toujours dans le texte, c'est donc ici le plus fréquent, c'est donc facile de craquer le texte, mais sans les espaces, on utiliserait (par exemple) la fréquence des lettres en fonction de la langue du texte.
  • Partager sur Facebook
  • Partager sur Twitter
12 novembre 2011 à 13:18:34

Citation : fitzounet

Salut,

Si tu veux bluffer tes profs, tu peux faire encore mieux. Il existe un ancien mode de chiffrement polyalphabétique basé sur une clef choisie par les utilisateurs. Par exemple, je choisis la clef PYTHON. Cela veut dire que si je décide de chiffrer un rapport par exemple, le premier caractère sera chiffré selon un cesar A->P, B->Q etc comme tu connais. Puis ensuite le second par un autre cesar A->Y etc.. jusqu'au 6eme caractère, chiffré par un césar A->N.
Puis pour le septième caractère, on reprend le césar A->P et on boucle ainsi.

Un tel chiffrement est plus dur à casser à la main qu'un chiffrement ce Cesar. En effet, une simple analyse de fréquence ne marche plus car tous les caractères ne sont pas codés selon le même césar.

Il existe donc des méthodes pour casser ça, faites en plusieurs étapes. D'abord trouver la longueur de la clef, puis casser chacun des sous-textes et recoller le tout.

Voilà, si ça t'intéresses, dis-le moi !



Citation : magiik0rel


Si j'arrive à créer un programme su césar et/ou vigenère, j'envisagerais pourquoi pas de me baser sur le python pour faire un code en rapport avec la méthode RSA.


Je crois qu'il est au courant.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
12 novembre 2011 à 13:53:17

@la Hache, je n'ai pas saisi la méthode du code du lien en anglais.
@ fifzounet: il s'agit de la méthode ADFGVX?
  • Partager sur Facebook
  • Partager sur Twitter
12 novembre 2011 à 15:03:56

Citation : magiik0rel

@la Hache, je n'ai pas saisi la méthode du code du lien en anglais.



Je vais pas te faire l'exo, mais t'expliquer avec une clef de longueur 1.

Un caractère (char) ASCII possède un ordinal (ord) entre 0 et 127, que l'on place dans un octet (un nombre entre 0 et 255, sur une machine classique où un octet = 8bits)

Prenons une clef (un nombre entre 0 et 127), inclus dans 8bits.

Théorème :
Si a est un char, c une clef,
alors avec b = a XOR c est le char codé,
et b XOR c redevient a : le char de départ.

Exemple :
la lettre 'a' : code ASCII ----**---> 97, en binaire 1100001
la clef 42 (pourquoi pas) -----*-------> en binaire 0101010
avec le XOR, la lettre codée sera K -> en binaire 1001011 (on reste entre 0 et 127, donc ASCII)

Si tu refais un XOR sur K, on obtient: en binaire 1100001 : oh la lettre 'a' !!!!

Maintenant prend un texte encodé en ASCII, applique à chaque char le code XOR,
tu obtient un texte crypté encore en ASCII, pour le décrypter il suffit d'appliquer à nouveau le même XOR. Pour casser le code, tu peux faire une analyse des fréquences...

--
Dans l'exo d'Euler, c'est plus compliqué, il y a trois clefs et on code chaque groupe de trois lettres avec les trois clefs.
[mode :colere: ]Je ne conseille pas cet exo d'Euler aux anticléricaux comme moi.[/mode :pirate: ]

Ça ira ?
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
12 novembre 2011 à 17:22:38

Ok après moulte relectures, j'ai vaguement compris mais pour l'instant je ne vais rester que sur l'alphabet et les modulos (le binaire, se sera pour plus tard :D )
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 novembre 2011 à 18:55:58

Bon grâce aux différents tutos sur sdz, j'ai finalement créé(enfin c'est un bien grand mot) un programme en python pour le RSA.
Mais voilà, je voudrais pas qu'il reste sur mon ordi et donc je souhaiterais le mettre en ligne (sans téléchargement) et donc quelle est la marche à suivre?

Conversion du code en javascript? ;) Si oui, comment; si non, comment? lol
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 novembre 2011 à 20:02:41

Que veux-tu dire par "le mettre en ligne (sans téléchargement)" ?
  • Partager sur Facebook
  • Partager sur Twitter
18 novembre 2011 à 20:10:01

Je suppose qu'il veut afficher le code Python sur une page internet, et non proposer un télécharger des fichiers.

Si tu utilises un CVS (tu devrais), il existe des sites comme BitBucket qui permettent d'héberger du code.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 novembre 2011 à 20:49:25

Et bien désolé si je me suis mal exprimer mais j'aimerais que sur mon site il y ai:

Entrez p (et une barre de saisie pour taper le nombre)
Entrez q (idem)

Tapez le texte à coder: (un petit cadre adapter (genre bloc note)
Et sa affiche le résultat.
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
18 novembre 2011 à 20:53:46

En fait tu veux faire une interface graphique en ligne
  • Partager sur Facebook
  • Partager sur Twitter