Catégorie : Technique

  • Dis tonton, c’est quoi le chif­fre­ment au repos, en tran­sit, et de bout en bout ?

    Ben oui, c’est bien joli de dire que les données sont sécu­ri­sées parce que chif­frées, mais ça veut tout et rien dire.

    Petite analo­gie avec des bijoux et un coffre-fort qu’on va consi­dé­rer invio­lable pour l’exer­cice.

    Chif­fre­ment au repos

    La banque vous offre un coffre-fort person­nel pour vos bijoux à la banque. Ils sont super sécu­ri­sés, personne ne peut forcer le coffre.

    Bon, par contre c’est le person­nel de la banque qui a la clef de tous les coffres, le votre aussi. Ce sont eux qui vont cher­cher vos bijoux, accé­der à la salle des coffres, ouvrir le coffre, et vous les rame­ner au guichet à chaque vous que vous voulez y accé­der.

    La banque sait exac­te­ment ce que vous stockez et comment vous y accé­der. En fait c’est même elle qui stocke et qui accède. Elle peut voler ou copier le contenu. Un sala­rié de la banque peut accé­der à ce même contenu ou le voler s’il arrive à mettre la main en interne sur la clef du coffre. Un voleur tiers pour­rait réus­sir à profi­ter d’une faille dans les procé­dures de la banque et faire un braquage qui lui permet d’ac­cé­der à la fois aux clefs et aux coffres, et voler ou copier vos bijoux. Enfin, peut-être que la banque ou un de ses pres­ta­taire seront négli­gents, et lais­se­ront traî­ner n’im­porte où la clef, ou un double de celle-ci, ou même vos bijoux avant de vous les remettre.

    Bref, c’est mieux que rien (il y a un coffre), mais tout repose dans la confiance en la banque, en sa sécu­rité, en ses employés.

    Chif­fre­ment en tran­sit

    Quand la banque vous donne accès aux bijoux, elle vous les livre chez vous. Pour ça elle utilise un petit coffre-fort dont vous avez échangé les clefs à l’avance. La banque en a une copie, la seconde est entre vos mains. Personne d’autre ne peut ouvrir le coffre en l’état actuel des tech­no­lo­gies pour peu que ni vous ni la banque ne laisse traî­ner les clefs.

    Vos bijoux restent acces­sibles à la banque. La banque sait ce qu’elle vous envoie. Elle peut les exami­ner à loisir, voire les voler ou les copier à ce moment là. Plusieurs employés de la banque peuvent faire de même, pour plein de raisons légi­times diffé­rentes. Certains pour­raient profi­ter de failles dans les proces­sus internes pour y accé­der de façon illé­gi­time. Un braqueur pour­rait toujours avoir accès à vos bijoux s’il braque la banque.

    Enfin, peut-être que la banque ou un de ses pres­ta­taire seront négli­gents, et lais­se­ront traî­ner n’im­porte où la clef, ou un double de celle-ci, ou même vos bijoux avant de vous les remettre. Peut-être que vous-même aurez laissé votre exem­plaire de votre clef dans votre appar­te­ment privé non sécu­risé et que quelqu’un pourra y accé­der.

    Bref, c’est indis­pen­sable (on ne va pas vous envoyer vos bijoux dans un carton stan­dard par La Poste) mais ça ne « sécu­rise » pas tota­le­ment vos bijoux pour autant.

    Chif­fre­ment au repos et en tran­sit

    Bien évidem­ment votre banque est sérieuse, elle s’oc­cupe donc du stockage et du tran­sit.

    Sauf qu’au final c’est quand même la banque qui va accé­der et ouvrir votre coffre à la banque, prendre les bijoux, puis les stocker dans le coffre qui sert à l’en­voi. Au passage elle les mani­pule direc­te­ment sans protec­tion, par exemple pour les nettoyer.

    La banque a toujours total accès à vos bijoux, pour savoir lesquels est-ce, les copier, les dégra­der ou les voler si elle n’est pas de bonne foi. Plusieurs employés de la banque ont accès direc­te­ment ou indi­rec­te­ment à ces bijoux, pour des raisons légi­times. Certains pour­raient être de mauvaise foi. D’autres employés pour­raient abuser certaines faiblesses dans les procé­dures de sécu­rité pour y accé­der mali­cieu­se­ment aussi. Un braqueur pour­rait accé­der à la banque et récu­pé­rer les bijoux ou les clefs, ou les deux à la fois. Des pres­ta­taires pour­raient avoir une copie des clefs, ou les lais­ser trai­ner. Des employés pour­raient être négli­gents.

    Bref, on protège avec des coffres mais le prin­ci­pal reste : Il faut faire confiance à la banque, à ses employés, à ses pres­ta­taires, à la robus­tesse des procé­dures de sécu­rité.

    Chif­fre­ment de bout en bout

    Vous avez un coffre, que vous avez acheté dans une boutique de confiance ou construit de vos propres mains. La boutique de confiance peut être votre banque mais pour­rait aussi être un tiers, ou une banque concur­rente.

    Seul vous en avez les clefs. Vous stockez vos bijoux dedans, donnez le coffre fermé au trans­por­teur. La banque stocke votre coffre tel quel, sans pouvoir l’ou­vrir, en inspec­ter le contenu, le copier ou le voler. Quand vous voulez accé­der à vos bijoux, on vous rend votre coffre et c’est à vous de l’ou­vrir. Personne n’a pu voir vos bijoux, ou même savoir si ce sont vrai­ment des bijoux.

    La banque n’a plus accès à rien. Vous n’avez pas besoin de lui faire confiance. Tout au plus elle peut perdre votre coffre mais personne ne pourra accé­der au contenu tant que vous n’en perdez pas les clefs (*). C’est par contre à vous de vous assu­rer de garder les clefs dans un endroit sûr, et d’ache­ter le coffre à un tiers de confiance qui n’en garde pas les doubles.

    Pour accé­der à vos bijoux il faudra cepen­dant vous braquer vous (ou que le vendeur du coffre ait été fautif au point de garder un double des clefs et qu’il se fasse braquer lui) et ensuite aller braquer la banque pour accé­der au coffre. C’est possible mais ça commence à être bien plus limité.

    Bien évidem­ment, vous êtes toujours sujet à un braquage chez vous, une fois le coffre ouvert, mais ça la banque n’y pourra jamais rien.

    (*) Point sensible : Si le coffre est invio­lable et que vous perdez vos clefs, plus personne ne pourra vous aider à récu­pé­rer vos bijoux. Ils seront perdus à jamais pour tout le monde. La sécu­rité complète c’est à double tran­chant. Il y a des solu­tion à ce problème, des bonnes et des mauvaises, mais c’est un sujet à part entière.

  • Today I lear­ned : font-variant-nume­ric

    Conseil CSS : utili­sez `font-variant-nume­ric: tabu­lar-nums;` pour aligner soigneu­se­ment les nombres dans un tableau, des comp­teurs de progres­sion, etc.

    https://twit­ter.com/javan/status/1486059026064584711
  • Avec des lettres de A à Z

    Le truc que j’ai du faire avec quasi­ment tous les langages mais pour lequel j’ai rare­ment trouvé une solu­tion satis­fai­sante : trans­for­mer un texte en reti­rant tous les accents et conver­tis­sant les lettres pour ne garder que les a à z.

    Tant que je me limite au français, italien et espa­gnol, j’ai une suite de recher­cher-rempla­cer qui me suffit :

    const ascii_replacements = [
      ['áàâä', 'a'],
      ['éèêë', 'e'],
      ['íìîï', 'i'],
      ['óòôö', 'o'],
      ['úùûü', 'u'],
      ['ñ', 'n'],
      ['æ', 'ae'],
      ['œ', 'oe'],
    ].map(([search, replace]) => [
      [new RegExp(search, 'gu'), replace],
      [new RegExp(search.toUpperCase(), 'gu'), replace.toUpperCase()],
    ]).flat()
    
    function ascii(text) {
      return ascii_replacements.reduce(
       (text, [search, replace]) => text.replace(search, replace),
       text
      )
    }

    Le gros problème c’est qu’il faut tout lister et que dès que je m’aven­ture hors du français, je risque d’en oublier.

    Via Le Hollan­dais Volant, une solu­tion qui utilise normalize :

    text.normalize("NFD").replace(/\p{Diacritic}/gu, "");

    C’est plus court, presque magique, mais en géné­ral j’ai aussi besoin de conver­tir æ et œ, qui seront oubliés ici. Il faut donc ajou­ter ces deux cas et leur version en majus­cule. Du coup c’est mieux mais pas encore ça.

    On peut se dire qu’en échange ça fonc­tionne pour toutes les langues, pas que le français, mais c’est passer à côté des spéci­fi­ci­tés locales. Si en français ö peut être dégradé en o, en alle­mand c’est l’équi­valent de oe.

    Reti­rer les signes diacri­tiques ne suffit pas pour obte­nir une version accep­table. La conver­sion dépend de la langue. L’al­le­mand est loin d’être la seule langue avec ce type de spéci­fi­ci­tés. Il faudra aussi ajou­ter les lettres propres à chaque langues, comme ß qui donne­rait ss.

    Par le passé j’ai utilisé iconv en PHP. Je me souviens que ce n’était pas parfait mais ça faisait ce type de job.

     iconv('UTF-8', 'ASCII//TRANSLIT', $text)

    Il faut juste penser à bien défi­nir la bonne locale avant. Ce n’est pas un défaut, c’est une fonc­tion­na­lité : Le résul­tat sera diffé­rent pour diffé­rentes locales.

  • GPS illus­tré

    Global Posi­tio­ning System is, without a doubt, one of the most useful inven­tions of the late 20th century. It made it signi­fi­cantly easier for ships, airplanes, cars, and hikers to figure out where they are with high degree of accu­racy.

    https://ciecha­now.ski/gps/

    Cet article est juste excep­tion­nel. On explique tout le GPS, depuis la trian­gu­la­tion dans un espace à trois dimen­sion jusqu’au déco­dage radio, en passant par les ques­tions de trajet élip­tique et dérives de temps dues à la rela­ti­vité.

    Il faut tout ça et ça reste tota­le­ment acces­sible, à base d’illus­tra­tions qui se mani­pulent dans la page. Incroyable.

    À lire jusqu’au bout (via Nim)

  • Vidéos de We Love Speed

    Les vidéos de We Love Speed 2021 sont sorties sur Youtube.

    J’ai la tris­tesse de ne pas avoir pu y assis­ter. Je suis preneur de vos recom­man­da­tions sur quelles présen­ta­tions regar­der.

  • Peri­text : A CRDT for Rich-Text Colla­bo­ra­tion

    Je me rappelle avoir fouillé Prose­mir­ror et les OT pour implé­men­ter l’édi­tion colla­bo­ra­tive de Cozy Notes.

    C’était une implé­men­ta­tion simpliste faite pour quelques auteurs simul­ta­nés sur un même docu­ment. Le vrai enjeu était de pouvoir gérer à la fois le colla­bo­ra­tif en ligne et la capa­cité de modi­fier un docu­ment hors ligne sur un temps long.

    C’est ce que tente Peri­text et c’est un problème bien plus complexe.

    In this article we present Peri­text, an algo­rithm for rich-text colla­bo­ra­tion that provides grea­ter flexi­bi­lity: it allows users to edit inde­pendent copies of a docu­ment, and it provides a mecha­nism for auto­ma­ti­cally merging those versions back toge­ther in a way that preserves the users’ intent as much as possible. Once the versions are merged, the algo­rithm guaran­tees that all users converge towards the same merged result.

    https://www.inkand­switch.com/peritext/

  • D’où vient cette &é’çà& de requête ?

    Astuce vue ce matin, je ne sais plus où :

    Ajou­ter un commen­taire dans chaque requête de base de données pour y mention­ner la loca­li­sa­tion de cette requête dans le code source (fichier, ligne).

    Objec­tif : Dans les jour­naux du SGBD, pouvoir tracer d’où vient la requête lente ou problé­ma­tique qu’on a en face de nous.

    Sur certains langages et cadres de travail ça peut même s’au­to­ma­ti­ser pour que ce soit fait auto­ma­tique­ment. En SQL c’est tout ce qui est après ‘-- ‘. En Mongo c’est dans $comment.

  • Sécu­rité de Have I Been Pwned?

    Concer­nant Have I Been Pwnd? il y a pas mal de gens réti­cents à l’uti­li­ser de peur que ça aspire ce qu’ils saisissent. Et c’est aussi prendre le risque qu’un site frau­du­leux se fasse passer pour lui.

    https://masto­don.teta­neu­tral.net/@Natouille/105820437840086551

    Il y a deux parties à Have I Been Pwnd?. La première partie c’est une solu­tion pour lais­ser son email et être averti dès qu’une brèche concerne un de vos comptes.

    Là dessus il n’y a aucun risque de sécu­rité, que du béné­fice. Si vous ne vous êtes pas enre­gis­tré, faites-le.

    On laisse certes son email mais pour l’ins­tant personne n’a relevé de spam sur ce service (et croyez-moi, il doit y avoir des milliers d’in­for­ma­ti­ciens qui ont du essayer de mettre une adresse de test spéci­fique).


    La seconde partie propose de saisir son mot de passe et regarde s’il est présent dans la base de données des mots de passe déjà connus.

    Troy Hunt a établi un proto­cole qui permet de véri­fier si un mot de passe est dans la base sans avoir à trans­mettre ce mot de passe au serveur. C’est simple à lire et à comprendre, et ça ne laisse aucune part au doute : Tant qu’on suit ce proto­cole, tester un mot de passe ne présente aucun risque de divul­ga­tion. Aucun.

    La seule vraie ques­tion est « pouvons-nous faire confiance au site web dans lequel nous saisis­sons le mot de passe pour suivre ce proto­cole et ne pas envoyer notre saisie quelque part sur un serveur ? »

    Il n’y a pas eu de brèche ou de malveillance sur Have I Been Pwned? jusqu’à présent mais, évidem­ment, ça n’est en rien une garan­tie abso­lue pour l’ave­nir.

    Si vous voulez plus de sécu­rité, deux possi­bi­li­tés :

    • Utili­ser un site web ou un outil en qui vous avez plus confiance pour qu’il implé­mente correc­te­ment le proto­cole de Have I Been Pwned?
    • Télé­char­ger la base en local sur votre poste, et utili­ser un outil en qui vous avez confiance pour cher­cher dedans.

    Des gestion­naires de mots de passe comme Dash­lane et Bitwar­den proposent de tester direc­te­ment vos mots de passe depuis le logi­ciel. Il faut avoir confiance mais, si vous les utili­sez comme gestion­naire de mots de passe, c’est à priori déjà le cas.

    Ce que je propo­sais quand je parlais de mot de passe fort et inter­face c’est exac­te­ment ça : C’est au logi­ciel ou au site web à qui vous allez confier votre mot de passe de toutes façons de le véri­fier auprès de la base Have I Been Pwnd? (qu’ils auront télé­chargé en local sur leur serveur). Ainsi il n’y a aucun besoin de faire confiance à un acteur tiers, aucun risque supplé­men­taire.


    Ok, mais c’est quoi ce proto­cole ? Comment peut-on véri­fier mon mot de passe sans le divul­guer ?

    On utilise des conden­sats, ici SHA1.

    Plus exac­te­ment on calcule la somme SHA1, sur 40 carac­tères hexa­dé­ci­maux, et on envoie les 5 premiers carac­tères au serveur. Le serveur nous répond avec la liste des sommes SHA1 de mots de passe connus qui partagent les mêmes 5 premiers carac­tères. À moi de véri­fier que le mien ne fait pas partie de cette liste.

    Vous lirez que SHA1 n’est pas idéal pour des mots de passe, encore moins sans ajout d’un sel aléa­toire. Pour autant il n’y a aucun moyen connu à ce jour pour même imagi­ner trou­ver une infor­ma­tion partielle à propos de votre mot de passe à partir des 5 premiers carac­tères de la somme SHA1.

    La seule chose possible c’est éven­tuel­le­ment se dire « c’est peut-être un des mots de passe connus qui partagent le même début de somme de contrôle ». L’in­for­ma­tion ne présente aucun inté­rêt puisque si juste­ment c’était un de ceux-ci, vous auriez été infor­més de ne pas l’uti­li­ser. Du coup, en creux, l’in­for­ma­tion devient « Quelqu’un utilise un mot de passe, et ce ne sera pas un mot de passe connu ». Bref, c’est exac­te­ment notre objec­tif, tout va bien.

  • Dice­ware

    Règle géné­rale : Lais­sez votre gestion­naire de mots de passe géné­rer des mots de passe outra­geu­se­ment complexes.

    Vous n’au­rez jamais besoin de les taper ou vous en souve­nir vous-même. Vous n’avez en fait même pas besoin de voir ou de savoir à quoi ces mots de passe ressemblent. Lais­sez-le faire.

    Le géné­ra­teur de mot de passe interne de Bitwar­den

    Et puis parfois on a besoin d’un mot de passe dont on doit se souve­nir, un qu’on doit pouvoir taper au clavier ou un qu’on doit pouvoir dicter au télé­phone.

    Et dans ce cas là je vous invite à utili­ser des mots français plutôt que des lettres, chiffres et symboles incom­pré­hen­sibles.

    La raison est simple : il est plus facile de rete­nir 4 mots connus que 8 lettres chiffres et symboles aléa­toires.

    La seule contrainte c’est d’uti­li­ser des mots réel­le­ment aléa­toires et pas ceux auxquels on pense en essayant naïve­ment de trou­ver des mots soi-même. Votre gestion­naire de mots de passe devrait savoir vous géné­rer cette suite de mots. Si ce n’est pas le cas la méthode dice­ware est à votre dispo­si­tion :

    1. Cher­chez une liste de mots de votre langue en cher­chant « dice­ware » sur votre moteur de recherche favori. Ce sont géné­ra­le­ment des listes de 7776 mots qui vont de 11 111 à 66 666.
    2. Lancez 5 fois un dé à 6 faces, regar­dez le mot qui corres­pond dans votre grille. Recom­men­cez autant de fois que vous avez besoin de mots.

    Calcul d’en­tro­pie pour diffé­rentes combi­nai­sons (les paliers de couleur sont arbi­traires à respec­ti­ve­ment 48, 56, 72, 96, 128 et 256 bits d’en­tro­pie)

    La sécu­rité c’est parfois contre intui­tif : Il suffit de 4 mots français pour être aussi robuste que 8 carac­tères acces­sibles au clavier, symboles inclus.

    À 5 mots vous avez l’équi­valent d’un mot de passe de 10 carac­tères clavier tota­le­ment aléa­toires en comp­tant 28 symboles possibles en plus des lettres et des chiffres.

    À 6 mots vous vous avez l’équi­valent d’un mot de passe de 12 carac­tères tota­le­ment aléa­toires, proba­ble­ment suffi­sant pour quasi­ment tous les usages aujourd’­hui. Si vous êtes para­noïaque, 8 mots c’est l’équi­valent de 16 carac­tères tota­le­ment aléa­toires.


    Tout ça n’est pas nouveau. XKCD en parlait déjà il y a plusieurs années. Cette bande dessi­née a été parfaite pour démo­cra­ti­ser l’idée mais trop de gens oublient que ça ne fonc­tionne que pour des mots réel­le­ment tirés au hasard.

    XKCD 936 : Pass­word Strength

    Atten­tion toute­fois : L’hu­main est très mauvais pour piocher au hasard.

    Même avec toute la bonne volonté du monde et en vous croyant machia­vé­lique dans votre choix, il est probable que vous ne pioche­rez que dans quelques centaines de mots, éven­tuel­le­ment un ou deux milliers.

    Le problème d’ailleurs aussi pour les mots de passe « clas­siques ». « Nico­las2012! » et « Julie+Mar­c2307 » sont de très mauvais mots de passe bien qu’ils respectent parfai­te­ment toutes les règles.

    Je donne là une évidence mais c’est plus géné­ral que ça. Un mot de passe qui est généré sans aide d’un géné­ra­teur d’aléa­toire est un mauvais mot de passe, peu importe à quoi il ressemble de loin. Les chiffres et symboles sont quasi­ment aux mêmes posi­tions. Certaines lettres et chiffres sont peu voire pas du tout utili­sés.

    Tout ça dimi­nue signi­fi­ca­ti­ve­ment la robus­tesse du mot de passe, même quand vous essayez de vous même d’y palier en cher­chant compliqué. Utili­sez une machine ou un système externe quel qu’il soit, quitte à ce que ce soit une paire de dés lancés à la main.

  • Mot de passe fort

    Je rage à chaque fois que je vois des règles complexes sur les mots de passe saisis. J’ai l’im­pres­sion qu’on a échoué à expliquer la sécu­rité.

    Une fois qu’on exclut les mots de passe unique­ment en chiffres, il n’y a quasi­ment plus que la longueur du mot de passe qui compte. Vous voulez un mot de passe sûr avec unique­ment des lettres ? Il suffit d’ajou­ter un unique carac­tère supplé­men­taire. Autant dire pas grand chose quand on est déjà à 9 ou 10.

    En réalité la diffé­rence est encore plus réduite que ça parce qu’en deman­dant d’ajou­ter des chiffres et symboles ce sont toujours les mêmes qui appa­raissent, mis à la fin ou en rempla­ce­ment des mêmes lettres (a qui donne @ par exemple).

    Pire : Pour rete­nir un mot de passe complexe avec majus­cules, chiffres et symboles, l’uti­li­sa­teur risque de mettre quelque chose de connu ou déjà utilisé ailleurs. On est parfois dans le contre-produc­tif.

    Si vous deviez utili­ser des règles de saisie du mot de passe, gardez n’en qu’une : la longueur. Le reste c’est de la litté­ra­ture.


    Main­te­nant, et si vous chan­giez de stra­té­gie ? Aidez l’uti­li­sa­teur et expliquez-lui ce qu’il se passe au lieu de lui appor­ter des contraintes.

    Commen­cez par lui propo­ser un mot de passe par défaut, avec une liste de mots connus et à ortho­graphe simple.

    Propo­sez ensuite un indi­ca­teur pour la force du mot de passe. Là vous pouvez prendre en compte la longueur mais aussi la présence dans la base Have I Been Pwnd.

    Une fois passé le strict mini­mum, c’est à l’uti­li­sa­teur de déci­der ce qu’il veut. Ne lui impo­sez pas un mot de passe de 12 carac­tères pour réali­ser un sondage sur la date de sa prochaine soirée entre amis.

    Votre rôle c’est de lui donner les clefs pour faire son choix, pas de le faire à sa place.

    L’in­di­ca­teur de complexité peut tout à fait avoir plusieurs paliers en fonc­tion de la présence de diffé­rentes classes de carac­tères. Vous pouvez aussi essayer de détec­ter des dates, le fait que le dernier carac­tère soit juste un chiffre ou un point d’ex­cla­ma­tion, et des suites un peu trop clas­siques comme 123 ou ou azerty.

    Si vous détec­tez des espaces alors c’est proba­ble­ment une phrase (s’il y a des petits mots faci­le­ment recon­nais­sables comme « le », « la », « il », « ce », « est », etc. ) ou des suites de mots (dans le cas contraire). Vous pouvez là aussi adap­ter votre calcul de complexité et la longueur recom­man­dée.

    Au bout d’une certaine résis­tance parlons unique­ment amélio­ra­tion.