logo

SYTEME DE DESIGN

Le cryptage

Opération par laquelle un message est rendu inintelligible à quiconque ne possède pas la clé permettant de retrouver la forme initiale.

Un peut d'histoire

Le premier « document » chiffré connu remonte à l'Antiquité. Il s'agit d'une tablette d'argile, retrouvée en Irak, et datant du XVIesiècle av. J.-C. Un potier y avait gravé sa recette secrète en supprimant des consonnes et en modifiant l'orthographe des mots.

De la machine de Turing à l'ordinateur :
Pendant la Seconde Guerre mondiale, Turing décrypte le code secret de la flotte allemande. Toutefois, les moyens humains et matériels nécessaires sont considérables. Turing songe alors à matérialiser sa machine universelle, véritable augure des ordinateurs d'aujourd'hui.

 

Deux catégories

Si on ne peut pas connaître tous les algorithmes de cryptage, il faut par contre savoir qu'on peut les classer dans 2 catégories

Le cryptage symétrique

Le cryptage symétrique, c'est la méthode de cryptage la plus simple. Cela ne veut pas dire qu'elle n'est pas robuste (il existe des cryptages symétriques très sûrs). Cela veut plutôt dire que le fonctionnement comprendre une clé unique. L'opération d'encryptage effectué dans un sens sera reproduit dans l'autre sens, à rebour, pour le décryptége grace à la même clé.

Le cryptages asymétriques

le cryptages asymétriques, lui implique une clé publique unique au deux interlocuteur. Plus une clé privée, différente cette fois si, garentisant la sécuruté des données. Chacune des deux interlocuteur doix uttiliser à la fois la clé publique et leur clé privé pour chiffré ou déffirer, tours à tours leur message.


I. Le cryptage symétrique

I.1 - Système de César

L’un des systèmes les plus anciens et les plus simples est le codage par substitution mono alphabétique (ou alphabets désordonnés). Il consiste à remplacer chaque lettre par une lettre différente. Il existe donc grâce à cette technique 26 façons de coder un message, ce qui fait que ce système a été longtemps utilisé par les armées pendant l’antiquité. Ce procédé très fiable à l’époque est tout de même problématique car il nécessite que les interlocuteurs se souviennent tous deux de la clef. De plus, il est évident que la sûreté de ce codage est quasi nulle et qu’il pourrait être déchiffré par n’importe quelle personne qui y mettrait le temps nécessaire.

Texte clair
Texte codé

 




I.2 - Système de Vigenère

Un autre système de cryptographie des plus anciens est cette fois-ci, la substitution polyalphabétique, qui utilise plusieurs alphabets décalés pour crypter un message. L’algorithme de substitution polyalphabétique le plus connu est le chiffre de Vigenère, mis au point par Blaise de Vigenère en 1586, qui fut utilisé pendant plus de 3 siècles. Son chiffrement consiste à utiliser le chiffre de César, mais cette fois sur une grille à deux dimention. Le croisement entre les lettres à crypter et celles du mot de passe constituent le texte finale.

Croiser les lettres du mesage en absis avec les lettres du mot de passe en ordonnée en répétent le mot de passe aussi souvant que naissessaire pour avoir autant de lettre que se que contient le message.

Grille polyalphabétique

 

 

 




 

I.3 - Système de Playfair

Le Chiffre de Playfair ou Carré de Playfair est une méthode manuelle de chiffrement symétrique qui fut la première technique utilisable en pratique de chiffrement par substitution polygrammique. Il fut imaginé en 1854 par Charles Wheatstone, mais porte le nom de Lord Playfair qui popularisa son utilisation.

Il consiste à chiffrer des paires de lettres (des digrammes), plutôt que des lettres seules comme dans les chiffrements par substitutions poly-alphabétiques tels que le chiffre de Vigenère, plus répandus à l'époque. Ce chiffrement est significativement plus dur à casser car les attaques par analyse fréquentielle habituellement utilisées sur les chiffrements par substitutions simples sont peu efficaces sur lui. L'analyse de fréquence des digrammes reste toujours possible, mais appliquée à 252 = 625 digrammes possibles au lieu des 26 lettres de l'alphabet, elle est considérablement plus difficile et exige un texte chiffré beaucoup plus long pour espérer être efficace.

I.4 - Système ADFG(V)X

Le chiffre ADFGVX est un système de chiffrement allemand inventé par le lieutenant Fritz Nebel (1891–1977) et introduit à la fin de la Première Guerre mondiale afin de sécuriser les communications radiophoniques lors de l'offensive sur Paris. Il fut toutefois cassé par le lieutenant Georges Painvin début juin 1918, conférant un avantage crucial à l'armée française.

Son originalité réside dans l'union d'une substitution inspirée du carré de Polybe et d'une transposition. Le nom du chiffre, initialement appelé GEDEFU 18 (GEheimschrift DEr FUnker 1918, « chiffre des radiotélégraphistes 18 »), provient des coordonnées des lettres dans le carré. Les chiffres du carré de Polybe sont en effet remplacés par les lettres A, D, F, G, V et X, choisies en raison de leur code morse très différents les uns des autres, de façon à éviter les erreurs de transmission radio.

Exemple de tableau de chiffrement :

  Premier code
A D F G V X
Second code A 8 t b w r q
D p 4 c g 2 9
F 3 o 5 m x e
G d a z j s y
V i h 7 u v 0
X n 1 k 6 i f

II. Le cryptage asymétrique

 

La cryptographie asymétrique est un domaine de la cryptographie où il existe une distinction entre des données publiques et privées, en opposition à la cryptographie symétrique où la fonctionnalité est atteinte par la possession d'une donnée secrète commune entre les différents participants.

La cryptographie asymétrique peut être illustrée avec l'exemple du chiffrement à clef publique et privée, qui est une technique de chiffrement, c'est-à-dire que le but est de garantir la confidentialité d'une donnée. Le terme asymétrique s'applique dans le fait qu'il y a deux clefs de chiffrement (que l'utilisateur qui souhaite recevoir des messages fabrique lui-même), telles que si l'utilisateur utilise une première clef dans un algorithme dit « de chiffrement », la donnée devient inintelligible à tous ceux qui ne possèdent pas la deuxième clef, qui peut retrouver le message initial lorsque cette deuxième clef est donnée en entrée d'un algorithme dit « de déchiffrement ».

Par convention, on appelle la clef de déchiffrement la clef privée et la clef de chiffrement la clef publique. La clef qui est choisie privée n'est jamais transmise à personne alors que la clef qui est choisie publique est transmissible sans restrictions

III. Fonction de hachage cryptographique

 

Une fonction de hachage cryptographique est une fonction de hachage qui, à une donnée de taille arbitraire, associe une image de taille fixe, et dont une propriété essentielle est qu'elle est pratiquement impossible à inverser, c'est-à-dire que si l'image d'une donnée par la fonction se calcule très efficacement, le calcul inverse d'une donnée d'entrée ayant pour image une certaine valeur se révèle impossible sur le plan pratique. Pour cette raison, on dit d'une telle fonction qu'elle est à sens unique.

Applications :

  • Vérification de l'intégrité des fichiers ou des messages
  • Vérification de mot de passe
  • Preuve de travail
  • Identification de fichiers ou de données
  • Génération d'éléments pseudo-aléatoires et dérivation de clés

 

Exemple :

JAVASCRIPT

copy
// Action executé au demarrage de la page
window.onload = function(){

	mod_grille();
}


/* --------------------------------------
*	SYSTEME DE CESAR
   --------------------------------------*/
var cle1_cesar = new Array('A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
var cle2_cesar = cle1_cesar;


function affiche_option_cesar() {
	for(var p=0; p < 26; p++) {
		document.write("");
	}	
}

function affiche_tab_cesar() {
	for(var p=0; p < 26; p++) {
		document.write("" + cle1_cesar[p] + "");
	}	
}

function affiche_id_tab_cesar() {
	for(var p=0; p < 26; p++) {
		document.write(" ");
	}	
}

function mod_grille() {
	var choix = document.getElementById("selection_cesar").value;
	var message = document.getElementById("message_cesar").value;
	var message_code = document.getElementById("message_cesar_code").value;
	var message_return = "";
	
	if (choix == "") {
		cle2_cesar = cle1_cesar;
		
		/*-- cryptage --*/
		if (message != "" && message_code == "") {
			document.getElementById("message_cesar_code").value = message;
		}
		/*-- décryptage --*/
		if (message == "" && message_code != "") {
			document.getElementById("message_cesar").value = message_code;
		}		
		
	} else {
		var pos = cle1_cesar.indexOf(choix);
		cle2_cesar = cle1_cesar.slice(pos).concat(cle1_cesar.slice(0, pos));
		
		/*-- cryptage --*/
		if (message != "" && message_code == "") {
			var lgm = message.length;
			message = message.toUpperCase();
			var accent1 = ['À','Á','Â','Ä','È','É','Ê','Ë','Ê','Ë','Î','Ï','Ù','Ú','Û','Ü','Ô','Ö','Œ'];
			var accent2 = ['A','A','A','A','E','E','E','E','E','E','I','I','U','U','U','U','O','O','OE'];

			for (var r=0; r < 19; r++) {
				message = message.replace(accent1[r], accent2[r]);
			}

			document.getElementById("message_cesar").value = message;


			for(var m=0; m < lgm; m++) {
				var ltr = message.substr(m, 1);
				var plt = cle1_cesar.indexOf(ltr);
				if (plt > -1) {
					message_return = message_return + cle2_cesar[plt];
				} else {
					if (ltr != "’") {
						message_return = message_return + ltr;
					}

				}

			}

			document.getElementById("message_cesar_code").value = message_return;
		}
		
		/*-- decryptage --*/
		if (message == "" && message_code != "") {
			var lgm = message_code.length;
			message_code = message_code.toUpperCase();
			var accent1 = ['À','Á','Â','Ä','È','É','Ê','Ë','Ê','Ë','Î','Ï','Ù','Ú','Û','Ü','Ô','Ö','Œ'];
			var accent2 = ['A','A','A','A','E','E','E','E','E','E','I','I','U','U','U','U','O','O','OE'];

			for (var r=0; r < 19; r++) {
				message = message_code.replace(accent1[r], accent2[r]);
			}

			document.getElementById("message_cesar_code").value = message_code;


			for(var m=0; m < lgm; m++) {
				var ltr = message_code.substr(m, 1);
				var plt = cle2_cesar.indexOf(ltr);
				if (plt > -1) {
					message_return = message_return + cle1_cesar[plt];
				} else {
					if (ltr != "’") {
						message_return = message_return + ltr;
					}

				}

			}

			document.getElementById("message_cesar").value = message_return;			
		}
		
		
		
		
		if (message == "" && message_code == "") {
			alert("Vous devez entrer :\n- Un message\nà crypter \nou à décrypter au choix !");
		}
		
		
	}
	
	for(var p=0; p < 26; p++) {
		document.getElementById("lettre" + p).innerHTML = cle2_cesar[p];
	}

}