{"id":1707,"date":"2014-07-11T15:51:38","date_gmt":"2014-07-11T13:51:38","guid":{"rendered":"http:\/\/blog.nebule.org\/?p=1707"},"modified":"2016-03-29T19:01:12","modified_gmt":"2016-03-29T17:01:12","slug":"prise-dempreinte-homomorphique","status":"publish","type":"post","link":"http:\/\/blog.nebule.org\/?p=1707","title":{"rendered":"Prise d&#8217;empreinte homomorphique"},"content":{"rendered":"<p style=\"text-align: justify;\">Les objets manipul\u00e9s par <a title=\"Projet nebule\" href=\"http:\/\/www.nebule.org\" target=\"_blank\">nebule<\/a> sont identifi\u00e9s, et donc r\u00e9f\u00e9renc\u00e9s, par leurs empreintes respectives. Ces empreintes sont cryptographiques afin de pouvoir s&rsquo;assurer que c&rsquo;est bien le bon objet, afin de pouvoir avoir confiance dans l&rsquo;int\u00e9grit\u00e9 de son contenu. Il est possible dans un seul cas d&rsquo;avoir plus d&rsquo;une empreinte par objet, c&rsquo;est si celles-ci sont calcul\u00e9es avec des algorithmes diff\u00e9rents (cf <a title=\"Collisions d'empreintes multi-algorithmique\" href=\"http:\/\/blog.nebule.org\/?p=319\" target=\"_blank\">Collisions d&#8217;empreintes multi-algorithmique<\/a>).<\/p>\n<p style=\"text-align: justify;\">Cependant, si la propri\u00e9t\u00e9 cryptographique des empreintes est indispensable \u00e0 la confiance, elle entra\u00eene un manque de souplesse dans le r\u00e9f\u00e9rencement des objets. Rien dans la valeur de l&#8217;empreinte ne trahis une partie de son contenu. L&#8217;empreinte cryptographique refl\u00e8te uniquement l&rsquo;int\u00e9gralit\u00e9 de l&rsquo;objet. On ne peux pas s&rsquo;en servir pour retrouver des objets proches dans leur contenu. Tout au plus peut-on v\u00e9rifier si deux objets sont identiques&#8230; ce qui n&rsquo;a pas d&rsquo;int\u00e9r\u00eat puisque dans ce cas c&rsquo;est tout simplement le m\u00eame objet.<\/p>\n<h2 style=\"text-align: justify;\">Sub-division d&rsquo;objet<\/h2>\n<p style=\"text-align: justify;\">La premi\u00e8re solution pour r\u00e9soudre ce probl\u00e8me est d&rsquo;utiliser des sous-parties d&rsquo;un objet comme des objets propres, et de les identifier comme tels. Le lien de type <code>s<\/code> permet justement de li\u00e9 l&rsquo;objet principal \u00e0 ses morceaux.<\/p>\n<p style=\"text-align: justify;\">C&rsquo;est notamment ce qui est fait dans les logiciels de Paire-\u00e0-Paire (P2P &#8211; Peer to Peer). Pour qu&rsquo;un fichier puisse \u00eatre t\u00e9l\u00e9charg\u00e9 depuis de multiples sources, celui-ci est pr\u00e9-d\u00e9coup\u00e9 en morceaux de taille identique pr\u00e9-d\u00e9finit. Chaque morceau \u00e0 une empreinte propre et peut \u00eatre v\u00e9rifi\u00e9 \u00e0 la r\u00e9ception. Chaque morceau est t\u00e9l\u00e9charg\u00e9 sur une et une seule source, mais plusieurs morceaux sont t\u00e9l\u00e9charg\u00e9s simultan\u00e9ment depuis plusieurs sources. On augmente ainsi le d\u00e9bit r\u00e9el de r\u00e9ception du fichier voulu m\u00eame si les sources ont individuellement un faible d\u00e9bit d&rsquo;\u00e9mission. \u00c9videmment, si chaque morceau est valide, le fichier dans son ensemble ne peut qu&rsquo;\u00eatre valide.<\/p>\n<p style=\"text-align: justify;\">Une recherche sur mot cl\u00e9 peut avantageusement tirer partie de ce syst\u00e8me puisqu&rsquo;une recherche se fera uniquement sur l&#8217;empreinte du morceau correspondant \u00e0 la recherche. Toute la difficult\u00e9 est de bien choisir ces morceaux.<\/p>\n<p style=\"text-align: justify;\">Pour du texte, c&rsquo;est facile. Pour une recherche sur des images ou des vid\u00e9os, c&rsquo;est d\u00e9j\u00e0 beaucoup moins \u00e9vident. Mais quoique l&rsquo;on trouve, c&rsquo;est toujours une liste d&rsquo;objets qui contiennent cette petite sous-partie m\u00eame si le reste n&rsquo;a absolument aucun rapport.<\/p>\n<h2 style=\"text-align: justify;\">Empreinte homomorphique<\/h2>\n<p style=\"text-align: justify;\">Une autre solution consiste \u00e0 essayer de trouver des objets qui ont le plus de contenu en commun. Ce serait une sorte de repr\u00e9sentation miniature du contenu de l&rsquo;objet. On veut quelque chose qui se rapproche plus de l&#8217;empreinte des doigts de pieds. On regarde d&rsquo;abord que cela \u00e0 bien la forme d&rsquo;un pied, puis on regarde plus en d\u00e9tail certaines parties morphologiques pour d\u00e9terminer si les deux pieds sont proches.<\/p>\n<p style=\"text-align: justify;\">On pourrait partir sur le syst\u00e8me de sous-d\u00e9coupage utilis\u00e9 par le P2P. Chaque objet est d\u00e9coup\u00e9 en petits morceaux de taille identique. Ainsi, si deux objets ont un ou des morceaux en commun, on pourra en d\u00e9duire que ceux-ci sont proches.<br \/>\nMais cette m\u00e9thode pose un probl\u00e8me. Si on prend un objet et que l&rsquo;on en fait une copie avec pour seule diff\u00e9rence un caract\u00e8re suppl\u00e9mentaire dans le premier bloc de donn\u00e9es, alors tous les blocs seront vus comme diff\u00e9rents alors que les objets ont clairement des parties communes.<br \/>\nOn pourrait imaginer essayer d&rsquo;optimiser la m\u00e9thode en travaillant sur des blocs de tailles variables. Mais quels crit\u00e8res adopter pour ajuster les tailles de blocs en fonction des donn\u00e9es ?<\/p>\n<p style=\"text-align: justify;\">Je propose une m\u00e9thode comme base de r\u00e9flexion \u00e0 d\u00e9faut pour l&rsquo;instant d&rsquo;\u00eatre adopt\u00e9e.<br \/>\nSi on regarde le travail d&rsquo;un logiciel de compression de donn\u00e9es, on constate qu&rsquo;il recherche les occurrences multiples de donn\u00e9es dans l&rsquo;ensemble d&rsquo;un document. Il le fait sans tenir compte de la s\u00e9mantique de ce qu&rsquo;il trouve. Ainsi des mots tr\u00e8s proches s\u00e9mantiquement ne seront pas agr\u00e9g\u00e9s parce que diff\u00e9rents. Ensuite, le logiciel de compression fait un classement statistique pour d\u00e9terminer les occurrences multiples qu&rsquo;il serait avantageux de r\u00e9duire. Une phrase qui appara\u00eet quelques fois permet une bonne optimisation. Un mot qui appara\u00eet plusieurs permet aussi un gain de place facile.<br \/>\nSi on reprend le m\u00eame principe d&rsquo;analyse, m\u00eame sans tenir compte de la s\u00e9mantique des mots, on peut s&rsquo;attendre \u00e0 ce que les plus grandes occurrences de mots ou de phrases repr\u00e9sentent le ou les sujets du document. C&rsquo;est ce que fontnotamment les moteurs de recherches (Google, Bing, Yahoo&#8230;) lorsqu&rsquo;ils moulinent les pages web, mais avec l&rsquo;analyse s\u00e9mantique en plus.<br \/>\nL&#8217;empreinte homomorphique est constitu\u00e9e des 20 premi\u00e8res occurrences redondantes avec leur poids respectifs. L&rsquo;occurrence peut \u00eatre repr\u00e9sent\u00e9e par une petite empreinte (CRC) de fa\u00e7on \u00e0 avoir une taille fixe, mettons 16 caract\u00e8res hexad\u00e9cimaux. Le poids peut \u00eatre repr\u00e9sent\u00e9 en pourcentage sur 4 caract\u00e8res hexad\u00e9cimaux (entre <code>0000<\/code> et <code>ffff<\/code>).<br \/>\nVue comme \u00e7a, l&#8217;empreinte g\u00e9n\u00e9r\u00e9e n&rsquo;est plus tout \u00e0 fait homomorphique et n&rsquo;a pas de propri\u00e9t\u00e9s cryptographique.On obtient une empreinte homomorphique de 400 caract\u00e8res hexad\u00e9cimaux.<\/p>\n<p style=\"text-align: justify;\">Ainsi, plusieurs documents parlants d&rsquo;un m\u00eame sujet ont de fortes chances d&rsquo;avoir une m\u00eame empreinte parque bien que diff\u00e9rents ils auront les m\u00eames occurrences redondantes.<\/p>\n<p style=\"text-align: justify;\">Un certain nombre de donn\u00e9es annexes vont figurer dans les donn\u00e9es utilis\u00e9es pour la comparaison. Par exemple on peut retrouver les en-t\u00eates internes des documents bureautique. Il faut peut-\u00eatre pr\u00e9-filtrer les documents en fonction de leur type pur. Par exemple, un simple fichier texte et un fichier complexe de traitement de texte se verront expurg\u00e9s de tout ce qui est en-t\u00eate et donn\u00e9es internes, puis on en gardera que les caract\u00e8res imprimables convertis en minuscule, sans ponctuation&#8230;<\/p>\n<h2 style=\"text-align: justify;\">Conclusion<\/h2>\n<p style=\"text-align: justify;\">Une empreinte homomorphique peut \u00eatre utilis\u00e9e avantageusement en compl\u00e9ment de l&#8217;empreinte cryptographique. Elle n&rsquo;a d&rsquo;int\u00e9r\u00eat que pour des objets ayant suffisamment de contenu. Il faut pr\u00e9voir un seuil minimum en dessous duquel elle n&rsquo;est pas calcul\u00e9e. Cette empreinte homomorphique est li\u00e9e \u00e0 l&rsquo;objet par un lien de type l avec comme objet m\u00e9ta \u00ab\u00a0nebule\/objet\/homomorphe\u00a0\u00bb. Cet objet \u00e0 usage r\u00e9serv\u00e9 est ajout\u00e9 \u00e0 la <a title=\"Objets r\u00e9serv\u00e9s\" href=\"http:\/\/wiki.nebule.org\/index.php\/Documentation_-_nebule_v1.2#Objets_.C3.A0_usage_r.C3.A9serv.C3.A9\" target=\"_blank\">documentation<\/a>.<\/p>\n<p style=\"text-align: justify;\">Mais dans tous les cas, en l&rsquo;absence de propri\u00e9t\u00e9s cryptographique, <strong><span style=\"color: #ff0000;\">une empreinte homomorphique <span style=\"text-decoration: underline;\">ne doit pas<\/span> \u00eatre utilis\u00e9e dans les liens<\/span><\/strong>. L&rsquo;usage n&rsquo;est pas le m\u00eame, on fait soit de l&rsquo;<em>int\u00e9grit\u00e9<\/em>, soit du <em>r\u00e9f\u00e9rencement<\/em>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Les objets manipul\u00e9s par nebule sont identifi\u00e9s, et donc r\u00e9f\u00e9renc\u00e9s, par leurs empreintes respectives. Ces empreintes sont cryptographiques afin de pouvoir s&rsquo;assurer que c&rsquo;est bien le bon objet, afin de pouvoir avoir confiance dans l&rsquo;int\u00e9grit\u00e9 de son contenu. Il est possible dans un seul cas d&rsquo;avoir plus d&rsquo;une empreinte par objet, c&rsquo;est si celles-ci sont &hellip; <a href=\"http:\/\/blog.nebule.org\/?p=1707\" class=\"more-link\">Continuer la lecture de <span class=\"screen-reader-text\">Prise d&#8217;empreinte homomorphique<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[72,3,4,93,96,110,24],"tags":[],"_links":{"self":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1707"}],"collection":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1707"}],"version-history":[{"count":1,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1707\/revisions"}],"predecessor-version":[{"id":2183,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=\/wp\/v2\/posts\/1707\/revisions\/2183"}],"wp:attachment":[{"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1707"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1707"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/blog.nebule.org\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1707"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}