Essais de chiffrement pour un framadate zéro knoledge

Chiffrement par matrice

Voici un texte que l'on voudrait chiffrer:

Vous pouvez le changer, la page se met à jour automatiquement. Le texte clair fait {{ plainText.length }} caractères.
Nous avons besoin d'une matrice de codage de 4 nombres.


Et voilà la résultat: {{ cipheredTextCIL }}

Comment on a fait?

Voici notre alphabet autorisé ( {{ alphab.length }} caractères):
{{ alphab }}
Tout caractère qui n'est pas présent dans notre alphabet sera converti en souligné "_".
Notre texte après vérification : {{ filterCharacters(plainText) }}
On sépare le texte en {{ separatedCouples.length }} couples de caractères pour le mettre dans une matrice. On prend la pilule rouge.
[{{ c[0] }} , {{ c[1] }}]
Pour chaque couple de caractères comme [{{ separatedCouples[0][0] }} , {{ separatedCouples[0][1] }}]
on crée le couple d'indices de ces caractères. [ {{ dico.indexOf(separatedCouples[0][0]) }} , {{ dico.indexOf(separatedCouples[0][1]) }} ]
On applique la matrice par produit {{ convertStringToMatrix(codingMatrice) }} au couple d'indices, ce qui donne:

et on re convertit les indices en caractères selon notre dictionnaire.
on accumule ces lettres converties dans la chaine msgout et on obtient tout notre texte chiffré. {{ cipheredTextCIL }}

1) Chiffrement simple

Les ordinateurs font des opérations très rapidement sur des nombres, pour coder et décoder des textes, il suffit donc de les convertir en nombre et faire des opérations plus ou moins complexes avec.
Voici un texte que l'on voudrait chiffrer:

Vous pouvez le changer, la page se met à jour automatiquement. Le texte clair fait {{ plainText.length }} caractères.
Texte chiffré très simplement: on assigne un numéro à chaque caractère, séparé par un tiret en sortie. Javascript permet de faire ceci avec monTexte.charCodeAt(1) pour obtenir le code du caractère 1 de notre texte à chiffrer. Exemple:
On peut donc convertir notre texte en cette suite de nombres: {{ simpleCipheredText }}

2) Avec un peu de sel?

({{ salt.length }} caractères)
simple ciphered avec un sel. on ajoute le sel avant le texte puis on passe le tout dans la conversion comme ci-dessus. on obtient un message de {{ plainText.length }} + {{ salt.length }} caractères convertis en {{ plainText.length + salt.length }} nombres séparés par des tirets. {{ simpleCipheredTextWithSalt }}

3) On hashe le sel

Pour gagner en aléatoire on peut passer le sel dans une fonction de hashage cryptographique, telle que MD5 (Message Digest 5). fonctionnement de MD5
Voici ce que le hashage du sel donne: {{ md5(salt) }} ({{ md5(salt).length }}caractères)
Le nouveau texte chiffré avec le sel hashé est donc: {{ simpleCipheredTextWithHashedSalt }}

4) Légèrement épicé

simple chiffrement avec un sel avant et un saupoudrage du sel sur chacun des caractères de la phrase. la valeur du caractère est ajoutée à la valeur du caractère du sel correspondant. une fois arrivé à la fin du sel on reprend au début pour saupoudrer toute la phrase à chiffrer. Ce qui donne {{ simpleCipheredTextWithSpreadSalt.split('-').length }} chiffres. {{ simpleCipheredTextWithSpreadSalt }}

5) On en remet une couche

Les nombres que l'on a obtenu peuvent être transmis après une opération de conversion en caractères. On a donc autant de caractères que juste avant. ça ressemble déjà plus à un message pas évident à déchiffrer. Le nouveau texte fait {{ layerOnSpread.length }} caractères. {{ layerOnSpread }}

Déchiffrement simple

Collez ici le texte chiffré à convertir en truc lisible par l'opération du saint esprit réalisée dans l'autre sens.

Simple texte déchiffré. Il suffit de séparer les numéros en caractère et trouver à quel caractère correspond une autre pour trouver n'importe quel caractère ayant le même chiffre. {{ simpleDeCipheredText }}
simple texte déchiffré avec sel, en enlevant les {{ salt.length }} premiers caractères, ceux correspondant au sel.
Simple texte déchiffré avec sel saupoudré, en enlevant à chaque caractère la valeur du caractère courant du sel. Sans connaître le sel il est déjà plus difficile de deviner la phrase, mais des régularités apparaissent encore.

Calcul d'entropie de Shannon

Un nombre élevé est signe de difficulté à deviner par calcul.
score d'entropie texte à évaluer
{{ getEntropy(plainText).toFixed(3) }}
{{ getEntropy(simpleCipheredText).toFixed(3) }}

{{ simpleCipheredText }}

{{ getEntropy(simpleCipheredTextWithSalt).toFixed(3) }}

{{ simpleCipheredTextWithSalt }}

{{ getEntropy(simpleCipheredTextWithHashedSalt).toFixed(3) }}

{{ simpleCipheredTextWithHashedSalt }}

{{ getEntropy(convertIntToText(simpleCipheredTextWithHashedSalt)).toFixed(3) }}

{{ convertIntToText(simpleCipheredTextWithHashedSalt) }}

{{ getEntropy(simpleCipheredTextWithHashedSpreadSalt).toFixed(3) }}

{{ simpleCipheredTextWithHashedSpreadSalt }}

{{ getEntropy(layerOnSpread).toFixed(3) }}

{{ layerOnSpread }}

{{ getEntropy( 'KZ%feLx!D2qppSW3MEzcuMxDFpbS5&%vunsn5MpF8&VyM822Fg$$jU7Ue6PmFtujv5@ToFNp$P*3#PwS@3JAtnXFLE%9io7N23Q$Y&$&DoXEW&GsM6#Rb6m5$mvSpXAA' ).toFixed(3) }}

comparaison avec une phrase de passe générée. {{ 'KZ%feLx!D2qppSW3MEzcuMxDFpbS5&%vunsn5MpF8&VyM822Fg$$jU7Ue6PmFtujv5@ToFNp$P*3#PwS@3JAtnXFLE%9io7N23Q$Y&$&DoXEW&GsM6#Rb6m5$mvSpXAA' }}

Chiffrement AES