Retour ACCUEIL  Défi  Aperçu du logiciel  

 

CryptXor v1.0b / Informations

HippoSys 2006

 

 

Note de l'auteur

"Encore un logiciel de cryptage !?" me direz-vous. Eh bien oui !

"Chouette ! Un nouvel algorithme révolutionnaire !?". Eh non ! Rien de nouveau sous le soleil, la méthode est connue et vieille comme le monde !... mais malheureusement indisponible sous forme concrète tel que je le souhaitais.

CryptXor s'adresse aux personnes désirant un logiciel de chiffrement qui soit réellement inviolable et non pas "presque inviolable". Ici, pas de grandes théories et autres calculs compliqués, le fonctionnement est très simple et compréhensible par tous. La transparence étant de rigueur dans ce genre de programme, le code source de l'encodeur et du décodeur est fourni.

 

A quoi sert CryptXor ?

CryptXor sert à protéger un document en le chiffrant à l'aide d'une clef (cryptographie). Sans cette clef, l'accès est impossible.

Un document chiffré contient les informations d'origines modifiées pour apparaitre illisibles et rester inutilisables sans la clef.

 

Comment fonctionne CryptXor ?

Pour chiffrer les documents, CryptXor utilise trois fichiers :

- Un fichier "Source". C'est le document à crypter.

- Un fichier "Clef". C'est la clef servant à crypter et à décrypter. Et pourquoi pas un mot de passe ? Parce qu'il est impossible de mémoriser un mot de passe très long (mille caractères par exemple), et qu'un mot de passe court est cassable (il est possible par diverses méthode de le trouver, donc d'annuler la protection).

- Un fichier "Destination". C'est le fichier final crypté (fichier "Source" encodé avec le fichier "Clef").

 

Comment fonctionne le chiffrement de CryptXor ?

CryptXor se sert de l'opérateur mathématique basique XOR (appelé "ou exclusif").

Cette fonction utilisée intelligement permet très simplement de crypter de manière totalement inviolable n'importe quel document.

Bases :

Chaque document est stocké sur ordinateur sous forme de fichier.

Chaque fichier est un ensemble binaire (une suite de chiffres composés de 0 et de 1).

Petit rappel mathématique :

Le décimal est une base 10. La façon de compter est donc la suivante : 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12...

Le binaire est une base 2. La façon de compter est donc la suivante : 0, 1, 10, 11, 100, 101, 110, 111, 1000, 1001, 1010, 1011, 1100,...

Lors de la lecture ou de l'écriture sur un disque, la gestion des données se fait sous forme de blocs de données de 8 chiffres binaires (un chiffre binaire est appelé un bit).

Chaque bloc de 8 bits est appelé "octet" (donc la taille minimal d'un fichier non vide est de 1 octet).

Un octet peut donc prendre l'une des valeurs suivantes :

Notation binaire : de 00000000 à 11111111

Notation décimale : de 0 à 255

L'opérateur XOR :

L'opérateur XOR agit selon cette norme :

0 xor 0 = 0

0 xor 1 = 1

1 xor 0 = 1

1 xor 1 = 0

Par exemple :

Notation binaire :

    10010110

xor 01011101

    --------

=   11001011

Notation décimale :

    150

xor  93

    ---

=   203

Une particularité de l'opérateur XOR est la réversibilité de l'opération.

Si  A xor B = C

alors :

A = B xor C

A = C xor B

B = A xor C

B = C xor A

C = B xor A

Par exemple :

150 xor 93 = 203

93 xor 150 = 203

150 xor 203 = 93

203 xor 150 = 93

93 xor 203 = 150

203 xor 93 = 150

Chiffrement d'un fichier :

Pour que le fichier "Destination" soit inviolable, il suffit d'appliquer la fonction XOR à l'ensemble du fichier à protéger, tout en changeant de clef à chaque octet.

Détails techniques :

Pour crypter un fichier, CryptXor fait les actions suivantes (les actions inverses sont faites pour le décryptage) :

- Ouverture en lecture du fichier "Source".

- Ouverture en lecture du fichier "Clef". Les 12287 premiers octets en partant du début du fichier sont ignorés afin d'éviter qu'une partie de la clef corresponde à une entête de fichier connue. En effet, les fichiers de même type commencent souvent avec la même serie d'octets (par exemple un fichier DOC commence souvent avec la même série d'octets qu'un autre fichier DOC).

- Ouverture en écriture du fichier "Destination".

- Ecriture d'un octet de présence de nom de fichier dans le fichier "Destination".

- si le nom du fichier doit être inclu dans le fichier "Destination" (sous forme cryptée) : l'octet est compris entre 0 et 127.

- si le nom du fichier ne doit PAS être inclu dans le fichier "Destination" : l'octet est compris entre 128 et 255.

La valeur de l'octet n'a pas de valeur fixe (la valeur n'est PAS par exemple 0=crypté, 1=non crypté) afin d'éviter que le fichier soit repérable ("tout fichier dont le premier octet a pour valeur 0 ou 1 peut avoir été crypté par CryptXor"). La valeur est comprise comme n'importe quel octet entre 0 et 255.

- Mise à zéro de l'octet de cryptage. L'octet de cryptage sert à rendre chaques octets de la clef dépendant les uns des autres (il change à chaque fois qu'un octet est crypté en prenant la valeur de l'octet crypté).

- Si le nom de fichier (nom du fichier "Source") doit être inclu :

- Analyse de la taille du nom de fichier (par exemple pour le fichier source dont le nom est "test.jpg", la valeur sera de 8).

- Lecture d'un octet du fichier "Clef".

- L'octet de taille du nom de fichier est crypté avec l'octet de clef et l'octet de cryptage à l'aide de l'opérateur XOR (taille xor clef xor cryptage). L'octet de cryptage prend cette valeur (taille xor clef xor cryptage).

- L'octet crypté est écrit dans le fichier "Destination".

- Pour chaque octet formant le nom du fichier "Source" (du 1er au dernier caractère en partant du début du nom) :

- Lecture d'un octet de nom de fichier.

- Lecture d'un octet du fichier "Clef".

- L'octet de nom de fichier est crypté avec l'octet de clef et l'octet de cryptage à l'aide de l'opérateur XOR (nom xor clef xor cryptage). L'octet de cryptage prend cette valeur (nom xor clef xor cryptage).

- L'octet crypté est écrit dans le fichier "Destination".

- Pour chaque octet du fichier "Source" (du 1er au dernier en partant du début du fichier) :

- Lecture d'un octet du fichier "Source".

- Lecture d'un octet du fichier "Clef".

- L'octet de source est crypté avec l'octet de clef et l'octet de cryptage à l'aide de l'opérateur XOR (source xor clef xor cryptage). L'octet de cryptage prend cette valeur (source xor clef xor cryptage).

- L'octet crypté est écrit dans le fichier "Destination".

- Fermeture des fichiers "Source", "Clef" et "Destination".

Notes :

- Chaque octet de clef lu doit être différent des 5 derniers utilisés ; si ce n'est pas le cas, l'octet est ignoré et le suivant du fichier "Clef" est lu jusqu'à ce qu'il réponde à cette exigence. Le but de ce critère de sélection est d'éviter les "blancs" dans un fichier "Clef" et d'avoir un maximum de hachage. Par exemple, si une partie de votre fichier "Clef" comprend 20 octets qui se suivent ayant pour valeur 0 et que le fichier "Source" est un fichier texte (.txt) alors une partie du texte (les 20 octets concernés) seront visibles avec un visualiseur hexadécimal (N xor 0 = N). Même genre de risques concernant les suites de données identiques (par exemple 30 octets qui se suivent de valeur 130) : une personne tentant un cassage brut en essayant les 256 valeurs possibles d'un octet sur l'ensemble du fichier "Destination" (clef de 1 octet pour toutes les données) pourrait décoder des parcelles du fichier "Source" (essentiellement sur des documents de type texte brut).

- Les octets du fichier "Clef" peuvent-être utilisés plusieurs fois en boucle (une fois le dernier octet de clef utilisé, le premier octet de clef est réutilisé), si la taille du fichier "Clef" est inférieure à la taille du fichier "Source" ou si le fichier "Clef" comporte de nombreux octets similaires adjacants. Dans ce cas, le fichier "Destination" n'est plus inviolable (pour l'être, il faut impérativement un passage unique de chaques octets de clefs).

- L'octet n°12287 en partant du début du fichier "Clef" sert comme octet par défaut dans le tableau des 5 derniers octets utilisés (une valeur égale à zero aurait permis de déduire que le premier octet crypté n'avait pas pour valeur l'octet lu (N xor 0 = N)). Concrètement, cela veut dire que les 5 premiers octets de clef utilisés lors du cryptage sont différents de l'octet n°12287 du fichier "Clef".

- La taille d'un fichier "Clef" doit être de minimum 12 ko soit 12293 octets (entête de fichier ignorée fixée à 12287 octets + 6 octets de clefs qui doivent être différents). La clef minimale est donc de 48bits (6 octets). Un fichier clef ne répondant pas à ces critères est refusé.

- Si le nom du fichier "Source" n'est pas inclu dans le fichier "Destination", la taille finale du fichier "Destination" est égale à celle du fichier "Source" + 1 octet (octet de présence de nom de fichier). Dans le cas contraire, elle est égale à celle du fichier "Source" + 2 octets (octet de présence de nom de fichier + octet de taille du nom de fichier) + la longueur du nom du fichier "Source".

- L'utilisation de la limitation du cryptage à 128 bits (clef de 16 octets) est fortement déconseillée, sauf si la loi en vigueur dans votre pays vous y oblige (le fichier "Destination" n'est plus inviolable).

- Aucun fichier temporaire n'est utilisé pour l'encodage des données (pas de traces qui puissent être récupérées).

 

Comment bien protéger ses documents ?

En plus d'un document bien crypté, quelques précautions sont nécessaires afin de garantir une bonne protection des données :

- Bien choisir sa clef :

Un fichier "Clef" correspondant à un format compressé est optimal (par exemple un fichier ZIP, RAR, MP3, JPG, AVI,...). En effet, la compression implique un regroupement maximal des octets identiques (pour réduire la taille du fichier). Une telle clef est donc complexe. Il est déconseillé d'utiliser une clef trop petite (par exemple un fichier XLS de 25 Ko correspondant à un tableau Excel avec trois fois rien dedans), même si le fichier à crypter est très petit (quelques ko) car certains types de fichiers, de la même manière que les entêtes, stockent des données similaires en fin de fichiers ; il faut éviter que la clef commence par ces données.

- Ne pas utiliser plusieurs fois la même clef :

Utiliser une clef identique avec plusieurs fichiers "Sources" revient au même qu'utiliser une clef trop petite (dont le nombre d'octet est inférieur au fichier "Source" à crypter) avec un seul fichier "Source". En effet, lorsqu'une clef est trop petite, le fichier "destination" n'est plus inviolable car la clef est utilisée plusieurs fois en boucle lors du cryptage. Le résultat est similaire lorsqu'une même clef est utilisée avec plusieurs fichiers "Sources" : les fichiers "Destinations" ne sont plus inviolables si la personne qui essaye de casser le cryptage possède plusieurs des fichiers "Destinations" concernés (plus le nombre de fichiers "Destinations" cryptés avec la même clef est élevé, plus il est facile de casser le cryptage). Au lieu d'utiliser une seule clef pour plusieurs fichiers, mieux vaut joindre tous les fichiers concernés en une archive unique (par exemple un fichier ZIP, RAR, ACE, 7ZIP,...) pour ensuite crypter ce document.

- Bien choisir l'emplacement du fichier "Clef" et du fichier "Destination" :

Laisser un fichier "Clef" au même endroit qu'un fichier "Destination" (même disque dur par exemple) n'est pas toujours très intelligent. Le fichier "Clef" peut très bien se trouver sur un DVD commercial, sur un site internet, sur la carte mémoire d'un appareil photo numérique,... Attention, dans le cas d'une clef située sur un DVD vidéo (par exemple un fichier VOB), les données étant généralement protégées contre la lecture (protection CSS), il faut lancer d'abord la lecture du DVD avec un logiciel spécialisé (par exemple VLC Player, Windows Media Player Classic, WinDVD, PowerDVD,.. / quelques secondes de lecture suffisent) AVANT de lancer le (dé)cryptage sinon CryptXor affiche un message d'erreur (ce qui est normal, la lecture des données étant refusée à tous logiciels non spécialisés).

- Bien cacher son fichier "Destination" :

Une fois le cryptage terminé, il est judicieux de changer le nom du fichier "Destination" (par exemple changer le nom "Historique compte bancaire 2005.xls" par "Config.dat" ou "DF30AE.tmp" ou "xcpl45.dll") et de le placer dans un répertoire adapté (par exemple un fichier renommé en ".dll" dans un répertoire système,...). CryptXor peut chiffrer le nom du fichier "Source" dans le fichier "Destination". Dans ce cas, pas besoin de retenir le nom d'origine, il sera retrouvé lors du décryptage.

 

 

Questions / Réponses

Q : J'ai perdu mon fichier clef (ou j'ai oublié son nom). Comment décrypter mon fichier crypté ?

R : Il est impossible de le décrypter sans le fichier clef (sauf si la clef a bouclé plusieurs fois, mais dans ce cas, vu la complexité de l'opération, je n'assume pas cette tâche).

 

Q : Je veux prendre un fichier VOB d'un DVD Vidéo comme clef mais CryptXor affiche un message d'erreur !

R : Les DVD Vidéo que l'on trouve dans le commerce sont généralement protégés contre la lecture (protection CSS). Pour résoudre ce problème, il faut lancer d'abord la lecture du DVD avec un logiciel spécialisé (par exemple VLC Player, Windows Media Player Classic, WinDVD, PowerDVD,.. / quelques secondes de lecture suffisent) AVANT de lancer le (dé)cryptage sinon CryptXor affiche un message d'erreur (ce qui est normal, la lecture des données étant refusée à tous logiciels non spécialisés).

 

 

Historique

CryptXor v1.0b (avril 2006)

- Correction du bug "dépassement de capacité".

 

CryptXor v1.0 (janvier 2006)

- Cryptage inviolable.

- Cryptage du nom de fichier.

- Code source du crypteur et décrypteur fourni.

 

Retour ACCUEIL  Défi  Aperçu du logiciel