1. Introduction

L'encryptage de données est un sujet d'études depuis la nuit des temps, ou depuis l'Antiquité pour être plus précis. En effet, l'on se rappelle du fameux chiffre de César. Ce dernier, faisant parti des premiers moyens de protection de données, consiste au remplacement de chaque lettre du texte original par une lettre à distance fixe dans l'alphabet. Au fil du temps, cette protection s'est diversifiée et complexifiée jusqu'à l’apparition de l'informatique, permettant ainsi d'atteindre des sommets en terme de sécurité, et cela grâce à la puissance de calcul des ordinateurs. C'est en entendant parler des fonctions à sens unique en mathématiques et du parallèle faisable à la cryptographie que mon attention a été suscitée. C'est pourquoi j'ai choisi de m'intéresser à la sécurité primaire de l'information dans l'informatique, pour à la fois fournir un apport à ma culture générale, mais aussi pour lever le voile sur ce sujet qui m'interpellait. J'ai donc décidé de me pencher à trois éléments distincts de ce domaine : la cryptographie symétrique, la cryptographie asymétrique et le hachage.

2. Matériel et méthodes

Ce projet a été réalisé à l'aide des trois langages de programmation qui ne sont autres que le php, l'html et le css. Ayant accès à un sous-domaine du site ou gymnase Provence, et cela dans le cadre du cour complémentaire en informatique (OCI), j'ai pu m'en servir pour mener à bien mon projet. Les fonctions qui permettent l'encryptage et le décryptage étant en php, un premier travail d'apprentissage à consisté à la lecture de la documentation desdites fonctions sur le site php.net. La structure de la page et internet en html et l'aspect visuel en css n'ont pas nécessité d'un approfondissement si important que ça des connaissances déjà assimilées en cours à leurs propos.

Voici l'explication des trois éléments qui seront au menu de ce projet :

  • La cryptographie symétrique nécessite une clé et méthode spécifique telle le chiffrement de César cité précédemment. Ici c'est la méthode aes128 qui a été utilisée, L'algorithme de ce dernier comprend la permutation du texte original à l'aide d'une matrice de caractères formée par la clé. Ce matrice subit au passage une rotation vers la droite puis une transformation linéaire précise, afin de complexifier le chiffrement.
  • La cryptographie asymétrique nécessite deux clés : une publique et une privée. Un message est généralement chiffré à l'aide de la clé publique puis communiqué à la personne désirée, cette dernière étant seule et unique possesseur de la clé privée, cette dernière servant à décrypté le message reçu. L'inverse peut cependant être effectué afin de vérifier l'identité de l'expéditeur car si la clé publique réagit à un message c'est que celui-ci vient effectivement du bon individu.
  • Le principe de hachage sert à transformer toute chaîne de caractères en une autre chaîne incompréhensible et de longueur fixe, le but étant de pouvoir vérifier l'exacte similitude entre deux textes, le texte haché étant radicalement différent même pour le changement d'un seul caractère du texte original. Ce principe permet notamment de vérifier si un fichier téléchargé correspond à celui désiré initialement et cela en comparant le fichier téléchargé haché avec ce qu'il devrait en être et qui est indiqué sur le site qui a fournit le fichier en question, méthode de protection contre les document infectés de virus (car le fichier est dès lors altéré).

Le premier élément utilisé est le champ de saisie, qui correspond à la balise formulaire en HTML.

<form  method="post">
	<p>Votre texte : <input type="text" name="texte" /></p>
	<p>Votre clé : <input type="text" name="cle" /></p>
	<p><input type="submit" value="OK"></p>
</form>

Puis il a fallut définir la variable texte d’après le champ 'texte' du formulaire. Mais là une contrainte supplémentaire est arrivée : ne rien afficher outre le formulaire lorsque rien n'a été rentré dans le champ de saisie 'texte' (mais pas le champ 'clé' car l'absence de caractères peut quand même faire office de clé et cela sans problème). Par ailleurs les moyens mis en oeuvre pour arriver à cette fin on permis d'afficher un petit texte de bienvenue disant notamment l'emplacement du futur texte encrypté/décrypté/haché. Concrètement le principe de session a été la solution, mais pour l'utiliser il a fallut insérer ceci à la toute première ligne du code :

<?php session_start(); ?>

Ainsi, il s'agissait désormais d'exprimer la variable 'texte' comme étant le contenu du champ de saisie 'texte', s'il n'y en a pas il s'agit ensuite de prendre ce qui a été emmagasiné dans la mémoire de session pour 'texte'. L'idée étant extensible notamment pour la variable 'clé', voici en exemple la partie hachage :

<?php
if(!isset($_SESSION['texte3'])){
        print "Bienvenue ! Votre texte haché s'affichera ici.";
        $_SESSION['texte3'] = "";
}else{
	$texte3 = (isset($_REQUEST['texte3'])) ? $_REQUEST['texte3'] : $_SESSION['texte3'];
        $_SESSION['texte3'] = $texte3;

	if($texte3 != ""){
		print "<b>Texte haché : </b><br/>
		Md5 : ".md5($texte3)."<br/>
		Sha1 : ".sha1($texte3)."<br/>";
	}
}
?>

La dernière partie comprend l'expression du texte original haché dans le cas où celui-ci n'est pas nul. On remarque un hachage fait de deux manières, et cela est dû au fait que je me suis rendu compte après avoir utilisé le protocole MD5 que celui-ci s'avère être détenteur d'une faille. Je n'ai donc pas effacé ce qui avait été fait mais ai rajouté pour complément une manière différente de hachage.

Voici en résumé les algorithmes php utilisés :

  • Symétrique :
openssl_encrypt ($texte, "aes128", $cle);
openssl_decrypt($texte2, "aes128", $cle2);
  • Hachage :
md5($texte3);
sha1($texte3);
  • Asymétrique :
    • Créations de la paire de clé :
$config = array(
    "digest_alg" => "sha512",
    "private_key_bits" => 512,
    "private_key_type" => OPENSSL_KEYTYPE_RSA

$res = openssl_pkey_new($config);
openssl_pkey_export($res, $privKey);
$pubKey = openssl_pkey_get_details($res);
$pubKey = $pubKey["key"];
    • Encryptage/Décryptage :
openssl_public_encrypt($texte4, $encrypted2, $pubKey);
openssl_private_decrypt($encrypted2, $decrypted2, $privKey);

3. Résultats

Mon projet est atteignable à l'adresse suivante.

4. Discussion

Le résultat obtenu correspond à ce que j'avais en tête lorsque je me suis lancé dans cette idée. L'impression première de complexité rencontrée aux prémices du projet a certes été un obstacle mais à franchir, mais grâce au coup de pouce non-négligeable du professeur reçu en début de projet, j'ai su par la suite comment et où me renseigner en cas d'interrogations et c'est ainsi qu'hormis l'aide pertinente reçue en début de parcours puis une discussion de l'état d'avancée en cours de route, nul apport humain n'a été nécessaire et ce pour mon plus grand plaisir, car il est toujours gratifiant de pouvoir après-coup regarder l'activité entreprise avec satisfaction personnelle, sans bien sûr déraper sur la surestimation de soi-même. Le fait qu'il s'agissait d'un domaine tout à fait nouveau pour moi a été d'une ouverture d'esprit considérable quant au potentiel 'intérêt que peut présenter tout sujet. Jamais je n'aurai cru être à même de trouver agréable une activité de programmation, ce qui prouve qu'il peut s'avérer bénéfique d'être curieux et entrepreneur dans la vie. Élément à souligner : le fait que la paire de clé s'auto-génère permet une implémentation du code quelque part d'autre suivi d'un fonctionnement immédiat.

5. Conclusion

Il va sans dire que je suis satisfait du projet et que j'en garderai un excellent souvenir. Même si le résultat reste relativement petit comparé à ce qui se fait en matière de sécurité informatique, ce qui est fait fonctionne. Quant à la possible extension du projet, rien ne m'empêche - bien au contraire- de poursuivre mon exploration du thème si l'envie m'en prend un jour. Un point très propice à un développement plus poussé est le cryptage asymétrique, car l'idée peut s'appliquer à une situation ou deux personnes pourraient interagir et pour cela chacun aurait sa paire de clé. Dans le meilleur des cas les messages pourraient être cryptés à l'aide de la clé publique de l'autre et aussi signé par leur propre clé privé afin que le message soit à la fois indéchiffrable mais que le destinataire sont certifiée de l'identité de l'expéditeur.

Toutefois le projet au stade final est clairement utilisable par quiconque désire s'amuser à crypter des informations quelconques voire même communiquer informatiquement une donnée plus intime telle un mot de passe d'un manière sécurisée. Cette entreprise s'avère donc être qualifiable de concluante.