{"id":2864,"date":"2023-02-09T10:03:38","date_gmt":"2023-02-09T10:03:38","guid":{"rendered":"https:\/\/harpocrates-project.eu\/que-es-el-cifrado-homomorfico-hibrido-y-sus-aplicaciones\/"},"modified":"2023-09-12T09:25:20","modified_gmt":"2023-09-12T09:25:20","slug":"que-es-el-cifrado-homomorfico-hibrido-y-sus-aplicaciones","status":"publish","type":"post","link":"https:\/\/harpocrates-project.eu\/es\/que-es-el-cifrado-homomorfico-hibrido-y-sus-aplicaciones\/","title":{"rendered":"Qu\u00e9 es el cifrado homom\u00f3rfico h\u00edbrido y sus aplicaciones"},"content":{"rendered":"<p>[et_pb_section fb_built=\u00bb1&#8243; custom_padding_last_edited=\u00bbon|phone\u00bb _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb background_color=\u00bb#1f2437&#8243; background_enable_image=\u00bboff\u00bb background_position=\u00bbcenter_left\u00bb custom_padding=\u00bb0rem|1rem|0rem|1rem|true|false\u00bb custom_padding_tablet=\u00bb|2rem|1rem|2rem|false|false\u00bb custom_padding_phone=\u00bb|1rem||1rem|false|false\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_row custom_padding_last_edited=\u00bbon|phone\u00bb _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb width=\u00bb100%\u00bb max_width=\u00bb1540px\u00bb custom_padding=\u00bb||||false|false\u00bb custom_padding_tablet=\u00bb||||false|false\u00bb custom_padding_phone=\u00bb1rem||1rem||false|false\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb4_4&#8243; _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][lwp_divi_breadcrumbs link_color=\u00bb#FFFFFF\u00bb separator_color=\u00bb#FFFFFF\u00bb _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb custom_padding_tablet=\u00bb1rem||1rem||false|false\u00bb custom_padding_phone=\u00bb1rem||1rem||false|false\u00bb custom_padding_last_edited=\u00bbon|phone\u00bb global_colors_info=\u00bb{}\u00bb][\/lwp_divi_breadcrumbs][\/et_pb_column][\/et_pb_row][\/et_pb_section][et_pb_section fb_built=\u00bb1&#8243; custom_padding_last_edited=\u00bbon|phone\u00bb _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb custom_padding=\u00bb|1rem||1rem|false|true\u00bb custom_padding_tablet=\u00bb|2rem||2rem|false|true\u00bb custom_padding_phone=\u00bb|1rem||1rem|false|true\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_row column_structure=\u00bb2_3,1_3&#8243; _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb width=\u00bb100%\u00bb max_width=\u00bb1540px\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_column type=\u00bb2_3&#8243; _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb border_color_right=\u00bb#9b9b9b\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_text _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb header_font=\u00bbMontserrat|700|||||||\u00bb header_text_color=\u00bb#1f2437&#8243; header_font_size=\u00bb24px\u00bb global_colors_info=\u00bb{}\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\u00e9 es el cifrado homom\u00f3rfico h\u00edbrido y sus aplicaciones<\/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=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb hover_enabled=\u00bb0&#8243; global_colors_info=\u00bb{}\u00bb sticky_enabled=\u00bb0&#8243;]<\/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=\"\">Introducir el concepto de cifrado homom\u00f3rfico h\u00edbrido, sus casos de uso, una breve formulaci\u00f3n y algo de<a class=\"ae la\" href=\"https:\/\/github.com\/khoaguin\/priv-sec-ai-blog\/tree\/main\/what-is-hhe\" rel=\"noopener ugc nofollow\" target=\"_blank\">c\u00f3digo de demostraci\u00f3n<\/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=\"\">Introducci\u00f3n<\/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=\"\">Las aplicaciones de preservaci\u00f3n de la privacidad se han convertido en un tema importante hoy en d\u00eda debido a la creciente preocupaci\u00f3n de las personas por la privacidad de sus datos, la prevalencia de aplicaciones de aprendizaje autom\u00e1tico que requieren acceso a una gran cantidad de datos y nuevas regulaciones como el Reglamento General de Protecci\u00f3n de Datos (GDPR), por no mencionar otras preocupaciones \u00e9ticas y financieras. Hoy conoceremos una novedosa t\u00e9cnica de mejora de la privacidad llamada Cifrado Homom\u00f3rfico H\u00edbrido (HHE), que es una expansi\u00f3n del Cifrado Homom\u00f3rfico (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=\"\">HE es una t\u00e9cnica de cifrado que nos permite realizar c\u00e1lculos sobre datos cifrados. Sin embargo, uno de los problemas de HE es que sus textos cifrados son varios \u00f3rdenes de magnitud mayores que los correspondientes textos planos. HHE pretende resolver este problema combinando cifrados sim\u00e9tricos con HE para reducir el tama\u00f1o de los textos cifrados y los recursos computacionales necesarios para la parte que cifra y env\u00eda los datos (por ejemplo, un cliente \/ propietario de los datos) a costa de c\u00e1lculos m\u00e1s caros para la parte que realiza c\u00e1lculos sobre los datos cifrados (por ejemplo, un servidor, un proveedor de servicios en la nube o CSP). Por lo tanto, HHE puede ser m\u00e1s adecuado que HE cuando se trata del modelo cliente-servidor de c\u00e1lculos cifrados, especialmente cuando el cliente tiene recursos computacionales y ancho de banda de Internet limitados, por ejemplo, tel\u00e9fonos, dispositivos 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=\"\">Ventajas:<\/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=\"\">Permitir c\u00e1lculos sobre datos cifrados y, por tanto, an\u00e1lisis y aplicaciones de datos que preserven la privacidad.<\/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=\"\">Reducir el tama\u00f1o del texto cifrado y, por tanto, reducir los recursos inform\u00e1ticos y de ancho de banda necesarios para la parte que posee, cifra y env\u00eda los datos.<\/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=\"\">Desventajas:<\/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=\"\">M\u00e1s costoso computacionalmente en el dominio de c\u00e1lculo encriptado<\/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=\"\">Actualmente sigue restringido a determinados tipos de datos y c\u00e1lculos<\/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=\"\">Casos pr\u00e1cticos<\/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=\"\">Al igual que la ES, la HHE puede admitir aplicaciones en sectores en los que la privacidad de los datos es una preocupaci\u00f3n importante, como las finanzas, la sanidad, la normativa, etc. Adem\u00e1s, HHE puede potenciar las aplicaciones en dispositivos con potencia de c\u00e1lculo, memoria y ancho de banda de red limitados, como los dispositivos integrados y de 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=\"\">Ejemplo de aplicaci\u00f3n: Una aplicaci\u00f3n de vigilancia dom\u00e9stica para la atenci\u00f3n sanitaria, en la que los dispositivos IoT equipados en un hogar toman fotograf\u00edas (u otras se\u00f1ales), las cifran y env\u00edan las se\u00f1ales cifradas al servidor. El servidor ejecuta un algoritmo de inteligencia artificial en los datos cifrados recibidos y detecta ocasiones como personas que sufren un ictus; a continuaci\u00f3n, env\u00eda los resultados cifrados al dispositivo del hogar, que se encarga de descifrar el resultado y provocar una alarma s\u00f3lo cuando el resultado descifrado es positivo, por ejemplo, si hay personas que sufren ictus. De este modo, el hogar puede utilizar el servicio del servidor mientras el proveedor de servicios no ve ninguna foto o dato sensible del hogar.<\/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=\"\">Entremos en materia<\/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=\"\">A continuaci\u00f3n se presentan algunas formulaciones breves de la HE y la HHE.<\/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=\"\">Cifrado homom\u00f3rfico<\/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=\"\">Antes de llegar a la HHE, tenemos que entender primero la HE. Con HE, podemos cifrar los datos y realizar operaciones con los datos cifrados. El resultado al descifrar ser\u00e1 equivalente al resultado al realizar operaciones similares en los datos de texto plano correspondientes. Para comprender mejor a HE, le remito a esto<span> <\/span><a class=\"ae la\" href=\"https:\/\/blog.openmined.org\/what-is-homomorphic-encryption\/\" rel=\"noopener ugc nofollow\" target=\"_blank\">entrada del blog<\/a><span> <\/span>de 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=\"\">Veamos aqu\u00ed la definici\u00f3n de un esquema de cifrado homom\u00f3rfico de clave p\u00fablica que se adopta de [1] y consta de 4 algoritmos:<\/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>El algoritmo de generaci\u00f3n de claves.<strong class=\"gx ni\"><span> <\/span><\/strong>Toma,<span> <\/span><em class=\"nj\">n<\/em><span> <\/span>es un par\u00e1metro de seguridad;<span> <\/span><strong class=\"gx ni\">pk<\/strong>,<span> <\/span><strong class=\"gx ni\">sk<\/strong><span> <\/span>y<span> <\/span><strong class=\"gx ni\">evk<\/strong><span> <\/span>son la clave p\u00fablica, la clave secreta y la clave de evaluaci\u00f3n, respectivamente. Utilizamos<span> <\/span><strong class=\"gx ni\">pk<\/strong><span> <\/span>para encriptar los datos,<span> <\/span><strong class=\"gx ni\">sk<\/strong><span> <\/span>para descifrar los datos cifrados, y<span> <\/span><strong class=\"gx ni\">evk<\/strong><span> <\/span>realizar c\u00e1lculos sobre datos cifrados<\/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>El algoritmo de cifrado HE donde<span> <\/span> m<span> <\/span>son los datos en texto plano y<span> <\/span> c<span> <\/span>son los datos cifrados 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&#8217;:<span> <\/span><\/em>El algoritmo de evaluaci\u00f3n.<em class=\"nj\"><span> <\/span><\/em>donde<span> <\/span><em class=\"nj\">f<span> <\/span><\/em>es una funci\u00f3n como la suma o la multiplicaci\u00f3n, y<span> <\/span><em class=\"nj\">c<\/em>&#8216; <em class=\"nj\"><span> <\/span> es el resultado cifrado HE.<\/em> Deber\u00edamos tener<span> <\/span><strong class=\"gx ni\">HE.Dec(sk,<span> <\/span><\/strong><em class=\"nj\">c&#8217;<\/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>El algoritmo de descifrado HE.<em class=\"nj\"><span> <\/span><\/em>que lleva<span> <\/span><strong class=\"gx ni\">sk<\/strong><span> <\/span>y el texto cifrado<span> <\/span><em class=\"nj\">c<\/em><span> <\/span>para crear el mensaje en texto plano<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=\"\">Cifrado homom\u00f3rfico h\u00edbrido<\/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=\"\">En lugar de cifrar los datos con un esquema HE que produce un texto cifrado muy grande (expansi\u00f3n de m\u00faltiples \u00f3rdenes en comparaci\u00f3n con el texto plano), HHE los cifra con un cifrado sim\u00e9trico con el factor de expansi\u00f3n de 1 y env\u00eda los textos cifrados sim\u00e9tricos al servidor. Adem\u00e1s, el cliente tambi\u00e9n debe enviar una versi\u00f3n cifrada homom\u00f3rfica de su clave sim\u00e9trica. Tras la recepci\u00f3n, el servidor realiza el algoritmo de descifrado sim\u00e9trico homom\u00f3rfico para transformar el texto cifrado sim\u00e9trico en un texto cifrado homom\u00f3rfico. Despu\u00e9s, el servidor puede realizar c\u00e1lculos sobre los datos encriptados. M\u00e1s formalmente, podemos definir un esquema HHE (seg\u00fan [2]) que consta de 5 algoritmos como sigue<\/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\">(p<\/strong>k,<span> <\/span><strong class=\"gx ni\">sk<\/strong>,<span> <\/span><strong class=\"gx ni\">evk<\/strong>): Se trata simplemente del algoritmo<span> <\/span><strong class=\"gx ni\">HE.KeyGen<span> <\/span><\/strong>que produce la clave p\u00fablica HE<strong class=\"gx ni\">(pk<\/strong>), la clave secreta<strong class=\"gx ni\">(sk<\/strong>) y la clave de evaluaci\u00f3n<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>): El algoritmo de cifrado HHE.<br \/>En primer lugar, crea una clave sim\u00e9trica:<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 \/>A continuaci\u00f3n, utilizando esta clave sim\u00e9trica, cifra el mensaje en texto plano<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>Toma,<span> <\/span><em class=\"nj\">c\u209b<\/em><span> <\/span>es el texto cifrado sim\u00e9trico que se enviar\u00e1 al servidor. Tenga en cuenta que<span> <\/span><em class=\"nj\">c\u209b<\/em><span> <\/span>tiene el mismo tama\u00f1o que<span> <\/span><em class=\"nj\">m<\/em>.<em class=\"nj\"><br \/><\/em>Adem\u00e1s,<span> <\/span><strong class=\"gx ni\">HHE.Enc<\/strong><span> <\/span>tambi\u00e9n encripta homom\u00f3rficamente la clave sim\u00e9trica<span> <\/span><strong class=\"gx ni\">k<span> <\/span><\/strong>utilizando<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> Por lo tanto,<strong class=\"gx ni\"><span> <\/span>c\u2096<\/strong><strong class=\"gx ni\"><span> <\/span> es el texto cifrado HE de la clave sim\u00e9trica<\/strong><span> <\/span><strong class=\"gx ni\">k<\/strong>, y tambi\u00e9n se enviar\u00e1 al servidor junto con<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>: El algoritmo de descomposici\u00f3n HHE que transforma el texto cifrado sim\u00e9trico<span> <\/span><em class=\"nj\">c\u209b<\/em><span> <\/span>en el texto cifrado HE<span> <\/span><em class=\"nj\">c<\/em><span> <\/span>evaluando homom\u00f3rficamente el algoritmo de descifrado sim\u00e9trico mediante<span> <\/span><strong class=\"gx ni\">c\u2096<span> <\/span><\/strong>y<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\">(<\/strong>evk,<span> <\/span> f,<span> <\/span> c<em class=\"nj\">\u2081, . . . , c\u1d62)<\/em><span> <\/span><em class=\"nj\">\u2192 c&#8217;:<\/em> El algoritmo de evaluaci\u00f3n HHE que simplemente devuelve<span> <\/span><strong class=\"gx ni\">HE.Eval<\/strong><strong class=\"gx ni\">(<\/strong>evk,<span> <\/span> f,<span> <\/span> c\u2081, .<em class=\"nj\">. . , 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>): El algoritmo de descifrado HHE. Simplemente devuelve<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=\"\">Tenga en cuenta que en el paso 2, tenemos que enviar<span> <\/span><strong class=\"gx ni\">c\u2096<span> <\/span><\/strong>y<span> <\/span><em class=\"nj\">c\u209b<\/em><span> <\/span>al servidor. Toma,<span> <\/span><strong class=\"gx ni\">c\u2096<span> <\/span><\/strong>es el texto cifrado HE y puede ser de gran tama\u00f1o. Sin embargo, s\u00f3lo tenemos que enviar<span> <\/span><strong class=\"gx ni\">c\u2096<span> <\/span><\/strong>al servidor una vez, por ejemplo, en una fase de configuraci\u00f3n. El servidor puede utilizarlo repetidamente en el<span> <\/span><strong class=\"gx ni\">HHE.Decomp<\/strong><span> <\/span>para convertir nuevos textos cifrados sim\u00e9tricos en los correspondientes textos cifrados HE. Esta es la diferencia clave entre HHE y HE: en lugar de enviar textos cifrados HE cada vez al servidor, lo que puede consumir mucho ancho de banda, HHE env\u00eda textos cifrados sim\u00e9tricos ligeros. Este truco hace que HHE pueda funcionar con dispositivos de recursos limitados, ya que los cifrados sim\u00e9tricos tambi\u00e9n son muy ligeros de ejecutar.<\/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=\"\">\u00bfEst\u00e1s listo para el c\u00f3digo?<\/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=\"\">Antes de sumergirnos en el c\u00f3digo, repasemos el protocolo que vamos a construir: Tenemos 2 partes (un cliente y un servidor) cuyas acciones pueden resumirse en 3 pasos 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=\"\">El cliente crea las claves con<span> <\/span><strong class=\"gx ni\">HHE.KeyGen<\/strong>, cifra los datos con<span> <\/span> HHE<strong class=\"gx ni\">.Enc<\/strong><span> <\/span>y env\u00eda al servidor el texto cifrado sim\u00e9trico de sus datos<em class=\"nj\">(c\u209b)<\/em><em class=\"nj\">,<span> <\/span><\/em>el texto cifrado HE de su clave sim\u00e9trica<strong class=\"gx ni\">(c\u2096)<\/strong>, las claves HE excepto la clave secreta<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=\"\">El servidor ejecuta el algoritmo<span> <\/span><strong class=\"gx ni\">HHE.Decomp<\/strong><span> <\/span>y una transformaci\u00f3n lineal sobre los datos encriptados HE del cliente utilizando<span> <\/span> HHE<strong class=\"gx ni\">.Eval<\/strong>, obtiene el resultado encriptado y lo devuelve al cliente.<\/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=\"\">Tras la recepci\u00f3n, el cliente descifra el resultado con<span> <\/span> HHE<strong class=\"gx ni\">.Dec<\/strong><span> <\/span>y obtiene la salida final en texto plano.<\/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=\"\">El pleno<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\">c\u00f3digo de demostraci\u00f3n<\/a><span> <\/span>est\u00e1 en C++ y se basa en la arquitectura<span> <\/span><a class=\"ae la\" href=\"https:\/\/github.com\/microsoft\/SEAL\" rel=\"noopener ugc nofollow\" target=\"_blank\">El SEAL de Microsoft<\/a><span> <\/span>y<span> <\/span><a class=\"ae la\" href=\"https:\/\/github.com\/IAIK\/hybrid-HE-framework\" rel=\"noopener ugc nofollow\" target=\"_blank\">Biblioteca PASTA<\/a>. En primer lugar, vamos a hacer 2 structs que representan el cliente y el servidor:<\/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=\"\">Primer paso<\/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=\"\">El cliente crea el contexto SEAL que es responsable de crear las claves HE y tambi\u00e9n otros objetos SEAL para codificar, encriptar y desencriptar los datos (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=\"\">A continuaci\u00f3n, el cliente ejecuta el algoritmo de cifrado<strong class=\"gx ni\">(HHE.Enc<\/strong>) para crear la clave sim\u00e9trica<em class=\"nj\">(client.k<\/em>) y el texto cifrado sim\u00e9trico<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 imprimimos los valores de<span> <\/span><em class=\"nj\">client.c_s<\/em>, veremos un vector de valores aleatorios como [30446, 62410, 62969, 38863, 43376], frente a los datos de texto plano del cliente [0, 5, 255, 100, 255]. El cliente s\u00f3lo enviar\u00e1 el vector de valores aleatorios al servidor, y nunca sus datos en texto plano.<\/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=\"\">A continuaci\u00f3n, el cliente cifra su clave sim\u00e9trica<em class=\"nj\">(client.k<\/em>) utilizando HE para crear<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=\"\">Despu\u00e9s de esto, el cliente env\u00eda<span> <\/span><em class=\"nj\">client.c_k, client.c_s<\/em><span> <\/span>y las claves HE excepto la clave secreta al servidor.<\/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=\"\">Paso 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=\"\">Tras recibir el<span> <\/span><em class=\"nj\">client.c_k<\/em>, el servidor crea su propia clave secreta HE, el objeto HHE y realiza el algoritmo de descomposici\u00f3n que da como resultado<span> <\/span><em class=\"nj\">server.c<span> <\/span><\/em>que es el texto cifrado HE del mensaje de texto plano del cliente.<span> <\/span><em class=\"nj\">m<\/em>. Tenga en cuenta que el cliente nunca env\u00eda su clave secreta<span> <\/span><strong class=\"gx ni\">he_sk<\/strong><span> <\/span>al servidor, por lo que el servidor no ser\u00e1 capaz de descifrar<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=\"\">A continuaci\u00f3n, el servidor codifica sus pesos<span> <\/span> w<span> <\/span>y sus sesgos<span> <\/span> b<span> <\/span>y realiza una multiplicaci\u00f3n vectorial por elementos, as\u00ed como una suma, de sus pesos y sesgos en texto plano con los datos codificados HE<span> <\/span><em class=\"nj\">servidor.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=\"\">Podemos ver que el resultado final es client.c_res que es el texto cifrado SEAL que recibir\u00e1 el cliente.<\/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=\"\">Paso 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=\"\">Por \u00faltimo, el cliente descifra su<span> <\/span> c_res<em class=\"nj\"><span> <\/span> utilizando su clave secreta:<\/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=\"\">Imprimiendo<span> <\/span><em class=\"nj\">decrypted_res<\/em>, veremos que el resultado ser\u00e1 [-5 5 -770 395 1270], lo cual es correcto porque<\/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=\"\">donde \u2299, \u2295 son la multiplicaci\u00f3n y la suma de vectores por elementos, respectivamente.<\/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=\"\">El resultado al ejecutar el c\u00f3digo de demostraci\u00f3n puede verse en la siguiente imagen<\/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=\"\">Orientaciones futuras y conclusiones<\/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=\"\">En este art\u00edculo, aprendimos sobre el cifrado homom\u00f3rfico h\u00edbrido, sus ventajas sobre el cifrado homom\u00f3rfico simple, un ejemplo de uso de HHE y tambi\u00e9n recorrimos un protocolo de demostraci\u00f3n muy simple en C++. En la pr\u00e1ctica, este protocolo puede ampliarse a 3 partes, lo que resulta adecuado para el an\u00e1lisis de datos cifrados o el aprendizaje autom\u00e1tico. Puede obtener m\u00e1s informaci\u00f3n sobre el protocolo HHE tripartito en un documento publicado recientemente [3] en nuestro<span> <\/span><a class=\"ae la\" href=\"https:\/\/research.tuni.fi\/nisec\/\" rel=\"noopener ugc nofollow\" target=\"_blank\">Laboratorio NISEC<\/a><span> <\/span>en la Universidad de Tampere. Espero que este art\u00edculo le resulte \u00fatil y que, mientras tanto, se divierta aprendiendo algo nuevo.<\/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=\"\">Agradecimiento<\/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=\"\">Este trabajo ha sido financiado por el<a class=\"ae la\" href=\"https:\/\/harpocrates-project.eu\/es\/\" rel=\"noopener ugc nofollow\" target=\"_blank\">proyecto HARPOCRATES de la UE<\/a><span> <\/span><a class=\"ae la\" href=\"https:\/\/harpocrates-project.eu\/es\/\" 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=\"\">Referencia<\/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, y Vinod Vaikuntanathan. \u00abCifrado totalmente homom\u00f3rfico eficiente a partir de LWE (est\u00e1ndar)\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. \u00abPasta: un caso de cifrado homom\u00f3rfico h\u00edbrido\u00bb.<span> <\/span><em class=\"me\">Archivo Cryptology ePrint<\/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<\/em>Disfraz sim\u00e9trico: Realizing Homomorphic Encryption Services from Symmetric Primitives\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>Escrito por: Khoa Nguyen, Universidad de Tampere<\/em><\/p>\n<p>[\/et_pb_text][\/et_pb_column][et_pb_column type=\u00bb1_3&#8243; _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\u00bb][et_pb_sidebar _builder_version=\u00bb4.19.1&#8243; _module_preset=\u00bbdefault\u00bb global_colors_info=\u00bb{}\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\/es\/\" 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\u00e9 es el cifrado homom\u00f3rfico h\u00edbrido y sus aplicaciones 9.2.2023 10:03 &nbsp;TL;DR Introducir el concepto de cifrado homom\u00f3rfico h\u00edbrido, sus casos de uso, una breve formulaci\u00f3n y algo dec\u00f3digo de demostraci\u00f3n en C++. Introducci\u00f3n Las aplicaciones de preservaci\u00f3n de la privacidad se han convertido en [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":1829,"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":[44],"tags":[],"class_list":["post-2864","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-noticias"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/posts\/2864","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/comments?post=2864"}],"version-history":[{"count":2,"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/posts\/2864\/revisions"}],"predecessor-version":[{"id":2866,"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/posts\/2864\/revisions\/2866"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/media\/1829"}],"wp:attachment":[{"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/media?parent=2864"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/categories?post=2864"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/harpocrates-project.eu\/es\/wp-json\/wp\/v2\/tags?post=2864"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}