{"id":744,"date":"2013-01-26T00:20:47","date_gmt":"2013-01-25T22:20:47","guid":{"rendered":"http:\/\/blog.nebule.org\/?p=744"},"modified":"2016-03-29T19:04:21","modified_gmt":"2016-03-29T17:04:21","slug":"yubikey-et-la-double-authentification","status":"publish","type":"post","link":"https:\/\/blog.nebule.org\/?p=744","title":{"rendered":"Yubikey et la double authentification"},"content":{"rendered":"<p style=\"text-align: justify;\">Une des b\u00eates noires de la s\u00e9curit\u00e9 des utilisateurs et de leurs informations sur l&rsquo;Internet est le mot de passe. Ou plut\u00f4t devait-on dire la multitude de mots de passes et de comptes utilisateurs qui vont avec.<\/p>\n<p style=\"text-align: justify;\">Chaque service web n\u00e9cessite un compte utilisateur pour \u00eatre utilis\u00e9, normal. Ce qui est moins normal, c&rsquo;est que cette identification reste assez strictement localis\u00e9e au service en question. A part quelques tentatives qui n&rsquo;ont remport\u00e9e qu&rsquo;un succ\u00e8s d&rsquo;estime, chaque service g\u00e8re jalousement ses utilisateurs. Il en r\u00e9sulte un multitude de comptes utilisateurs diff\u00e9rents avec potentiellement autant de mots de passes.<br \/>\nLa gestion de l&rsquo;identit\u00e9 sur l&rsquo;Internet est un vrai probl\u00e8me. La gestion des mots de passes associ\u00e9s encore plus. M\u00eame si l&rsquo;on met le m\u00eame mots de passe partout, il faut r\u00e9guli\u00e8rement le retaper. Et bien s\u00fcr, avec un mot de passe unique, on devient vuln\u00e9rable au premier service qui ne s\u00e9curiserait pas correctement ceux-ci.<\/p>\n<p style=\"text-align: justify;\"><a title=\"http:\/\/www.yubico.com\" href=\"http:\/\/www.yubico.com\" target=\"_blank\">Yubico<\/a> propose une solution bas\u00e9 sur le mot de passe \u00e0 usage unique (OTP &#8211; One Time Password). L&rsquo;ensemble fonctionne sur le principe de &lsquo;<em>ce que je connais<\/em>&lsquo; et &lsquo;<em>ce que j&rsquo;ai<\/em>&lsquo;. La double authentification repose donc sur deux moyens combin\u00e9s de prouver son identit\u00e9. On doit fournir les deux ou prouver que l&rsquo;on d\u00e9tient les deux.<\/p>\n<ol>\n<li style=\"text-align: justify;\">&lsquo;<em>Ce que je connais<\/em>&lsquo;, c&rsquo;est typiquement un nom d&rsquo;utilisateur et un mot de passe.<\/li>\n<li style=\"text-align: justify;\">&lsquo;<em>Ce que j&rsquo;ai<\/em>&lsquo;, c&rsquo;est un objet dont je dispose. Cet objet doit \u00eatre capable de prouver sa pr\u00e9sence de fa\u00e7on num\u00e9rique. C&rsquo;est ici la <a title=\"http:\/\/www.yubico.com\/products\/yubikey-hardware\/\" href=\"http:\/\/www.yubico.com\/products\/yubikey-hardware\/\" target=\"_blank\">YubiKey<\/a>.<\/li>\n<li style=\"text-align: justify;\">&lsquo;<em>Ce que je suis<\/em>&lsquo;, c&rsquo;est le plus dur \u00e0 obtenir&#8230; puisque c&rsquo;est g\u00e9n\u00e9ralement ce que l&rsquo;on cherche.<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">La cl\u00e9 YubiKey branch\u00e9e en USB \u00e9mule un clavier et envoie un mot de passe OTP lorsque l&rsquo;on appuie sur un bouton de la cl\u00e9. Ce mot de passe unique est d\u00e9riv\u00e9 de l&rsquo;identifiant de la cl\u00e9, d&rsquo;un num\u00e9ro de s\u00e9quence, d&rsquo;une empreinte CRC et de divers autres champs. Le tout est converti en caract\u00e8res imprimables et envoy\u00e9 comme si il \u00e9tait tap\u00e9 sur un clavier.<br \/>\nCe OTP est transmis au serveur en m\u00eame temps que le nom d&rsquo;utilisateur et \u00e9ventuellement un autre mot de passe (double authentification). Le serveur le transmet au YubiCloud pour v\u00e9rification et attend une r\u00e9ponse positive ou n\u00e9gative sur la validit\u00e9 de l&rsquo;OTP pour donner l&rsquo;acc\u00e8s au service \u00e0 l&rsquo;utilisateur&#8230; ou pas.<br \/>\nL&rsquo;OTP change \u00e0 chaque fois et ne peut \u00eatre rejou\u00e9. Il peut donc \u00eatre divulgu\u00e9 une fois utilis\u00e9.<br \/>\nLa YubiKey peut \u00eatre vol\u00e9e, sans le compte \u00e0 utiliser (ou le deuxi\u00e8me mot de passe) elle est inutilisable.<br \/>\nSi double authentification, le mot de passe peut \u00eatre vol\u00e9 (keylogger), il n&rsquo;est pas utilisable sans la YubiKey \u00e0 c\u00f4t\u00e9.<\/p>\n<p style=\"text-align: justify;\">Une des propri\u00e9t\u00e9s int\u00e9ressante de cet impl\u00e9mentation, c&rsquo;est que l&rsquo;on peut voir l&rsquo;ensemble comme la transmission de messages chiffr\u00e9s (sym\u00e9trique) entre la YubiKey et la YubiHSM. Toutes les cl\u00e9s connaissent l&rsquo;unique (ou pas loin) mot de passe secret de chiffrement. On fait confiance au mat\u00e9riel (les cl\u00e9s USB) pour savoir garder le secret.<\/p>\n<p style=\"text-align: justify;\">Le syst\u00e8me est de loin pr\u00e9f\u00e9rable \u00e0 la simple authentification par mot de passe. Mais il n&rsquo;en pr\u00e9sente pas moins des probl\u00e8mes :<\/p>\n<ol>\n<li style=\"text-align: justify;\">Une petite <a title=\"https:\/\/bitcointalk.org\/index.php?topic=85648.msg943612#msg943612\" href=\"https:\/\/bitcointalk.org\/index.php?topic=85648.msg943612#msg943612\" target=\"_blank\">pol\u00e9mique<\/a> est apparue sur la robustesse r\u00e9elle du syst\u00e8me. Un CRC16 permet de v\u00e9rifier la valid\u00e9 du paquet. Ce CRC est inclus dans les donn\u00e9es chiffr\u00e9es et couvre donc 128-16=112bits. En jouant des paquets au hasard, il y a 1\/(2*2^16) chances que la signature du CRC16 soit coh\u00e9rente avec le reste. Si l&rsquo;on compte qu&rsquo;il faut statistiquement parcourir la moiti\u00e9 des valeurs pour en trouver une bonne, cela donne une probabilit\u00e9 de 1\/(2^16). Cependant, dans les donn\u00e9es chiffr\u00e9es, il y a aussi le champ <em>private identity<\/em> de 6 bytes=48bits. Ce champs \u00e9tant v\u00e9rifi\u00e9 comme nul ou valide par les serveurs, la probabilit\u00e9 remonte \u00e0 2*1\/(2^(16+48)) soit 1\/(2^63). Ce qui sauve les meubles c&rsquo;est que l&rsquo;attaque doit passer par le r\u00e9seau, la solidit\u00e9 r\u00e9elle de l&rsquo;ensemble est de 2^63 et non de 2^128&#8230;<\/li>\n<li style=\"text-align: justify;\">Il faut la coop\u00e9ration active des services qui authentifient les utilisateurs. La m\u00e9thode d&rsquo;authentification doit \u00eatre modifi\u00e9e pour supporter la v\u00e9rification de l&rsquo;OTP en liaison avec le YubiCloud, l&rsquo;infrastructure qui valide r\u00e9ellement l&rsquo;authentification. Pour les personnes qui g\u00e8rent elles-m\u00eame leurs blogs ou autres services, c&rsquo;est un r\u00e9el gain. Mais pour un gros acteur de l&rsquo;Internet c&rsquo;est plut\u00f4t une ing\u00e9rence sur un sujet sensible que sont les utilisateurs et tout ce qu&rsquo;ils rapportent. Cela \u00e0 donc autant de chance d&rsquo;\u00eatre adopt\u00e9 que d&rsquo;autres solutions par le pass\u00e9 comme <a title=\"http:\/\/openid.net\/\" href=\"http:\/\/openid.net\/\" target=\"_blank\">OpenID<\/a>, faible.<\/li>\n<li style=\"text-align: justify;\">La solution n\u00e9cessite une connectivit\u00e9 vers l&rsquo;Internet et le YubiCloud pour valider l&rsquo;authentification. Impossible donc de travailler hors-ligne. Il y a 5 serveurs dans le monde, c&rsquo;est d\u00e9j\u00e0 pas mal mais c&rsquo;est aussi encore trop peu pour r\u00e9sister \u00e0 un DDOS cibl\u00e9. Et en cas d&rsquo;absence de connexion prolong\u00e9e aux serveur, tous les services associ\u00e9s sont eux-aussi paralys\u00e9s. On a un point de d\u00e9faut unique.<\/li>\n<li style=\"text-align: justify;\">Comment va se comporter l&rsquo;ensemble lorsque le compteur anti-rejeu va boucler ? La cl\u00e9 ne marchera plus. La taille du compteur est de 15bits=32768 utilisations (avec branchement de la cl\u00e9).<\/li>\n<li style=\"text-align: justify;\">Volontairement, la YubiKey ne peut \u00eatre mise \u00e0 jour. La cl\u00e9 est accessible en lecture seule, ce qui emp\u00eache la diffusion de virus et r\u00e9duit la surface d&rsquo;attaque de celle-ci. Mais que se passera-t-il quand, in\u00e9vitablement, une faille sera trouv\u00e9e sur cette cl\u00e9 ? Poubelle.<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">D&rsquo;autres questions restent en suspend. L&rsquo;analyse rapide de la documentation sur le site web de Yubico ne permet pas d&rsquo;y r\u00e9pondre.<\/p>\n<ol>\n<li style=\"text-align: justify;\">Cl\u00e9 unique de chiffrement AES entre toutes les cl\u00e9s YubiHSM ? Ou une cl\u00e9 AES par YubiHSM ? Ce syst\u00e8me de cl\u00e9s secr\u00e8tes interdit notamment toute concurrence avec les m\u00eames cl\u00e9s. Utiliser la cryptographie asym\u00e9trique plut\u00f4t que sym\u00e9trique aurait permit bien plus de choses et relev\u00e9 la s\u00e9curit\u00e9 \u00e0 plus long terme.<\/li>\n<li style=\"text-align: justify;\">Et si un serveur d&rsquo;authentification du YubiCloud r\u00e9pond toujours OK m\u00eame si les OTP sont invalides ? Quelle est la robustesse de l&rsquo;infrastructure du YubiCloud ? La liaison entre les API c\u00f4t\u00e9 clients et les serveurs <em>API Validation Servers<\/em> est chiffr\u00e9e avec une cl\u00e9 partag\u00e9e. Les serveurs KSM avec leurs YubiHSM sont ind\u00e9pendants des <em>API Validation Servers<\/em>. Mais si la cl\u00e9 AES semble bien prot\u00e9g\u00e9e dans les YubiHSM, je n&rsquo;ai pas vu de m\u00e9canisme de signature de la r\u00e9ponse.<\/li>\n<li style=\"text-align: justify;\">Yubico ne semble pas aimer la cryptographie sym\u00e9trique, elle n&rsquo;est employ\u00e9e nulle part. Dans un contexte enti\u00e8rement centralis\u00e9 autour de quelques serveurs, la cryptographie sym\u00e9trique appliqu\u00e9e \u00e0 tous les \u00e9changes reste cependant acceptable. Mais on en revient \u00e0 une critique pr\u00e9c\u00e9dente, cela renforce l&rsquo;unicit\u00e9 du point de d\u00e9faillance de ces serveurs.<\/li>\n<\/ol>\n<p style=\"text-align: justify;\">Qu&rsquo;en penser ?<br \/>\nToute la s\u00e9curit\u00e9 repose sur la\/les cl\u00e9s AES des YubiHSM, la robustesse de la cl\u00e9 YubiKey et sur l&rsquo;impl\u00e9mentation du chiffrement de l&rsquo;OTP. La solution semble viable \u00e0 court terme. Trop de d\u00e9fauts la condamne malheureusement \u00e0 long terme.<br \/>\nBref, c&rsquo;est mieux que de se reposer uniquement sur le <em>user\/password<\/em>, mais il faudra l&rsquo;abandonner sans regrets au premier signe de faiblesse.<\/p>\n<p>Liens :<br \/>\n&#8211; <a title=\"http:\/\/www.yubico.com\/\" href=\"http:\/\/www.yubico.com\/\" target=\"_blank\">http:\/\/www.yubico.com\/<\/a><br \/>\n&#8211; <a title=\"http:\/\/www.wired.com\/wiredenterprise\/2013\/01\/google-password\/all\/\" href=\"http:\/\/www.wired.com\/wiredenterprise\/2013\/01\/google-password\/all\/\" target=\"_blank\">http:\/\/www.wired.com\/wiredenterprise\/2013\/01\/google-password\/all\/<\/a><br \/>\n&#8211; <a title=\"http:\/\/www.yubico.com\/products\/yubikey-hardware\/\" href=\"http:\/\/www.yubico.com\/products\/yubikey-hardware\/\" target=\"_blank\">http:\/\/www.yubico.com\/products\/yubikey-hardware\/<\/a><br \/>\n-\u00c2\u00a0<a title=\"http:\/\/static.yubico.com\/var\/uploads\/pdfs\/YubiKey_manual-2.0.pdf\" href=\"http:\/\/static.yubico.com\/var\/uploads\/pdfs\/YubiKey_manual-2.0.pdf\" target=\"_blank\">http:\/\/static.yubico.com\/var\/uploads\/pdfs\/YubiKey_manual-2.0.pdf<\/a><br \/>\n&#8211; <a title=\"http:\/\/www.yubico.com\/wp-content\/uploads\/2012\/10\/YubiCloud-OTP-Validation-Service-v1.1.pdf?119b56\" href=\"http:\/\/www.yubico.com\/wp-content\/uploads\/2012\/10\/YubiCloud-OTP-Validation-Service-v1.1.pdf?119b56\" target=\"_blank\">http:\/\/www.yubico.com\/wp-content\/uploads\/2012\/10\/YubiCloud-OTP-Validation-Service-v1.1.pdf<\/a><br \/>\n&#8211; <a title=\"http:\/\/www.schneier.com\/blog\/archives\/2013\/01\/googles_authent.html\" href=\"http:\/\/www.schneier.com\/blog\/archives\/2013\/01\/googles_authent.html\" target=\"_blank\">http:\/\/www.schneier.com\/blog\/archives\/2013\/01\/googles_authent.html<\/a><br \/>\n&#8211; <a title=\"http:\/\/gonzague.me\/yubico-yubikey#axzz2IzWaf5Dr\" href=\"http:\/\/gonzague.me\/yubico-yubikey#axzz2IzWaf5Dr\" target=\"_blank\">http:\/\/gonzague.me\/yubico-yubikey#axzz2IzWaf5Dr<\/a><br \/>\n&#8211; <a title=\"https:\/\/bitcointalk.org\/index.php?topic=85648.msg943612#msg943612\" href=\"https:\/\/bitcointalk.org\/index.php?topic=85648.msg943612#msg943612\" target=\"_blank\">https:\/\/bitcointalk.org\/index.php?topic=85648.msg943612#msg943612<\/a><br \/>\n&#8211; <a title=\"http:\/\/openid.net\/\" href=\"http:\/\/openid.net\/\" target=\"_blank\">http:\/\/openid.net\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Une des b\u00eates noires de la s\u00e9curit\u00e9 des utilisateurs et de leurs informations sur l&rsquo;Internet est le mot de passe. Ou plut\u00f4t devait-on dire la multitude de mots de passes et de comptes utilisateurs qui vont avec. Chaque service web n\u00e9cessite un compte utilisateur pour \u00eatre utilis\u00e9, normal. Ce qui est moins normal, c&rsquo;est que &hellip; <a href=\"https:\/\/blog.nebule.org\/?p=744\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Yubikey et la double authentification<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[2,59,3,93],"tags":[244,251,356,357],"_links":{"self":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/744"}],"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=744"}],"version-history":[{"count":1,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/744\/revisions"}],"predecessor-version":[{"id":2303,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/744\/revisions\/2303"}],"wp:attachment":[{"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=744"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=744"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=744"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}