{"id":800,"date":"2013-02-11T00:33:32","date_gmt":"2013-02-10T22:33:32","guid":{"rendered":"http:\/\/blog.nebule.org\/?p=800"},"modified":"2016-03-29T19:03:46","modified_gmt":"2016-03-29T17:03:46","slug":"introduction-a-la-cryptographie","status":"publish","type":"post","link":"https:\/\/blog.nebule.org\/?p=800","title":{"rendered":"Introduction \u00e0 la cryptographie"},"content":{"rendered":"<p style=\"text-align: justify;\">Une avanc\u00e9e importante reste encore \u00e0 faire. Elle est en th\u00e9orie tout \u00e0 fait r\u00e9alisable et indispensable. Mais la mise en pratique doit se faire avec soin. Cette avanc\u00e9e, c&rsquo;est le chiffrement des objets.<\/p>\n<p style=\"text-align: justify;\">Ce chiffrement est optionnel. Il doit \u00eatre r\u00e9sistant, c&rsquo;est \u00e0 dire correspondre \u00e0 l&rsquo;\u00e9tat de l&rsquo;art en cryptographie appliqu\u00e9e. On doit \u00eatre en mesure de parfaitement distinguer l&rsquo;objet en clair de l&rsquo;objet chiffr\u00e9, m\u00eame si le second est d\u00e9riv\u00e9 du premier.<\/p>\n<p style=\"text-align: justify;\">Ceci est une proposition de travail.<\/p>\n<h2 style=\"text-align: justify;\">Deux \u00e9tapes de chiffrement<\/h2>\n<p style=\"text-align: justify;\">Les entit\u00e9s sont des objets contenant le mat\u00e9riel cryptographique n\u00e9cessaire au chiffrement asym\u00e9trique. Cependant, le chiffrement asym\u00e9trique est tr\u00e8s consommateur en ressources CPU (calcul). On peut l&rsquo;utiliser directement pour chiffrer les objets avec la cl\u00e9 publique d&rsquo;un correspondant, mais cela devient rapidement catastrophique en terme de performances et donc en exp\u00e9rience utilisateur. D&rsquo;un autre c\u00f4t\u00e9, le chiffrement sym\u00e9trique est beaucoup plus performant, mais sa gestion des cl\u00e9s de chiffrement est d\u00e9licate. Pour am\u00e9liorer l&rsquo;ensemble, on mixe les deux. On essaie de profiter des avantages de chacun tout en r\u00e9duisant les d\u00e9fauts.<\/p>\n<p style=\"text-align: justify;\">Ainsi, on va aborder le chiffrement en deux \u00e9tapes distinctes. Voici le sch\u00e9ma de l&rsquo;ensemble que l&rsquo;on va d\u00e9composer.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.nebule.org\/?attachment_id=822\" rel=\"attachment wp-att-822\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-medium wp-image-822\" title=\"20130209 nebule - schema crypto\" src=\"http:\/\/blog.nebule.org\/wp-uploads\/nebule\/2013\/02\/20130209-nebule-schema-crypto-300x158.png\" alt=\"\" width=\"300\" height=\"158\" \/><\/a><\/p>\n<p style=\"text-align: justify;\">Pour la compr\u00e9hension, ne pas oublier que les propri\u00e9t\u00e9s des objets sont elles-m\u00eames des objets&#8230;<\/p>\n<p style=\"text-align: justify;\"><!--more--><\/p>\n<h2 style=\"text-align: justify;\">\u00c9tape chiffrement sym\u00e9trique<\/h2>\n<p style=\"text-align: justify;\">Le chiffrement d&rsquo;un objet peut prendre du temps, surtout si il est volumineux. On va donc privil\u00e9gier le chiffrement sym\u00e9trique qui est assez rapide. Nous avons besoin pour ce chiffrement de deux valeurs.<\/p>\n<p style=\"text-align: justify;\">La premi\u00e8re valeur est une cl\u00e9 de chiffrement. Elle est dite cl\u00e9 de session. La longueur de celle-ci d\u00e9pend de l&rsquo;algorithme de chiffrement utilis\u00e9. Par exemple, elle fait 128bits pour l&rsquo;AES. Elle est g\u00e9n\u00e9r\u00e9e al\u00e9atoirement. C&rsquo;est cette valeur qui va permettre le d\u00e9chiffrement de l&rsquo;objet et doit donc rester secr\u00e8te. Mais il faut pouvoir la partager avec ses correspondants, c&rsquo;est ce que l&rsquo;on verra dans la deuxi\u00e8me \u00e9tape.<\/p>\n<p style=\"text-align: justify;\">La seconde valeur est ce que l&rsquo;on appelle une semence ou vecteur initial (IV = Initial Vector). Elle est utilis\u00e9e dans la m\u00e9thode de chiffrement sur plusieurs blocs, c&rsquo;est \u00e0 dire lorsque l&rsquo;on chiffre un objet dont la taille d\u00e9passe le bloc, quantit\u00e9 de donn\u00e9es que traite l&rsquo;algorithme de chiffrement. Par exemple, le bloc fait 128bits pour l&rsquo;AES, tout ce qui fait plus que cette taille doit \u00eatre trait\u00e9 en plusieurs fois.<br \/>\nComme IV, je propose d&rsquo;utiliser l&rsquo;identifiant de l&rsquo;objet \u00e0 chiffrer, c&rsquo;est \u00e0 dire le hash de cet objet. Cela simplifie la diffusion de cette valeur qui n&rsquo;a pas \u00e0 \u00eatre dissimul\u00e9e.<\/p>\n<p style=\"text-align: justify;\">L&rsquo;objet source que l&rsquo;on voulait \u00e0 l&rsquo;origine prot\u00e9ger peut maintenant \u00eatre marqu\u00e9 \u00e0 supprimer. Il pourra \u00eatre restaur\u00e9 depuis l&rsquo;objet d\u00e9riv\u00e9 chiffr\u00e9 et la cl\u00e9 de session.<\/p>\n<p style=\"text-align: justify;\">Sur le sch\u00e9ma ci-dessous, la partie chiffrement sym\u00e9trique est mise en valeur.<br \/>\nOn retrouve l&rsquo;objet source en clair qui est ici une image de type JPEG. En chiffrant cet objet, cela g\u00e9n\u00e8re un nouvel objet. Le chiffrement est mat\u00e9rialis\u00e9 par un lien de type K. Ce lien associe aussi un objet contenant la cl\u00e9 de session. Le nouvel objet est de type AES-CTR, par exemple. Cela signifie qu&rsquo;il est chiffr\u00e9 avec le protocole AES et la gestion des blocs CTR (CounTeR). L&rsquo;objet contenant la cl\u00e9 de session est de type texte.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.nebule.org\/?attachment_id=819\" rel=\"attachment wp-att-819\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-819\" title=\"20130209 nebule - schema crypto - sym\" src=\"http:\/\/blog.nebule.org\/wp-uploads\/nebule\/2013\/02\/20130209-nebule-schema-crypto-sym-1024x539.png\" alt=\"\" width=\"800\" height=\"421\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">\u00c9tape chiffrement asym\u00e9trique<\/h2>\n<p style=\"text-align: justify;\">Suite \u00e0 la premi\u00e8re \u00e9tape de chiffrement, nous nous retrouvons avec un objet chiffr\u00e9 et un objet contenant la cl\u00e9 de session. Si le fichier chiffr\u00e9 est bien prot\u00e9g\u00e9 (en principe) et peut donc \u00eatre rendu public, l&rsquo;objet avec la cl\u00e9 de session est au contraire bien embarrassant. C&rsquo;est l\u00e0 qu&rsquo;intervient le chiffrement asym\u00e9trique et les cl\u00e9s publiques\/priv\u00e9es.<\/p>\n<p style=\"text-align: justify;\">Le syst\u00e8me de cl\u00e9s publiques\/priv\u00e9es va permettre de chiffrer l&rsquo;objet contenant la cl\u00e9 de session avec la cl\u00e9 publique d&rsquo;une entit\u00e9. Ainsi on permet \u00e0\u00c2\u00a0cette entit\u00e9, c&rsquo;est \u00e0 dire le destinataire, de r\u00e9cup\u00e9rer la cl\u00e9 de session avec sa cl\u00e9 priv\u00e9 et donc de lire l&rsquo;objet source. Et plus encore, en re-chiffrant cette m\u00eame cl\u00e9 de session avec d&rsquo;autres cl\u00e9s publiques, ce qui g\u00e9n\u00e8re autant d&rsquo;objets de cl\u00e9s chiffr\u00e9s, nous permettons \u00e0 autant de nouvelles entit\u00e9s de lire l&rsquo;objet source.<\/p>\n<p style=\"text-align: justify;\">Il faut penser \u00e0 se mettre parmi les entit\u00e9s destinataires si l&rsquo;on souhaite pouvoir d\u00e9chiffrer l&rsquo;objet source plus tard. Sinon, il passe int\u00e9gralement sous le contr\u00f4le d&rsquo;une des entit\u00e9s destinataires.<\/p>\n<p style=\"text-align: justify;\">Sur le sch\u00e9ma ci-dessous, la partie chiffrement asym\u00e9trique est mise en valeur.<br \/>\nOn retrouve l&rsquo;objet en clair qui est ici la cl\u00e9 des session. En chiffrant cet objet, cela g\u00e9n\u00e8re un nouvel objet. Le chiffrement est mat\u00e9rialis\u00e9 par un lien de type K. Ce lien associe aussi un objet contenant la cl\u00e9 publique d&rsquo;une entit\u00e9. Le nouvel objet est de type RSA.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.nebule.org\/?attachment_id=821\" rel=\"attachment wp-att-821\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-821\" title=\"20130209 nebule - schema crypto - asym\" src=\"http:\/\/blog.nebule.org\/wp-uploads\/nebule\/2013\/02\/20130209-nebule-schema-crypto-asym-1024x539.png\" alt=\"\" width=\"800\" height=\"421\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Ensemble du processus<\/h2>\n<p style=\"text-align: justify;\">\u00c9videmment, ce sch\u00e9ma de chiffrement ne r\u00e9-invente pas la roue. C&rsquo;est une fa\u00e7on de faire assez commune, voire un cas d&rsquo;\u00e9cole. Mais il est ici adapt\u00e9 au fonctionnement particulier de nebule et de ses objets.<\/p>\n<p style=\"text-align: justify;\">Il y a deux points \u00e0 v\u00e9rifier :<br \/>\n&#8211; Partager l&rsquo;objet chiffr\u00e9 et permettre \u00e0 une autre entit\u00e9 de le voir, c&rsquo;est aussi lui donner acc\u00e8s \u00e0 la cl\u00e9 de session. Rien n&#8217;emp\u00eache cette entit\u00e9 de rediffuser ensuite cette cl\u00e9 de session en clair ou re-chiffr\u00e9e \u00e0 d&rsquo;autres entit\u00e9s. Cependant, la cl\u00e9 de session est unique et n&rsquo;a pas de valeur en dehors de l&rsquo;objet chiffr\u00e9 qu&rsquo;elle prot\u00e8ge. De m\u00eame, l&rsquo;objet source peut toujours \u00eatre re-chiffr\u00e9 avec une nouvelle cl\u00e9 de session et d&rsquo;autres cl\u00e9s publiques. On retombe sur un probl\u00e8me commun, insoluble et le m\u00eame constat : on perd automatiquement le contr\u00f4le de toute information que l&rsquo;on diffuse \u00e0 autrui.<br \/>\n&#8211; L&#8217;empreinte (hash) de la cl\u00e9 de session est publique. Peut-\u00eatre que cela affaiblie le chiffrement et donc la solidit\u00e9 de la protection des objets. A voir&#8230;<\/p>\n<p style=\"text-align: justify;\">Par commodit\u00e9, je pense qu&rsquo;il serait int\u00e9ressant de lier explicitement l&rsquo;entit\u00e9 destinataire et l&rsquo;objet chiffr\u00e9.<\/p>\n<p style=\"text-align: center;\"><a href=\"http:\/\/blog.nebule.org\/?attachment_id=822\" rel=\"attachment wp-att-822\"><img decoding=\"async\" loading=\"lazy\" class=\"alignnone size-large wp-image-822\" title=\"20130209 nebule - schema crypto\" src=\"http:\/\/blog.nebule.org\/wp-uploads\/nebule\/2013\/02\/20130209-nebule-schema-crypto-1024x539.png\" alt=\"\" width=\"800\" height=\"421\" \/><\/a><\/p>\n<h2 style=\"text-align: justify;\">Conclusion<\/h2>\n<p style=\"text-align: justify;\">Bas\u00e9 sur un fonctionnement commun \u00e0 nombre d&rsquo;outils de cryptographie, le sch\u00e9ma de fonctionnement du chiffrement est transposable \u00e0 nebule. Reste maintenant \u00e0 en faire l&rsquo;impl\u00e9mentation logicielle et \u00e0 le tester en pratique.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Une avanc\u00e9e importante reste encore \u00e0 faire. Elle est en th\u00e9orie tout \u00e0 fait r\u00e9alisable et indispensable. Mais la mise en pratique doit se faire avec soin. Cette avanc\u00e9e, c&rsquo;est le chiffrement des objets. Ce chiffrement est optionnel. Il doit \u00eatre r\u00e9sistant, c&rsquo;est \u00e0 dire correspondre \u00e0 l&rsquo;\u00e9tat de l&rsquo;art en cryptographie appliqu\u00e9e. On doit &hellip; <a href=\"https:\/\/blog.nebule.org\/?p=800\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Introduction \u00e0 la cryptographie<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[58,73,3,110,40],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/800"}],"collection":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=800"}],"version-history":[{"count":1,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/800\/revisions"}],"predecessor-version":[{"id":2297,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/800\/revisions\/2297"}],"wp:attachment":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=800"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=800"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=800"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}