Crypto, huile de serpent et bullshit commercial

Posted on lun. 16 mai 2016 in vrac

(Non, mes titres ne sont pas bizarres)

En fin de semaine dernière, je suis tombé sur ce magnifique kickstarter pour, je cite, "le premier logiciel impénétrable anti-hacking". Tout un programme.

Au fur et à mesure que je lisais la présentation du projet, et que je regardais leur vidéo d'accueil, je suis passé par toute une palette d'émotions : incompréhension, rire, suspicion (qui a réalisé ce troll magnifique ?), réalisation, douleur et désespoir. Non, ce n'est manifestement pas une blague, et à l'heure où j'écris ces lignes le projet a levé 2,215$ avec 25 jours restants.

Ce qui impose un constat : les gens pensent que ce projet est crédible et investissent dessus. Forcément, quand on ne s'intéresse pas au domaine, on peut se faire piéger. Du coup, je me suis dit qu'il pourrait être intéressant de montrer plusieurs points qui font que ce projet (et les nombreux autres du genre) n'est absolument pas sérieux, et qu'est-ce qui doit mettre la puce à l'oreille.

Disclaimer : je suis pas un expert en crypto, loin de là. J'ai essayé de rendre cet article accessible au plus grand nombre, quitte à prendre quelques raccourcis (AES existe aussi en 192bits par exemple), mais en tentant de rester le plus juste possible. Si vous avez des remarques sur ce que j'ai écrit, n'hésitez pas à le signaler.

La page du Kickstarter

Avant même de regarder la partie cryptographie en elle-même, la page de présentation de ce projet est un chef d'oeuvre. Il y a déjà plusieurs points qui doivent faire sonner des alarmes un peu partout dans votre tête :

La vidéo de présentation

Un yoyo. Sérieusement ? UN YOYO ? On connaissait déjà le cliché du hacker à capuche qui a le visage caché dans l'ombre, usé et abusé comme image d'illustration par les médias (on a aussi le coup des gants sur le clavier qui est pas mal), mais alors là on a atteint le niveau supérieur. Avec ça, même plus la peine de parler des images qui clignotent partout avec les messages qui font peur... En fait je sais même pas si j'ai besoin de continuer ce paragraphe. Un YOYO quoi...

L'équipe

On parle d'un produit informatique et cryptographique qui se vante d'avoir une technologie exclusive qui ridiculise toutes les autres. Regardons maintenant l'équipe qui nous est présentée sur la page... Je sais pas pour vous, mais perso, je trouve qu'il manque quelque chose. Genre, déjà, quelques informaticiens, et surtout, des gens spécialisés en cryptographie. Ça pourrait être vaguement utile... (Par contre ils ont une mascotte, wouhou, ça ne peut être qu'un projet sérieux !)

Le FUD

L'acronyme "FUD" signifie "Fear, Uncertainty, Doubt". C'est une technique très prisée par les entreprises vendant des "solutions de sécurité" (ou par des gouvernements voulant nous protéger contre les terroristes qui utilisent de la crypto sur Internet...). L'objectif est de faire peur au public, VOUS êtes une cible, VOUS êtes vulnérables, VOUS allez perdre quelque chose... si VOUS ne prenez par notre solution (5€ la minute plus prix d'un appel local). Ici, c'est criant : les solutions existantes ne fonctionnent pas, toutes vous données sont exposées, on a même une frise qui retrace les dernières actualités des fuites de données.

Les tshirt

Alors là, on est au même niveau de WTF que le yoyo. "Hey les gars, on propose un produit de sécurité révolutionnaire basé sur un algorithme cryptographique inviolable, qu'est-ce qu'on peut mettre en avant sur notre kickstarter ? - Moi je sais, des Tshirt et des bonnets.". Les gars, on vient de voir que votre truc était bancal, et votre argument commercial c'est des tshirts ? Sérieux, sortez une solution qui fonctionne, on verra les tshirts ensuite.

La cryptographie "huile de serpent"

Jusqu'au 19è siècle aux États Unis, on pouvait se procurer de "l'huile de serpent" (snake oil) comme remède à à peu près tout : courbatures, articulations douloureuses, maladies de peau... Inutile de dire que l'efficacité du truc était pire que nulle, mais avec le bon bagout commercial, ça se vendait. Aujourd'hui, on parle souvent de "Snake oil crypto" : une solution qui ne marchera pas vendue par quelqu'un qui le sait et qui va vous embrouiller dans son discours pour vous persuader de l'acheter.

Ben avec MyDataAngel, on est pile dedans. Au niveau de la crypto, on retrouve ici plusieurs points qui sentent l'huile de serpent à des kilomètres :

Algo inédit, révolutionnaire, et... secret

En crypto, on ne réinvente pas la roue tous les matins. Pour une raison simple, c'est que la crypto, bien avant d'être de l'informatique, c'est des maths (et plutôt violentes pour les profanes d'ailleurs). Donc l'invention de nouveaux algorithmes de cryptographie prend du temps et énormément de travail, notamment pour prouver la sûreté de l'algorithme.

Donc quand on vous vend un super algo révolutionnaire réalisé en interne (surtout dans une équipe où il n'y a pas de mathématiciens ou de cryptographes), ça part mal.

La notion de secret est aussi particulièrement importante. On retrouve deux modes de pensée en crypto. Pour ça rien de mieux qu'un petit exemple :

    Pour chiffrer mon message, je vais remplacer chaque lettre par la lettre qui se trouve à une certaine distance. Si ma distance est 3, je remplace tout les 'a' par des 'd', les 'b' par des 'e', etc...
    Pour déchiffrer le message, il suffit de prendre le même décalage en sens inverse.

Je n'ai pas inventé cette technique, il s'agit du chiffre de César. Si quelqu'un intercepte le message, il ne verra qu'une suite de lettres incompréhensible. Mais à partir du moment où il aura cassé mon chiffrement et compris son fonctionnement, plus aucun de mes échanges ne sera sûr, et je devrais complètement changer mon algorithme de chiffrement.

    Pour chiffrer mon message, j'effectue une série d'opérations connues à partir de deux choses : mon message en clair, et une clef (par exemple un mot). Il en ressort le message chiffré. J'envoie (séparément) ma clef et mon message chiffré au destinataire, qui effectue sur ces deux éléments une série d'opérations (identique ou non), et récupère le message en clair.

La particularité, ici, c'est que la série d'opérations est connue. N'importe qui disposant des deux éléments (message chiffré et clef) peut déchiffrer le message. Le secret ne repose plus sur l'algorithme mais sur la clef. La plus-value est double : d'une part si quelqu'un découvre ma clef, il pourra déchiffrer mes message mais je n'ai qu'à changer de clef pour être de nouveau protégé. D'autre part, et c'est la partie la plus importante, je peux faire vérifier la sécurité apportée par ma série d'opérations.

Pourquoi c'est important ? Parce qu'il faut s'assurer qu'une personne ne puisse pas revenir au message d'origine sans avoir la bonne clef (décrypter mon message). Mais je peux avoir fait des erreurs, des oublis, que cela soit dans la conception de la série d'opérations ou dans la fabrication du logiciel qui permet de les effectuer. C'est pour ça que presque toute la cryptographie utilisée de nos jours utilise des algorithmes connus. Qu'il s'agisse d'AES ou de RSA par exemple, on sait quelles sont les mathématiques, et chacun peut vérifier qu'elles sont bonnes (ou croire sur parole les experts qui ont vérifié). Idem pour le logiciel qui l'applique : ouvrir les sources du logiciel, c'est permettre à la communauté de repérer des erreurs dans la mise en place du chiffrement ou du déchiffrement.

Pour cette raison très simple, si quelqu'un vous vante un algorithme de chiffrement secret, fuyez ! Quand quelqu'un invente un algorithme de cryptographie, la première chose à répondre c'est "montrez moi les maths". Si quelqu'un vous vante un logiciel de cryptographie, la réponse c'est "montrez moi le code".

"Never roll your own crypto"

Ce dicton est directement lié au point précédent. Ne codez jamais votre propre cryptographie. On distingue deux choses : l'algorithme cryptographique, qui est purement mathématique, et l'implémentation, qui est informatique. Certains algorithmes sont prouvés mathématiquement : RSA par exemple. Pourtant, au moment de faire un logiciel qui utilise RSA, on peut faire des erreurs sans s'en rendre compte. C'est ce qui arrive par exemple à OpenSSL, qui se base sur des algorithmes mathématiques qui fonctionnent, mais dont la transformation en logiciel a introduit des erreurs. Ce qui nous donne une actualité tumultueuse (et stressante pour les équipes de sécurité informatique de toutes les entreprises du monde). D'où une fois de plus l'importance d'utiliser du code ouvert et auditable.

Incassable

La crypto incassable, ça n'existe pas. C'est tout. Point. Fini.

Toujours plus de bits

(Ce titre n'est pas dégueulasse)
Un des gros arguments utilisés dans ce kickstarter est l'utilisation d'un chiffrement à partir de 512kb, alors que les autres n'en utilisent que de 128b ou 256b.

Wow. Such bits. Very secure.

Alors déjà avant de parler de nombre de bits, on s'arrête deux secondes sur les unités. Le kickstarter utilise le kilobit, soit 1024 bits. Donc 512kb = 512 x 1024 bits. Toutes les tailles de clefs sont exprimés en bits, donc AES-128 utilise des clefs de 128 bits. Pas 128 kilobits. Mais ça à la rigueur c'est un détail.

Ensuite, il convient de différencier de quel type de cryptographie on parle (symétrique ou asymétrique). Parce qu'AES (symétrique) qui utilise des clefs de 128 ou 256 bits apporte d'excellentes garanties de sécurité, alors que RSA (asymétrique) utilisé avec des clefs de 512 bits n'apporte à peu près aucune sécurité digne de ce nom. La taille conseillée pour les clefs de RSA aujourd'hui est de 2048 à 4096 bits.

Mais ça aussi à la rigueur c'est presque un détail.

Le truc le plus important à ne jamais oublier est qu'en cryptographie la taille des clefs n'est pas proportionnelle à la sécurité obtenue, et ce même avec le même algorithme. Par exemple, AES peut utiliser des clefs de 128 ou 256 bits. La version 256 bits a une clef plus longue et est globalement plus lente, donc elle apporte plus de sécurité ? Et ben non. Une particularité d'AES fait que l'utilisation de clefs de 256 bits expose a plusieurs faiblesses de l'algorithme.

(Vous imaginez pas comme j'ai du me retenir de faire des jeux de mots foireux en écrivant toute cette partie.)

Conclusion

Première conclusion : ne gaspillez pas votre argent pour soutenir MyDataAngel.

Deuxième conclusion : la crypto peut être compliquée, et des gens vont en profiter pour vous vendre n'importe quoi. Mais avec un peu de fouille, on peut déjà arriver à détecter pas mal d'arnaques.

Conclusion des conclusions : chiffrer c'est bien. Il faut tout chiffrer, tout le temps, partout. Pour faire chier les pirates et des ministres indiscrets. Faites juste pas ça avec n'importe quoi.

Ajout à la conclusion : suite à une remarque que j'ai eu, petite précision : tout chiffrer, c'est bien, respecter les lois, c'est mieux. L'utilisation d'outils cryptographiques pour commettre une infraction est une circonstance aggravante sérieuse. En outre, le fait de ne pas fournir les clefs de chiffrement lorsqu'elles sont légitimement demandées (dans le cadre d'une enquête par exemple) est un délit puni par 3 ans de prison et 45.000€ d'amende.