<?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>Linux Attitude&#187; Théorie</title>
	<atom:link href="http://linux-attitude.fr/tag/theorie/feed" rel="self" type="application/rss+xml" />
	<link>http://linux-attitude.fr</link>
	<description>Le libre est un état d&#039;esprit</description>
	<lastBuildDate>Tue, 20 Jul 2010 19:54:56 +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>Sécurité du processus de boot</title>
		<link>http://linux-attitude.fr/post/securite-du-processus-de-boot</link>
		<comments>http://linux-attitude.fr/post/securite-du-processus-de-boot#comments</comments>
		<pubDate>Wed, 14 Apr 2010 16:57:46 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Savoir-faire]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=703</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;:


Maintenant que nous connaissons le processus de boot, si on examinait ce processus d'un point de vue de la sécurité&#160;!


Lorsqu'on parle de sécurité, il faut d'abord savoir dans quel cas on se positionne et de quoi on cherche à se prémunir. Ici, je considère que le système lui-même est sécurisé. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;:</p>


<p>Maintenant que nous connaissons le <a href="/post/processus-de-boot">processus de boot</a>, si on examinait ce processus d'un point de vue de la sécurité&nbsp;!</p>


<p>Lorsqu'on parle de sécurité, il faut d'abord savoir dans quel cas on se positionne et de quoi on cherche à se prémunir. Ici, je considère que le système lui-même est sécurisé. Je suppose que l'attaquant est devant la machine et cherche un accès root.</p>


<p>On considère que chaque élément est sécurisé pour ce qui est de ses propres fonctionnalités, ce qui veut dire que si le bootloader est protégé par mot de passe, il n'y a pas de faille dans le bootloader lui-même permettant d'outrepasser ce mot de passe. Nous nous attacherons donc à chercher ce qui peut être détourné dans le flux d'exécution en entrée et en sortie de chaque élément.</p>


<p>Je vais commencer par la fin, du plus facile au plus difficile.</p>


<h3>rc</h3>

<p>Rc est lancé par init et ne prend ses paramètres que de init. Ceux-ci sont fixés en dur dans <a href="/post/configuration-de-init">/etc/inittab</a>. Son démarrage ne peut donc être détourné que d'une façon&nbsp;: par modification du contenu du disque. <em>GoTo partition /</em></p>


<p>Parmi ces paramètres il y a le paramètre 1 qui lance rc dans le runlevel 1, ce qui dans la plupart des cas se termine par un sulogin. Ouf on est protégé par le mot de passe root.</p>


<p>Mais vérifiez bien, dans certains cas il se termine par un simple shell et donc réussir à passer un tel paramètre permettrait à l'attaquant un accès root à votre machine.</p>


<p>Pour passer 1 en paramètre <em>GoTo init</em></p>


<p><span id="more-703"></span></p>


<h3>init</h3>

<p>Init est lancé par le noyau après lecture de la racine. Il lit sa configuration dans /etc/inittab. Il peut donc être détourné par modification du disque&nbsp;: <em>GoTo partition /</em></p>


<p>Parmi les paramètres qu'on peut lui passer il y a 1 et S, 1 renvoie au problème ci-dessus et S lance lui-même sulogin, donc même vérification. Ces paramètres viennent du noyau&nbsp;: <em>GoTo noyau</em></p>


<p>Init est un binaire choisi par le noyau, or il est possible de dire au noyau de changer d'init à travers le bon paramètre. Par exemple, je peux ajouter init=/bin/sh aux paramètres du noyau pour qu'init ne soit jamais lancé qu'un shell apparaisse à sa place. Ça y est je suis root&nbsp;! C'est d'ailleurs la technique pour changer de mot de passe root lorsque vous l'avez perdu.</p>


<p>Pour changer d'init <em>GoTo noyau</em>.</p>


<p>Init peut aussi être lancé par initrd, il souffre dans ce cas exactement des mêmes problèmes que lorsqu'il est lancé par le noyau&nbsp;: <em>GoTo initrd</em>.</p>


<p><strong>Note upstart, initrdng...</strong>&nbsp;: <br />
Il se peut (et ca va être de plus en plus courant) qu'init ou rc soit remplacé par autre chose, type upstart. Dans ce cas seul les noms des paramètres et le format des fichiers change. Mais les impacts sont exactement les mêmes.</p>


<h3>Initrd</h3>

<p>Initrd prend ses paramètres de la ligne de commande du noyau, mais généralement (il y a plein d'initrd différents) ils sont passés tels quels à init.</p>


<p>D'autre part initrd peut être chargé par 2 moyens, j'ai décrit le bootloader comme un moyen mais le noyau peut aussi charger lui-même l'initrd si on lui demande (avec le paramètre initrd=). On peut donc détourner son chargement par plusieurs moyens&nbsp;: <em>GoTo noyau</em>, <em>GoTo bootloader</em>.</p>


<p>Il est aussi possible de modifier directement l'initrd, par exemple lors d'une <a href="/post/Reinstallation-distante">réinstallation distante</a>. Celui-ci contenant tout ce qu'on veut, modifier son contenu permet de lancer n'importe que processus ... <em>GoTo partition /boot</em></p>


<h3>Noyau</h3>

<p>Le noyau en lui-même ne vous rend pas root mais rien ne vous empêche d'y faire une modification pour qu'il vous fasse <a href="http://en.wikipedia.org/wiki/Rootkit" hreflang="en">root</a> une fois le système chargé.</p>


<p>Le noyau est chargé depuis la partition /boot donc une modification de cette partition et c'est gagné&nbsp;: <em>GoTo partition /boot</em></p>


<p>Le noyau prend ses paramètres du bootloader, parmi ceux-ci de nombreux paramètres permettent de détourner le système&nbsp;: root= init= initrd= et surement bien d'autres. <em>GoTo bootloader</em></p>



<h3>Partition /</h3>

<p>Jusque là, nous n'avons évoqué que les risques mais pas encore de faille. C'est parce qu'aucune interférence de l'utilisateur n'a été possible, tout est automatisé. Mais ça va changer.</p>


<p>Lors du montage de la racine, il y a une interférence possible&nbsp;: le disque contenant / peut avoir été modifié, voire remplacé, pour modifier /etc/inittab, /sbin/init, /etc/init.d/rc ou toute autre chose.</p>


<p>Pour éviter ce problème, il y a deux possibilités&nbsp;:</p>
<ul>
<li>mettre un cadenas sur la machine pour garantir l'intégrité physique du disque</li>
<li>chiffrer le disque</li>
</ul>

<p>Dans le premier cas, le problème est remonté aux autres couches pour garantir l'intégrité logique et éviter qu'on réussisse à booter sur un autre OS pour modifier le disque. <em>GoTo bootloader</em>.</p>


<p>Dans le deuxième cas, le chiffrement (par exemple avec <a href="/post/faire-du-chiffre">luks</a> ou <a href="http://www.truecrypt.org/" hreflang="en">truecrypt</a>) doit être assuré par une clé.</p>
<ul>
<li>si cette clé est sur la machine et son mot de passe aussi&nbsp;: elle est dans un élément de boot (initrd, partition de boot ...) on reporte le problème <em>GoTo partition /boot</em></li>
<li>si cette clé ou son mot de passe n'est pas sur la machine (carte à puce, mot de passe, clé usb ...) alors il y a besoin d'un personne présente à chaque boot ...</li>
<li>le chiffrement peut aussi être assuré <a href="http://www.thinkwiki.org/wiki/Full_Disk_Encryption_%28FDE%29" hreflang="en">par une puce</a> (TPM) qui ne quitte pas la machine, auquel cas, on garanti que le disque ne quittera pas la machine pour être lu ou modifié (mais pas de garantie contre le formatage), par contre il peut être lu sur place par un autre OS.</li>
</ul>

<p>Dans tous les cas, seul le démarrage post-noyau est préservé, pour le reste <em>GoTo bootloader</em>.</p>



<h3>bootloader</h3>

<p>Le bootloader est la source de tous les maux. C'est en effet par lui que l'utilisateur a tout loisir de modifier des paramètres de démarrage.</p>


<p>Le bootloader passe ses paramètres au noyau qui les passe à l'initrd qui les passe à init. Ces paramètres viennent de la configuration du bootloader mais pour un certain nombre de bootloader ils peuvent être directement demandés à l'utilisateur. Dans ce cas il y a moyen d'interdire cette modification à travers un mot de passe. Par exemple <a href="http://www.gnu.org/software/grub/manual/html_node/Security.html" hreflang="en">grub</a>.</p>


<p>Le bootloader charge sa configuration puis choisit et charge le noyau et l'initrd, tout ceci depuis la partition de boot. Dans tous les cas il doit lire une version non chiffrée, ce qui interdit le chiffrement de cette partition.</p>


<p>Pire, le bootloader est incapable de savoir que le disque n'a pas changé. Donc un simple ajout de disque permet de le faire booter sur un noyau/initrd différent.</p>


<p>Vous ne pouvez presque rien y faire: <em>GoTo partition /boot</em>.</p>


<p>Bon en supposant qu'il n'y a pas de problème, le bootloader est chargé par le bios, il peut donc être détourné&nbsp;: <em>GoTo Bios</em>.</p>


<h3>Partition /boot</h3>

<p>J'inclue dans la définition de la partition de boot tout ce qui contient la configuration du bootloader, le bootloader lui-même, le noyau et l'initrd, même si ils peuvent être physiquement à des endroits différents.
Protéger la partition de boot est très complexe, car tout doit être accessible en clair depuis des outils ayant des fonctionnalités très restreintes.</p>


<p>Les possibilités sont&nbsp;:</p>
<ul>
<li>sceau physique sur la machine</li>
<li>TPM</li>
</ul>

<p>Mettre un gros cadenas sur la machine permet d'éviter une lecture ou une modification de /boot. Mais il on ne se prémunit pas d'une personne un peu patiente avec un accès complet à la machine.</p>


<p>La dernière solution, complexe à mettre en place et sans garantie absolue est d'utiliser une puce TPM qui va vérifier (<a href="http://domino.research.ibm.com/comm/research_people.nsf/pages/sailer.ima.html" hreflang="en">mesurer</a>) le <a href="http://ko.sourceforge.jp/projects/openpts/wiki/GRUB-IMA" hreflang="en">bootloader</a> à chaque étape de son chargement, puis vérifier chaque élément que le bootloader charge avant de lancer le noyau.</p>


<h3>Bios</h3>

<p>Le bios s'exécute tout seul depuis lui-même, il se charge puis lis ses paramètres. Parmi ces paramètres il y a la séquence de boot, qui peut elle-même être modifiée par l'utilisateur.</p>


<p>Il est donc possible, voire facile de dire au bios de booter sur une clé USB et de prendre le contrôle du disque et donc de la machine. Pour éviter ce cas de figure il est possible de mettre un mot de passe au bios. Ainsi on est sûr de booter sur le bon disque, mais seulement s'il y a un cadenas sur la machine puisque le bios ne vérifie pas que le disque n'a pas été remplacé.</p>


<p><em>GoTo Matériel</em>.</p>


<h3>Matériel</h3>

<p>Il est possible de changer le bios lui-même. Et ce de plusieurs façons. Si c'est un flash, il est possible de le remplacer logiciellement, si c'est une rom il est possible de la remplacer matériellement.</p>


<p>Et enfin le plus simple pour remplacer le bios est de remplacer la carte mère. Hop ni vu ni connu ...</p>


<p>Pour se protéger de cela&nbsp;? Le cadenas ... ou la puce TPM, dont la mise en place est toujours très complexe et non garantie.</p>



<h2>Conclusion</h2>

<p>Résumons-nous car cet article commence à être un peu long.
Différencions les cas dont on veut se protéger.</p>


<h3>Accès réseau</h3>

<p>Si l'attaquant n'a accès à la machine que par le réseau, on est tranquille pour ce qui est de la séquence de boot&nbsp;: No problemo.</p>


<h3>Accès KVM</h3>

<p>Si l'attaquant n'a accès à la machine que par <a href="http://fr.wikipedia.org/wiki/Commutateur_%C3%A9cran-clavier-souris" hreflang="fr">KVM</a> (pas de possibilité de toucher aux périphériques). Mettre un mot de passe sur le bootloader, le bios et vérifier que le mode rescue demande le mot de passe root devrait suffire. En effet les seul moyen d'attaque sont les paramètres de lancement du système.</p>


<p>N'oubliez pas que le simple accès KVM permet des choses comme le reboot via les <a href="/post/Les-mains-dans-la-noyau">magic keys</a></p>


<h3>Accès cadenassé</h3>

<p>Si on suppose que l'attaquant peut apporter un CD ou une clé usb sur le système, paramétrer le bios pour booter sur un disque et y mettre un mot de passe est un moyen simple à mettre en place pour éviter le boot sur un autre système.</p>


<p>Mais attention, il ne faut pas que l'utilisateur puisse ouvrir la machine, il pourrait réinitialiser le bios.</p>


<h3>Accès au disque sans droit de boot</h3>

<p>A partir du moment où l'attaquant a accès au disque c'est presque foutu. Si l'attaquant n'est pas une personne autorisée à booter la machine, il est possible de chiffrer le disque avec une clé qui ne se trouve pas sur le disque. Il faudra alors la rentrer à chaque démarrage. L'attaquant ne disposant pas de cette clé, il me pourra ni lire ni modifier les données où le système. Mais c'est déjà une solution assez contraignante.</p>


<p>D'autant plus que pour être complète cette solution doit garantir le noyau et l'éventuel initrd sur lequel on boote et donc vérifier soi même à chaque boot qu'on utilise une partition de boot non modifiée.</p>


<p>On en arrive au dernier cas ...</p>


<h3>Accès complet</h3>

<p>Lorsque l'attaquant a un accès complet à la machine, il n'existe qu'un moyen de se protéger (et encore)&nbsp;: la puce TPM.</p>


<p>Elle permet de&nbsp;:</p>
<ul>
<li>protéger le bios d'un changement</li>
<li>protéger le bootloader d'un changement</li>
<li>protéger le noyau d'un changement</li>
<li>protéger le contenu du disque d'un changement</li>
</ul>

<p>Mais tout cela est compliqué et nécessiterait un autre article que je ne suis pas encore prêt à faire, je n'ai même pas de puce TPM chez moi.</p>


<p><strong>PS :</strong> Notez une dernière chose que je n'ai pas abordé, le chiffrement des données. Le chiffrement du disque contenant les données (/home et /srv selon vos besoins) devient obligatoire dès qu'on prévoit qu'il y aura un accès physique. Il doit de préférence se faire avec un moyen propre à l'utilisateur (mot de passe / clé / carte à puce ...) pour éviter les attaques à travers le boot de l'OS.</p>


<p><strong>PPS :</strong> Considérez qu'a partir du moment où quelqu'un a un accès physique à votre machine c'est mort.</p>


<p><strong>PPPS :</strong> Sauf si votre machine est une carte à puce.</p>


<p><strong>PPPPS :</strong> Et encore ...</p>


<p>Bon courage&nbsp;!</p>
	Tags:<a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/savoir-faire" title="Savoir-faire" rel="tag">Savoir-faire</a>, <a href="http://linux-attitude.fr/tag/securite" title="Sécurité" rel="tag">Sécurité</a>, <a href="http://linux-attitude.fr/tag/theorie" title="Théorie" rel="tag">Théorie</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/securite-du-processus-de-boot/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Processus de boot</title>
		<link>http://linux-attitude.fr/post/processus-de-boot</link>
		<comments>http://linux-attitude.fr/post/processus-de-boot#comments</comments>
		<pubDate>Mon, 12 Apr 2010 16:53:34 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Matériel]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Système]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=699</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: bios, bootloader, noyau, init, rc


Je ne me souviens pas avoir fait un article complet sur le processus de boot. Il y en avait  un partiel ici. En voici un&#160;!



BIOS

Le bios est le premier élément à être lancé, si on excepte l'appui sur le bouton ON et quelques autres [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: bios, bootloader, noyau, init, rc</p>


<p>Je ne me souviens pas avoir fait un article complet sur le processus de boot. Il y en avait  <a href="/post/chargeeeez">un partiel ici</a>. En voici un&nbsp;!</p>



<h3>BIOS</h3>

<p>Le bios est le premier élément à être lancé, si on excepte l'appui sur le bouton ON et quelques autres détails. Celui-ci initialise le processeur ainsi qu'une partie du matériel, comme la carte vidéo ou le clavier.</p>


<p>Le bios est constitué d'une mémoire (rom ou flash) placée sur la carte mère.</p>


<p>Notez que quasiment tous les bios étant maintenant des flash il est possible de les mettre à jour, voire de les remplacer. Et justement un projet existe pour remplacer les bios propriétaires par des bios libres (comme <a href="http://www.youtube.com/watch?v=y8onxYa8Qyw" hreflang="fr">Max</a>): <a href="http://www.coreboot.org/Welcome_to_coreboot" hreflang="en">coreboot</a> de son ancien nom linuxbios.</p>


<p>Le bios est configuré pour choisir un périphérique sur lequel booter. En général c'est le premier disque dur, mais cela peut aussi être une clé usb ou un lecteur disquette. Il est même possible de choisir au moment du boot.</p>


<p>Sur le périphérique en question, et à l'exception du lecteur CD qui a son protocole (<a href="http://fr.wikipedia.org/wiki/El_Torito" hreflang="fr">el torito</a>), le bios charge le premier secteur (512 octets), le met en RAM, et le lance.</p>


<p>Notez que le "BIOS" est spécifique aux PC, d'autres architectures ont des firmware <a href="http://en.wikipedia.org/wiki/Extensible_Firmware_Interface" hreflang="en">EFI</a> (Apple) ou des <a href="http://en.wikipedia.org/wiki/Open_Firmware" hreflang="en">OpenBoot</a> (Sun).</p>


<h3>Bootloader</h3>

<p>Dans ce premier secteur se trouve le <a href="/post/chargeeeez">bootloader</a> (grub, lilo, silo, syslinux, mbr dos ...).</p>


<p>Le bootloader est découpé en plusieurs morceaux à cause de la limite des 512 octets. Sa première activité est de réussir à se charger complètement.</p>


<p>Celui de windows est assez simpliste, mais sous linux on en trouve avec plein de fonctionnalités <a href="http://www.gamers.org/~quinet/lilo/" hreflang="fr">sympa</a>.</p>


<p>Une fois qu'il est prêt, il lit sa configuration puis choisit un périphérique et une partition où lire le noyau et éventuellement un initrd.
Et enfin il passe la main au noyau en lui donnant quelques paramètres.
<span id="more-699"></span></p>


<h3>Noyau</h3>

<p>Le noyau est déjà chargé, il n'a "presque" plus rien à faire. Si ce n'est tout initialiser&nbsp;: les interruptions, le mode du processeur, les périphériques ...</p>


<p>Une fois qu'il a fini (ou même un peu avant) il monte la racine (/) à partir de de qui lui a été spécifié en ligne de commande.</p>


<p>Et enfin il lance init en lui passant quelques paramètres provenant de sa propre ligne de commande.</p>


<p>Si un initrd est chargé, il l'utilise comme racine et prend l'init s'y trouvant. Dans ce cas il ne cherche pas à monter la racine. Sinon GoTo init.</p>


<h3>Initrd</h3>

<p>Initrd est un intermédiaire qui a été rajouté au processus de boot pour permettre le chargement dynamique de driver ainsi que la configurations de certain éléments comme le réseau ou le NFS.</p>


<p><a href="http://en.wikipedia.org/wiki/Initrd" hreflang="en">Initrd</a> est un ancien nom. En pratique, c'est maintenant un initramfs qui est chargé (c'est la même chose mais en mieux, le premier est un block device et le second une archive) avant le montage de la racine. Celui-ci est monté à la racine. Son boulot, rendre la vraie racine accessible. NFS, driver manquant, LVM, toutes les raisons sont bonnes pour utiliser un initrd.</p>


<p>Et enfin celui-ci charge le vrai init pour l'étape suivante.</p>


<h3>Init</h3>

<p>Init est cette fois un vrai processus unix lancé par le noyau, et comme c'est le premier il a pour pid 1.
Il prend <a href="/post/configuration-de-init">sa configuration</a> dans /etc/inittab.  Dans sa configuration il y a quelques processus à lancer et à surveiller, il s'agit essentiellement des terminaux locaux.</p>


<p>Mais surtout il lance /etc/init.d/rc en lui passant en paramètre le runlevel dans lequel on est sensé fonctionner.</p>


<h3>rc</h3>

<p>rc est un simple script qui a pour pour seul objectif de lancer les différents démons qu'on trouve dans /etc/rcX.d où X est un <a href="/post/course-de-niveaux">runlevel</a></p>


<p>Et voila, à partir de là on peut considérer que le système est lancé.</p>


<p>Notez que sous certains systèmes comme ubuntu on trouve des outils comme <a href="http://upstart.ubuntu.com/" hreflang="en">upstart</a> qui remplacent à la fois init et rc pour faire à peu près la même chose.</p>
	Tags:<a href="http://linux-attitude.fr/tag/materiel" title="Matériel" rel="tag">Matériel</a>, <a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/systeme" title="Système" rel="tag">Système</a>, <a href="http://linux-attitude.fr/tag/theorie" title="Théorie" rel="tag">Théorie</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/processus-de-boot/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Internet pour les amis</title>
		<link>http://linux-attitude.fr/post/internet-pour-les-amis</link>
		<comments>http://linux-attitude.fr/post/internet-pour-les-amis#comments</comments>
		<pubDate>Thu, 01 Apr 2010 21:26:16 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=692</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: Internet



Maintenant qu'on connaît Internet, faisons le voyage du petit paquet.


Prélude

Un paquet n'apparait pas subitement du néant, il vient d'une information. Prenons par exemple un concert de Johnny transmis en streaming. L'information est le son, lui-même codé sous une certaine forme, nous avons par exemple le PCM, le MP3 etc. [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: Internet</p>



<p>Maintenant qu'on connaît <a href="/post/internet-pour-toute-la-famille">Internet</a>, faisons le voyage du petit paquet.</p>


<h3>Prélude</h3>

<p>Un paquet n'apparait pas subitement du néant, il vient d'une information. Prenons par exemple un concert de Johnny transmis en streaming. L'information est le son, lui-même codé sous une certaine forme, nous avons par exemple le <a href="http://fr.wikipedia.org/wiki/Modulation_d%27impulsion_cod%C3%A9e" hreflang="fr">PCM</a>, le <a href="http://fr.wikipedia.org/wiki/MPEG-1/2_Audio_Layer_3" hreflang="fr">MP3</a> etc. Pour ceux que ca intéresse, vous pouvez étudier les <a href="http://fr.wikipedia.org/wiki/Codec" hreflang="fr">codecs</a> ou déjà <a href="http://fr.wikipedia.org/wiki/Transform%C3%A9e_de_Fourier" hreflang="fr">les transformées de Fourier</a>. Jusque là ce que sont que des maths et de la physique.</p>


<p>Une fois ces données devenues des nombres, on les code comme des suites d'octets (8 bits, mais c'est historique, pourquoi pas <a href="http://en.wikipedia.org/wiki/12-bit" hreflang="fr">12 bits</a> ou <a href="http://en.wikipedia.org/wiki/18-bit" hreflang="en">18 bits</a> ou même 7&nbsp;? mystère), on en fait des groupes de disons 1460 (totalement <a href="/post/Des-paquets-de-toutes-les-tailles">au hasard</a>) qu'on met dans un paquet.</p>


<p>Ensuite le système ajoute des informations à ce paquet, par exemple un numéro d'ordre, la taille, l'adresse de l'émetteur, ou même des trucs qui ne servent à rien. L'information la plus importante est l'adresse de destination, en IPv4 elle est de la forme 1.2.3.4</p>


<p>Le premier problème est qu'il faut deviner cette adresse, le deuxième problème est que <a href="http://www.lessignets.com/signetsdiane/calendrier/images/oct/2/arpanet_team27.jpg" hreflang="fr">les barbus</a> qui ont inventé ce protocole n'ont pas pensé qu'un jour les gens pourraient ne pas connaître l'adresse IP de la machine avec qui elles communiquent (qui ne connaît pas le numéro de téléphone des ses amis ?).</p>


<p>C'est pourquoi on a dû inventer un autre système qui permet d'obtenir cette information. Il tourne par dessus IP (ouf). Il s'agit du <a href="http://fr.wikipedia.org/wiki/Domain_Name_System" hreflang="fr">DNS</a>, un annuaire qui permet non seulement de retrouver les adresses des machines depuis un nom lisible, mais aussi qui permet de déménager sans avoir à avertir tout son carnet d'adresse.</p>


<p>Il est bien dommage que ce système n'ait pas été intégré au protocole internet, ça nous aurait évité bien des soucis, mais bon il faut faire avec.</p>


<p>Ça y est, nous avons un paquet, il est rempli avec nos données et toutes les informations nécessaires, comme une enveloppe remplie et timbrée.
<span id="more-692"></span></p>


<h3>Première sortie</h3>


<p>Et ensuite&nbsp;? On dépose l'enveloppe à la poste la plus proche. La plupart des machines connaissent l'adresse de la poste la plus proche (euh non la passerelle) grâce à <a href="http://fr.wikipedia.org/wiki/Dynamic_host_configuration_protocol" hreflang="fr">DHCP</a>, un système mis en place pour diffuser cette information.</p>


<p>Votre machine connaît l'adresse IP de la passerelle, elle utilise alors la seule carte réseau dont elle dispose pour lui envoyer directement le paquet. Si vous êtes chez vous, la poste c'est probablement votre xxxBox. Si vous êtes dans une entreprise, il s'agit d'un routeur caché quelque part derrière un bureau.</p>


<p>Dans le cas d'une yyyBox, elle ne fait qu'une chose, elle envoie le paquet aussi sec vers le seul routeur qu'elle connait, à travers un <a href="http://fr.wikipedia.org/wiki/Digital_subscriber_line_access_multiplexer" hreflang="fr">DSLAM</a> qui se trouve dans un local appartenant à France Telecom au bout de votre ligne téléphonique.</p>



<h3>L'autoroute de l'information</h3>


<p>Et c'est parti&nbsp;!
Chaque routeur est en fait un centre de tri, il dispose d'un table contenant toutes les adresses du monde (ou presque :-). En effet il est lui-même connecté à d'autres routeurs eux-même connectés à d'autres routeurs etc. Donc il prend l'enveloppe, lit d'adresse et va regarder dans sa table à quel routeur il doit envoyer le paquet. Et hop c'est reparti.</p>


<p>Ainsi mon paquet parti de chez messire Tartempion va passer entre les mains du routeur de son <a href="http://fr.wikipedia.org/wiki/Fournisseur_d%27acc%C3%A8s_%C3%A0_Internet" hreflang="fr">FAI</a>, puis de celui d'un ami de son FAI, puis d'un transitaire qui fait payer cet ami, puis d'un autre routeur ami de mon FAI, puis d'un routeur de mon FAI avant d'arriver chez moi.</p>


<p>Comment ces routeurs peuvent-ils avoir toutes ces informations&nbsp;? Tout simplement grâce à un protocole nommé <a href="http://fr.wikipedia.org/wiki/Border_Gateway_Protocol" hreflang="fr">BGP</a>. Il permet aux routeurs de s'échanger des messages pour connaître la table de leurs voisins, et donc savoir à qui ils peuvent envoyer des paquets. Les routeurs appartenant souvent à des personnes différentes, le protocole BGP permet d'appliquer une stratégie de décision choisie par le propriétaire. Par exemple "X ne me paie pas bien, essaie d'abord de passer par Y à moins que ce ne soit impossible".</p>


<p>Les propriétaires de ces routeurs s'appellent des <a href="http://fr.wikipedia.org/wiki/Autonomous_System" hreflang="fr">AS</a>. Mais un propriétaire donné peut avoir plusieurs routeurs. Ces routeurs communiquent entre eux, mais cette fois sans arrière pensée politique et donc utilisent un protocole différent, comme par exemple <a href="http://fr.wikipedia.org/wiki/Open_shortest_path_first" hreflang="fr">OSPF</a>.</p>



<h3>L'arrivée</h3>


<p>Et enfin le dernier routeur de la chaîne, le facteur va me délivrer le paquet.</p>


<p>Ma machine va ouvrir l'enveloppe et récupérer le contenu du paquet. Elle va aussi tenter de mémoriser quelques informations comme l'adresse de retour, pour au cas où ...</p>


<p>Si ma machine fait tourner un logiciel qui comprend les paquets envoyés par messire Tartempion, alors elle va pouvoir lire le paquet et récupérer les divers nombres qu'il contient, puis hop, mathématiques, physique, Fourier, codecs, on retrouve 1ms de Johnny.</p>



<h3>Postlude</h3>


<p>Voilà ce qu'on appelle l'autoroute de l'information. Plusieurs choses sont importantes sur cette autoroute.</p>


<p>Tout d'abord il y a généralement un péage qui permet de l'entretenir. C'est votre abonnement à internet. Mais ensuite personne ne vous demande ce que vous transportez, ça peut être du vin ou une lettre d'amour, l'important est uniquement d'arriver à bon port. C'est ce qu'on appelle la neutralité du net. Pas de filtrage, pas de discrimination, peut-être aura-t-on un jour une haute autorité de lute contre les discriminations sur internet&nbsp;!</p>


<p>Ensuite tout le monde doit parler le même format de paquet pour se comprendre. Et ce format n'appartient à personne. Si chacun parlait son propre format, ce ne serait pas internet.</p>


<p>Enfin internet est fait de toutes les machines connectées à internet. Si personne ne se connecte, si personne n'envoie de paquet, internet n'existe pas.</p>


<h3>Et l'ipv6 dans tout ca&nbsp;!</h3>


<p>Hé bien, c'est justement un autre format de paquet, avec des adresses différentes. C'est donc un autre réseau, on pourrait l'appeler internet 2 ou alternet si ce n'était pas déjà pris. Et c'est pour cette raison qu'IPv6 ne marche pas. Lorsqu'on parle de passer à IPv6, on ne parle pas de mettre à jour un logiciel, mais de se connecter à un nouveau réseau, un autre, différent. Ce sera donc très très long, comme de passer du français à l'espéranto. Comme de passer du téléphone à internet.</p>
	Tags:<a href="http://linux-attitude.fr/tag/theorie" title="Théorie" rel="tag">Théorie</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/internet-pour-les-amis/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Internet pour toute la famille</title>
		<link>http://linux-attitude.fr/post/internet-pour-toute-la-famille</link>
		<comments>http://linux-attitude.fr/post/internet-pour-toute-la-famille#comments</comments>
		<pubDate>Tue, 30 Mar 2010 21:10:55 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/?p=690</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: Internet


Qu'est-ce qu'Internet&#160;? Cette question, dont la réponse parait évidente à beaucoup n'est pas facile à expliquer.


Internet expliqué à ma mère


Et plutôt que d'expliquer ce qu'est Internet, je vais plutôt expliquer
comment marche Internet, car c'est son fonctionnement qui le définit.


Internet est un ensemble de réseaux (net) interconnectés (inter) grâce au [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: Internet</p>


<p>Qu'est-ce qu'Internet&nbsp;? Cette question, dont la réponse parait évidente à beaucoup n'est pas facile à expliquer.</p>


<h4>Internet expliqué à ma mère</h4>


<p>Et plutôt que d'expliquer ce qu'est Internet, je vais plutôt expliquer
comment marche Internet, car c'est son fonctionnement qui le définit.</p>


<p>Internet est un ensemble de réseaux (net) interconnectés (inter) grâce au protocole IP (internet protocol) aussi appelé IPv4.
Ce protocole ne fait qu'une seule chose (et le fait bien :-), transférer des informations (mail, télévision ...) sous forme de petits paquet d'un appareil à un autre.</p>


<p>Internet est caractérisé par le fait que tout internet est accessible par
tout internet. Si mon téléphone est connecté à internet alors internet est connecté à mon téléphone. S'il peut envoyer un paquet sur internet
(par exemple 1s de musique), on peut aussi lui envoyer un paquet depuis internet.</p>


<p>Donc pour que mon appareil soit sur internet il lui faut seulement 2
choses&nbsp;:</p>
<ul>
<li>parler le protocole IP</li>
<li>être connecté à internet</li>
</ul>

<p>Internet ce n'est que ça. Mais il y a beaucoup d'autres choses à dire sur internet.</p>


<h4>Internet expliqué à mon père</h4>


<p>Sur internet on trouve énormément de choses. Malheureusement la plupart
des gens n'en connaissent qu'une, le web, j'y reviendrai.</p>


<p>Sur internet il on trouve&nbsp;:</p>
<ul>
<li>les emails&nbsp;: un email est découpé en petits paquets qui sont envoyés par IP à une autre machine qui va les stocker dans un coin en attendant que l'utilisateur vienne les chercher</li>
<li>le téléphone&nbsp;: les applications comme skype ou ekiga découpent votre voix en petits paquets et les envoient à un autre appareil sur internet</li>
<li>le peer to peer&nbsp;: ce sont les applications qui profitent le plus du concept d'internet, tout ce qu'on y trouve y est découpé en petits  paquets qui sont transférés à de multiples personnes, ces personnes peuvent alors enregistrer ces paquets et les retransmettre à d'autres personnes, le nombre de personnes connectées en permanence fait que la plupart de ces paquets sont toujours disponibles</li>
<li>la messagerie instantanée&nbsp;: chaque message est mis dans un paquet et envoyé au destinataire</li>
</ul>
<p><span id="more-690"></span></p>


<p>On y trouve aussi quelques autres service un peu moins visibles&nbsp;:</p>
<ul>
<li>les news&nbsp;: un système de diffusion de messages au monde entier</li>
<li>irc&nbsp;: un système de communication instantané fonctionnant par groupes de discussion</li>
<li>ssh&nbsp;: un système de prise de contrôle à distance d'appareils</li>
<li>...&nbsp;: il y en a des milliers, il m'est impossible de tous les citer ici</li>
</ul>


<h4>Internet expliqué à ma fille</h4>


<p>Comme je le disais, sur internet on trouve le web, c'est l'univers le plus connu du grand public. Le web fonctionne grâce à des logiciels comme firefox ou chrome et des serveurs eux aussi connectés à internet. Ce logiciels font plusieurs choses (donc pas toujours forcément bien :-), ils prennent une adresse que vous leur indiquez et vont trouver le serveur correspondant et lui demandent la page web. Celle-ci est renvoyée par le serveur, découpée en petits paquets, comme d'habitude.</p>


<p>Une fois récupérée cette page est affichée par le navigateur. Elle peut
contenir énormément de choses, ça peut être la page de google, ça peut être votre page facebook ... il y en a des milliards.</p>


<p>Et comme internet est internet, il suffit d'être connecté à internet pour
voir ces pages. Sauf bien sûr s'il y a un système de protection mis en
place spécialement pour n'autoriser que l'accès à certaines personnes, comme pour un compte twitter.</p>



<h4>Internet expliqué à mon fils</h4>


<p>Voila, c'est tout, Internet c'est comme un bar, on y trouve
de tout, il y a un groupe qui chante sur scène et pendant ce temps un couple se forme à une table, d'un côté quelqu'un téléphone à sa femme
pendant que de l'autre un groupe de discussion se forme.</p>


<p>Internet c'est un bar à l'échelle de la planète. Mais ce n'est qu'un bar.
Il ne sert à rien de le fermer, on ne put empêcher aux gens de discuter, par contre il est possible d'écouter le voisin, d'intercepter ses conversations ...</p>


<p>La prochaine fois nous passerons à une version légèrement plus technique.</p>
	Tags:<a href="http://linux-attitude.fr/tag/theorie" title="Théorie" rel="tag">Théorie</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/internet-pour-toute-la-famille/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>La domination du HTTP</title>
		<link>http://linux-attitude.fr/post/la-domination-du-http</link>
		<comments>http://linux-attitude.fr/post/la-domination-du-http#comments</comments>
		<pubDate>Fri, 06 Feb 2009 18:21:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Paul et Mickey]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Réseau]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/la-domination-du-http</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: HTTP


HTTP règne en maître dans le monde des protocoles. C'est le plus utilisé et il n'est pas près de lâcher sa place. Je vais vous rappeler pourquoi.


Les protocoles


Dans le monde des protocoles il y a plusieurs couches.


Partons de la couche 3&#160;: IP. Ce protocole est internet à lui tout [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: HTTP</p>


<p>HTTP règne en maître dans le monde des protocoles. C'est le plus utilisé et il n'est pas près de lâcher sa place. Je vais vous rappeler pourquoi.</p>


<h3>Les protocoles</h3>


<p>Dans le monde des protocoles il y a plusieurs <a href="/post/Des-lutins-partout">couches</a>.</p>


<p>Partons de la couche 3&nbsp;: IP. Ce protocole est internet à lui tout seul. Personne ne parviendra à le détrôner si ce n'est lui-même (IPv6). Les autres protocoles de niveaux 3 viables visent des niches ou du à-peine-réseau (bluetooth ou usb collent aussi au modèle osi).</p>


<p>Sur la couche 4 on trouve TCP et UDP, qui ont très peu de concurrents. Il en existe, mais ils sont rares car difficiles à développer (il faut toucher au noyau sous linux si on veut faire propre et efficace).</p>


<p>Sur la couche 5 on trouve des milliers de protocoles, ils sont faciles à développer (en espace utilisateur) et donc courants. Et pourtant, on constate que sur internet un très petit nombre d'entre eux sont utilisés en masse&nbsp;: DNS, SMTP, HTTP. Les autres POP, IMAP, FTP, SSH ... sont utilisés mais commencent à se faire anecdotiques.
Pourquoi&nbsp;?</p>


<h3>HTTP</h3>


<p>HTTP est de loin de plus utilisé parce que de plus en plus de services se basent directement sur HTTP plutôt que d'inventer leur protocole. Et ils ont de très bonnes raisons pour ça&nbsp;:</p>
<ul>
<li>ne pas réinventer la roue, des bibliothèques et des serveurs existent déjà</li>
<li>HTTP est autorisé à traverser quasiment tous les firewalls</li>
<li>il traverse le NAT</li>
<li>il est capable de supporter la déconnexion (il fonctionne en mode non connecté)</li>
<li>le SSL est déjà implémenté</li>
<li>l'authentification est déjà implémentée</li>
<li>il est possible de développer rapidement une preuve de concept avec apache et un langage de script</li>
<li>il utilise une API très simple&nbsp;: question -&gt; réponse</li>
</ul>

<p>Du coup on le retrouve dans&nbsp;:</p>
<ul>
<li>les sites web (ouf)</li>
<li>le transfert de fichier</li>
<li>les systèmes de fichiers (webdav)</li>
<li>les appels de fonction à distance (XMLRPC)</li>
<li>la gestion de calendrier (caldav)</li>
<li>l'interconnexion de services (SOAP)</li>
<li>les applications distantes (ajax)</li>
<li>la communication instantanée (Jabber)</li>
<li>et j'en oublie ...</li>
</ul>

<p>Mais pourquoi une telle domination sur tous les autres protocoles&nbsp;? Ce n'est pas seulement grâce à l'omniprésence des navigateurs. Tout d'abord HTTP propose déjà un certain nombre de services (voir plus haut) qui ne sont plus à redévelopper. Mais surtout, regardons ses concurrents&nbsp;:</p>
<ul>
<li>SMTP</li>
<li>DNS</li>
<li>RPC</li>
<li>SNMP</li>
<li>Et c'est tout&nbsp;!</li>
</ul>

<p>Oui c'est tout, en effet, ce sont à peu près les seuls protocoles qui ont été prévus pour être extensibles et disposer d'une couche supérieure. Ils fonctionnent tous sur le système question réponse et laissent le soin à la couche du dessus d'interpréter le sens des questions et des réponses&nbsp;:</p>
<ul>
<li>DNS&nbsp;: basé sur UDP, non fiable, limité en taille -&gt; éliminé</li>
<li>SNMP&nbsp;: idem, même s'il existe une version TCP -&gt; éliminé</li>
<li>RPC&nbsp;: format binaire difficile à mettre en place -&gt; éliminé</li>
<li>SMTP&nbsp;: il est difficile de récupérer autre chose que des codes d'erreur en SMTP puisqu'il est fait pour l'envoi -&gt; éliminé</li>
</ul>

<p>Si on veut développer une nouvelle application qui communique par le réseau, on a le choix entre inventer un nouveau protocole ou simplement créer une sémantique de question / réponse au dessus de HTTP et profiter de tous ses avantages. Les rares cas où ce n'est pas possible&nbsp;:</p>
<ul>
<li>besoin de données en temps réel (et encore le débit augmentant, HTTP peut faire RTSP du pauvre)</li>
<li>besoin de la notion d'évènement du serveur vers le client (et encore, certaines bidouilles HTTP laissant la connexion ouverte permettent ce comportement)</li>
<li>besoin de multicast ou de fonctionnalités encore exotiques aujourd'hui</li>
</ul>

<h3>Conclusion</h3>


<p><del>Le HTTP c'est LE protocole, celui qui remplace le TCP d'hier.</del>
Le TCP n'est plus ce qu'il était, c'est à dire la couche sur laquelle on se base pour développer un nouveau protocole.
Vous pouvez être sûr qu'il y a encore des milliers de protocoles à inventer, mais vous pouvez aussi être sur que la plupart d'entre eux se baseront sur HTTP. D'ailleurs celui-ci étant extensible, il est probable qu'il évolue un jour pour être un peu plus générique et apporter des réponses aux problèmes qui se posent dans certains cas comme les évènements.</p>


<p>On ne devrait plus parler de TCP/IP mais de HTTP/TCP/IP. Finalement, on se rapproche du <a href="/post/Des-lutins-partout">modèle OSI</a>.</p>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/reseau" title="Réseau" rel="tag">Réseau</a>, <a href="http://linux-attitude.fr/tag/theorie" title="Théorie" rel="tag">Théorie</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/la-domination-du-http/feed</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Cryptologie</title>
		<link>http://linux-attitude.fr/post/cryptographie</link>
		<comments>http://linux-attitude.fr/post/cryptographie#comments</comments>
		<pubDate>Fri, 16 Jan 2009 18:57:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/cryptographie</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: crypto


Vocabulaire


Avant de pouvoir parler de sécurisation des communications, il faut avoir quelques bases en cryptographie. Commençons par le vocabulaire&#160;:


Coder&#160;: transformer une information en code (par exemple numériser une photo, écrire en morse ou en ASCII)
Chiffrer&#160;: transformer une information codée de façon à la rendre illisible à une autre personne [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: crypto</p>


<h3>Vocabulaire</h3>


<p>Avant de pouvoir parler de sécurisation des communications, il faut avoir quelques bases en cryptographie. Commençons par le vocabulaire&nbsp;:</p>

<ul>
<li><strong>Coder</strong>&nbsp;: transformer une information en code (par exemple numériser une photo, écrire en morse ou en ASCII)</li>
<li><strong>Chiffrer</strong>&nbsp;: transformer une information codée de façon à la rendre illisible à une autre personne que son destinataire</li>
<li><strong>Déchiffrer</strong>&nbsp;: lire un document chiffré avec les informations nécessaires pour le faire</li>
<li><strong>Décrypter</strong>&nbsp;: tenter de lire un document chiffré sans avoir la clé de déchiffrement</li>
<li><strong>Signer</strong>&nbsp;: ajouter une information à un document prouvant qu'il a bien été écrit/lu par son auteur/lecteur sous cette forme et n'a pas été modifié</li>
<li><strong>Empreinte</strong>&nbsp;: somme de contrôle d'un message (MD5, SHA) en cryptographie on cherche à faire en sorte qu'il soit impossible de créer un message ayant une empreinte donnée</li>
<li><strong>Cryptanalyse</strong>&nbsp;: études des attaques permettant de décrypter un message ou de casser un chiffrement</li>
<li><strong>Cryptographie</strong>&nbsp;: étude des systèmes de protection de messages</li>
<li><strong>Cryptologie</strong>&nbsp;: ensemble de la cryptographie et de la cryptanalyse</li>
<li>Crypter&nbsp;: ce mot n'existe pas</li>
</ul>


<h4>Entropie</h4>


<p>L'entropie est une mesure de la quantité d'information. Cette mesure n'est pas absolue, elle est relative à une quantité d'information possible.</p>


<p>Par exemple un octet est une valeur parmi 256. Un octet vraiment aléatoire (avec une répartition linéaire) a donc une entropie de 8. En pratique on ne cherche que rarement la valeur d'une entropie. On chercher plutôt à comparer obtenir des propriété sur l'entropie.</p>


<p>Par exemple prenons une suite de 5 octets. Si je peux déduire les 4 dernier octets à partir du premier (2*x 4*x 8*x 16*x), alors leur entropie est la même que celle d'un seul octet.</p>


<p>Maintenant si cette suite est véritablement aléatoire (tirée aux dés non pipés), l'entropie devient 5 fois plus grande.</p>


<p>Et enfin si cette suite n'est pas vraiment aléatoire, c'est-à-dire tirée avec un générateur pseudo aléatoire (/dev/urandom), alors leur entropie est égale à l'entropie du générateur pseudo aléatoire. Celle-ci se mesure par la taille de l'état interne du générateur.</p>


<p>Il est important de bien saisir cette notion pour comprendre la sécurité des algorithmes.</p>


<h4>Entropie mesurée</h4>


<p>Lorsque nous générons une suite d'octets, nous pouvons connaître l'entropie des données (et encore ...).</p>


<p>Lorsque nous récupérons des données, l'entropie n'est pas mesurable. Mais elle est estimable. En effet, pour une grande suite d'octets, si celle-ci est compressible, cela veut dire qu'il existe une technique pour déduire certains octets à partir des autres. L'entropie est donc très (le très variant en fonction du nombre d'octets considérés) probablement inférieure à la taille de la version compressée.</p>


<p>Pour tout système on peut donc chercher à en réduire l'entropie en éliminant des informations qui n'en sont pas vraiment. C'est le travail que font les gens qui développement des codecs (audio, vidéo ...).</p>



<h4>Espace de chiffrement</h4>


<p>L'espace de chiffrement est le nombre de tests que l'on doit effectuer pour en découvrir la clé de chiffrement d'un système. Si le système de chiffrement était parfait, il serait de la même taille que la clé. Malheureusement, on sait que la perfection n'existe pas.</p>


<p>Les études successives d'un système permettent souvent de réduire cet espace. Soit grâce à des informations obtenues par des moyens détournés (sous partie de la clé disponible, comparaison possible de texte clair et de texte chiffré ...), soit par une faiblesse du système qui va réduire sa propre entropie (ce cas est assez rare).</p>



<h4>Sécurité</h4>


<p>La sécurité d'un système s'estime à partir de cet espace de chiffrement. Plus il est grand, plus une machine devra mettre de temps pour trouver la clé de chiffrement et plus le système va être sûr.</p>


<p>Attention tout de même, ce n'est pas parce qu'un système de chiffrement est sûr que vos données le sont.</p>



<p>Et la littérature est abondantes sur le sujet, wikipedia n'est pas le seul à proposer des informations.</p>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/securite" title="Sécurité" rel="tag">Sécurité</a>, <a href="http://linux-attitude.fr/tag/theorie" title="Théorie" rel="tag">Théorie</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/cryptographie/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Signature</title>
		<link>http://linux-attitude.fr/post/signature</link>
		<comments>http://linux-attitude.fr/post/signature#comments</comments>
		<pubDate>Wed, 14 Jan 2009 18:15:00 +0000</pubDate>
		<dc:creator>peck</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[planet-libre]]></category>
		<category><![CDATA[Sécurité]]></category>
		<category><![CDATA[Théorie]]></category>

		<guid isPermaLink="false">http://linux-attitude.fr/post/signature</guid>
		<description><![CDATA[Niveau&#160;:     
Résumé&#160;: RSA&#160;; DSA


La suite ... la suite ... Aujourd'hui les signatures.


Non il ne s'agit pas du petit gribouillis que vous mettez en bas des chèques. Il s'agit de signature numérique. Et ce n'est pas non plus une image scannée de votre gribouillis. Même si le but de la signature numérique [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Niveau</strong>&nbsp;: <img src="/public/Pics/s.gif" alt="Star" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /> <img src="/public/Pics/e.gif" alt="Empty" /><br />
<strong>Résumé</strong>&nbsp;: RSA&nbsp;; DSA</p>


<p>La suite ... la suite ... Aujourd'hui les signatures.</p>


<p>Non il ne s'agit pas du petit gribouillis que vous mettez en bas des chèques. Il s'agit de signature numérique. Et ce n'est pas non plus une image scannée de votre gribouillis. Même si le but de la signature numérique est la même, il s'agit de présenter une preuve (presque) infalsifiable du fait que vous avez bien lu, voire écrit un message.</p>


<p>En fait la signature ne fait que vous identifier, prouver que c'est bien vous qui étiez là. Le sens même de la signature dépend du document signé (chèque, article scientifique, patch ...)</p>


<h3>Principe</h3>


<p>Un document signé numériquement doit assurer deux choses&nbsp;:</p>
<ul>
<li>Que le document transmis n'a pas été modifié depuis que vous l'avez lu</li>
<li>Que c'est bien vous qui avez lu / écrit / approuvé ce document, c'est-à-dire
<ul>
<li>que ce n'est pas quelqu'un d'autre</li>
<li>que vous l'avez bien fait</li>
</ul></li>
</ul>

<p>C'est la combinaison de deux choses qui va permettre cela&nbsp;:</p>
<ul>
<li>Une fonction de hachage à sens unique</li>
<li>Un algorithme à clé publique</li>
</ul>

<p>La première garantit que le document correspond à une empreinte et qu'on ne produire de document modifié ayant la même empreinte.
Le deuxième garantit que la signature ne peut être générée à partir d'une empreinte différente, si ce n'est par le signataire.</p>


<p>Par conséquent, on prouve que c'est bien <strong>le propriétaire de la clé</strong> concernée qui a <strong>signé</strong> le document.</p>


<p>Attention, seule la combinaison document - empreinte - signature le prouve. Ce qui veut dire qu'il est toujours possible de supprimer un élément pour empêcher de prouver que vous l'avez signé (non monsieur le juge, il n'y a pas de preuve que j'ai signé ce chèque).  Dans le même ordre d'idée, seule la signature de la clé prouve que celle-ci vous appartient et donc que c'est bien vous l'auteur de la signature. C'est donc au destinataire de conserver ces données s'il veut un jour pouvoir fournir la preuve que vous avez signé le document.</p>


<h3>Authentification</h3>


<p>La signature permet l'authentification. Supposons que vous vouliez vous authentifier sur un serveur. Il suffit que le serveur vous envoie un challenge (un message) que vous devrez signer. Il va alors vérifier la signature (et les certificats qui vont avec) et vous serez authentifié.</p>


<h3>Algorithmes</h3>

<h4>Hachage</h4>


<p>On utilise une fonction de hachage qu'on considère comme sûre (donc éviter md5). Voir <a href="/post/Fonction-de-hachage">l'article précédent</a>.</p>


<h4>RSA</h4>


<p>Pour la partie signature à clé publique, on utilise souvent le RSA comme expliqué dans un <a href="/post/Cle-publique">article précédent</a>.</p>


<h4>DSA</h4>


<p>Un autre algorithme est fréquemment utilisé pour les signatures, il s'agit du DSA (Digital Signature Algorithm). Cet algorithme à clé publique a été développé pour ne fonctionner que dans le mode signature.</p>


<p>Il n'est ni plus ni moins sécurisé que le RSA, il est juste différent. Il utilise des formules mathématiques similaires au RSA et n'est pas plus difficile à comprendre que celui-ci.</p>
	Tags:<a href="http://linux-attitude.fr/tag/planet-libre" title="planet-libre" rel="tag">planet-libre</a>, <a href="http://linux-attitude.fr/tag/securite" title="Sécurité" rel="tag">Sécurité</a>, <a href="http://linux-attitude.fr/tag/theorie" title="Théorie" rel="tag">Théorie</a><br />
]]></content:encoded>
			<wfw:commentRss>http://linux-attitude.fr/post/signature/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using disk
Page Caching using apc (user agent is rejected)
Database Caching 7/30 queries in 0.032 seconds using apc

Served from: linux-attitude.fr @ 2010-07-31 04:29:32 -->