<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coder-Studio &#187; Wett</title>
	<atom:link href="http://www.coder-studio.com/blog/author/wett/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.coder-studio.com/blog</link>
	<description></description>
	<lastBuildDate>Wed, 31 Mar 2010 00:00:53 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>CipherSaber &#8211; Chiffrement en kit</title>
		<link>http://www.coder-studio.com/blog/ciphersaber-chiffrement-en-kit/</link>
		<comments>http://www.coder-studio.com/blog/ciphersaber-chiffrement-en-kit/#comments</comments>
		<pubDate>Thu, 13 Aug 2009 22:07:59 +0000</pubDate>
		<dc:creator>Wett</dc:creator>
				<category><![CDATA[Non classé]]></category>
		<category><![CDATA[ARC4]]></category>
		<category><![CDATA[ARCFOUR]]></category>
		<category><![CDATA[Chiffrement]]></category>
		<category><![CDATA[CipherSaber]]></category>
		<category><![CDATA[Cryptage]]></category>
		<category><![CDATA[RC4]]></category>

		<guid isPermaLink="false">http://www.coder-studio.com/blog/?p=404</guid>
		<description><![CDATA[CipherSaber, c'est la reprise du concept selon lequel il faut en savoir faire un minimum, tout seul, comme un grand. A l'instar des Jedis dans l'univers Star Wars qui vont réaliser eux-même leur sabre laser (vous comprenez maintenant le nom du projet), on nous propose de réaliser nous-même notre petit logiciel de chiffrement. ]]></description>
			<content:encoded><![CDATA[<h2>Sabre <span style="text-decoration: line-through;">laser</span> de chiffrement</h2>
<p>Au détour d&#8217;une naviguation web fortuite mais bienheureuse, je suis tombé sur <a title="CipherSaber" href="http://ciphersaber.gurus.org/">CipherSaber</a>. Vous savez, c&#8217;est ce genre de moment où on tombe sur une initiative sympa, facile à suivre et qui fait sens. Bref, j&#8217;ai accroché tout de suite, alors j&#8217;ai laissé tomber ce que j&#8217;étais en train de faire et y ai consacré mes heures suivantes.<br />
CipherSaber, c&#8217;est la reprise du concept selon lequel il faut en savoir faire un minimum, tout seul, comme un grand. A l&#8217;instar des Jedis dans l&#8217;univers Star Wars qui vont réaliser eux-même leur sabre laser (vous comprenez maintenant le nom du projet), on nous propose de réaliser nous-même notre petit logiciel de chiffrement.<span id="more-404"></span> Je vous laisse parcourir le site pour une explication plus en détail de la philosophie derrière ce petit combat pour la cryptographie, mais l&#8217;idée est là : A n&#8217;importe quel moment, nous devrions être capable de produire un logiciel de chiffrement suffisamment solide pour être utilisé sans risque, afin de s&#8217;affranchir des éventuelles lois contre l&#8217;exportation et garantir notre liberté de parole, autant que faire se peut. Joli programme !<br />
Voici les instructions que l&#8217;on nous fournit pour réaliser cet outil (directement traduites depuis le lien du début de l&#8217;article) :</p>
<ol>
<li> Utiliser l&#8217;algorithme de chiffrement ARCFOUR (ou RC4), tel que décrit par exemple <a title="ici" href="http://www.mozilla.org/projects/security/pki/nss/draft-kaukonen-cipher-arcfour-03.txt">ici</a>.</li>
<li>Chaque fichier chiffré se compose d&#8217;un Vecteur d&#8217;Initialisation (IV) de 10 octets, puis du contenu chiffré. Un nouveau vecteur aléatoire devra être généré à chaque chiffrement de fichier.</li>
<li>La clé de chiffrement se compose elle de la clé que l&#8217;utilisateur nous fournit suivie de ce même Vecteur d&#8217;Initialisation.</li>
</ol>
<p>Et effectivement, ce sont les seules indications dont nous aurons besoin. Une fois le programme réalisé, nous aurons la possibilité de déchiffrer un certificat en gif, preuve de notre petite réussite. Si l&#8217;idée vous plait et que vous souhaitez vous contenter de ces informations pour vous-même construire votre CipherSaber, alors ne revenez lire la suite de cet article que quand vous aurez votre certificat !</p>
<h2>ARCFOUR ?</h2>
<p>ARCFOUR, c&#8217;est l&#8217;algorithme libre identique au RC4 qui lui est une propriété de RSA Security. Ici, pas de clé publique/privée, pas d&#8217;algorithme alambiqué, mais une solution implémentable &laquo;&nbsp;de tête&nbsp;&raquo;, pour peu qu&#8217;on fasse l&#8217;effort de la comprendre et d&#8217;en retenir les fondements.</p>
<p>Bon, ok, c&#8217;est gentil, mais le ARCFOUR moi, je ne le connais pas. Qu&#8217;à cela ne tienne, il suffira de suivre le lien donné ou de rechercher RC4 sur le web pour que l&#8217;algorithme nous tombe tout cru, ou presque. Mais j&#8217;insiste, le but ici est de pouvoir à tout moment réécrire ce logiciel de mémoire, donc on apportera un soin tout particulier à en retenir les principes de fonctionnement.</p>
<p>C&#8217;est un algorithme de chiffrement à flot, il repose sur deux phases :</p>
<ol>
<li>A partir de la clé K que nous donne l&#8217;utilisateur, on va générer un tableau d&#8217;état S que l&#8217;on va mélanger de nombreuses fois afin d&#8217;obtenir une suite de chiffres pseudo-aléatoires.</li>
<li>On va ensuite chiffrer le contenu sensible par un simple XOR entre ses octets et ceux du tableau d&#8217;état. Si c&#8217;est votre tout premier pas dans le monde de la cryptographie, sachez que l&#8217;opération XOR est &laquo;&nbsp;réversible&nbsp;&raquo; (il y a sûrement un terme mathématique approprié à cette propriété, pardon à eux pour mon ignorance), c&#8217;est à dire que si A xor B = C, alors A xor C = B. On utilise donc exactement la même procédure et la même clé pour chiffrer et déchiffrer.</li>
</ol>
<p>Maintenant qu&#8217;on saisit la généralité de la méthode, voyons comment la réaliser plus en détail :</p>
<ol>
<li>Créons notre tableau d&#8217;état :
<ol>
<li>Soit la clé K d&#8217;une taille de 256 octets (si elle fait moins, on la répète à la suite jusqu&#8217;à obtenir 256 octets pile)</li>
<li>Construisons un tableau S de 256 valeurs, chacune contenant son index basé à 0 : S[0] = 0, S[255]=255.</li>
<li>Mélangeons S, avec i allant de 0 à 255 et j démarrant à 0:
<ol>
<li>Inverser l&#8217;élément i de S <em>avec celui de rang</em> (S[i]+K[i])+j, j étant le rang du &laquo;&nbsp;mélangé&nbsp;&raquo; précédent. Autrement dit, ajouter S[i]+K[i] à j et inverser S[i] et S[j]</li>
</ol>
</li>
</ol>
</li>
<li>Chiffrons :
<ol>
<li>Boucler sur chaque octet du fichier à chiffrer, et avec i et j démarrant à 0 :
<ol>
<li>incrémenter i</li>
<li>Un peu comme précédemment, inverser l&#8217;élément i de S avec celui de rang (S[i]+j), j étant le rang du mélangé précédent. Autrement dit, ajouter S[i] à j et inverser S[i] et S[j]</li>
<li>Combiner l&#8217;octet à chiffrer avec la valeur de l&#8217;élément S[i]+S[j] par un XOR.</li>
</ol>
</li>
</ol>
</li>
</ol>
<p>J&#8217;ai conscience que ce n&#8217;est sûrement pas clair au premier abord, mais j&#8217;ai essayé ici de résumer l&#8217;algorithme par ses opérations logiques, afin que ce soit appréhendable pour l&#8217;esprit et donc plus aisé à retenir. Pour une version plus proche de l&#8217;implémentation, il vous reste votre moteur de recherche préféré. Retenez par contre un détail important : Chaque éléments de chaque tableau est un octet, il en va de même pour i et j. Par conséquent, <strong>chaque addition se fait modulo 256</strong>.</p>
<p>Une fois votre implémentation écrite, n&#8217;hésitez pas à la tester. Un petit chiffrement/dechiffrement pour s&#8217;assurer que tout va bien ne sera pas de trop, croyez-moi.</p>
<h2>IVs et tests</h2>
<p>Maintenant que votre ARC4 est implémenté et testé, reste à en faire quelque chose. Oui car utilisé tel quel, c&#8217;est un algorithme tout à fait prévisible, or nous recherchons un chiffrement suffisament fort. La règle qui semble être celle de base, c&#8217;est qu&#8217;un même chiffrement appliqué à un même fichier ne doit pas donner le même résultat. L&#8217;idée est donc d&#8217;ajouter un IV, l&#8217;Initialisation Vector dont on parlait plus haut.  Ainsi, lors du chiffrement, on va générer un IV <em>aléatoire</em> de 10 octets, qu&#8217;on va :</p>
<ul>
<li>Mettre à la suite de la clé que nous a fourni l&#8217;utilisateur pour produire une clé <em>unique</em> à fournir à l&#8217;argorithme de chiffrement</li>
<li>Ajouter en clair au début du fichier crypté, afin quand même que l&#8217;on puisse connaitre la clé à utiliser pour déchiffrer.</li>
</ul>
<p>L&#8217;IV est donc une donnée &laquo;&nbsp;publique&nbsp;&raquo; puisqu&#8217;en clair, mais cela suffit à notre besoin de non-répétition. Par contre son choix est important, crucial même, alors attention à la méthode de génération pseudo aléatoire que vous allez utiliser.</p>
<p>Et voilà ! Une fois ce dernier détail implémenté, il ne vous reste plus qu&#8217;à tester votre programme sur les fichiers chiffrés fournis sur le site. Si vos tests ne fonctionnent pas, vous trouverez dans la FAQ quelques points à vérifier dans votre code pour trouver le bug. Voici ceux qui m&#8217;ont servi :</p>
<ul>
<li> Si vous programmez en C/C++, ouvrez vos fichiers en binaire&#8230; On aurait tendance à l&#8217;oublier.</li>
<li>Double, triple-vérifiez vos index et les combinaisons de tailles, ajout, suppression, décalages.</li>
</ul>
<h2>Aller un peu plus loin</h2>
<p>Ainsi que vous avez peut-être lu quelque part, certaines faiblesses ont été décelées dans l&#8217;ARC4. Elles sont notamment à la base des attaques contre le protocole WEP maintenant si rapides qu&#8217;on peut faire tomber un réseau Wifi en 15 minutes. L&#8217;auteur recommande donc de passer à&#8230; CipherSaber 2 ! &lt;Musique épique, et là avouez, ça picote !&gt;</p>
<p>En fait ce n&#8217;est qu&#8217;une petite évolution de votre programme actuel : le moyen le plus simple de sécuriser son CipherSaber est de démultiplier le nombre de mélanges de S. Ainsi, à l&#8217;étape 3 de la création de notre tableau d&#8217;état décrite ci-dessus, on va non pas effectuer ce mélange complet de S une fois mais N fois, N étant une donnée qu&#8217;il faudra bien évidemment connaitre lors du déchiffrement. Pour être tranquille, utilisez un N de 15 ou 20.</p>
<h2>Aller vraiment au bout de son sabre</h2>
<p>Mais toute bonne votre méthode de chiffrement soit-elle, si vous utilisez une passphrase de 3 lettres ou votre date d&#8217;anniversaire, tout cela n&#8217;aura servi à rien. Ce n&#8217;est pas le but de l&#8217;article que de décrire un moyen efficace d&#8217;en générer une, mais sachez qu&#8217;il existe des méthodes comme celle décrite sur <a title="Diceware" href="http://world.std.com/~reinhold/diceware.html">Diceware</a> (c&#8217;est depuis ce site que j&#8217;ai découvert CipherSabre, ce n&#8217;est donc pas par hasard que je met ce lien ici). Retenez tout de même qu&#8217;un mot de passe n&#8217;est pas une.. hm, et bien phrase de passe. Le premier est adapté à un contexte local, lorsque vous avez besoin d&#8217;un mot court à entropie forte. La passphrase, de ce que j&#8217;en comprend, permet de s&#8217;affranchir plus ou moins du coté &laquo;&nbsp;impossible à retenir&nbsp;&raquo; d&#8217;un vrai de mot de passe fort, en augmentant la taille de la clé à 15 ou 20 caractères avec des mots courants, tout en fournissant pour peu qu&#8217;elle soit bien choisie (aléatoire) un entropie plus que satisfaisante.</p>
<h2>Et alors ?</h2>
<p>Et bien voilà, maintenant vous savez écrire un logiciel de chiffrement. Gardez bien-sûr conscience qu&#8217;il ne remplacera jamais une vraie solution comme OpenPGP, qui malgré sa puissance est deja suffisament mal diffusée pour qu&#8217;on n&#8217;en rajoute pas à vouloir utiliser notre solution personnelle moins pratique et moins sûre. Mais enfin, à votre niveau vous savez reproduire tout seul un outil basique mais potentiellement utile en situation réelle, vous avez limité votre dépendance à ceux qui savent, ceux qui dirigent, ceux en qui on vous demande d&#8217;avoir une confiance presque aveugle. Et enfin, vous en aurez un peu appris sur les fondements de la cryptographie, peut-être plus qu&#8217;en jouant avec AirCrack sur votre propre réseau ou celui du voisin&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.coder-studio.com/blog/ciphersaber-chiffrement-en-kit/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
