Algo pour crypter.
Le
Horace
Bonjour
J'essaye de développer un petit algorithme pour crypter/décrypter un
fichier de n'importe quel type. C'est plus ou moins clair dans ma tête (une
partie oui, une partie non). J'essaye de mettre ça en forme avec TURBO
PASCAL, mais j'ai des gros problèmes pour programmer (en raison de la
compatibilité des fichiers entre MS-DOS et WINDOWS).
En gros, je voulais vous expliquer un peu mon idée, et voir votre avis
là-dessus.
Ce que je veux faire : un programme (et donc un algo :) qui permette de
crypter un fichier de n'importe quel nature, s'il n'est pas trop gros
(maximum 1 à 5 Mo). En raison des contraintes imposées par le langage, on ne
peut crypter qu'un fichier à la fois. J'ai déjà fait des petits programmes
de cryptage, mais c'était des petits trucs de bricolage. Là, sans avoir
envie de pondre du DES ou quoi, j'ai quand même envie de faire quelque chose
de 'sérieux', je veux dire quelque chose qui soit vraiment dur à casser.
Il y a deux parties dans l'algorithme.
1. L'encodage.
On décompose le fichier en blocs de 8 octets (ça tombe toujours juste,
c'est arrangé), ça nous donne un tableau 8x8 rempli de 0 ou de 1 (plus
précisément, chaque ligne comporte le code binaire d'un octet). On répète 10
fois l'ensemble suivant :
- on retourne chaque tableau individuellement ;
- on déplace les octets d'un tableau à un autre. Le résultat est assez
complexe (si on cherche à voir où les octets atterrissent).
Après l'encodage, les bits sont complètement mélangés, et on a reformé
un fichier de caractères.
2. Le cryptage.
Là, c'est un peu moins clair dans mon esprit. Je pense prendre une clef
de 16 caractères (donc en gros 255 possibilités par caractère de la clef,
moins une vingtaine (entrée, supprimer, etc.) inutilisables, donc en gros
220^16 clefs possibles). Avec cette clef, on génère une liste de nombre
pseudo-aléatoires longue (probablement 1024 octets). On code le résultat de
l'encodage avec cette clef au moyen d'un XOR. Certes, il y a répétition,
mais d'une part, la chaîne est très longue, et d'autre part, l'encodage a
complètement brouillé les bits. Je ne pense pas qu'une telle répétition
porte préjudice à la sécurité du code.
Voilà. Le principe de cryptage est très simple, en lui-même, mais il est
assez solide, je pense, du fait que la chaîne avec laquelle on code est
longue (on peut encore la rallonger), et d'autre part du fait du grand
nombre de clefs possibles qui rend très difficile le cassage par force
brute. D'autre part, l'extrême simplicité de ce procédé garantit au moins
une chose : il n'y a pas de trappe dans l'algorithme (volontaire ou
involontaire).
Alors, deux questions :
1. Est-ce que l'encodage est absolument nécessaire ? S'il est là, après
avoir testé X clefs (attaque par force brute), on reste obligé de décoder,
ça fait perdre du temps.
2. Quelle sécurité offre un algorithme de ce genre ? Les calculs ne sont
pas compliqués (donc pas longs), mais il y a un grand nombre de clefs
possibles. C'est un cryptage à combien de bits, il faudrait combien de temps
à un ordinateur classique pour casser ça par la force brute (une idée ?) ?
3. Est-ce qu'il ne vaudrait pas mieux mêler l'encodage et le cryptage,
c'est-à-dire crypter au fur et à mesure qu'on encode. Je pense que la
sécurité en serait améliorée (plus de calculs à effectuer pour un cassage
par force brute).
Merci à vous si vous prenez un peu de votre temps pour me répondre
Cordialement,
Christophe
J'essaye de développer un petit algorithme pour crypter/décrypter un
fichier de n'importe quel type. C'est plus ou moins clair dans ma tête (une
partie oui, une partie non). J'essaye de mettre ça en forme avec TURBO
PASCAL, mais j'ai des gros problèmes pour programmer (en raison de la
compatibilité des fichiers entre MS-DOS et WINDOWS).
En gros, je voulais vous expliquer un peu mon idée, et voir votre avis
là-dessus.
Ce que je veux faire : un programme (et donc un algo :) qui permette de
crypter un fichier de n'importe quel nature, s'il n'est pas trop gros
(maximum 1 à 5 Mo). En raison des contraintes imposées par le langage, on ne
peut crypter qu'un fichier à la fois. J'ai déjà fait des petits programmes
de cryptage, mais c'était des petits trucs de bricolage. Là, sans avoir
envie de pondre du DES ou quoi, j'ai quand même envie de faire quelque chose
de 'sérieux', je veux dire quelque chose qui soit vraiment dur à casser.
Il y a deux parties dans l'algorithme.
1. L'encodage.
On décompose le fichier en blocs de 8 octets (ça tombe toujours juste,
c'est arrangé), ça nous donne un tableau 8x8 rempli de 0 ou de 1 (plus
précisément, chaque ligne comporte le code binaire d'un octet). On répète 10
fois l'ensemble suivant :
- on retourne chaque tableau individuellement ;
- on déplace les octets d'un tableau à un autre. Le résultat est assez
complexe (si on cherche à voir où les octets atterrissent).
Après l'encodage, les bits sont complètement mélangés, et on a reformé
un fichier de caractères.
2. Le cryptage.
Là, c'est un peu moins clair dans mon esprit. Je pense prendre une clef
de 16 caractères (donc en gros 255 possibilités par caractère de la clef,
moins une vingtaine (entrée, supprimer, etc.) inutilisables, donc en gros
220^16 clefs possibles). Avec cette clef, on génère une liste de nombre
pseudo-aléatoires longue (probablement 1024 octets). On code le résultat de
l'encodage avec cette clef au moyen d'un XOR. Certes, il y a répétition,
mais d'une part, la chaîne est très longue, et d'autre part, l'encodage a
complètement brouillé les bits. Je ne pense pas qu'une telle répétition
porte préjudice à la sécurité du code.
Voilà. Le principe de cryptage est très simple, en lui-même, mais il est
assez solide, je pense, du fait que la chaîne avec laquelle on code est
longue (on peut encore la rallonger), et d'autre part du fait du grand
nombre de clefs possibles qui rend très difficile le cassage par force
brute. D'autre part, l'extrême simplicité de ce procédé garantit au moins
une chose : il n'y a pas de trappe dans l'algorithme (volontaire ou
involontaire).
Alors, deux questions :
1. Est-ce que l'encodage est absolument nécessaire ? S'il est là, après
avoir testé X clefs (attaque par force brute), on reste obligé de décoder,
ça fait perdre du temps.
2. Quelle sécurité offre un algorithme de ce genre ? Les calculs ne sont
pas compliqués (donc pas longs), mais il y a un grand nombre de clefs
possibles. C'est un cryptage à combien de bits, il faudrait combien de temps
à un ordinateur classique pour casser ça par la force brute (une idée ?) ?
3. Est-ce qu'il ne vaudrait pas mieux mêler l'encodage et le cryptage,
c'est-à-dire crypter au fur et à mesure qu'on encode. Je pense que la
sécurité en serait améliorée (plus de calculs à effectuer pour un cassage
par force brute).
Merci à vous si vous prenez un peu de votre temps pour me répondre
Cordialement,
Christophe

Poser une question


On Tue, 10 Aug 2004 13:57:04 +0200, Horace
Ca existe encore? :-)
Uh?
Pourquoi imposer une limite quelconque?
Je ne suis vraiment pas convaincu...
Pourquoi ne pas utiliser une librairie toute faite qui assurera les
fonctions de chiffrement/déchiffrement? C'est la seule chose qui sera
"sérieuse" sans réimplémenter soi-même des algos existants. Parce que si
on n'a pas de vraies bonnes bases en crypto, inventer un algo dans la
cuisine, ça ne donne en général pas de bons résultats...
Ben dans ce cas c'est pas "un fichier de n'importe quelle nature". Il vaut
mieux prévoir le cas où le fichier n'a pas une longueur multiple de 8, et
décider de ce qu'on fait dans ce cas (padding...). Il faut bien entendu
aussi stocker quelque part des informations qui permettent de savoir ce
qu'il faut "couper" au déchiffrement...
Un fichier d'octets, plutôt.
Un octet a 256 valeurs possibles, pas 255.
Tout dépend du mode de saisie... Si la clef est saisie en hexa, toutes les
valeurs sont utilisables. Si la clef n'est pas saisie en hexa, le nombre
de valeurs "saisissables" est largement inférieur, et je ne parle même pas
de ceux qui ont une vague chance d'être saisis.
Vous pensez mal. S'il y a des éléments relativement constants dans le
clair (un en-tête de fichier, par exemple), on pourrait les utiliser pour
retrouver au moins une partie de la clef, et à partir de là, on retrouvera
le reste. Et compter sur le secret de l'algo d'encodage est une illusion
qui ne tiendra pas longtemps, en plus d'être une mauvaise idée.
Au minimum, il conviendrait de faire en sorte que la "clef" de chaque bloc
soit différente, par exemple calculée à partir de la clef précédente,
voire à partir des données chiffrées dans le bloc précédent...
Tout dépend de qui vous tentez de vous protéger, mais ça tend vers 0...
Sérieusement, soit vous voulez inventer un nouvel algo de chiffrement, et
dans ce cas vous avez vraiment beaucoup de travail (et de lecture), soit
vous voulez juste implémenter quelque chose, et dans ce cas il y a des
algos déjà existants qui ont fait leurs preuves, eux (parmi de nombreux
autres qui ne les ont pas faites), et des librairies (et des applications)
qui les implémentent déjà.
Bon courage!
Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/
de Vernam sauf que la clef est généré a partir d'une séquence
pseudo aléatoire dont la vraie clef est la graine.
Ce genre de systeme est pathétique.
D'une part, le brute force est tres facile étant
donné que 220^16 c'est presque rien (on est au XXI eme siècle)
D'autre part, ton "encodage" est tres simple a décoder par un processus
d'analyse.
Sans compter que ton algo sera completement dépendant du systeme sur
lequel il tourne, a moins de coder en dure ton generateur pseudo
aléatoire (ce que je te conseil)
Alors bien évidemment, si c'est juste pour eviter que ta maman voit
tes photos de Q c'est bon, mais ca ne resistera pas longtemps aux services
de la dgse
Le Tue, 10 Aug 2004 13:57:04 +0200, Horace a écrit :
... "Celui qu'il dit, c'est c'lui qu'il l'est".
N'importe quoi.
Super drôle.
--
Marc.
Bonsoir.
Je n'ai pas vu la réponse qui précédait la votre propre (de Jeff ?), je
crois qu'il l'a supprimée... Il a du avoir honte, je comprends. Merci en
tout cas de faire preuve d'un peu de sérieux, je sais qu'on a tendance à
s'en prendre assez vite aux gens qui proposent des algos ici, j'ai eu vent
de quelques histoires...
Merci tout de même, et tant pis si les gens sur ce forum ne sont pas
très constructifs...
Bien à vous,
Christophe
220^16 ~ 2^124
C'est presque beaucoup.
On peut discuter le 220. Je viserais plutôt 64 au grand maxi. Ce
qui amène quand même à 96 bits d'entropie, encore beaucoup.
C'est bizarre, mais le SEUL point qui me paraîsse difficilement
attaquable, c'est justement la longueur de la clé. Tout le reste est à
jeter :-]
--
http://arboi.da.ru
FAQNOPI de fr.comp.securite http://faqnopi.da.ru/
NASL2 reference manual http://michel.arboi.free.fr/nasl2ref/