{"id":2341,"date":"2023-02-09T10:03:38","date_gmt":"2023-02-09T10:03:38","guid":{"rendered":"https:\/\/harpocrates-project.eu\/quest-ce-que-le-chiffrement-homomorphe-hybride-et-ses-applications\/"},"modified":"2023-09-12T09:24:24","modified_gmt":"2023-09-12T09:24:24","slug":"quest-ce-que-le-chiffrement-homomorphe-hybride-et-ses-applications","status":"publish","type":"post","link":"https:\/\/harpocrates-project.eu\/fr\/quest-ce-que-le-chiffrement-homomorphe-hybride-et-ses-applications\/","title":{"rendered":"Qu&rsquo;est-ce que le chiffrement homomorphe hybride et ses applications ?"},"content":{"rendered":"<p>[et_pb_section fb_built=\u00a0\u00bb1&Prime; custom_padding_last_edited=\u00a0\u00bbon|phone\u00a0\u00bb _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb background_color=\u00a0\u00bb#1f2437&Prime; background_enable_image=\u00a0\u00bboff\u00a0\u00bb background_position=\u00a0\u00bbcenter_left\u00a0\u00bb custom_padding=\u00a0\u00bb0rem|1rem|0rem|1rem|true|false\u00a0\u00bb custom_padding_tablet=\u00a0\u00bb|2rem|1rem|2rem|false|false\u00a0\u00bb custom_padding_phone=\u00a0\u00bb|1rem||1rem|false|false\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_row custom_padding_last_edited=\u00a0\u00bbon|phone\u00a0\u00bb _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb width=\u00a0\u00bb100%\u00a0\u00bb max_width=\u00a0\u00bb1540px\u00a0\u00bb custom_padding=\u00a0\u00bb||||false|false\u00a0\u00bb custom_padding_tablet=\u00a0\u00bb||||false|false\u00a0\u00bb custom_padding_phone=\u00a0\u00bb1rem||1rem||false|false\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_column type=\u00a0\u00bb4_4&Prime; _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][lwp_divi_breadcrumbs link_color=\u00a0\u00bb#FFFFFF\u00a0\u00bb separator_color=\u00a0\u00bb#FFFFFF\u00a0\u00bb _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb custom_padding_tablet=\u00a0\u00bb1rem||1rem||false|false\u00a0\u00bb custom_padding_phone=\u00a0\u00bb1rem||1rem||false|false\u00a0\u00bb custom_padding_last_edited=\u00a0\u00bbon|phone\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][\/lwp_divi_breadcrumbs][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=\u00a0\u00bb1&Prime; custom_padding_last_edited=\u00a0\u00bbon|phone\u00a0\u00bb _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb custom_padding=\u00a0\u00bb|1rem||1rem|false|true\u00a0\u00bb custom_padding_tablet=\u00a0\u00bb|2rem||2rem|false|true\u00a0\u00bb custom_padding_phone=\u00a0\u00bb|1rem||1rem|false|true\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_row column_structure=\u00a0\u00bb2_3,1_3&Prime; _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb width=\u00a0\u00bb100%\u00a0\u00bb max_width=\u00a0\u00bb1540px\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_column type=\u00a0\u00bb2_3&Prime; _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb border_color_right=\u00a0\u00bb#9b9b9b\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_text _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb header_font=\u00a0\u00bbMontserrat|700|||||||\u00a0\u00bb header_text_color=\u00a0\u00bb#1f2437&Prime; header_font_size=\u00a0\u00bb24px\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb]<\/p>\n<h1 id=\"0938\" class=\"pw-post-title ip iq ir gx b is it iu iv iw ix iy iz ja jb jc jd je jf jg jh ji jj jk jl jm fa\" data-selectable-paragraph=\"\">Qu&rsquo;est-ce que le chiffrement homomorphe hybride et ses applications ?<\/h1>\n<p><b><span>9.2.2023 10:03<\/span><\/b><\/p>\n<p>&nbsp;<\/p>\n<p>[\/et_pb_text][et_pb_text _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb hover_enabled=\u00a0\u00bb0&Prime; global_colors_info=\u00a0\u00bb{}\u00a0\u00bb sticky_enabled=\u00a0\u00bb0&Prime;]<\/p>\n<h1 id=\"da1f\" class=\"lb lc ir gx ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fa\" data-selectable-paragraph=\"\">TL;DR<\/h1>\n<p id=\"bff2\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Introduire le concept de cryptage homomorphique hybride, ses cas d&rsquo;utilisation, une br\u00e8ve formulation et un<a class=\"ae la\" href=\"https:\/\/github.com\/khoaguin\/priv-sec-ai-blog\/tree\/main\/what-is-hhe\" rel=\"noopener ugc nofollow\" target=\"_blank\">code de d\u00e9monstration<\/a><span> <\/span><a class=\"ae la\" href=\"https:\/\/github.com\/khoaguin\/priv-sec-ai-blog\/tree\/main\/what-is-hhe\" rel=\"noopener ugc nofollow\" target=\"_blank\">en C++<\/a>.<\/p>\n<h1 id=\"e512\" class=\"lb lc ir gx ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fa\" data-selectable-paragraph=\"\">Introduction<\/h1>\n<p id=\"5472\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Les applications pr\u00e9servant la vie priv\u00e9e sont devenues un sujet important de nos jours en raison des pr\u00e9occupations croissantes des gens concernant la confidentialit\u00e9 de leurs donn\u00e9es, de la pr\u00e9valence des applications d&rsquo;apprentissage automatique qui n\u00e9cessitent l&rsquo;acc\u00e8s \u00e0 une grande quantit\u00e9 de donn\u00e9es, et des nouvelles r\u00e9glementations telles que le r\u00e8glement g\u00e9n\u00e9ral sur la protection des donn\u00e9es (RGPD), sans parler d&rsquo;autres pr\u00e9occupations \u00e9thiques et financi\u00e8res. Aujourd&rsquo;hui, nous allons d\u00e9couvrir une nouvelle technique d&rsquo;am\u00e9lioration de la confidentialit\u00e9 appel\u00e9e chiffrement homomorphe hybride (HHE), qui est une extension du chiffrement homomorphe (HE).<\/p>\n<p id=\"4dd8\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">L&rsquo;HE est une technique de cryptage qui permet d&rsquo;effectuer des calculs sur des donn\u00e9es crypt\u00e9es. Cependant, l&rsquo;un des probl\u00e8mes de HE est que ses cryptogrammes sont plusieurs ordres de grandeur plus grands que les cryptogrammes correspondants. Le HHE vise \u00e0 r\u00e9soudre ce probl\u00e8me en combinant les chiffrements sym\u00e9triques avec le HE afin de r\u00e9duire la taille des textes chiffr\u00e9s et les ressources informatiques requises pour la partie qui chiffre et envoie les donn\u00e9es (par exemple, un client \/ propri\u00e9taire de donn\u00e9es) au prix de calculs plus co\u00fbteux pour la partie qui effectue des calculs sur les donn\u00e9es chiffr\u00e9es (par exemple, un serveur, un fournisseur de services en nuage, ou CSP). Par cons\u00e9quent, HHE peut \u00eatre plus adapt\u00e9 que HE lorsqu&rsquo;il s&rsquo;agit du mod\u00e8le client-serveur de calculs crypt\u00e9s, en particulier lorsque le client dispose de ressources informatiques et d&rsquo;une bande passante internet limit\u00e9es, par exemple, les t\u00e9l\u00e9phones, les appareils IoT, etc.<\/p>\n<h2 id=\"bc0e\" class=\"me lc ir gx ld mf mg dt lh mh mi dv ll jx mj mk lp kb ml mm lt kf mn mo lx mp fa\" data-selectable-paragraph=\"\">Avantages :<\/h2>\n<ul class=\"\">\n<li id=\"c993\" class=\"mq mr ir gx b jp lz jt ma jx ms kb mt kf mu kj mv mw mx my fa\" data-selectable-paragraph=\"\">Permettre des calculs sur des donn\u00e9es crypt\u00e9es et donc permettre des analyses et des applications de donn\u00e9es pr\u00e9servant la vie priv\u00e9e<\/li>\n<li id=\"ce2a\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj mv mw mx my fa\" data-selectable-paragraph=\"\">R\u00e9duire la taille du texte chiffr\u00e9, et donc r\u00e9duire les ressources de calcul et de bande passante n\u00e9cessaires \u00e0 la partie qui poss\u00e8de, chiffre et envoie les donn\u00e9es.<\/li>\n<\/ul>\n<h2 id=\"4390\" class=\"me lc ir gx ld mf mg dt lh mh mi dv ll jx mj mk lp kb ml mm lt kf mn mo lx mp fa\" data-selectable-paragraph=\"\">Inconv\u00e9nients :<\/h2>\n<ul class=\"\">\n<li id=\"c5ed\" class=\"mq mr ir gx b jp lz jt ma jx ms kb mt kf mu kj mv mw mx my fa\" data-selectable-paragraph=\"\">Plus co\u00fbteux en termes de calcul dans le domaine du calcul crypt\u00e9<\/li>\n<li id=\"11a6\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj mv mw mx my fa\" data-selectable-paragraph=\"\">Actuellement, il est encore limit\u00e9 \u00e0 certains types de donn\u00e9es et de calculs.<\/li>\n<\/ul>\n<h1 id=\"c277\" class=\"lb lc ir gx ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fa\" data-selectable-paragraph=\"\">Cas d&rsquo;utilisation<\/h1>\n<p id=\"1a4b\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Comme l&rsquo;HE, le HHE peut soutenir des applications dans des secteurs o\u00f9 la confidentialit\u00e9 des donn\u00e9es est une pr\u00e9occupation importante, comme la finance, les soins de sant\u00e9, la r\u00e9glementation, etc. En outre, le HHE peut renforcer les applications sur des appareils dont la puissance de calcul, la m\u00e9moire et la bande passante r\u00e9seau sont limit\u00e9es, tels que les appareils embarqu\u00e9s et les appareils IoT.<\/p>\n<p id=\"586a\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Exemple d&rsquo;application : Une application de surveillance \u00e0 domicile pour les soins de sant\u00e9, dans laquelle les appareils IoT \u00e9quip\u00e9s dans un foyer prennent des photos (ou d&rsquo;autres signaux), les cryptent et envoient les signaux crypt\u00e9s au serveur. Le serveur ex\u00e9cute un algorithme d&rsquo;intelligence artificielle sur les donn\u00e9es crypt\u00e9es re\u00e7ues et d\u00e9tecte des \u00e9v\u00e9nements tels que des attaques d&rsquo;apoplexie, puis envoie les r\u00e9sultats crypt\u00e9s \u00e0 l&rsquo;appareil du m\u00e9nage qui est charg\u00e9 de d\u00e9crypter les r\u00e9sultats et de d\u00e9clencher une alarme uniquement si le r\u00e9sultat d\u00e9crypt\u00e9 est positif, par exemple si des personnes ont \u00e9t\u00e9 victimes d&rsquo;une attaque d&rsquo;apoplexie. De cette mani\u00e8re, le m\u00e9nage peut utiliser le service du serveur tandis que le fournisseur de services ne voit pas les photos ou les donn\u00e9es sensibles du m\u00e9nage.<\/p>\n<h1 id=\"e860\" class=\"lb lc ir gx ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fa\" data-selectable-paragraph=\"\">Entrons dans le vif du sujet<\/h1>\n<p id=\"80bc\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Voici quelques br\u00e8ves formulations de l&rsquo;ES et de l&rsquo;ESH.<\/p>\n<h2 id=\"04f4\" class=\"me lc ir gx ld mf mg dt lh mh mi dv ll jx mj mk lp kb ml mm lt kf mn mo lx mp fa\" data-selectable-paragraph=\"\">Chiffrement homomorphe<\/h2>\n<p id=\"c1f6\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Avant d&rsquo;aborder l&rsquo;ES, il faut d&rsquo;abord comprendre ce qu&rsquo;est l&rsquo;ES. Avec HE, nous pouvons crypter les donn\u00e9es et effectuer des op\u00e9rations sur les donn\u00e9es crypt\u00e9es. Le r\u00e9sultat du d\u00e9cryptage sera \u00e9quivalent \u00e0 celui obtenu en effectuant des op\u00e9rations similaires sur les donn\u00e9es en clair correspondantes. Pour mieux comprendre HE, je vous renvoie \u00e0 ce qui suit<span> <\/span><a class=\"ae la\" href=\"https:\/\/blog.openmined.org\/what-is-homomorphic-encryption\/\" rel=\"noopener ugc nofollow\" target=\"_blank\">article de blog<\/a><span> <\/span>d&rsquo;OpenMined.<\/p>\n<p id=\"d2ce\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Nous allons maintenant examiner la d\u00e9finition d&rsquo;un syst\u00e8me de cryptage homomorphe \u00e0 cl\u00e9 publique, qui est tir\u00e9e de [1] et qui se compose de quatre algorithmes :<\/p>\n<ol class=\"\">\n<li id=\"0783\" class=\"mq mr ir gx b jp jq jt ju jx ne kb nf kf ng kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HE.KeyGen<\/strong>(1<em class=\"nj\">\u207f)<\/em> \u2192<span> <\/span><strong class=\"gx ni\">(pk, sk, evk) :<span> <\/span><\/strong>L&rsquo;algorithme de g\u00e9n\u00e9ration de cl\u00e9s.<strong class=\"gx ni\"><span> <\/span><\/strong>Ici,<span> <\/span><em class=\"nj\">n<\/em><span> <\/span>est un param\u00e8tre de s\u00e9curit\u00e9 ;<span> <\/span><strong class=\"gx ni\">pk<\/strong>,<span> <\/span><strong class=\"gx ni\">sk<\/strong><span> <\/span>et<span> <\/span><strong class=\"gx ni\">evk<\/strong><span> <\/span>sont respectivement la cl\u00e9 publique, la cl\u00e9 secr\u00e8te et la cl\u00e9 d&rsquo;\u00e9valuation. Nous utilisons<span> <\/span><strong class=\"gx ni\">pk<\/strong><span> <\/span>pour crypter les donn\u00e9es,<span> <\/span><strong class=\"gx ni\">sk<\/strong><span> <\/span>pour d\u00e9crypter les donn\u00e9es crypt\u00e9es, et<span> <\/span><strong class=\"gx ni\">evk<\/strong><span> <\/span>pour effectuer des calculs sur des donn\u00e9es crypt\u00e9es<\/li>\n<li id=\"e104\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HE.Enc(pk,<span> <\/span><\/strong> m<strong class=\"gx ni\">) \u2192<span> <\/span><\/strong> c<em class=\"nj\">:<span> <\/span><\/em>L&rsquo;algorithme de cryptage HE o\u00f9<span> <\/span> m<span> <\/span>est la donn\u00e9e en clair et<span> <\/span> c<span> <\/span>est la donn\u00e9e crypt\u00e9e HE.<\/li>\n<li id=\"b1b3\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HE.Eval(evk,<span> <\/span><\/strong> f<em class=\"nj\">, c\u2081, c\u2082, &#8230; c\u1d62) \u2192 c&rsquo; :<span> <\/span><\/em>L&rsquo;algorithme d&rsquo;\u00e9valuation<em class=\"nj\"><span> <\/span><\/em>o\u00f9<span> <\/span><em class=\"nj\">f<span> <\/span><\/em>est une fonction telle que l&rsquo;addition ou la multiplication, et<span> <\/span><em class=\"nj\">c<\/em>&lsquo; <em class=\"nj\"><span> <\/span> est le r\u00e9sultat chiffr\u00e9 de l&rsquo;HE.<\/em> Nous aurions d\u00fb<span> <\/span><strong class=\"gx ni\">HE.Dec(sk,<span> <\/span><\/strong><em class=\"nj\">c&rsquo;<\/em><strong class=\"gx ni\">) =<span> <\/span><\/strong><em class=\"nj\">f(m\u2081, m\u2082, &#8230;, m\u1d62)<\/em><\/li>\n<li id=\"6224\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HE.Dec(sk,<span> <\/span><\/strong> c)<strong class=\"gx ni\"> \u2192<span> <\/span><\/strong> m<em class=\"nj\">:<span> <\/span><\/em>L&rsquo;algorithme de d\u00e9cryptage HE<em class=\"nj\"><span> <\/span><\/em>qui prend<span> <\/span><strong class=\"gx ni\">sk<\/strong><span> <\/span>et le texte chiffr\u00e9<span> <\/span><em class=\"nj\">c<\/em><span> <\/span>pour cr\u00e9er le message en clair<span> <\/span><em class=\"nj\">m<\/em><\/li>\n<\/ol>\n<h2 id=\"595f\" class=\"me lc ir gx ld mf mg dt lh mh mi dv ll jx mj mk lp kb ml mm lt kf mn mo lx mp fa\" data-selectable-paragraph=\"\">Chiffrement homomorphe hybride<\/h2>\n<p id=\"1477\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Au lieu de chiffrer les donn\u00e9es \u00e0 l&rsquo;aide d&rsquo;un sch\u00e9ma HE qui produit un texte chiffr\u00e9 tr\u00e8s volumineux (expansion d&rsquo;ordre multiple par rapport au texte en clair), HHE les chiffre \u00e0 l&rsquo;aide d&rsquo;un algorithme de chiffrement sym\u00e9trique avec un facteur d&rsquo;expansion de 1 et envoie les textes chiffr\u00e9s sym\u00e9triques au serveur. En outre, le client doit \u00e9galement envoyer une version crypt\u00e9e homomorphique de sa cl\u00e9 sym\u00e9trique. D\u00e8s r\u00e9ception, le serveur ex\u00e9cute l&rsquo;algorithme de d\u00e9cryptage sym\u00e9trique de mani\u00e8re homomorphique pour transformer le texte chiffr\u00e9 sym\u00e9trique en un texte chiffr\u00e9 homomorphique. Ensuite, le serveur peut effectuer des calculs sur les donn\u00e9es crypt\u00e9es. Plus formellement, nous pouvons d\u00e9finir un sch\u00e9ma HHE (selon [2]) qui consiste en 5 algorithmes comme suit<\/p>\n<ol class=\"\">\n<li id=\"ad3b\" class=\"mq mr ir gx b jp jq jt ju jx ne kb nf kf ng kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HHE.KeyGen<\/strong>(1<em class=\"nj\">\u207f)<\/em> \u2192<strong class=\"gx ni\">(pk<\/strong>,<span> <\/span><strong class=\"gx ni\">sk<\/strong>,<span> <\/span><strong class=\"gx ni\">evk<\/strong>) : Il s&rsquo;agit simplement de l&rsquo;algorithme<span> <\/span><strong class=\"gx ni\">HE.KeyGen<span> <\/span><\/strong>qui produit la cl\u00e9 publique HE<strong class=\"gx ni\">(pk<\/strong>), la cl\u00e9 secr\u00e8te<strong class=\"gx ni\">(sk<\/strong>) et la cl\u00e9 d&rsquo;\u00e9valuation<strong class=\"gx ni\">(evk<\/strong>).<\/li>\n<li id=\"d00e\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HHE.Enc<\/strong>(1<em class=\"nj\">\u207f,<\/em><span> <\/span><strong class=\"gx ni\">pk<\/strong>,<span> <\/span><em class=\"nj\">m<\/em>) : L&rsquo;algorithme de cryptage HHE.<br \/>Tout d&rsquo;abord, il cr\u00e9e une cl\u00e9 sym\u00e9trique :<span> <\/span><strong class=\"gx ni\">SYM.KGen<\/strong>(1<em class=\"nj\">\u207f)<\/em> \u2192<span> <\/span><strong class=\"gx ni\">k<\/strong><br \/>Ensuite, \u00e0 l&rsquo;aide de cette cl\u00e9 sym\u00e9trique, il chiffre le message en clair<span> <\/span><em class=\"nj\">m :<\/em><span> <\/span><strong class=\"gx ni\">SYM.Enc<\/strong><strong class=\"gx ni\">(k<\/strong>,<span> <\/span><em class=\"nj\">m<\/em>) \u2192<span> <\/span><em class=\"nj\">c\u209b.<span> <\/span><\/em>Ici,<span> <\/span><em class=\"nj\">c\u209b<\/em><span> <\/span>est le texte chiffr\u00e9 sym\u00e9trique qui sera envoy\u00e9 au serveur. Il convient de noter que<span> <\/span><em class=\"nj\">c\u209b<\/em><span> <\/span>a la m\u00eame taille que<span> <\/span><em class=\"nj\">m.<\/em><em class=\"nj\"><br \/><\/em>En outre,<span> <\/span><strong class=\"gx ni\">HHE.Enc<\/strong><span> <\/span>crypte \u00e9galement de mani\u00e8re homomorphique la cl\u00e9 sym\u00e9trique<span> <\/span><strong class=\"gx ni\">k<span> <\/span><\/strong>en utilisant<strong class=\"gx ni\"><span> <\/span>HE.Enc<\/strong><strong class=\"gx ni\">(pk<\/strong>,<span> <\/span><strong class=\"gx ni\">k<\/strong>) \u2192<span> <\/span><strong class=\"gx ni\">c\u2096.<\/strong> Par cons\u00e9quent,<strong class=\"gx ni\"><span> <\/span>c\u2096<\/strong><strong class=\"gx ni\"><span> <\/span> est le texte chiffr\u00e9 HE de la cl\u00e9 sym\u00e9trique<\/strong><span> <\/span><strong class=\"gx ni\">k<\/strong>, et sera \u00e9galement envoy\u00e9 au serveur avec la mention<span> <\/span><em class=\"nj\">c\u209b<\/em><\/li>\n<li id=\"2d69\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HHE.Decomp<\/strong><strong class=\"gx ni\">(evk<\/strong>,<span> <\/span><strong class=\"gx ni\">c\u2096,<\/strong><span> <\/span><em class=\"nj\">c\u209b)<\/em> \u2192<span> <\/span><em class=\"nj\">c<\/em>: L&rsquo;algorithme de d\u00e9composition HHE qui transforme le texte chiffr\u00e9 sym\u00e9trique<span> <\/span><em class=\"nj\">c\u209b<\/em><span> <\/span>dans le texte chiffr\u00e9 HE<span> <\/span><em class=\"nj\">c<\/em><span> <\/span>en \u00e9valuant de mani\u00e8re homomorphique l&rsquo;algorithme de d\u00e9cryptage sym\u00e9trique \u00e0 l&rsquo;aide de<span> <\/span><strong class=\"gx ni\">c\u2096<span> <\/span><\/strong>et<span> <\/span><em class=\"nj\">c\u209b :<\/em><span> <\/span><strong class=\"gx ni\">HE.Eval<\/strong><strong class=\"gx ni\">(evk,<span> <\/span><\/strong> f=SYM<strong class=\"gx ni\">.Dec<\/strong>,<span> <\/span><strong class=\"gx ni\">c\u2096,<span> <\/span><\/strong> c<em class=\"nj\">\u209b)<\/em> \u2192<span> <\/span><em class=\"nj\">c<\/em><\/li>\n<li id=\"4b5d\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HHE.Eval<\/strong><strong class=\"gx ni\">(evk<\/strong>,<span> <\/span> f,<span> <\/span> c<em class=\"nj\">\u2081, . . . , c\u1d62)<\/em><span> <\/span><em class=\"nj\">\u2192 c&rsquo;<\/em>: L&rsquo;algorithme d&rsquo;\u00e9valuation HHE qui renvoie simplement<span> <\/span><strong class=\"gx ni\">HE.Eval<\/strong><strong class=\"gx ni\">(evk<\/strong>,<span> <\/span> f,<span> <\/span> c<em class=\"nj\">\u2081, . . . , c\u1d62)<\/em><\/li>\n<li id=\"7b80\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\"><strong class=\"gx ni\">HHE.Dec<\/strong><strong class=\"gx ni\">(sk,<\/strong><span> <\/span><em class=\"nj\">c<\/em>) : L&rsquo;algorithme de d\u00e9cryptage HHE. Il renvoie simplement<span> <\/span><strong class=\"gx ni\">HE.Dec<\/strong><strong class=\"gx ni\">(sk,<\/strong><span> <\/span><em class=\"nj\">c<\/em>)<\/li>\n<\/ol>\n<p id=\"3a6b\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Notez qu&rsquo;\u00e0 l&rsquo;\u00e9tape 2, nous devons envoyer<span> <\/span><strong class=\"gx ni\">c\u2096<span> <\/span><\/strong>et<span> <\/span><em class=\"nj\">c\u209b<\/em><span> <\/span>au serveur. Ici,<span> <\/span><strong class=\"gx ni\">c\u2096<span> <\/span><\/strong>est le texte chiffr\u00e9 HE et peut \u00eatre de grande taille. Cependant, il suffit d&rsquo;envoyer<span> <\/span><strong class=\"gx ni\">c\u2096<span> <\/span><\/strong>au serveur une fois, par exemple lors d&rsquo;une phase d&rsquo;installation. Le serveur peut l&rsquo;utiliser \u00e0 plusieurs reprises dans le<span> <\/span><strong class=\"gx ni\">HHE.Decomp<\/strong><span> <\/span>pour transformer les nouveaux cryptogrammes sym\u00e9triques en cryptogrammes HE correspondants. C&rsquo;est la principale diff\u00e9rence entre HHE et HE : au lieu d&rsquo;envoyer \u00e0 chaque fois des cryptogrammes HE au serveur, ce qui peut \u00eatre tr\u00e8s gourmand en bande passante, HHE envoie des cryptogrammes sym\u00e9triques l\u00e9gers. Cette astuce permet \u00e0 HHE de fonctionner avec des appareils aux ressources limit\u00e9es, car les algorithmes de chiffrement sym\u00e9triques sont \u00e9galement tr\u00e8s l\u00e9gers \u00e0 ex\u00e9cuter.<\/p>\n<h1 id=\"e7d1\" class=\"lb lc ir gx ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fa\" data-selectable-paragraph=\"\">\u00cates-vous pr\u00eat pour un peu de code ?<\/h1>\n<p id=\"3cd3\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Avant de plonger dans le code, passons en revue le protocole que nous allons construire : Nous avons deux parties (un client et un serveur) dont les actions peuvent \u00eatre r\u00e9sum\u00e9es en 3 \u00e9tapes principales :<\/p>\n<ol class=\"\">\n<li id=\"d267\" class=\"mq mr ir gx b jp jq jt ju jx ne kb nf kf ng kj nh mw mx my fa\" data-selectable-paragraph=\"\">Le client cr\u00e9e les cl\u00e9s avec<span> <\/span> HHE<strong class=\"gx ni\">.KeyGen<\/strong>, chiffre les donn\u00e9es avec<span> <\/span> HHE<strong class=\"gx ni\">.Enc<\/strong><span> <\/span>et envoie au serveur le texte chiffr\u00e9 sym\u00e9trique de ses donn\u00e9es<em class=\"nj\">(c\u209b<\/em>)<em class=\"nj\">,<span> <\/span><\/em>le texte chiffr\u00e9 HE de sa cl\u00e9 sym\u00e9trique<strong class=\"gx ni\">(c\u2096)<\/strong>, les cl\u00e9s HE \u00e0 l&rsquo;exception de la cl\u00e9 secr\u00e8te<span> <\/span><strong class=\"gx ni\">sk<span> <\/span>.<\/strong><\/li>\n<li id=\"c987\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\">Le serveur ex\u00e9cute l&rsquo;algorithme<span> <\/span> HHE<strong class=\"gx ni\">.Decomp<\/strong><span> <\/span>et une transformation lin\u00e9aire sur les donn\u00e9es crypt\u00e9es HE du client \u00e0 l&rsquo;aide de<span> <\/span> HHE<strong class=\"gx ni\">.Eval<\/strong>, obtient le r\u00e9sultat crypt\u00e9 et le renvoie au client.<\/li>\n<li id=\"b5a4\" class=\"mq mr ir gx b jp mz jt na jx nb kb nc kf nd kj nh mw mx my fa\" data-selectable-paragraph=\"\">D\u00e8s r\u00e9ception, le client d\u00e9crypte le r\u00e9sultat avec<span> <\/span> HHE<strong class=\"gx ni\">.Dec<\/strong><span> <\/span>et obtient le r\u00e9sultat final en clair.<\/li>\n<\/ol>\n<p id=\"1307\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">L&rsquo;int\u00e9gralit\u00e9 des<span> <\/span><a class=\"ae la\" href=\"https:\/\/github.com\/khoaguin\/priv-sec-ai-blog\/tree\/main\/what-is-hhe\" rel=\"noopener ugc nofollow\" target=\"_blank\">code de d\u00e9monstration<\/a><span> <\/span>est en C++ et s&rsquo;appuie sur l&rsquo;application<span> <\/span><a class=\"ae la\" href=\"https:\/\/github.com\/microsoft\/SEAL\" rel=\"noopener ugc nofollow\" target=\"_blank\">Le SEAL de Microsoft<\/a><span> <\/span>et<span> <\/span><a class=\"ae la\" href=\"https:\/\/github.com\/IAIK\/hybrid-HE-framework\" rel=\"noopener ugc nofollow\" target=\"_blank\">Biblioth\u00e8que de p\u00e2tes<\/a>. Tout d&rsquo;abord, cr\u00e9ons deux structures qui repr\u00e9sentent le client et le serveur :<\/p>\n<pre class=\"kl km kn ko gr nk nl nm bn nn no bi\"><span id=\"05e4\" class=\"np lc ir nl b be nq nr l ns nt\" data-selectable-paragraph=\"\"><span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title.class\">Client<\/span>\n{\n    <span class=\"hljs-comment\">\/\/ the HE keys<\/span>\n    seal::PublicKey he_pk;  <span class=\"hljs-comment\">\/\/ HE public key<\/span>\n    seal::SecretKey he_sk;  <span class=\"hljs-comment\">\/\/ HE secret key<\/span>\n    seal::RelinKeys he_rk;  <span class=\"hljs-comment\">\/\/ HE relinearization key (you don't have to care about this)<\/span>\n    seal::GaloisKeys he_gk; <span class=\"hljs-comment\">\/\/ HE galois key (you don't have to care about this)<\/span>\n    <span class=\"hljs-comment\">\/\/ client's symmetric keys<\/span>\n    std::vector&lt;<span class=\"hljs-type\">uint64_t<\/span>&gt; k;           <span class=\"hljs-comment\">\/\/ the secret symmetric keys<\/span>\n    std::vector&lt;seal::Ciphertext&gt; c_k; <span class=\"hljs-comment\">\/\/ the HE encrypted symmetric keys<\/span>\n    <span class=\"hljs-comment\">\/\/ client's data<\/span>\n    std::vector&lt;<span class=\"hljs-type\">uint64_t<\/span>&gt; m{<span class=\"hljs-number\">0<\/span>, <span class=\"hljs-number\">5<\/span>, <span class=\"hljs-number\">255<\/span>, <span class=\"hljs-number\">100<\/span>, <span class=\"hljs-number\">255<\/span>}; <span class=\"hljs-comment\">\/\/ the client's secret data<\/span>\n    std::vector&lt;<span class=\"hljs-type\">uint64_t<\/span>&gt; c_s;                    <span class=\"hljs-comment\">\/\/ the symmetric encrypted data<\/span>\n    seal::Ciphertext c_res;                       <span class=\"hljs-comment\">\/\/ the HE encrypted result received from the server<\/span>\n};\n\n<span class=\"hljs-keyword\">struct<\/span> <span class=\"hljs-title.class\">Server<\/span>\n{\n    std::vector&lt;<span class=\"hljs-type\">int64_t<\/span>&gt; w{<span class=\"hljs-number\">-1<\/span>, <span class=\"hljs-number\">2<\/span>, <span class=\"hljs-number\">-3<\/span>, <span class=\"hljs-number\">4<\/span>, <span class=\"hljs-number\">5<\/span>};    <span class=\"hljs-comment\">\/\/ dummy weights<\/span>\n    std::vector&lt;<span class=\"hljs-type\">int64_t<\/span>&gt; b{<span class=\"hljs-number\">-5<\/span>, <span class=\"hljs-number\">-5<\/span>, <span class=\"hljs-number\">-5<\/span>, <span class=\"hljs-number\">-5<\/span>, <span class=\"hljs-number\">-5<\/span>}; <span class=\"hljs-comment\">\/\/ dummy biases<\/span>\n    std::vector&lt;seal::Ciphertext&gt; c;            <span class=\"hljs-comment\">\/\/ the HE encrypted ciphertext of client's data<\/span>\n    seal::SecretKey he_sk;                      <span class=\"hljs-comment\">\/\/ the server's HE secret key<\/span>\n    seal::Ciphertext c_res;                     <span class=\"hljs-comment\">\/\/ the HE encrypted results that will be sent to the client<\/span>\n};\n\nClient client;\nServer server;<\/span><\/pre>\n<h2 id=\"9e2b\" class=\"me lc ir gx ld mf mg dt lh mh mi dv ll jx mj mk lp kb ml mm lt kf mn mo lx mp fa\" data-selectable-paragraph=\"\">\u00c9tape 1<\/h2>\n<p id=\"52e6\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Le client cr\u00e9e le contexte SEAL qui est responsable de la cr\u00e9ation des cl\u00e9s HE et d&rsquo;autres objets SEAL pour le codage, le cryptage et le d\u00e9cryptage des donn\u00e9es (BatchEncoder, Encryptor, Decryptor, Evaluator).<\/p>\n<pre class=\"kl km kn ko gr nk nl nm bn nn no bi\"><span id=\"afaf\" class=\"np lc ir nl b be nq nr l ns nt\" data-selectable-paragraph=\"\">std::shared_ptr&lt;seal::SEALContext&gt; context = sealhelper::<span class=\"hljs-built_in\">get_seal_context<\/span>();\nsealhelper::<span class=\"hljs-built_in\">print_parameters<\/span>(*context);\n<span class=\"hljs-function\">seal::KeyGenerator <span class=\"hljs-title\">keygen<\/span><span class=\"hljs-params\">(*context)<\/span><\/span>;\nkeygen.<span class=\"hljs-built_in\">create_public_key<\/span>(client.he_pk);\nclient.he_sk = keygen.<span class=\"hljs-built_in\">secret_key<\/span>();\nkeygen.<span class=\"hljs-built_in\">create_relin_keys<\/span>(client.he_rk);\n<span class=\"hljs-function\">seal::BatchEncoder <span class=\"hljs-title\">he_benc<\/span><span class=\"hljs-params\">(*context)<\/span><\/span>;\n<span class=\"hljs-function\">seal::Encryptor <span class=\"hljs-title\">he_enc<\/span><span class=\"hljs-params\">(*context, client.he_pk)<\/span><\/span>;\n<span class=\"hljs-function\">seal::Evaluator <span class=\"hljs-title\">he_eval<\/span><span class=\"hljs-params\">(*context)<\/span><\/span>;\n<span class=\"hljs-function\">seal::Decryptor <span class=\"hljs-title\">he_dec<\/span><span class=\"hljs-params\">(*context, client.he_sk)<\/span><\/span>;\n<span class=\"hljs-type\">bool<\/span> use_bsgs = <span class=\"hljs-literal\">false<\/span>;\nstd::vector&lt;<span class=\"hljs-type\">int<\/span>&gt; gk_indices = pastahelper::<span class=\"hljs-built_in\">add_gk_indices<\/span>(use_bsgs, he_benc);\nkeygen.<span class=\"hljs-built_in\">create_galois_keys<\/span>(gk_indices, client.he_gk);<\/span><\/pre>\n<p id=\"65fa\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Le client ex\u00e9cute ensuite l&rsquo;algorithme de chiffrement<strong class=\"gx ni\">(HHE.Enc<\/strong>) pour cr\u00e9er la cl\u00e9 sym\u00e9trique<em class=\"nj\">(client.k<\/em>) et le texte chiffr\u00e9 sym\u00e9trique<em class=\"nj\">(client.c_s<\/em>).<\/p>\n<pre class=\"kl km kn ko gr nk nl nm bn nn no bi\"><span id=\"80f9\" class=\"np lc ir nl b be nq nr l ns nt\" data-selectable-paragraph=\"\">client.k = pastahelper::<span class=\"hljs-built_in\">get_symmetric_key<\/span>();\n<span class=\"hljs-function\">pasta::PASTA <span class=\"hljs-title\">SymmetricEncryptor<\/span><span class=\"hljs-params\">(client.k, configs::plain_mod)<\/span><\/span>;\nclient.c_s = SymmetricEncryptor.<span class=\"hljs-built_in\">encrypt<\/span>(client.m);<\/span><\/pre>\n<p id=\"ec43\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Si nous imprimons les valeurs de<span> <\/span><em class=\"nj\">client.c_s<\/em>, nous verrons un vecteur de valeurs al\u00e9atoires telles que [30446, 62410, 62969, 38863, 43376], contrairement aux donn\u00e9es en clair du client [0, 5, 255, 100, 255]. Le client n&rsquo;enverra au serveur que le vecteur de valeurs al\u00e9atoires et jamais ses donn\u00e9es en clair.<\/p>\n<p id=\"62fd\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Ensuite, le client chiffre sa cl\u00e9 sym\u00e9trique<em class=\"nj\">(client.k<\/em>) \u00e0 l&rsquo;aide de HE pour cr\u00e9er<span> <\/span><em class=\"nj\">client.c_k.<\/em><\/p>\n<pre class=\"kl km kn ko gr nk nl nm bn nn no bi\"><span id=\"7d32\" class=\"np lc ir nl b be nq nr l ns nt\" data-selectable-paragraph=\"\">client.c_k = pastahelper::<span class=\"hljs-built_in\">encrypt_symmetric_key<\/span>(client.k,\n                                                configs::USE_BATCH,\n                                                he_benc,\n                                                he_enc);<\/span><\/pre>\n<p id=\"8b5c\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Ensuite, le client envoie au serveur<span> <\/span><em class=\"nj\">client.c_k, client.c_s<\/em><span> <\/span>et les cl\u00e9s HE, \u00e0 l&rsquo;exception de la cl\u00e9 secr\u00e8te.<\/p>\n<h2 id=\"7495\" class=\"me lc ir gx ld mf mg dt lh mh mi dv ll jx mj mk lp kb ml mm lt kf mn mo lx mp fa\" data-selectable-paragraph=\"\">\u00c9tape 2<\/h2>\n<p id=\"c0a9\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Apr\u00e8s avoir re\u00e7u le<span> <\/span><em class=\"nj\">client.c_k<\/em>, le serveur cr\u00e9e sa propre cl\u00e9 secr\u00e8te HE, l&rsquo;objet HHE et ex\u00e9cute l&rsquo;algorithme de d\u00e9composition qui aboutit \u00e0<span> <\/span><em class=\"nj\">server.c<span> <\/span><\/em>qui est le texte chiffr\u00e9 HE du message en clair du client<span> <\/span><em class=\"nj\">m.<\/em> Notez que le client n&rsquo;envoie jamais sa cl\u00e9 secr\u00e8te<span> <\/span><strong class=\"gx ni\">he_sk<\/strong><span> <\/span>au serveur, de sorte que le serveur ne sera pas en mesure de d\u00e9crypter l&rsquo;information.<span> <\/span><em class=\"nj\">server.c.<\/em><\/p>\n<pre class=\"kl km kn ko gr nk nl nm bn nn no bi\"><span id=\"c73d\" class=\"np lc ir nl b be nq nr l ns nt\" data-selectable-paragraph=\"\"><span class=\"hljs-function\">seal::KeyGenerator <span class=\"hljs-title\">csp_keygen<\/span><span class=\"hljs-params\">(*context)<\/span><\/span>;\nserver.he_sk = csp_keygen.<span class=\"hljs-built_in\">secret_key<\/span>();\n<span class=\"hljs-function\">pasta::PASTA_SEAL <span class=\"hljs-title\">HHE<\/span><span class=\"hljs-params\">(context, client.he_pk, server.he_sk, client.he_rk, client.he_gk)<\/span><\/span>;\nserver.c = HHE.<span class=\"hljs-built_in\">decomposition<\/span>(client.c_s, client.c_k, configs::USE_BATCH);<\/span><\/pre>\n<p id=\"f593\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Le serveur code ensuite ses poids<span> <\/span> w<span> <\/span>et ses biais<span> <\/span> b<span> <\/span>et effectue une multiplication vectorielle par \u00e9l\u00e9ments ainsi qu&rsquo;une addition sur ses poids et biais en clair avec les donn\u00e9es crypt\u00e9es HE<span> <\/span><em class=\"nj\">server.c.<\/em><\/p>\n<pre class=\"kl km kn ko gr nk nl nm bn nn no bi\"><span id=\"d4fb\" class=\"np lc ir nl b be nq nr l ns nt\" data-selectable-paragraph=\"\">seal::Plaintext plain_w, plain_b;\nhe_benc.<span class=\"hljs-built_in\">encode<\/span>(server.w, plain_w);\nhe_benc.<span class=\"hljs-built_in\">encode<\/span>(server.b, plain_b);\nserver.c_res = sealhelper::<span class=\"hljs-built_in\">he_mult<\/span>(he_eval, server.c[<span class=\"hljs-number\">0<\/span>], plain_w);\nclient.c_res = sealhelper::<span class=\"hljs-built_in\">he_add<\/span>(he_eval, server.c_res, plain_b);<\/span><\/pre>\n<p id=\"1017\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Nous pouvons voir que le r\u00e9sultat final est client.c_res qui est le texte chiffr\u00e9 SEAL que le client recevra.<\/p>\n<h2 id=\"266c\" class=\"me lc ir gx ld mf mg dt lh mh mi dv ll jx mj mk lp kb ml mm lt kf mn mo lx mp fa\" data-selectable-paragraph=\"\">\u00c9tape 3<\/h2>\n<p id=\"21ae\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Enfin, le client d\u00e9chiffre son<span> <\/span> c_res<em class=\"nj\"><span> <\/span> \u00e0 l&rsquo;aide de sa cl\u00e9 secr\u00e8te :<\/em><\/p>\n<pre class=\"kl km kn ko gr nk nl nm bn nn no bi\"><span id=\"be58\" class=\"np lc ir nl b be nq nr l ns nt\" data-selectable-paragraph=\"\">std::vector&lt;<span class=\"hljs-type\">int64_t<\/span>&gt; decrypted_res = sealhelper::<span class=\"hljs-built_in\">decrypt<\/span>(client.c_res,\n                                                         client.he_sk,\n                                                         he_benc,\n                                                         *context,\n                                                         client.m.<span class=\"hljs-built_in\">size<\/span>());<\/span><\/pre>\n<p id=\"8b98\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">En imprimant<span> <\/span><em class=\"nj\">decrypted_res<\/em>, nous verrons que le r\u00e9sultat sera [-5 5 -770 395 1270], ce qui est correct car<\/p>\n<p id=\"07a4\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">[0, 5, 255, 100, 255]<br \/>\u2299<br \/>[-1, 2, -3, 4, 5]<br \/>\u2295<br \/>[-5, -5, -5, -5, -5]<br \/>=<br \/>[-5, 5, -770, 395, 1270]<\/p>\n<p id=\"c802\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">o\u00f9 \u2299, \u2295 sont respectivement la multiplication et l&rsquo;addition de vecteurs par \u00e9l\u00e9ment.<\/p>\n<p id=\"9d50\" class=\"pw-post-body-paragraph jn jo ir gx b jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke kf kg kh ki kj ik fa\" data-selectable-paragraph=\"\">Le r\u00e9sultat de l&rsquo;ex\u00e9cution du code de d\u00e9monstration est visible dans l&rsquo;image ci-dessous<\/p>\n<figure class=\"kl km kn ko gr kp gf gg paragraph-image\">\n<div role=\"button\" class=\"kq kr di ks bf kt\" tabindex=\"0\">\n<div class=\"gf gg nu\"><picture><source srcset=\"https:\/\/miro.medium.com\/max\/640\/1*ZtNNyvFRJGGrzT_vuENTKQ.webp 640w, https:\/\/miro.medium.com\/max\/720\/1*ZtNNyvFRJGGrzT_vuENTKQ.webp 720w, https:\/\/miro.medium.com\/max\/750\/1*ZtNNyvFRJGGrzT_vuENTKQ.webp 750w, https:\/\/miro.medium.com\/max\/786\/1*ZtNNyvFRJGGrzT_vuENTKQ.webp 786w, https:\/\/miro.medium.com\/max\/828\/1*ZtNNyvFRJGGrzT_vuENTKQ.webp 828w, https:\/\/miro.medium.com\/max\/1100\/1*ZtNNyvFRJGGrzT_vuENTKQ.webp 1100w, https:\/\/miro.medium.com\/max\/1400\/1*ZtNNyvFRJGGrzT_vuENTKQ.webp 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\" type=\"image\/webp\"><\/source><source data-testid=\"og\" srcset=\"https:\/\/miro.medium.com\/max\/640\/1*ZtNNyvFRJGGrzT_vuENTKQ.png 640w, https:\/\/miro.medium.com\/max\/720\/1*ZtNNyvFRJGGrzT_vuENTKQ.png 720w, https:\/\/miro.medium.com\/max\/750\/1*ZtNNyvFRJGGrzT_vuENTKQ.png 750w, https:\/\/miro.medium.com\/max\/786\/1*ZtNNyvFRJGGrzT_vuENTKQ.png 786w, https:\/\/miro.medium.com\/max\/828\/1*ZtNNyvFRJGGrzT_vuENTKQ.png 828w, https:\/\/miro.medium.com\/max\/1100\/1*ZtNNyvFRJGGrzT_vuENTKQ.png 1100w, https:\/\/miro.medium.com\/max\/1400\/1*ZtNNyvFRJGGrzT_vuENTKQ.png 1400w\" sizes=\"(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px\"><\/source><img decoding=\"async\" alt=\"\" class=\"bf ku kv dj\" width=\"700\" height=\"313\" loading=\"lazy\" role=\"presentation\" src=\"https:\/\/miro.medium.com\/max\/700\/1*ZtNNyvFRJGGrzT_vuENTKQ.png\"><\/picture><\/div>\n<\/div>\n<\/figure>\n<h1 id=\"3043\" class=\"lb lc ir gx ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fa\" data-selectable-paragraph=\"\">Orientations futures et conclusions<\/h1>\n<p id=\"89ab\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Dans cet article, nous avons d\u00e9couvert le chiffrement homomorphe hybride, ses avantages par rapport au chiffrement homomorphe ordinaire, un exemple d&rsquo;utilisation du chiffrement homomorphe hybride et un protocole de d\u00e9monstration tr\u00e8s simple en C++. Dans la pratique, ce protocole peut \u00eatre \u00e9tendu \u00e0 trois parties, ce qui convient \u00e0 l&rsquo;analyse de donn\u00e9es crypt\u00e9es ou \u00e0 l&rsquo;apprentissage automatique. Vous pouvez en savoir plus sur le protocole HHE tripartite dans un article r\u00e9cemment publi\u00e9 [3] sur notre site Web.<span> <\/span><a class=\"ae la\" href=\"https:\/\/research.tuni.fi\/nisec\/\" rel=\"noopener ugc nofollow\" target=\"_blank\">Laboratoire NISEC<\/a><span> <\/span>\u00e0 l&rsquo;universit\u00e9 de Tampere. J&rsquo;esp\u00e8re que cet article vous sera utile et que vous prendrez plaisir \u00e0 apprendre quelque chose de nouveau !<\/p>\n<h1 id=\"ff0a\" class=\"lb lc ir gx ld le lf lg lh li lj lk ll lm ln lo lp lq lr ls lt lu lv lw lx ly fa\" data-selectable-paragraph=\"\">Remerciements<\/h1>\n<p id=\"ac3c\" class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">Ce travail a \u00e9t\u00e9 financ\u00e9 par le<a class=\"ae la\" href=\"https:\/\/harpocrates-project.eu\/fr\/\" rel=\"noopener ugc nofollow\" target=\"_blank\">projet europ\u00e9en HARPOCRATES (<\/a><span> <\/span><a class=\"ae la\" href=\"https:\/\/harpocrates-project.eu\/fr\/\" rel=\"noopener ugc nofollow\" target=\"_blank\">)<\/a>.<\/p>\n<h1 id=\"8ca4\" class=\"ju jv hk fh jw jx jy jz ka kb kc kd ke kf kg kh ki kj kk kl km kn ko kp kq kr dt\" data-selectable-paragraph=\"\">R\u00e9f\u00e9rence<\/h1>\n<p id=\"ab0f\" class=\"pw-post-body-paragraph ig ih hk fh b ii ks ik il im kt io ip iq ku is it iu kv iw ix iy kw ja jb jc hd dt\" data-selectable-paragraph=\"\">[1] Brakerski, Zvika, et Vinod Vaikuntanathan. \u00ab\u00a0Chiffrement efficace enti\u00e8rement homomorphe \u00e0 partir de LWE (standard)\u00a0\u00bb.<span> <\/span><em class=\"me\">SIAM Journal on computing<\/em><span> <\/span>43.2 (2014) : 831-871.<\/p>\n<p id=\"2d03\" class=\"pw-post-body-paragraph ig ih hk fh b ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc hd dt\" data-selectable-paragraph=\"\">[2] Dobraunig, Christoph, et al. \u00ab\u00a0Pasta : un cas de cryptage homomorphique hybride\u00a0\u00bb.<span> <\/span><em class=\"me\">Cryptology ePrint Archive<\/em><span> <\/span>(2021).<\/p>\n<p id=\"dd2c\" class=\"pw-post-body-paragraph ig ih hk fh b ii ij ik il im in io ip iq ir is it iu iv iw ix iy iz ja jb jc hd dt\" data-selectable-paragraph=\"\">[3] Alexandros Bakas, Eugene Frimpong, Antonis Michalas<em class=\"me\">. \u00ab\u00a0<\/em>D\u00e9guisement sym\u00e9trique : R\u00e9alisation de services de cryptage homomorphes \u00e0 partir de primitives sym\u00e9triques\u00a0\u00bb. EAI SECURECOMM (2022).<\/p>\n<p class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\">\n<p class=\"pw-post-body-paragraph jn jo ir gx b jp lz jr js jt ma jv jw jx mb jz ka kb mc kd ke kf md kh ki kj ik fa\" data-selectable-paragraph=\"\"><em>R\u00e9dig\u00e9 par : Khoa Nguyen, Universit\u00e9 de Tampere<\/em><\/p>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=\u00a0\u00bb1_3&Prime; _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][et_pb_sidebar _builder_version=\u00a0\u00bb4.19.1&Prime; _module_preset=\u00a0\u00bbdefault\u00a0\u00bb global_colors_info=\u00a0\u00bb{}\u00a0\u00bb][\/et_pb_sidebar][\/et_pb_column][\/et_pb_row][\/et_pb_section]<\/p>\n","protected":false},"excerpt":{"rendered":"<p><div class=\"et_pb_module lwp_divi_breadcrumbs lwp_divi_breadcrumbs_0\">\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t\n\t\t\t\t<div class=\"et_pb_module_inner\">\n\t\t\t\t\t<div class=\"lwp-breadcrumbs\"> <span class=\"before\"><\/span> <span vocab=\"https:\/\/schema.org\/\" typeof=\"BreadcrumbList\"><span property=\"itemListElement\" typeof=\"ListItem\"><a property=\"item\" typeof=\"WebPage\" href=\"https:\/\/harpocrates-project.eu\/fr\/\" class=\"home\"><span property=\"name\">Home<\/span><\/a><meta property=\"position\" content=\"1\"><\/span> <span class=\"separator et-pb-icon\">&amp;#x39;<\/span> <\/span><\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>Qu&rsquo;est-ce que le chiffrement homomorphe hybride et ses applications ? 9.2.2023 10:03 &nbsp;TL;DR Introduire le concept de cryptage homomorphique hybride, ses cas d&rsquo;utilisation, une br\u00e8ve formulation et uncode de d\u00e9monstration en C++. Introduction Les applications pr\u00e9servant la vie priv\u00e9e sont devenues un sujet important de [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":1825,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"on","_et_pb_old_content":"","_et_gb_content_width":"","footnotes":""},"categories":[36],"tags":[],"class_list":["post-2341","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-actualites"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/posts\/2341","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/comments?post=2341"}],"version-history":[{"count":10,"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/posts\/2341\/revisions"}],"predecessor-version":[{"id":2648,"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/posts\/2341\/revisions\/2648"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/media\/1825"}],"wp:attachment":[{"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/media?parent=2341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/categories?post=2341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/harpocrates-project.eu\/fr\/wp-json\/wp\/v2\/tags?post=2341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}