Journal ghash: génération d'image à partir d'un hash

Posté par . Licence CC by-sa
Tags :
36
6
nov.
2016

Il parait que cela s'appelle des identicons: des images uniques générées à partir d'une chaine de caractères.

$ echo linuxfr.org | ghash -o linuxfr.org.jpg

ghash de linuxfr

J'ai tenté de faire un tel générateur avec 2 "julia" (des fractals) multipliées, je me suis inspiré du code trouvé, ici, sur linuxfr, comme exemple pour gmic de l'option '-fill'. Je ne sais pas si ghash est assez solide pour être qualifié de cryptographique mais j'ai tout fait pour.

Ghash est un outil pour Linux en ligne de commande écrit en go, qui appel un script Gmic.

La préversion vient avec le binaire gmic car il faut une version récente pour que cela marche chez moi. Le "package" est très simplifié.
https://github.com/nicolasboulay/ghash

  • # Les différences

    Posté par (page perso) . Évalué à 6.

    Ce qui serait intéressant, ce serait de voir ce que ça donne avec des url très proches, ou avec seulement une lettre qui change.
    Ou bien avec un o cyrilique aussi, pour voir.

    Merci

    • [^] # Re: Les différences

      Posté par . Évalué à 4.

      ça change complètement tout, sha512 est utilisé en interne.

      "La première sécurité est la liberté"

      • [^] # Re: Les différences

        Posté par . Évalué à 2.

        Et c'est coûteux de calculer deux chaînes qui ont deux images qui se ressemblent (qu'un humain ne puisse pas différentier en y jetant un bref coup d'œil) ?

        • [^] # Re: Les différences

          Posté par . Évalué à 3.

          Oui. C’est le principe d’un hash. C’est coûteux de chercher à créer une collision : deux contenus différents générant le même hash.

          • [^] # Re: Les différences

            Posté par . Évalué à 3.

            Posée différemment ma question c'est :
            Est-ce que ce programme créé des représentations graphiques de hash sur 512 bits, ou est-ce que (en plus) ces représentations graphiques sont elles mêmes des hash ?
            C'est pas garanti. Est-ce qu'il est possible qu'il y ait des couples (x,x') tel que leur hash soit assez similaire (70% de bits en commun par exemple, facile à calculer), qui produise des images ressemblantes.

            Typiquement, si le hash est découpé en block qui sont des paramètres à la fonctions de dessins, peut être que les bits les plus légers de ces paramètres influent peu dans rendu final.

            • [^] # Re: Les différences

              Posté par . Évalué à 4.

              Oui bien sûr c'est possible.

              Pour trouver 2 images similaires, tu fais un brute force, avec un test comme le -psnr qui tu cherche sous un certaine seuil.

              Sauf que :
              - Il y a 22 paramètres ayant un effet très visible à 10% de variation et plus ou moins visibles à 1% (soit entre 1022 et 10022 images différentes)
              - générer une image prend 200ms, même en recodant tout en c++, difficile de passer sous 10ms, ce qui veut dire 100 test/s, hashcat attaques sha256 a 1GK/s (10 millions de fois plus)
              - L'usage de sha512 garantie une répartition des bits qui empêche d'utiliser des raccourcies.

              "La première sécurité est la liberté"

              • [^] # Re: Les différences

                Posté par . Évalué à 3.

                générer une image prend 200ms, même en recodant tout en c++, difficile de passer sous 10ms, ce qui veut dire 100 test/s, hashcat attaques sha256 a 1GK/s (10 millions de fois plus)

                Une carte graphique doit pouvoir améliorer ça de plusieurs magnitudes, non ?

                Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

                • [^] # Re: Les différences

                  Posté par . Évalué à 3. Dernière modification le 07/11/16 à 18:00.

                  Je n'ai pas d'idée précise. gmic utilise openMP et doit bénéficier de l'autovectorisation automatique. La différence entre les cartes graphiques et les cpu intel ne sont plus de 1000x mais plutôt 10x dans le meilleur des cas (code numérique + cpu bound)

                  Donc le pire des cas, cela sera 1000 plus rapide au mieux.

                  Par exemple l'algorithme de hash bcrypt dans hashcat fonctionne à ~1K/s ce qui doit être seulement 10x plus rapide que l'implémentation de référence.

                  "La première sécurité est la liberté"

              • [^] # Re: Les différences

                Posté par . Évalué à 2.

                En fait, j'ai un peu l'impression que ça dépend de ce qu'on appelle "similaire". Si l'objectif est de fournir deux images à comparer, alors oui, ça semble compliqué. Par contre, si on part sur le principe d'une sorte de confiance basée sur la mémoire (du style icone qui s'affiche pour certifier visuellement qu'on est bien sur le site web de la banque ou que l'email vient bien d'une personne qu'on connait), alors ça me semble assez facile d'imaginer de générer des images aux propriétés vaguement similaires qui pourraient tromper un utilisateur occasionnel.

                Ceci dit, même si ça n'est pas très résistant en termes de sécurité, ça me semble avoir un intérêt indéniable pour tout un tas d'applications où l'on souhaite avoir une identification visuelle rapide. Y compris par exemple des petits trucs à imprimer sur des formulaires papier pour faciliter leur classement (par exemple en se basant sur le nom du client), ou pour suivre les fils de discussion où il y a beaucoup d'intervenants.

                • [^] # Re: Les différences

                  Posté par . Évalué à 1. Dernière modification le 07/11/16 à 19:23.

                  " alors ça me semble assez facile d'imaginer de générer des images aux propriétés vaguement similaires qui pourraient tromper un utilisateur occasionnel. "

                  Je ne pense pas que cela soit si facile de trouver des collisions justement.

                  "La première sécurité est la liberté"

            • [^] # Re: Les différences

              Posté par . Évalué à 3.

              Je pense pour ma part que le point que tu soulèves est le vrai problème. Pour faire de la cryptographie on ne doit pas penser on doit savoir.

              Sinon ce n'est qu'une question de temps pour que des mathématiciens qui eux savent trouvent comment tout casser…

              Les hashes de 2 chaines identiques visuellement mais pas binairement (vive utf8) seront bien différents on est d'accord. Mais tu les transformes ensuite en image. Le sens de la vue a plein de spécificité chez l'homme (c'est ce qui permet par exemple les compressions destructives). 2 images complètement différentes au niveau binaire peuvent être à l’œil considérées comme parfaitement identiques. Prend n'importe laquelle de tes images et inverse tous les bits de poids faible par exemple. A l’œil tu verras aucune différence mais pourtant au niveau binaire tout aura changé.

              A mon avis ça donne un boulevard aux spécialistes du sujet pour qu'il puisse tout casser.

              Et tout ça sans parler du fait que tu appliques en plus un algo supplémentaire (multiplication de julia si j'ai bien compris). Plus tu fais de trucs, plus tu risques de faciliter les collisions.

              Tu vas me dire que sur plein d'exemple ça fonctionne et c'est vrai, c'est d'ailleurs pour ça que c'est intéressant. Mais le mainteneur debian qui il y a quelques années à corriger le code d'openssl a du aussi penser que ça fonctionnait parfaitement (http://linuxfr.org/news/d%C3%A9couverte-dune-faille-de-s%C3%A9curit%C3%A9-critique-dans-openssl-de-deb).

              • [^] # Re: Les différences

                Posté par . Évalué à 5.

                Tu écris un long poste alors que tu ne semble même pas avoir lu les 10 lignes du readme du projet, ni les autres commentaires sur le sujet. J'ai déjà répondu plein de fois sur le sujet.

                Je peux quand même en rajouter une couche :
                - je n'invente pas de crypto j'utilise sha512 3 fois (pas de seed de random, pas de hash custom, pas de lfsr)
                - Avec les 3 hashs je ne réutilise aucun bit pour éviter toute collision
                - chaque réel utilise 4 bytes, mais je n'imprime que 5 chiffres
                -> donc les 22 nombres réels entre 0 et 1.0 sont mathématiquement indistinct d'un random sauf si sha512 est cassé

                Ensuite, il faut être sûr que le générateur de dessin propose suffisamment de dessins différents pour éviter les collisions visuelles. L'option -test permet de le vérifier pour des exemples. Il génère une image normalement, et génère 22 images de plus en ajoutant 0.01 à chaque paramètre (invisible pour les couleurs, j'ai fait aussi des testes avec 0.1, ce qui marche bien, d'où mon 1022).

                Pour faire les choses correctement, il faudrait injecter du random dans ghash, générer les 20 images, puis faire un test comme -psnr de gmic (ou compare) pour trouver un valeur supérieur à 30 entre 2 images, par exemple. L'idée est de trouver des collisions graphiques. Je n'ai pas fait cette étape de "brute force". Cela serait à faire pour prouver la solidité du truc, c'est un sorte de "fuzzing".

                Comme dit ailleurs, trouver une collision consiste à faire la même chose, en ajoutant du random à une string fixe, et comparer l'image d'origine à la nouvelle image. Mais avec 200 ms par image, cela sera trèèèèèès long.

                "La première sécurité est la liberté"

                • [^] # Re: Les différences

                  Posté par . Évalué à 2.

                  Mes excuses, j'avais effectivement pas lu le readme. Ceci dit ce que tu viens de rajouter aurait eu sa place dans le journal nan ? ;)

                  Peux-tu expliciter les 3 hashs ? Le premier ok, j'imagine que tu fabriques les autres à partir du premier ?

                  Admettons que tu obtiennes un hash correct de 22 nombres. Tu les transformes ensuite en une seule image, mais y a-t-il quelque chose qui te fait dire qu'on ne peut pas faire facilement de collisions graphiques approximatives à part tes tests ? Je suis pas spécialiste du domaine, mais ça me parait identique en terme de risque à faire sa fonction de hashage perso. Enfin je suis peut-être à côté de la plaque et te vexe pas, c'est que des questions ;)

                  Par contre, ça me donne une idée avec un résultat moins joli mais peut-être moins risqué. Tes 3 hash t'amènent 512 x 3 = 1536 bits. Pourquoi ne pas tout simplement s'en servir pour créer une image monochrome de 48 x 32 pixels par exemple ?

                  • [^] # Re: Les différences

                    Posté par . Évalué à 5.

                    Peux-tu expliciter les 3 hashs ? Le premier ok, j'imagine que tu fabriques les autres à partir du premier ?

                    oui c'est ça, un hash, un hash de hash et un hash de hash de hash.

                    mais y a-t-il quelque chose qui te fait dire qu'on ne peut pas faire facilement de collisions graphiques approximatives à part tes tests ?

                    Oui, c'est facile : le nombre d'images visuellement différentes possiblement produit par le générateur. Pour ça j'ai vérifié que chacune des 22 paramètres changent l'image "visiblement". C'est vrai pour une modification de +0.01 en partie, et vrai pour tous les paramètres pour +0.1.

                    je suis pas spécialiste du domaine, mais ça me parait identique en terme de risque à faire sa fonction de hashage perso.

                    Oui un peu. Mais il y a quand même le premier étage à passer (sha512) et le temps de génération, qui n'est pas négligeable. Pour être vraiment "solide", je devrais dépasser les 264 images possibles (le brute force commençant à être irréaliste sauf pour la NSA), l'idéal étant 2128 voir 2256.

                    Pourquoi ne pas tout simplement s'en servir pour créer une image monochrome de 48 x 32 pixels par exemple ?

                    Parce que l’œil est sensible aux formes. Chaque image sera une bouilli grisâtre, identique à toutes les images de bouillis grisâtre.

                    "La première sécurité est la liberté"

                    • [^] # Re: Les différences

                      Posté par . Évalué à 1.

                      Parce que l’œil est sensible aux formes. Chaque image sera une bouilli grisâtre, identique à toutes les images de bouillis grisâtre.

                      Je viens d'essayer ça rapidement, effectivement c'est pas terrible.

                      Titre de l'image

                      Titre de l'image

                      Le premier c'est "linuxfr.org" (un o latin), le second c'est "linuxfr.org" (un o grec, copié collé depuis le commentaire de Thomas DEBESSE).

                      Le script pour ceux que ça intéresse :

                      #!/bin/bash
                      
                      function to_bin()
                      {
                              declare -A tab=([0]="0 0 0 0" [1]="0 0 0 1" [2]="0 0 1 0" [3]="0 0 1 1" [4]="0 1 0 0" [5]="0 1 0 1" [6]="0 1 1 0" [7]="0 1 1 1" [8]="1 0 0 0" [9]="1 0 0 1" [A]="1 0 1 0" [B]="1 0 1 1" [C]="1 1 0 0" [D]="1 1 0 1" [E]="1 1 1 0" [F$
                      
                              echo ${tab[$1]}
                      }
                      
                      echo "P1"
                      echo "32 16"
                      
                      for line in $(echo "linuxfr.οrg" | sha512sum | cut -d\  -f1 | fold -w 8 | tr '[:lower:]' '[:upper:]')
                      do
                              for char in $(echo $line | fold -w 1)
                              do
                                      printf "$(to_bin $char) "
                              done
                              printf "\n"
                      done

                      Ca s'utilise comme ça :

                      ./monohash > test2.pbm
                      convert test2.pbm test2.png
                      • [^] # Re: Les différences

                        Posté par . Évalué à 2.

                        Tu peux peut être essayer avec des symboles plus "gros". Genre au lieu d'avoir un bit pour un pixel, tu utilises 4 bits à piocher dans 16 symboles différents. Cela sera un peu mieux.

                        "La première sécurité est la liberté"

                        • [^] # Re: Les différences

                          Posté par . Évalué à 2.

                          Tu peux utiliser des 'T' avec des rotations, cela fera une serie de dessin par combinaison entre eux :
                          oxo
                          oxo
                          xxx

                          "La première sécurité est la liberté"

                          • [^] # Re: Les différences

                            Posté par . Évalué à 1.

                            J'ai 2 ou 3 idées un peu différentes, mais la grande difficulté c'est de trouver du temps pour les implémenter.

                            J'ai une autre question / remarque. Le hash de hash de hash c'est pas un peu spécial ? sha512, c'est pas la concaténation de sha256 et de sha256 de sha256 si ?

                            Si tu as besoin de 22 flottants, avec 512 bits, tu peux faire des paquets de 19 bits et avec une simple règle de 3 les transformer en flottants entre 0 et 1 avec une précision de 1 / 219 soit environ 2e-6 si je ne me trompe pas. Ca serait pas suffisant ?

                            • [^] # Re: Les différences

                              Posté par . Évalué à 2.

                              J'ai essayé d'implémenter ça vite fait pour rigoler. Résultat 22 nombres entre 0 et 1. C'est pas mieux sans le triple hash ?

                              #!/bin/bash
                              
                              IFS= read -r
                              
                              sha512=$(echo $REPLY | sha512sum | cut -d\  -f1  | tr '[:lower:]' '[:upper:]')
                              sha512bin=$(echo "ibase=16;obase=2;$sha512" | BC_LINE_LENGTH=0 bc -l | cut -c -$((22*19)))
                              
                              for n in $(echo $sha512bin | fold -w 19)
                              do
                                      echo "obase=10;ibase=2;$n/1111111111111111111" | bc -l
                              done

                              Exemple :

                              # echo "linuxfr.org" | ./hash2float
                              .70114078739316443093
                              .58599202345280352173
                              .57654490765553980930
                              .06840718919217909274
                              .37503123289343432127
                              .51660064048889253405
                              .88046814054134472149
                              .99033544604386528752
                              .67321905750094890775
                              .80426941732295479384
                              .00217056688416840394
                              .42088398148342415509
                              .20332756677163461996
                              .34988279320295944778
                              .59294241512759233015
                              .76314499501227381186
                              .36396477501826289799
                              .72320694581402933889
                              .41462977338747670646
                              .25298548314186695454
                              .74957609095781508982
                              .54867467627463583876
                              • [^] # Re: Les différences

                                Posté par . Évalué à 0.

                                L’intérêt du triple hash est aussi que des bits de poids faible (donc avec peu d'effet) soit réutilisé ensuite pour générer des bits de poids fort. Mais bon, si cela a un intérêt, cela serait pour palier une faiblesse de sha512. Donc, oui, cela revient presque au même.

                                "La première sécurité est la liberté"

                                • [^] # Re: Les différences

                                  Posté par . Évalué à 3.

                                  si un algo de hashage a une vulnérabilité l'utiliser 3 fois en boucle n'apporte pas plus de sécurité.

                                  • [^] # Re: Les différences

                                    Posté par . Évalué à 2.

                                    Si quand même. C'est pour cela qu'il y plusieurs "tour" en interne, souvent les attaques se font sur des versions simplifiées. En cas de collision par exemple, rajouter un tour, rend l'attaque beaucoup plus complexe à exploiter.

                                    "La première sécurité est la liberté"

    • [^] # Re: Les différences

      Posté par . Évalué à 9.

      $ echo linuxfrorg | ./ghash -o linuxfrorg.jpg

      linuxfrorg

      "La première sécurité est la liberté"

    • [^] # Re: Les différences

      Posté par (page perso) . Évalué à 7. Dernière modification le 08/11/16 à 03:38.

      Ou bien avec un o cyrilique aussi, pour voir.

      Je n’ai pas essayé le o cyrillique mais j’ai essayé le o grec (omicron). Voici mon script utf8ghash.sh (qui par ailleurs révèle un problème de la gestion du ο (omicron) par dash, d’où l’usage de bash, un bug à remonter):

      #! /usr/bin/env bash
      
      listNames () {
          cat <<-EOF
          totoro
          tοtoro
          totοro
          totorο
          tοtοro
          totοrο
          tοtοrο
          EOF
      }
      
      mkdir -p pic
      for name in $(listNames)
      do
          echo "${name}" | ghash -o "pic/${name}.jpg"
      done
      
      convert pic/t[oο]t[oο]r[oο].jpg +append pic/utf8ghash.jpg
      
      #EOF

      Résultat :

      utf8ghash

      ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: Les différences

        Posté par (page perso) . Évalué à 2.

        Pour ceux qui souhaitent s’amuser :

        o latin          : o
        o grec (omicron) : ο
        o cyrillique     : о
        

        ce commentaire est sous licence cc by 4 et précédentes

      • [^] # Re: Les différences

        Posté par (page perso) . Évalué à 9.

        Finalement :

        #! /usr/bin/env bash
        
        listO () {
            # latin 'o'
            echo 'o'
            # greek 'o' (omicron)
            echo 'ο'
            # cyrillic 'o'
            echo 'о'
        }
        
        mkdir -p pic
        for i in $(listO)
        do
            mkdir -p "pic/${i}"
            for j in $(listO)
            do
                for k in $(listO)
                do
                    name="t${i}t${j}r${k}"
                    echo "${name}" | ghash -o "pic/${i}/${name}.jpg"
                done
            done
            convert pic/${i}/t[oοо]t[oοо]r[oοо].jpg +append "pic/${i}/utf8ghash.${i}.jpg"
        done
        
        convert pic/[oοо]/utf8ghash.[oοо].jpg -append pic/utf8ghash.oοо.jpg
        
        #EOF

        Résultat :

        utf8ghash.oοо.jpg

        ce commentaire est sous licence cc by 4 et précédentes

  • # Vérification/réconciliation

    Posté par . Évalué à 1.

    As tu implémenté une méthode de réconciliation entre une image proposée et celle attendue ?

    J'ai regardé rapidement dans le code mais moi le go…

    • [^] # Re: Vérification/réconciliation

      Posté par . Évalué à 2.

      image proposé ? Comment ça ?

      ghash fonctionne comme sha512 sauf qu'il y a une image en sorti et non une string en hexa.

      "La première sécurité est la liberté"

    • [^] # Re: Vérification/réconciliation

      Posté par . Évalué à 5.

      J'ai compris ta question :)

      Le but est que cela soit ton oeil/cerveau qui le fait. Imagines que ton navigateur génère des petites images pour icône de fichier à charger, ton navigateur de fichier pourrais les régénérer depuis ton disque local, et tu verrais immédiatement un problème si besoin.

      On peut imaginer aussi proposer un avatar unique par personne (depuis l'adresse mail). Github le fait avec son propre système.

      "La première sécurité est la liberté"

  • # En python :

    Posté par . Évalué à 2.

    J’ai essayé de faire quelque chose de similaire il y a quelque temps, c’est en python (en interne c’est du sha256) : https://github.com/luxcem/vizhash, le but était de faire quelque chose de plutôt joli, j’aimerais bien savoir si cryptographiquement c’est sûr…

    • [^] # Re: En python :

      Posté par . Évalué à 2.

      Cela dépend de Random() beaucoup de générateur pseudo aléatoire utilise une seed de 32 bits uniquement. Cela donne 232 test à faire seulement.

      "La première sécurité est la liberté"

  • # en bash

    Posté par . Évalué à 7.

    très sympa !

    comme je trouve qu'installer golang pour lancer un exe est un peu too much,
    voici une version (non exacte) en bash :

    #!/bin/bash
    
    function hache {
        sha512sum <(echo -n "$1") | cut -d\  -f1
    }
    
    function geninput {
        md1=$(hache "$1")
        md2=$(hache "$md1")
        (echo "scale=5"; echo -n "$md1$md2" | fold -w 8 | head -n 23 | while read h;
        do
            echo "$(( 0x$h + 0 )) / 2^32"
        done) | bc | tr '\n' ','
    }
    
    o=${2-ghash.jpg}
    s=${3-32}
    
    ./gmic ghash.gmic -ghash $s,$(geninput "$1") -o $o

    hello world

    linuxfr.org

    PS : comme l'indique ton wrapper go, il faut une version récente de gmic. La 1.6.8 inclue dans debian stable ne comprend pas "-solidify". J'ai pris la dernière version statique disponible sur le site de gmic.

    • [^] # Re: en bash

      Posté par . Évalué à 2.

      golang ? ghash est un exe sans aucune dépendance. ./gh ne sert qu'au debug. J'ai du mal à vérifier ta génération des nombres entre 0 et 1.0 mais elle est primordiale dans la sécurité. Il ne faut surtout pas jouer avec.

      "La première sécurité est la liberté"

      • [^] # Re: en bash

        Posté par . Évalué à 4. Dernière modification le 08/11/16 à 10:15.

        J'aime bien :

        ghash est un exe

        puis

        elle est primordiale dans la sécurité

        Nous n'avons pas les mêmes pratiques de sécurité : j'évite d'installer un exe qui vient de n'importe où. Soit c'est un package officiel de ma distribution, soit je compile en examinant tant que faire se peut les sources. Ça tombe bien, la source go est relativement simple. Donc soit j'installais golang soit je traduisais avec les outils que j'ai sur mon poste : bash, coreutils, sha512 et bc en l’occurrence.

        Je trouve ça bien plus primordiale que la génération rigoureuse d'images psychédéliques. Si tu sais lire le bash (tu peux lancer le script avec bash -x au lieu de bash pour voir ce qu'il fait), je veux bien que tu me dise en quoi ma génération de floats est moins secure que la tienne. Ou inversement.

        PS: d'ailleurs tu le donnes pas l'exe ou j'ai loupé un truc ? Donc il faut bien compiler le go.

        • [^] # Re: en bash

          Posté par . Évalué à 3.

          PS: d'ailleurs tu le donnes pas l'exe ou j'ai loupé un truc ? Donc il faut bien compiler le go.

          Il y a une release v1Alpha dans github, ou alors j'ai raté un truc.

          "La première sécurité est la liberté"

          • [^] # Re: en bash

            Posté par . Évalué à 3.

            Dans les releases, en effet.
            Désolé pas eu le réflexe de regardé.
            Mais ça m'a pas manqué, comme je l'expliquais ;)

  • # des bits et des boole

    Posté par . Évalué à 6.

    C'est marrant, si on mélange ton script avec ça https://linuxfr.org/users/mrlapinot/journaux/deep-nsfw-dreams-bis je suis certain que l'on peut faire des avatars super cool (quoique un peu glauques) pour un forum de site porno…

    • [^] # Re: des bits et des boole

      Posté par (page perso) . Évalué à 2.

      ça me rassure de ne pas être le seul à y avoir pensé en voyant les images proposées par ce commentaire de illwieckz<

      (non, je ne vous dirai pas ce que j'ai vu à la 3e image du haut, ni à la 5e, ni à la 8e, ni à la 1ère du bas)

      bon, pour la 4e du bas, je vois bien une partie de l'anatomie de spider-man mais je ne réussis pas à reconnaître laquelle, je suis une burne^W^Wun sous-doué au test de Rorschach : à chaque fois, je ne vois que des papillons ayant des ailes bizarres /o\

  • # à quoi ça sert ?

    Posté par . Évalué à 4.

    Ma question peut peut-être être mal interprété en "mais ça sert à rien ton truc", mais ce n'est pas intention, c'est une vrai question : que peut-on faire avec cela, quelles sont les applications pratiques ?

    j'en imagine quelques unes, par exemple fournir un avatar par défaut à chacun sur linuxfr.org en se basant sur les pseudos, ça peut-être cool, et dans ce cas même s'il y a une "collision" (deux images (pour deux pseudos différents) qui ne seraient pas facilement distinguables à l'oeil nu) ce n'est pas bien grave.

    Mais je suis sûr que je passe à coté d'utilisations qui peuvent sembler évidentes à certains, donc merci de m'éclairer

    • [^] # Re: à quoi ça sert ?

      Posté par . Évalué à 7.

      Historiquement, les premiers identicons ont été fait pour représenter des adresses IP d'utilisateur. github les utilise comme avatars à partir des adresses mail.

      Moi, je pensais plus à une représentation sympathique de clef publique gpg. On identifie ensuite tout de suite un changement de clef.

      Beaucoup de système d'identification fort ont besoin de vérification de hash de clef. Ici, j'essaye de rendre cette vérification "triviale". C'est moins sûr qu'une vérification complète, mais c'est mieux que de ne rien faire.

      Quand on charge un fichier sur ftp, il est souvent accompagné d'un fichier.md5 ou fichier.sha256 qui contient son hash (bizarre qu'aucun client ftp ne propose de vérification automatique d'ailleurs). Ici, cela serait possible de montrer l'image et de la régénérer en local pour vérification.

      En gros, partout où tu utilises un hash type sha256 'à la main', tu pourrais utiliser ghash.

      "La première sécurité est la liberté"

      • [^] # Re: à quoi ça sert ?

        Posté par . Évalué à 5.

        C'est aussi ce qui est utilisé de façon textuel pour vérifier des fingerprint si je ne m'abuse.

        Tous les contenus que j'écris ici sont sous licence CC0 (j'abandonne autant que possible mes droits d'auteur sur mes écrits)

      • [^] # Re: à quoi ça sert ?

        Posté par (page perso) . Évalué à 4.

        bizarre qu'aucun client ftp ne propose de vérification automatique d'ailleurs

        FTP étant un protocole généraliste et peu fiable du fait qu'il ne garantit ni intégrité, ni confidentialité(*), c'est peu étonnant que les clients soient tout autant pourraves^Wpauvres…
        sftp (secure FTP basé sur le sous-système de SSH) est lui bien plus fiable sur ces deux points : au moins le code retour d'un scp a du sens sur l'intégrité et, le fait d'être basé sur SSH, assure la confidentialité de ce qui est transféré.

        (*) c'est ballot, mais le code retour d'un client ftp « automatisé » est le plus souvent 0, qui correspond à la bonne exécution de la commande quit ou exit dans le FTP… généralement, seul le mode « debug » est suffisamment verbeux pour tenter d'analyser si tout s'est bien transféré… c'est, au mieux, ballot (surtout quand cela se retrouve localisé, ok ça devient plus lisible par ceux ne lisant pas l'anglais, mais va automatiser cela, hormis d'avoir le réflexe de rajouter LANG=C devant tout lancement de commande).

        PS : oui, je suis aigri depuis plus de 10 ans de ceux qui suggèrent encore au XXIe siècle d'utiliser FTP pour des transferts de fichiers parce que c'est « prévu pour » vu que ça s'appelle Fichier(s) Transfert Protocol /o\. Et oui, j'ai dû commettre des wrappers à cette sombre bouse qu'il faut penser à mettre en PASV (passif) dès que tu as un coupe-feu à passer, sans garantie d'acheminement au final, à peine mieux que le mail quoi… j'ai même vu déployer des EAI pour déclencher des transferts FTP (mais je ne peux pas tout dire, sinon je vais vraiment m'énerver :D non je ne vais pas vous parler non plus de FTPS).

        Pour terminer sur une note positive : FileZilla gère le SFTP :-)

        • [^] # Re: à quoi ça sert ?

          Posté par (page perso) . Évalué à 2.

          Tu as oublié le plus drôle: le format de la liste des fichiers n'est même pas défini dans le protocole. Du coup c'est largement mieux de faire un ssh et de lancer un ls avec les bonnes options, ou même de parser un listing généré par un serveur HTTP, qui sera au moins un peu structuré avec des balises XML, lui.

      • [^] # Re: à quoi ça sert ?

        Posté par (page perso) . Évalué à 3.

        github les utilise comme avatars à partir des adresses mail.

        Historiquement, c'est surtout Gravatar qui fait ça, mais d'ailleurs tu es sur que c'est vraiment ça qu'ils font, qu'ils ne génèrent pas juste une image "réellement" aléatoire et qu'ensuite ils utilisent le hash de l'email juste pour la retrouver (celle-là, générée auto, ou celle que tu as uploadé) dans leur base?

        En fait, apparemment ils utilisent Gravatar eux-même.

      • [^] # Re: à quoi ça sert ?

        Posté par (page perso) . Évalué à 0.

        github les utilise comme avatars à partir des adresses mail.

        Historiquement, c'est surtout Gravatar qui fait ça, mais d'ailleurs tu es sur que c'est vraiment ça qu'ils font, qu'ils ne génèrent pas juste une image "réellement" aléatoire et qu'ensuite ils utilisent le hash de l'email juste pour la retrouver (celle-là, générée auto, ou celle que tu as uploadé) dans leur base?

        En fait, apparemment ils utilisent Gravatar eux-même.

    • [^] # Re: à quoi ça sert ?

      Posté par . Évalué à 2.

      il existe des applications similaires sur android pour créer effectivement un avatar différent pour tous les contacts, cf celui ci : https://f-droid.org/repository/browse/?fdfilter=contact&fdid=com.germainz.identiconizer

      copie d'écran : http://dl-1.va.us.xda-developers.com/2/7/8/1/1/8/7/Screen2.png?key=up4UaGsOd259j18kz6aB8w&ts=1478601193

      Cela pourrait servir de base pour une nouvelle appli, ou pour rajouter en module à thunderbird etc

    • [^] # Re: à quoi ça sert ?

      Posté par . Évalué à 5.

      Ça peut servir à identifier une personne de façon certaine dans un site sans inscription. Il y a eu, il y a quelques mois, une polémique sur les blogs hébergés sur lemonde.fr : un utilisateur se faisait passer pour d'autres et commentait avec leur pseudo. En effet, il n'y a pas d'identifiant : sur ces blogs, tu n'as qu'à mettre ton pseudonyme dans le champ 1, ton commentaire dans le champ 2, et le site affiche à tous le commentaire sous le pseudonyme en question. Donc si tu n'aimes pas une personne, tu peux poster, mettre "Liorel" en pseudonyme et insulter les autres utilisateurs. Tout le monde croira que c'était moi.

      Avec cette technique, un utilisateur donné a deux identifiants : un pseudonyme (public) et une chaîne de caractères (hachée, secrète). Si tu essaies de te faire passer pour moi, tu peux afficher mon pseudonyme, mais je suis le seul à connaître ma chaîne de caractères. Donc si tu décides d'insulter les autres sous mon pseudo, tout le monde saura que c'est une usurpation, et personne ne te prendra au sérieux.

      Ça, ce sont les sources. Le mouton que tu veux est dedans.

      • [^] # Re: à quoi ça sert ?

        Posté par . Évalué à 2. Dernière modification le 08/11/16 à 15:30.

        L'identité secrète peut être un hash de l'ip ou d'une empreinte du navigateur.

        D'ailleurs, je pense que cela peut être utile d'avoir un hash "multiple". L'ip d'un utilisateur n'est pas forcément unique, il n'utilise pas forcément toujours le même navigateur, il ne conserve pas forcément ces cookies.

        On peut faire ce genre de choses avec 4 images, pour faire des trucs qui se ressemble "presque".

        Si ghash est utilisé je regarderais un moyen de faire ce genre d'image ayant plusieurs sources. Cela me semble plus utile que de complexifier le générateur pour atteindre les 2256 images possibles.

        "La première sécurité est la liberté"

        • [^] # Re: à quoi ça sert ?

          Posté par . Évalué à 3.

          Tu donnes le contre-argument à ta propre objection. Je consulte linuxfr et lemonde.fr depuis le boulot (W10/Firefox, IP du boulot) et depuis chez moi (Archlinux/Firefox, IP de ma box, coupée en 4 parce que Free).

          Il ne faut pas oublier qu'on parle d'une image de 20x20 pixels, qui doit être accessible au tout-venant. Discerner qu'un usurpateur a une image différente de la mienne, c'est facile. Discerner que j'ai la même image dans le coin en haut à droite (qui fait donc 10x10 pixels), mais que les 3 autres coins sont différents de d'habitude, mais c'est moi quand même, c'est beaucoup moins simple.

          Ça, ce sont les sources. Le mouton que tu veux est dedans.

          • [^] # Re: à quoi ça sert ?

            Posté par . Évalué à 2.

            Discerner que j'ai la même image dans le coin en haut à droite (qui fait donc 10x10 pixels), mais que les 3 autres coins sont différents de d'habitude, mais c'est moi quand même, c'est beaucoup moins simple.

            Je n'ai pas dis que le problème était simple :) J'ai dis qu'une solution pourrait être utile.

            "La première sécurité est la liberté"

      • [^] # Re: à quoi ça sert ?

        Posté par (page perso) . Évalué à 1.

        Avec cette technique, un utilisateur donné a deux identifiants : un pseudonyme (public) et une chaîne de caractères (hachée, secrète).

        Ben c'est un login et un mot de passe, ce que tu décris, donc une identifiant classique, simplement renommée. Sauf que s'il faut le mettre à chaque commentaire, c'est un site qui se "souvient" pas de l'utilisateur, obligeant à remettre son mdp à chaque action nécessitant une identification et c'est juste chiant (quand on est sur un ordi perso).
        En outre, si le hash est publique (sous une forme graphique), ça veut dire qu'on peut savoir quand quelqu'un d'autre a le même mot de passe que nous, ce qui arrivera très souvent, puisque — on le sait — certains mots de passe sont classiques et communs à beaucoup. Pire! Puisque vous appelez pas ça "mot de passe" et que donc le risque semble moindre (ainsi que les conséquences relativement limitées. Après tout comme tu le dis, on peut aussi faire sans identification du tout pour les commentaires), cela incite à toujours utiliser des mots courants, simples et courts sans se prendre la tête.
        C'est idiot et purement psychologique, mais quand on me demande de créer un mot de passe, je m'arrête quelques moments pour réfléchir, ou mieux je génère un mdp aléatoire.
        Par contre si on me demande juste une chaîne quelconque pour utilisation quasi unique (mais que je dois pourtant mémoriser puisque le but annoncé est de pouvoir vérifier que je suis le même derrière plusieurs commentaires, donc décidément c'est un mot de passe!), sans mettre l'emphase sur la sécurité, alors je te sortirais des "salut", "test", "plop", "bla", "foo", voire le nom du site sur lequel on est… Et je suis sûr que je serai pas le seul, donc au final quelqu'un avec les mêmes chaînes connaîtra la mienne aussi et pourra se faire passer pour moi.

        Voire n'importe qui pourrait s'amuser à faire du brute force sur chaque id. En fait, en faisant cela, tu fuiterais ta base de données de hash de mots de passe, tout simplement (Et probablement des mots de passe faibles en plus, si tu n'as pas mis l'emphase sur le fait que si, ce sont des MDPs).

        Film d'animation libre en CC by-sa/Art Libre, fait avec GIMP et autre logiciels libres: ZeMarmot [ http://film.zemarmot.net ]

        • [^] # Re: à quoi ça sert ?

          Posté par (page perso) . Évalué à 3.

          même s'il ne l'a pas précisé, je pense qu'il souhaitait faire découler la génération de l'image de la concaténation de pseudo + chaîne, ce qui complique la tâche de l'attaquant.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.