Cryptus - Chiffrement de documents par clé privée

Télécharger Cryptus Longtemps j'ai utilisé un outil intégré au navigateur Opera: les notes. Celui-ci n'était rien de plus qu'un petit gestionnaire de notes, facile d'accès et synchronisé avec son espace personnel Opera ce qui permettait d'en disposer depuis n'importe quel ordinateur du moment que ce navigateur y soit installé. Je m'en servais surtout pour conserver des couples de login/mots de passe et autres informations plus ou moins sensibles. Malheureusement avec la nouvelle version de ce navigateur cet outil n'existe plus.

C'est donc dans le but de le remplacer que j'ai cherché une solution qui soit:

Ainsi naquit Cryptus.

Fonctionnement

Un script utilisateur est un fichier portant l'extension .user.js contenant un code écrit en Javascript que l'on l'intègre à son navigateur dans le but d'interagir avec une ou un ensemble de pages web.

Cryptus Tout le principe de Cryptus réside dans l'utilisation d'un script utilisateur qui contiendra l'algorithme de chiffrement/déchiffrement ainsi que la clé privée.
C'est également lui qui fournira certains éléments de formulaire tel que les champs login, mot de passe et les boutons d'édition, sauvegarde, etc ... Cryptus Cette méthode à l'avantage de ne jamais envoyer de message non chiffré sur le réseau sans pour autant avoir recours à la mise en place d'un tunnel VPN ou autre SSL.

 Installation

contenu de l'archive Cryptus.tar.gz Si ce n'est déjà fait téléchargez l'archive Cryptus.tar.gz ou Cryptus.7z et procédez à l'extraction sur votre ordinateur local.

Vous devriez obtenir un répertoire nommé Cryptus contenant l'arborescence ci-contre. 1 répertoire et 4 fichiers, rien d'affolant.

Modifier index.php

Ouvrez avec un éditeur de texte le fichier index.php, celui qui se trouve au même niveau que les fichiers styles.css et cryptus.user.js.

Identifiez la variable grain de sel $salt = 'Kr4-sFga_88.aplFkz-t7w9r_D'; et changez Kr4-sFga_88.aplFkz-t7w9r_D par ce que vous voulez. Cette suite de caractère n'est pas la plus importante, inutile d'en faire des tonnes.

Un peu plus bas dans le tableau $listUsers changez admin et password par par l'identifiant et le mot de passe de votre choix.

Si le cœur vous en dit, modifiez également la constante define("EXT", ".xx");. Par défaut toutes les notes que vous allez créer porteront l'extension .xx ce n'est donc pas très important.

Modifier cryptus.user.js

Ouvrez avec un éditeur de texte le fichier cryptus.user.js et repérez la ligne commentée // @include http://localhost/htdocs/Cryptus/*.

Si vous décidez d'utiliser Cryptus sur votre ordinateur local il est possible que l'adresse http://localhost/htdocs/Cryptus/* soit cohérente, toute fois il plus probable que vous souhaitiez utiliser un hébergement web sur internet.

Pour la suite des explication je vais supposer que vous disposez d'un hébergement accessible à l'adresse http://mondomaine.com. Pour accéder au fichier index.php que nous venons de modifier il faudra donc appeler l'adresse http://mondomaine.com/Cryptus/index.php. Si tel est le cas modifiez la ligne
@include http://localhost/htdocs/Cryptus/* par @include http://mondomaine.com/Cryptus/*.

/!\ ACHTUNG /!\ ceci est la partie la plus importante
Juste en dessous modifiez la variable var key = 'Changez-Ceci_Par Une Suite#De.Caractères+Complexe!';. Il s'agit de votre clé privée qui permettra à l'algorithme de chiffrer vos documents de manière unique.

Utilisez toutes sortes de caractères, allez y franchement ne vous gênez pas, plus la clé sera longue et variée, plus elle rendra difficile le déchiffrement de vos notes. 20 caractères est un minimum. Mais attention, faites en sorte de vous en souvenir d'une manière ou d'une autre. Je décline toute responsabilité si vous veniez à la perdre. Vous pouvez toujours utiliser une citation ou une phrase cela dépend de vos exigences sur la solidité de la clé.

Installer le script utilisateur et uploader les fichiers

Une fois les modifications apportées aux fichiers index.php et cryptus.user.js il ne reste plus que deux choses à faire: installer le script utilisateur cryptus.user.js et placer les autres fichiers sur l'hébergement web.

L'installation du script utilisateur dépend de votre navigateur, je vous invite à consulter cette page pour y parvenir. Une fois fait supprimez le du répertoire Cryptus ou déplacez le ailleurs. En aucun cas il ne doit être présent sur votre hébergement.

/!\ le fichier cryptus.user.js ne doit en aucun cas être transféré avec les autres fichiers sur votre hébergement!

Enfin pour terminer transférez le répertoire Cryptus et tout ce qu'il contient à l'exception du fichier cryptus.user.js sur votre hébergement et donnez les droits d'écriture (777) au répertoire notes. Si le répertoire notes n'a pas les droits en écriture le fichier index.php ne pourra pas créer de nouvelles notes.

Complément

entête de Cryptus

Lors d'une connexion sur votre nouveau gestionnaire de notes, l'entête de la page vous proposera sur la gauche de naviguer parmi les notes existante ou d'en créer de nouvelles. Si vous ouvrez une note existante c'est son contenu chiffré qui s'affichera tel qu'il est stockés dans les fichier.xx sur votre hébergement. Vous devrez cliquer sur le bouton Éditeur pour afficher le contenu non chiffré.

Le compte à rebours de 24 minutes est là pour prévenir des risques de perte de session. En effet si vous laissez l'éditeur ouvert trop longtemps vous risquez de perdre vos modifications au moment de l'enregistrement. La durée de vie d'une session dépend de votre hébergement, le temps de 24 minutes est donc arbitraire et ne signifie pas que vous devrez enregistrer votre document dans les secondes qui suivent la fin du compte à rebours.

Cliquez sur l'icône du cadenas pour fermer manuellement la session.

Méthode de chiffrement utilisée

L'algorithme de chiffrement utilisée est de mon propre cru, vous pouvez donc le changer ou l'améliorer à votre goût.

Pour chiffrer les données je me suis inspiré du principe de parité utilisé notamment dans les systèmes de disques montés en raid. Pour rappel voici la table de vérité xor:

valeur x valeur y x XOR y
0 0 0
0 1 1
1 0 1
1 1 0

Supposons que je souhaite chiffrer la chaîne de caractère "abc" avec la clé privée "123".
Je vais donc devoir convertir chaque caractère en valeur décimal ascii puis chaque valeur décimal en valeur binaire. On obtient:

caractère décimal binaire
a 141 01100001
b 142 01100010
c 143 01100011
1 49 00110001
2 50 00110010
3 51 00110011

Une fois les valeurs binaires obtenues on peut trouver la valeur de parité (notre document chiffré) grâce à la table de vérité xor ci-dessus.

chaîne clé parité
(a) 01100001 (1) 00110001 01010000
(b) 01100010 (2) 00110010 01010000
(c) 01100011 (3) 00110011 01010000

Pour retrouver notre chaîne non chiffrée il suffit de faire l'opération inverse, calculer la parité entre la chaîne chiffrée avec la clé.

Si vous avez des remarques ou des suggestions n'hésitez pas à m'en faire part à l'adresse mail ci-dessous.

28-Jan-2019
^