OVH Cloud OVH Cloud

Algo pour crypter.

36 réponses
Avatar
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

10 réponses

1 2 3 4
Avatar
Jacques Caron
Salut,

On Tue, 10 Aug 2004 13:57:04 +0200, Horace wrote:

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,


Ca existe encore? :-)

mais j'ai des gros problèmes pour programmer (en raison de la
compatibilité des fichiers entre MS-DOS et WINDOWS).


Uh?

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


Pourquoi imposer une limite quelconque?

En raison des contraintes imposées par le langage, on ne
peut crypter qu'un fichier à la fois.


Je ne suis vraiment pas convaincu...

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.


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

On décompose le fichier en blocs de 8 octets (ça tombe toujours juste,
c'est arrangé...)


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

Après l'encodage, les bits sont complètement mélangés, et on a reformé
un fichier de caractères.


Un fichier d'octets, plutôt.

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,


Un octet a 256 valeurs possibles, pas 255.

moins une vingtaine (entrée, supprimer, etc.) inutilisables


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.

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.


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

2. Quelle sécurité offre un algorithme de ce genre?


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/

Avatar
Jeff
Ca ressemble donc, si j'ai bien compris, a un code
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 :

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


Avatar
Marc Lasson
Jeff wrote:

Ce genre de systeme est pathétique.


... "Celui qu'il dit, c'est c'lui qu'il l'est".

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)


N'importe quoi.

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.


Super drôle.

--
Marc.

Avatar
Horace
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
Avatar
Michel Arboi
On Tue Aug 10 2004 at 23:08, Jeff wrote:

220^16 c'est presque rien (on est au XXI eme siècle)


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/

Avatar
Michel Arboi
On Tue Aug 10 2004 at 13:57, Horace wrote:

pour crypter/décrypter un fichier de n'importe quel type.


Encore heureux.

C'est plus ou moins clair dans ma tête (une partie oui, une partie
non)


Et si vous reveniez quand ce sera clair ?

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 principe, la programmation n'est pas la partie la plus difficile
dans la mise au point d'un algo de chiffrement.

crypter un fichier de n'importe quel nature, s'il n'est pas trop gros
(maximum 1 à 5 Mo)


J'ai du mal à voir pourquoi l'algo serait limité par la taille des
données...

En raison des contraintes imposées par le langage, on ne
peut crypter qu'un fichier à la fois.


Vous parlez algo ou programme ? Si c'est un algo de chiffrement, on se
fout de combien on va en faire tourner en parallèle, en série ou en
quinconce.

J'ai déjà fait des petits programmes de cryptage, mais c'était des
petits trucs de bricolage.


C'est bien parti pour continuer.

1. L'encodage.


Phase totalement inutile, AMHA.

2. Le cryptage.
Là, c'est un peu moins clair dans mon esprit.


Dommage, c'était le seul endroit où on aurait pu parler d'algo.

Avec cette clef, on génère une liste de nombre pseudo-aléatoires
longue


Avec quel algo, justement ?

Je ne pense pas qu'une telle répétition porte préjudice à la
sécurité du code.


Si. Mais là n'est pas le plus gros problème.

Voilà. Le principe de cryptage est très simple


Ah ? Je n'ai pas vu le principe.

Question idiote : quel est le but recherché ?

--
http://arboi.da.ru
FAQNOPI de fr.comp.securite http://faqnopi.da.ru/
NASL2 reference manual http://michel.arboi.free.fr/nasl2ref/

Avatar
Michel Arboi
On Wed Aug 11 2004 at 20:02, Horace wrote:

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


Zappy n'est pas une référence.

Merci tout de même, et tant pis si les gens sur ce forum ne sont pas
très constructifs...


Ils ne sont pas tous aussi bêtes et aussi méchants que moi. Il ne
fallait pas m'invoquer.

--
http://arboi.da.ru
FAQNOPI de fr.comp.securite http://faqnopi.da.ru/
NASL2 reference manual http://michel.arboi.free.fr/nasl2ref/

Avatar
shen
DQo+ID4gSidlc3NheWUgZGUgbWV0dHJlIOdhIGVuIGZvcm1lIGF2ZWMgVFVSQk8gUEFTQ0FMLCBt
YWlzIGonYWkgZGVzIGdyb3MNCj4gPiBwcm9ibOhtZXMgcG91ciBwcm9ncmFtbWVyIChlbiByYWlz
b24gZGUgbGEgY29tcGF0aWJpbGl06SBkZXMNCj4gPiBmaWNoaWVycyBlbnRyZSBNUy1ET1MgZXQg
V0lORE9XUykuIA0KPiANCj4gRW4gcHJpbmNpcGUsIGxhIHByb2dyYW1tYXRpb24gbidlc3QgcGFz
IGxhIHBhcnRpZSBsYSBwbHVzIGRpZmZpY2lsZQ0KPiBkYW5zIGxhIG1pc2UgYXUgcG9pbnQgZCd1
biBhbGdvIGRlIGNoaWZmcmVtZW50Lg0KPiANCg0KTGEgcGx1cGFydCBkZXMgZmFpbGxlcyBxdWUg
bCdvbiB0cm91dmUgZGFucyBsZXMgcHJvZ3JhbW1lcyBkZQ0KY2hpZmZyZW1lbnQgc29udCBqdXN0
ZW1lbnQgZPsg4CBkZSBtYXV2YWlzZXMgaW1wbOltZW50YXRpb25zIGRlIGwnYWxnby4NCg0KRG9u
YyBjZSBuJ2VzdCBz+3JlbWVudCBwYXMgdW4gcG9pbnQg4CBu6WdsaWdlci4NCg0KDQotLSANCnNo
ZW4NCiJZb3Uga25vdyB3aGF0LCBJJ20gaGFwcHkuLi4iDQoJCQlEcm9vcHkNCg==
Avatar
Marc Lasson
Michel Arboi wrote:
C'est plus ou moins clair dans ma tête (une partie oui, une partie
non)


Et si vous reveniez quand ce sera clair ?


L'OP ne m'a pas parru arrogant, il a le droit ne pas être compétent.
Il ne prétends pas avoir découvert un super nouveaux système de
chiffrement qui va rendre AES inutile. Je ne comprends pas la nécéssité
d'être désagréable.

crypter un fichier de n'importe quel nature, s'il n'est pas trop gros
(maximum 1 à 5 Mo)


J'ai du mal à voir pourquoi l'algo serait limité par la taille des
données...


Bien je pense qu'il veut que la clef reste suffisament grande par
rapport à la taille des données à crypter.

1. L'encodage.
Phase totalement inutile, AMHA.



Je pense qu'il veut faire cela afin de d'empecher les attaques sur
la forme du clair (frequences, entetes ...). Je doute également que
ça ait une quelquonque utilité, mais je ne suis pas capable de le
prouver.

Le but recherché, c'est peut-être comme bien d'autres il s'ennuie à la
plage et préfère rester chez lui à codouiller des trucs pour passer le
temps.

--
Marc.


Avatar
Michel Arboi
On Wed Aug 11 2004 at 22:50, shen wrote:

La plupart des failles que l'on trouve dans les programmes de
chiffrement sont justement dû à de mauvaises implémentations de
l'algo.


Mmhhh... Je dirais plutôt le cryptosystème dans son ensemble
(génération des clés, par exemple). La partie algo de chiffrement pur
est rarement en cause.
Non ?

1 2 3 4