<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on kenji.blog</title><link>http://kenji.blog/es/categories/security/</link><description>Recent content in Security on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 21:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/es/categories/security/index.xml" rel="self" type="application/rss+xml"/><item><title>Intuición matemática de la criptografía basada en retículos (Lattice-based cryptography)</title><link>http://kenji.blog/es/p/lattice-based-cryptography-math-intuition/</link><pubDate>Fri, 11 Sep 2026 21:00:00 +0900</pubDate><guid>http://kenji.blog/es/p/lattice-based-cryptography-math-intuition/</guid><description>&lt;img src="http://kenji.blog/p/lattice-based-cryptography-math-intuition/img/eyecatch.jpg" alt="Featured image of post Intuición matemática de la criptografía basada en retículos (Lattice-based cryptography)" />&lt;h1 id="1-introducción-el-amanecer-de-la-criptografía-poscuántica-pqc-y-el-auge-de-la-criptografía-basada-en-retículos">1. Introducción: El amanecer de la criptografía poscuántica (PQC) y el auge de la criptografía basada en retículos
&lt;/h1>&lt;p>La infraestructura digital de la sociedad moderna se basa en tecnologías de criptografía de clave pública, como el cifrado RSA y la criptografía de curva elíptica (ECC). Estos métodos basan su seguridad en la dificultad matemática de problemas como la &amp;ldquo;factorización de enteros&amp;rdquo; o el &amp;ldquo;logaritmo discreto&amp;rdquo;, los cuales se cree que no pueden resolverse eficientemente (requieren tiempo exponencial) con computadoras clásicas convencionales.&lt;/p>
&lt;p>Sin embargo, el &amp;ldquo;Algoritmo de Shor&amp;rdquo;, publicado por Peter Shor en 1994, sacudió el mundo de la criptografía. Este algoritmo demostró matemáticamente que una vez que se construyan computadoras cuánticas a gran escala, estas podrán resolver los problemas de factorización de enteros y de logaritmo discreto en tiempo polinomial. Esto significa que la criptografía de clave pública ampliamente utilizada en la actualidad se volverá completamente descifrable en el futuro.&lt;/p>
&lt;p>Para contrarrestar esta &amp;ldquo;Amenaza Cuántica (Quantum Threat)&amp;rdquo;, se hizo imperativo investigar nuevos métodos de cifrado que sean difíciles de descifrar incluso utilizando computadoras cuánticas. Este es el campo conocido como &amp;ldquo;Criptografía Poscuántica (Post-Quantum Cryptography: PQC)&amp;rdquo; o &amp;ldquo;Criptografía resistente a la computación cuántica&amp;rdquo;.&lt;/p>
&lt;p>Existen varios candidatos prometedores para la PQC, como la criptografía basada en hashes, la criptografía basada en códigos, la criptografía multivariable y la criptografía basada en isogenias. Sin embargo, el método que actualmente atrae más la atención y que está en el centro del proceso de estandarización de PQC por parte del NIST (Instituto Nacional de Estándares y Tecnología de EE. UU.) es la &amp;ldquo;Criptografía basada en retículos (Lattice-based cryptography)&amp;rdquo;. En comparación con otros métodos, la criptografía de retículos ofrece velocidades de cifrado y descifrado muy rápidas, y cuenta con una característica destacada: una prueba de seguridad extremadamente sólida en la teoría criptográfica basada en la reducción de la &amp;ldquo;complejidad en el peor de los casos (Worst-case complexity)&amp;rdquo; a la &amp;ldquo;complejidad en el caso promedio (Average-case complexity)&amp;rdquo;.&lt;/p>
&lt;p>En este artículo, partiremos de la definición matemática de &amp;ldquo;Retículo (Lattice)&amp;rdquo;, que es la base de esta criptografía, y explicaremos profundamente mediante fórmulas, intuición geométrica y ejemplos numéricos específicos los problemas difíciles sobre retículos como SVP (Problema del vector más corto) y CVP (Problema del vector más cercano), y el corazón de la criptografía de retículos moderna, el &amp;ldquo;Problema LWE (Learning With Errors)&amp;rdquo;.&lt;/p>
&lt;h1 id="2-definición-matemática-e-intuición-geométrica-de-un-retículo-lattice">2. Definición matemática e intuición geométrica de un Retículo (Lattice)
&lt;/h1>&lt;h2 id="21-espacio-vectorial-y-retículos">2.1 Espacio vectorial y retículos
&lt;/h2>&lt;p>En matemáticas, un &amp;ldquo;Retículo (Lattice)&amp;rdquo; es un conjunto discreto de puntos dispuestos regularmente en un espacio vectorial real de $n$ dimensiones $\mathbb{R}^n$. Es similar al espacio vectorial (Vector Space) que se estudia en álgebra lineal, pero existe una diferencia crucial. Mientras que un espacio vectorial es un espacio continuo representado por combinaciones lineales de vectores base con &amp;ldquo;coeficientes reales&amp;rdquo;, un retículo es un espacio discreto representado por combinaciones lineales de vectores base con &amp;ldquo;coeficientes enteros&amp;rdquo;.&lt;/p>
&lt;p>Demos una definición matemática rigurosa. Consideremos $n$ vectores linealmente independientes $\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n$ (donde $n \le m$) en un espacio vectorial real de $m$ dimensiones $\mathbb{R}^m$. Sea $B = [\mathbf{b}_1, \mathbf{b}_2, \dots, \mathbf{b}_n] \in \mathbb{R}^{m \times n}$ una matriz que tiene estos vectores como columnas. Llamamos a esta $B$ la &amp;ldquo;Base (Basis)&amp;rdquo; del retículo.&lt;/p>
&lt;p>El retículo $\mathcal{L}(B)$ generado por esta base $B$ se define de la siguiente manera:&lt;/p>
$$
\mathcal{L}(B) = \left\{ \sum_{i=1}^{n} x_i \mathbf{b}_i \mathrel{\bigg|} x_i \in \mathbb{Z} \right\} = \{ B \mathbf{x} \mid \mathbf{x} \in \mathbb{Z}^n \}
$$
&lt;p>Lo importante aquí es que los coeficientes $x_i$ están limitados a números enteros $\mathbb{Z}$, en lugar de números reales $\mathbb{R}$. Como resultado, en lugar de puntos continuos que existen en un número infinito en el espacio, se forma un &amp;ldquo;conjunto discreto de puntos&amp;rdquo; similar a las intersecciones espaciadas uniformemente en una cuadrícula.&lt;/p>
&lt;h2 id="22-imagen-geométrica">2.2 Imagen geométrica
&lt;/h2>&lt;p>Consideremos un ejemplo en el plano bidimensional $\mathbb{R}^2$. Si elegimos los vectores base $\mathbf{b}_1 = \begin{pmatrix} 1 \\ 0 \end{pmatrix}$ y $\mathbf{b}_2 = \begin{pmatrix} 0 \\ 1 \end{pmatrix}$, el retículo generado por ellos será el conjunto de todas las coordenadas enteras $(x, y) \in \mathbb{Z}^2$ en el plano cartesiano. Este es el &amp;ldquo;retículo cuadrado&amp;rdquo; más simple.&lt;/p>
&lt;p>Sin embargo, los retículos no siempre son ortogonales. Por ejemplo, considerando una base como $\mathbf{b}_1 = \begin{pmatrix} 2 \\ 1 \end{pmatrix}$ y $\mathbf{b}_2 = \begin{pmatrix} 1 \\ 3 \end{pmatrix}$, los puntos generados se parecerán a las intersecciones de una malla sesgada diagonalmente.&lt;/p>
&lt;h2 id="23-no-unicidad-de-la-base-y-transformación-unimodular">2.3 No unicidad de la base y transformación unimodular
&lt;/h2>&lt;p>Existe una propiedad importante relacionada con la base de la seguridad de la criptografía de retículos: &amp;ldquo;existen infinitas bases que generan el mismo retículo&amp;rdquo;.&lt;/p>
&lt;p>Por ejemplo, el retículo $\mathbb{Z}^2$ generado por la base $\mathbf{b}_1 = (1, 0)^T, \mathbf{b}_2 = (0, 1)^T$ mencionada anteriormente es exactamente el mismo retículo $\mathbb{Z}^2$ que el generado por la base $\mathbf{b}'_1 = (1, 1)^T, \mathbf{b}'_2 = (2, 3)^T$.&lt;/p>
&lt;p>La condición necesaria y suficiente para que una base $B$ y otra base $B'$ generen el mismo retículo es que exista una matriz con componentes enteros $U \in \mathbb{Z}^{n \times n}$ cuyo determinante sea $\det(U) = \pm 1$, tal que:
&lt;/p>
$$ B' = B U $$
&lt;p>
A una matriz $U$ de este tipo se le llama &amp;ldquo;Matriz unimodular (Unimodular matrix)&amp;rdquo;.&lt;/p>
&lt;p>La idea básica en la aplicación a la criptografía es utilizar una &amp;ldquo;buena base&amp;rdquo; (una base casi ortogonal formada por vectores cortos) como clave privada, y una &amp;ldquo;mala base&amp;rdquo; (una base con vectores extremadamente oblicuos entre sí y muy largos) como clave pública. Calcular una buena base a partir de una mala base se vuelve muy difícil a medida que aumentan las dimensiones. Esta es la intuición básica de la criptografía basada en retículos.&lt;/p>
&lt;h1 id="3-problemas-computacionalmente-difíciles-en-retículos">3. Problemas computacionalmente difíciles en retículos
&lt;/h1>&lt;p>La seguridad de la criptografía basada en retículos depende de la dificultad de resolver problemas matemáticos específicos en los retículos. Aquí presentaremos dos de los problemas más fundamentales y conocidos.&lt;/p>
&lt;h2 id="31-problema-del-vector-más-corto-shortest-vector-problem-svp">3.1 Problema del vector más corto (Shortest Vector Problem: SVP)
&lt;/h2>&lt;p>SVP es el problema más clásico y famoso de la teoría de retículos.&lt;/p>
&lt;p>&lt;strong>Definición (SVP):&lt;/strong>
Dada una base de retículo arbitraria $B$, encontrar el vector $\mathbf{v}$ distinto de cero que pertenece al retículo $\mathcal{L}(B)$ y tiene la norma euclidiana (longitud) mínima.&lt;/p>
&lt;p>Expresado en fórmula matemática, es el problema de encontrar $\mathbf{v}$ tal que $\min_{\mathbf{v} \in \mathcal{L}(B) \setminus \{\mathbf{0}\}} \| \mathbf{v} \|$. A esta longitud mínima se le denota como $\lambda_1(\mathcal{L})$ y se le llama &amp;ldquo;Primer mínimo sucesivo (First successive minimum) del retículo&amp;rdquo;.&lt;/p>
&lt;p>En dimensiones bajas como 2 o 3, podemos encontrar el vector más corto visualmente dibujando un gráfico, o podemos resolverlo eficientemente usando algoritmos como el algoritmo de reducción de bases de Gauss. Sin embargo, cuando la dimensión $n$ alcanza valores altos como cientos o miles, se sabe que resolver estrictamente SVP es NP-difícil.&lt;/p>
&lt;p>En criptografía real, no se busca el vector más corto estricto, sino que se utiliza un SVP aproximado ($\gamma$-SVP) para encontrar un &amp;ldquo;vector aproximadamente corto&amp;rdquo;. Si el factor de aproximación $\gamma$ es de tamaño polinomial, este problema se sigue considerando extremadamente difícil.&lt;/p>
&lt;h2 id="32-problema-del-vector-más-cercano-closest-vector-problem-cvp">3.2 Problema del vector más cercano (Closest Vector Problem: CVP)
&lt;/h2>&lt;p>CVP es también un problema de extrema importancia en la criptografía basada en retículos.&lt;/p>
&lt;p>&lt;strong>Definición (CVP):&lt;/strong>
Dada una base de retículo arbitraria $B$ y un vector objetivo arbitrario $\mathbf{t} \in \mathbb{R}^m$ en el espacio (que no necesariamente es un punto del retículo), encontrar el punto del retículo $\mathbf{v} \in \mathcal{L}(B)$ más cercano a $\mathbf{t}$.&lt;/p>
&lt;p>Expresado matemáticamente, es el problema de buscar un punto de retículo $\mathbf{v}$ tal que $\min_{\mathbf{v} \in \mathcal{L}(B)} \| \mathbf{v} - \mathbf{t} \|$.&lt;/p>
&lt;p>Al igual que SVP, CVP también es NP-difícil en altas dimensiones. Desde la perspectiva de la aplicación criptográfica, el problema LWE que discutiremos más adelante está estrechamente relacionado con una variante especial de este CVP (Decodificación de distancia acotada o Bounded Distance Decoding: BDD).&lt;/p>
&lt;h2 id="33-por-qué-es-insoluble-en-altas-dimensiones-los-límites-de-lll-y-bkz">3.3 ¿Por qué es insoluble en altas dimensiones? (Los límites de LLL y BKZ)
&lt;/h2>&lt;p>Un algoritmo famoso para resolver problemas de retículos de altas dimensiones es el algoritmo LLL (Lenstra-Lenstra-Lovász algorithm). El algoritmo LLL se ejecuta en tiempo polinomial y puede reducir en cierta medida la base del retículo a una &amp;ldquo;buena base&amp;rdquo;. Sin embargo, el vector más corto que el algoritmo LLL puede encontrar tiene un factor de aproximación exponencial ($2^{\mathcal{O}(n)}$) en relación con la longitud del vector más corto verdadero, por lo que no es suficiente para romper la seguridad criptográfica.&lt;/p>
&lt;p>Si se utiliza un algoritmo de reducción de bases más potente como el algoritmo BKZ (Block Korkine-Zolotarev), que es una mejora de LLL, se pueden encontrar vectores más cortos, pero su complejidad computacional aumenta exponencialmente con respecto al tamaño del bloque. En la criptografía de retículos, los parámetros seguros (como el tamaño de la dimensión $n$) se determinan estimando el tiempo de ejecución de este algoritmo BKZ. Con los parámetros estándar actuales de PQC, se eligen dimensiones $n$ de 500 a 1000 o más, y se considera que descifrarlos tomaría más tiempo que la edad del universo, incluso utilizando supercomputadoras o futuras computadoras cuánticas.&lt;/p>
&lt;h1 id="4-formulación-matemática-del-problema-lwe-learning-with-errors">4. Formulación matemática del problema LWE (Learning With Errors)
&lt;/h1>&lt;p>La mayor parte de la criptografía de retículos moderna se basa en el &amp;ldquo;Problema LWE (Learning With Errors)&amp;rdquo; propuesto por Oded Regev en 2005. La belleza del problema LWE radica en la simplicidad de su formulación y en el hecho de que cuenta con una poderosa prueba matemática de &amp;ldquo;reducción de la complejidad en el peor caso a la complejidad en el caso promedio&amp;rdquo;.&lt;/p>
&lt;h2 id="41-sistema-de-ecuaciones-lineales-sin-ruido">4.1 Sistema de ecuaciones lineales sin ruido
&lt;/h2>&lt;p>Para entender el problema LWE, primero consideremos un simple sistema de ecuaciones lineales sin ruido.
Supongamos que hay un vector secreto desconocido $\mathbf{s} \in \mathbb{Z}_q^n$ (donde cada componente es un número entero de $0$ a $q-1$). Aquí $q$ es un número primo.&lt;/p>
&lt;p>Elegimos vectores de coeficientes aleatorios $\mathbf{a}_1, \mathbf{a}_2, \dots \in \mathbb{Z}_q^n$ y calculamos su producto interno con el vector secreto $\mathbf{s}$ módulo $q$.
$b_1 = \langle \mathbf{a}_1, \mathbf{s} \rangle \pmod q$
$b_2 = \langle \mathbf{a}_2, \mathbf{s} \rangle \pmod q$
$\vdots$&lt;/p>
&lt;p>Si se nos da un número suficiente (al menos $n$) de pares $(\mathbf{a}_i, b_i)$, podemos recuperar fácilmente el vector secreto $\mathbf{s}$ usando la &amp;ldquo;Eliminación de Gauss (Gaussian elimination)&amp;rdquo; de álgebra lineal. Este es un problema que puede resolverse fácilmente en tiempo polinomial.&lt;/p>
&lt;h2 id="42-definición-del-problema-lwe-agregando-ruido">4.2 Definición del problema LWE: Agregando ruido
&lt;/h2>&lt;p>Entonces, ¿qué sucedería si añadimos un ligero &amp;ldquo;ruido (error)&amp;rdquo; a este problema?
Esta es la esencia del problema LWE.&lt;/p>
&lt;p>Para el vector secreto desconocido $\mathbf{s} \in \mathbb{Z}_q^n$, añadimos un pequeño error $e_i \in \mathbb{Z}_q$ al resultado de cada ecuación.
$b_i = \langle \mathbf{a}_i, \mathbf{s} \rangle + e_i \pmod q$&lt;/p>
&lt;p>Aquí, $e_i$ es un pequeño valor entero con media 0 y una desviación estándar relativamente pequeña (por ejemplo, elegido de una distribución gaussiana discreta, similar a una distribución normal).
La información proporcionada es una lista de pares de un vector aleatorio $\mathbf{a}_i$ y $b_i$ calculado añadiendo un error.
$( \mathbf{a}_1, b_1 ), ( \mathbf{a}_2, b_2 ), \dots, ( \mathbf{a}_m, b_m )$&lt;/p>
&lt;p>Representar esto en forma matricial lo hace muy claro.
Usando una matriz aleatoria $A \in \mathbb{Z}_q^{m \times n}$, un vector secreto $\mathbf{s} \in \mathbb{Z}_q^n$ y un vector de error $\mathbf{e} \in \mathbb{Z}_q^m$:
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q $$
&lt;p>
Solo se nos proporciona $A$ y $\mathbf{b}$. Encontrar $\mathbf{s}$ a partir de aquí es el &amp;ldquo;Problema de búsqueda LWE (Search LWE problem)&amp;rdquo;.&lt;/p>
&lt;p>Debido a que el error $e_i$ está presente, intentar usar la eliminación de Gauss amplificaría el error de forma exponencial durante el proceso de sumar y restar ecuaciones, haciendo imposible llegar a la respuesta correcta. A primera vista, parece un simple sistema de ecuaciones lineales, pero al agregar este pequeño ruido, la dificultad del problema se eleva al nivel de NP-difícil.&lt;/p>
&lt;h2 id="43-problema-lwe-de-decisión-decision-lwe">4.3 Problema LWE de decisión (Decision LWE)
&lt;/h2>&lt;p>En las pruebas de la teoría criptográfica, la variante frecuentemente utilizada es el &amp;ldquo;Problema LWE de decisión (Decision LWE problem)&amp;rdquo;, que es una variante del problema de búsqueda LWE.&lt;/p>
&lt;p>El problema LWE de decisión es el problema de determinar de cuál de las siguientes dos distribuciones proviene una lista de muestras dada:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Distribución LWE&lt;/strong>: $(A, \mathbf{b} = A\mathbf{s} + \mathbf{e} \pmod q)$ calculada intencionadamente.&lt;/li>
&lt;li>&lt;strong>Distribución aleatoria uniforme&lt;/strong>: $(A, \mathbf{u})$ formada por una matriz $A$ y un vector $\mathbf{u}$ elegidos de forma completamente aleatoria.&lt;/li>
&lt;/ol>
&lt;p>Sorprendentemente, si se eligen adecuadamente los parámetros del problema LWE, los pares obtenidos de la distribución LWE se vuelven &amp;ldquo;computacionalmente indistinguibles (Computationally Indistinguishable)&amp;rdquo; de los pares de datos completamente aleatorios. Esta propiedad es la base que permite a la criptografía basada en LWE generar &amp;ldquo;textos cifrados indistinguibles de números aleatorios&amp;rdquo;.&lt;/p>
&lt;h2 id="44-reducción-de-la-complejidad-en-el-peor-caso-a-la-del-caso-promedio-teorema-de-regev">4.4 Reducción de la complejidad en el peor caso a la del caso promedio (Teorema de Regev)
&lt;/h2>&lt;p>El mayor logro de Oded Regev fue vincular matemáticamente la dificultad de este problema LWE con la dificultad de los problemas de retículos mencionados anteriormente (SVP y CVP).&lt;/p>
&lt;p>Utilizó la reducción cuántica (Quantum reduction) para demostrar que &amp;ldquo;si existe un algoritmo de tiempo polinomial capaz de resolver el problema LWE en el caso promedio (para $A$ y $\mathbf{e}$ elegidos al azar), entonces existe un algoritmo cuántico de tiempo polinomial capaz de resolver el Gap-SVP en el peor caso (el caso más difícil) para cualquier retículo&amp;rdquo;. (Posteriormente, Peikert y otros también demostraron una reducción clásica).&lt;/p>
&lt;p>Esta es una propiedad soñada en la teoría criptográfica. Esto se debe a que disipa la preocupación de que &amp;ldquo;la criptografía podría romperse si por casualidad elegimos una clave débil (una parte del caso promedio)&amp;rdquo; y ofrece una fuerte garantía de que &amp;ldquo;si se puede resolver el LWE promedio, entonces se pueden resolver todos los problemas difíciles del retículo (por lo tanto, el LWE es absolutamente difícil)&amp;rdquo;.&lt;/p>
&lt;div class="mermaid">graph TD
A["Problemas de retículos en el peor caso (Gap-SVP, SIVP)"] -->|Reducción Cuántica/Clásica| B["Problema LWE en el caso promedio"]
B -->|Construcción Criptográfica| C["Criptosistemas basados en LWE (PKE, KEM, FHE)"]
style A fill:#ffcccc,stroke:#ff0000,stroke-width:2px,color:#000
style B fill:#ccffcc,stroke:#00aa00,stroke-width:2px,color:#000
style C fill:#ccccff,stroke:#0000ff,stroke-width:2px,color:#000&lt;/div>
&lt;h1 id="5-construcción-de-un-sistema-de-criptografía-de-clave-pública-utilizando-lwe-criptografía-de-regev">5. Construcción de un sistema de criptografía de clave pública utilizando LWE (Criptografía de Regev)
&lt;/h1>&lt;p>Habiendo entendido la dificultad del problema LWE, veamos cómo funciona el cifrado y descifrado usándolo en el sistema de criptografía de clave pública básico propuesto por Oded Regev. Aquí explicaremos el mecanismo más básico para cifrar un mensaje de 1 bit $M \in \{0, 1\}$.&lt;/p>
&lt;h2 id="51-generación-de-claves-key-generation">5.1 Generación de claves (Key Generation)
&lt;/h2>&lt;ol>
&lt;li>Como parámetros del sistema, se determinan el módulo primo $q$, la dimensión $n$ y el número de ecuaciones $m$ ($m > n \log q$).&lt;/li>
&lt;li>Se elige al azar el vector secreto $\mathbf{s} \in \mathbb{Z}_q^n$ como clave privada.&lt;/li>
&lt;li>Se genera una matriz aleatoria $A \in \mathbb{Z}_q^{m \times n}$.&lt;/li>
&lt;li>Se selecciona un pequeño vector de error $\mathbf{e} \in \mathbb{Z}_q^m$ a partir de una distribución de errores como la distribución gaussiana discreta.&lt;/li>
&lt;li>Se calcula el vector $\mathbf{b} = A \mathbf{s} + \mathbf{e} \pmod q$.&lt;/li>
&lt;li>La clave pública (Public Key) será $(A, \mathbf{b})$.&lt;/li>
&lt;li>La clave secreta o privada (Secret Key) será $\mathbf{s}$.&lt;/li>
&lt;/ol>
&lt;p>La clave pública es precisamente una &amp;ldquo;instancia del problema LWE&amp;rdquo;. Dado que derivar la clave secreta $\mathbf{s}$ a partir de la clave pública $(A, \mathbf{b})$ equivale a resolver el problema de búsqueda LWE, la seguridad está garantizada.&lt;/p>
&lt;h2 id="52-cifrado-encryption">5.2 Cifrado (Encryption)
&lt;/h2>&lt;p>Alice cifra un mensaje de 1 bit $M \in \{0, 1\}$ utilizando la clave pública de Bob $(A, \mathbf{b})$.&lt;/p>
&lt;ol>
&lt;li>Elige un vector binario aleatorio (con componentes 0 o 1) $\mathbf{r} \in \{0, 1\}^m$.&lt;/li>
&lt;li>Como primera parte del texto cifrado, calcula el vector $\mathbf{u} = A^T \mathbf{r} \pmod q$. ($A^T$ es la matriz transpuesta de $A$. Es decir, suma las filas de $A$ donde el componente de $\mathbf{r}$ es 1).&lt;/li>
&lt;li>Como segunda parte del texto cifrado, calcula el escalar $v = \mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q$.
(Si el mensaje $M$ es 0, no suma nada; si es $1$, suma exactamente la mitad del valor de $q$, $\lfloor \frac{q}{2} \rfloor$).&lt;/li>
&lt;li>El texto cifrado (Ciphertext) será $(\mathbf{u}, v)$.&lt;/li>
&lt;/ol>
&lt;p>La implicación intuitiva del cifrado es tomar la &amp;ldquo;suma de un subconjunto aleatorio&amp;rdquo; de la matriz de la clave pública $A$ y del vector $\mathbf{b}$. Debido a la dificultad del problema LWE de decisión, este texto cifrado $(\mathbf{u}, v)$ parece indistinguible de un vector completamente aleatorio y de un número aleatorio uniforme (Seguridad semántica: Semantic Security).&lt;/p>
&lt;div class="mermaid">flowchart LR
M["Mensaje M en {0,1}"] --> Enc
PK["Clave Pública (A, b)"] --> Enc
r["Vector binario aleatorio r"] --> Enc
subgraph Enc ["Proceso de Cifrado"]
direction TB
u_calc["u = A^T * r mod q"]
v_calc["v = b^T * r + M * floor(q/2) mod q"]
end
Enc --> CT["Texto Cifrado (u, v)"]&lt;/div>
&lt;h2 id="53-descifrado-decryption">5.3 Descifrado (Decryption)
&lt;/h2>&lt;p>Bob descifra el texto cifrado $(\mathbf{u}, v)$ usando su clave secreta $\mathbf{s}$.&lt;/p>
&lt;ol>
&lt;li>Calcula el siguiente valor: $D = v - \mathbf{s}^T \mathbf{u} \pmod q$&lt;/li>
&lt;li>Si el resultado calculado está cerca de $0$, la salida es $M=0$; si está cerca de $\lfloor \frac{q}{2} \rfloor$, la salida es $M=1$.&lt;/li>
&lt;/ol>
&lt;p>Desarrollemos matemáticamente por qué se puede descifrar con esto.
Recuerde que $\mathbf{b} = A \mathbf{s} + \mathbf{e}$.&lt;/p>
$$
\begin{aligned}
v - \mathbf{s}^T \mathbf{u} &amp;= (\mathbf{b}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T (A^T \mathbf{r}) \\
&amp;= ((A \mathbf{s} + \mathbf{e})^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= (\mathbf{s}^T A^T \mathbf{r} + \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor) - \mathbf{s}^T A^T \mathbf{r} \\
&amp;= \mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor \pmod q
\end{aligned}
$$
&lt;p>Aquí, $\mathbf{s}^T A^T \mathbf{r}$ se cancela claramente y desaparece de la ecuación.
Lo que queda es $\mathbf{e}^T \mathbf{r} + M \cdot \lfloor \frac{q}{2} \rfloor$.&lt;/p>
&lt;p>$\mathbf{e}$ es un vector de ruido con componentes muy pequeños, y $\mathbf{r}$ es un vector binario con componentes de 0 o 1. Por lo tanto, su producto interno $\mathbf{e}^T \mathbf{r}$ también permanece como un valor relativamente pequeño (si los parámetros se eligen adecuadamente).&lt;/p>
&lt;ul>
&lt;li>Si $M=0$, el resultado es $\mathbf{e}^T \mathbf{r}$, que será un valor pequeño cerca de $0$.&lt;/li>
&lt;li>Si $M=1$, el resultado es $\mathbf{e}^T \mathbf{r} + \lfloor \frac{q}{2} \rfloor$, que se situará alrededor de la mitad del valor de $q$, $\lfloor \frac{q}{2} \rfloor$.&lt;/li>
&lt;/ul>
&lt;p>Si los parámetros están diseñados para que el valor absoluto del error $\mathbf{e}^T \mathbf{r}$ sea menor a $\frac{q}{4}$, Bob puede determinar (descifrar) con precisión el mensaje $M$ simplemente verificando si el resultado del cálculo está más cerca de $0$ o de $\lfloor \frac{q}{2} \rfloor$. Este es el hermoso mecanismo por el cual funciona la criptografía basada en LWE.&lt;/p>
&lt;div class="mermaid">flowchart LR
CT["Texto Cifrado (u, v)"] --> Dec
SK["Clave Secreta s"] --> Dec
subgraph Dec ["Proceso de Descifrado"]
direction TB
calc["Calcular D = v - s^T * u mod q"]
check["Comprobar si D está más cerca de 0 o q/2"]
end
calc --> check
Dec --> M_out["Mensaje Recuperado M"]&lt;/div>
&lt;h1 id="6-ejemplo-ilustrativo-de-criptografía-lwe-usando-valores-numéricos-específicos">6. Ejemplo ilustrativo de criptografía LWE usando valores numéricos específicos
&lt;/h1>&lt;p>Es posible que resulte difícil comprender solo con una lista de fórmulas matemáticas, así que intentemos establecer parámetros numéricos muy pequeños y seguir los cálculos desde el cifrado hasta el descifrado.
(* En un sistema de criptografía real, se utilizan valores para $n$ mayores de 500 y para $q$ valores de miles o más para garantizar la seguridad).&lt;/p>
&lt;p>&lt;strong>[Configuración de parámetros]&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Módulo $q = 17$ (Un número primo. Por tanto, los valores están en el rango de $0$ a $16$).&lt;/li>
&lt;li>Dimensión $n = 2$&lt;/li>
&lt;li>Número de ecuaciones $m = 4$&lt;/li>
&lt;li>Supondremos que se cifrará el mensaje $M = 1$.&lt;/li>
&lt;li>Cantidad de desplazamiento del mensaje: $\lfloor \frac{q}{2} \rfloor = \lfloor \frac{17}{2} \rfloor = 8$&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>[1. Fase de generación de claves]&lt;/strong>
Bob elige su clave secreta $\mathbf{s}$, la matriz $A$ y el vector de error $\mathbf{e}$ al azar.
&lt;/p>
$$ \mathbf{s} = \begin{pmatrix} 3 \\ 4 \end{pmatrix} \in \mathbb{Z}_{17}^2 $$
$$ A = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \in \mathbb{Z}_{17}^{4 \times 2} $$
$$ \mathbf{e} = \begin{pmatrix} 1 \\ -1 \\ 0 \\ 2 \end{pmatrix} \equiv \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} \pmod{17} $$
&lt;p>Luego calcula la clave pública $\mathbf{b}$.
&lt;/p>
$$ A \mathbf{s} = \begin{pmatrix} 2 &amp; 15 \\ 1 &amp; 8 \\ 14 &amp; 5 \\ 9 &amp; 10 \end{pmatrix} \begin{pmatrix} 3 \\ 4 \end{pmatrix} = \begin{pmatrix} 2\times 3 + 15\times 4 \\ 1\times 3 + 8\times 4 \\ 14\times 3 + 5\times 4 \\ 9\times 3 + 10\times 4 \end{pmatrix} = \begin{pmatrix} 6 + 60 \\ 3 + 32 \\ 42 + 20 \\ 27 + 40 \end{pmatrix} = \begin{pmatrix} 66 \\ 35 \\ 62 \\ 67 \end{pmatrix} $$
&lt;p>
Calculando esto módulo 17 (como $66 = 17 \times 3 + 15$ etc.):
&lt;/p>
$$ A \mathbf{s} \pmod{17} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} $$
&lt;p>
Sumando el vector de error $\mathbf{e}$:
&lt;/p>
$$ \mathbf{b} = A \mathbf{s} + \mathbf{e} = \begin{pmatrix} 15 \\ 1 \\ 11 \\ 16 \end{pmatrix} + \begin{pmatrix} 1 \\ 16 \\ 0 \\ 2 \end{pmatrix} = \begin{pmatrix} 16 \\ 17 \\ 11 \\ 18 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 0 \\ 11 \\ 1 \end{pmatrix} \pmod{17} $$
&lt;p>La clave pública es $A$ y $\mathbf{b} = (16, 0, 11, 1)^T$.&lt;/p>
&lt;p>&lt;strong>[2. Fase de cifrado]&lt;/strong>
Alice cifra el mensaje $M = 1$.
Elige un vector aleatorio $\mathbf{r}$. Aquí usaremos $\mathbf{r} = (1, 0, 1, 0)^T$.&lt;/p>
&lt;p>Calcula $\mathbf{u}$:
&lt;/p>
$$ \mathbf{u} = A^T \mathbf{r} = \begin{pmatrix} 2 &amp; 1 &amp; 14 &amp; 9 \\ 15 &amp; 8 &amp; 5 &amp; 10 \end{pmatrix} \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = \begin{pmatrix} 2 \times 1 + 14 \times 1 \\ 15 \times 1 + 5 \times 1 \end{pmatrix} = \begin{pmatrix} 16 \\ 20 \end{pmatrix} \equiv \begin{pmatrix} 16 \\ 3 \end{pmatrix} \pmod{17} $$
&lt;p>Calcula $v$:
&lt;/p>
$$ \mathbf{b}^T \mathbf{r} = (16, 0, 11, 1) \begin{pmatrix} 1 \\ 0 \\ 1 \\ 0 \end{pmatrix} = 16 \times 1 + 11 \times 1 = 27 \equiv 10 \pmod{17} $$
&lt;p>
Suma el valor correspondiente al mensaje $M=1$, $\lfloor 17/2 \rfloor = 8$:
&lt;/p>
$$ v = \mathbf{b}^T \mathbf{r} + M \cdot 8 = 10 + 1 \times 8 = 18 \equiv 1 \pmod{17} $$
&lt;p>Alice envía el texto cifrado $(\mathbf{u}, v) = \left( \begin{pmatrix} 16 \\ 3 \end{pmatrix}, 1 \right)$ a Bob.&lt;/p>
&lt;p>&lt;strong>[3. Fase de descifrado]&lt;/strong>
Bob, al recibir el texto cifrado, lo descifra usando su clave secreta $\mathbf{s} = (3, 4)^T$.
Fórmula de descifrado: Calcula $D = v - \mathbf{s}^T \mathbf{u} \pmod{17}$.&lt;/p>
$$ \mathbf{s}^T \mathbf{u} = (3, 4) \begin{pmatrix} 16 \\ 3 \end{pmatrix} = 3 \times 16 + 4 \times 3 = 48 + 12 = 60 \equiv 9 \pmod{17} $$
$$ D = v - \mathbf{s}^T \mathbf{u} = 1 - 9 = -8 \pmod{17} $$
&lt;p>Aquí, en el mundo del módulo 17, $-8$ es igual a $9$ ($-8 + 17 = 9$).
Determina si el valor obtenido $D = 9$ está más cerca de $0$ o de $8$ ($\lfloor 17/2 \rfloor$).
Dado que $9$ está claramente más cerca de $8$ que de $0$, ¡Bob logra restaurar correctamente $M = 1$!&lt;/p>
&lt;p>¿Por qué resultó 9? Recordemos la prueba anterior.
La parte de error es $\mathbf{e}^T \mathbf{r} = (1, -1, 0, 2) (1, 0, 1, 0)^T = 1 \times 1 + 0 \times 1 = 1$.
Por lo tanto, el resultado del cálculo es $\mathbf{e}^T \mathbf{r} + M \cdot 8 = 1 + 8 = 9$, confirmando que se ha calculado el valor tal como en la teoría.&lt;/p>
&lt;h1 id="7-evolución-hacia-la-aplicación-práctica-ring-lwe-y-module-lwe">7. Evolución hacia la aplicación práctica: Ring-LWE y Module-LWE
&lt;/h1>&lt;p>El problema LWE estándar (Standard LWE) explicado hasta ahora tiene pruebas de seguridad muy sólidas, pero en la práctica tiene defectos fatales. Estos son el &amp;ldquo;tamaño gigante de las claves&amp;rdquo; y el &amp;ldquo;alto costo computacional&amp;rdquo;.&lt;/p>
&lt;p>En Standard LWE, la clave pública incluye una matriz gigante $A \in \mathbb{Z}_q^{m \times n}$. Cuando el parámetro $n$ alcanza cifras entre cientos y miles, el tamaño de esta matriz llega a varios megabytes, lo que la hace demasiado pesada para enviar y recibir cada vez a través de protocolos de comunicación en internet (como TLS). Además, la multiplicación de matrices y vectores requiere una complejidad computacional de $\mathcal{O}(n^2)$.&lt;/p>
&lt;p>Para resolver estos problemas se introdujeron el &amp;ldquo;Ring-LWE (RLWE)&amp;rdquo; y el &amp;ldquo;Module-LWE (MLWE)&amp;rdquo;, que incorporan estructuras algebraicas llamadas anillos de polinomios (Polynomial rings) en los retículos.&lt;/p>
&lt;h2 id="71-intuición-de-ring-lwe">7.1 Intuición de Ring-LWE
&lt;/h2>&lt;p>En Ring-LWE, los vectores y matrices se sustituyen por elementos (polinomios) de un anillo de polinomios $\mathcal{R}_q = \mathbb{Z}_q[X]/(X^n + 1)$. (Donde $n$ se elige como una potencia de 2).&lt;/p>
&lt;p>Mientras que la clave pública en Standard LWE era una matriz $A$, en Ring-LWE se utiliza un solo polinomio $a(x)$. La clave secreta $s(x)$ y el error $e(x)$ también se convierten en polinomios.
La ecuación queda de la siguiente manera:
&lt;/p>
$$ b(x) = a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>Al tratarse de multiplicación de polinomios, utilizando la &amp;ldquo;Transformada Teórica de Números (Number Theoretic Transform: NTT)&amp;rdquo;, que es similar a la Transformada Rápida de Fourier (FFT), la complejidad computacional se puede reducir drásticamente a $\mathcal{O}(n \log n)$. Además, debido a que el tamaño de la clave pública se reduce de una matriz a un solo polinomio, el tamaño de los datos se reduce a $\mathcal{O}(n)$. Esto proporciona una ventaja abrumadora en términos de ancho de banda de comunicación.&lt;/p>
&lt;p>Matemáticamente, Ring-LWE se reduce a problemas en retículos con una simetría especial conocidos como &amp;ldquo;Retículos Ideales (Ideal Lattices)&amp;rdquo; en lugar de retículos generales.&lt;/p>
&lt;h2 id="72-module-lwe-y-estandarización-del-nist-kyber--ml-kem">7.2 Module-LWE y Estandarización del NIST (Kyber / ML-KEM)
&lt;/h2>&lt;p>Aunque Ring-LWE es eficiente, había una ligera preocupación de que la estructura algebraica especial del retículo ideal pudiera ser la base para futuros ataques. Por lo tanto, el &amp;ldquo;Module-LWE (MLWE)&amp;rdquo; tomó &amp;ldquo;lo mejor de ambos mundos&amp;rdquo;: la seguridad conservadora de Standard LWE y la eficiencia de Ring-LWE.&lt;/p>
&lt;p>En Module-LWE, consideramos matrices y vectores pequeños cuyos elementos son polinomios. Es decir, manejamos módulos sobre anillos.
Actualmente, &amp;ldquo;CRYSTALS-Kyber&amp;rdquo; (Nombre estandarizado: ML-KEM), que ha sido seleccionado por el NIST como estándar para el algoritmo de intercambio de claves PQC (KEM), está construido precisamente en base a la dificultad de este problema Module-LWE.&lt;/p>
&lt;h1 id="8-por-qué-es-seguro-contra-las-computadoras-cuánticas">8. ¿Por qué es seguro contra las computadoras cuánticas?
&lt;/h1>&lt;p>Finalmente, tocaremos el núcleo de la pregunta: &amp;ldquo;¿Por qué se cree que la criptografía basada en retículos no se puede descifrar ni siquiera usando computadoras cuánticas?&amp;rdquo;&lt;/p>
&lt;p>El algoritmo de Shor, que hace que las computadoras cuánticas rompan RSA y ECC, es esencialmente un algoritmo para resolver el &amp;ldquo;Problema del Subgrupo Oculto (Hidden Subgroup Problem: HSP)&amp;rdquo;. La estructura matemática (grupos abelianos finitos) detrás de RSA y ECC tiene periodicidad, y al usar una operación cuántica específica llamada Transformada Cuántica de Fourier (QFT), este período (el subgrupo oculto) se puede extraer de una vez.&lt;/p>
&lt;p>Sin embargo, los problemas de retículos son fundamentalmente diferentes. Aunque los retículos también tienen periodicidad, lo que se busca en SVP y CVP son propiedades geométricas no lineales, como la &amp;ldquo;distancia más corta&amp;rdquo; o la &amp;ldquo;eliminación del ruido&amp;rdquo;. Incluso aplicando directamente la &amp;ldquo;Transformada Cuántica de Fourier sobre un grupo abeliano&amp;rdquo; como en el algoritmo de Shor, no se puede extraer eficientemente información útil que resuelva el problema del retículo. Hasta la fecha, no se han descubierto algoritmos cuánticos capaces de resolver SVP o LWE en tiempo polinomial, y se cree ampliamente que, a pesar del poder de cálculo paralelo de las computadoras cuánticas, el único método efectivo es una búsqueda casi exhaustiva (aproximadamente una aceleración de la raíz cuadrada mediante el algoritmo de Grover).&lt;/p>
&lt;h1 id="9-conclusión">9. Conclusión
&lt;/h1>&lt;p>En este artículo, explicamos detalladamente la intuición matemática de la criptografía de retículos, comenzando con la definición geométrica de los retículos, seguido de la formulación del problema LWE, hasta la construcción de la criptografía de clave pública.&lt;/p>
&lt;ol>
&lt;li>Un &lt;strong>Retículo (Lattice)&lt;/strong> es un espacio discreto representado por combinaciones lineales con coeficientes enteros de vectores base, y en altas dimensiones resulta difícil encontrar una &amp;ldquo;buena base&amp;rdquo; casi ortogonal (SVP).&lt;/li>
&lt;li>El &lt;strong>Problema LWE (Learning With Errors)&lt;/strong> es un problema de resolver sistemas de ecuaciones lineales con ruido, y dado que esto está ligado a la dificultad del problema del retículo en el peor de los casos, proporciona una base sólida para la seguridad.&lt;/li>
&lt;li>Utilizando el problema LWE, el cifrado y descifrado (&lt;strong>Criptografía de Regev&lt;/strong>) se logran mediante un ingenioso mecanismo que intencionalmente añade y elimina el ruido.&lt;/li>
&lt;li>En los protocolos reales, se emplean &lt;strong>Ring-LWE&lt;/strong> o &lt;strong>Module-LWE&lt;/strong> usando anillos de polinomios para aumentar la eficiencia de comunicación y la velocidad de cálculo, sirviendo como la base del estándar &lt;strong>ML-KEM&lt;/strong> del NIST.&lt;/li>
&lt;/ol>
&lt;p>Con el cambio de paradigma computacional sin precedentes que representan las computadoras cuánticas acercándose, es muy fascinante que la &amp;ldquo;criptografía de retículos&amp;rdquo;, nacida del abismo del álgebra lineal clásica y la teoría de números, se convierta en la base de la seguridad del internet del futuro. Las matemáticas subyacentes a la criptografía de retículos no son excesivamente complejas, y con conocimientos básicos de álgebra lineal y probabilidades, es perfectamente posible comprender su hermosa estructura. Esperamos que este artículo sirva de ayuda para comprender la criptografía de retículos, el núcleo de la PQC.&lt;/p></description></item><item><title>Cómo funcionan las Pruebas de Conocimiento Cero (ZKP) y sus aplicaciones recientes en Web3 y Seguridad</title><link>http://kenji.blog/es/p/zero-knowledge-proofs-zkp-web3-security/</link><pubDate>Fri, 11 Sep 2026 19:00:00 +0900</pubDate><guid>http://kenji.blog/es/p/zero-knowledge-proofs-zkp-web3-security/</guid><description>&lt;img src="http://kenji.blog/p/zero-knowledge-proofs-zkp-web3-security/img/eyecatch.jpg" alt="Featured image of post Cómo funcionan las Pruebas de Conocimiento Cero (ZKP) y sus aplicaciones recientes en Web3 y Seguridad" />&lt;h2 id="introducción">Introducción
&lt;/h2>&lt;p>En la sociedad digital actual, la privacidad de los datos y la escalabilidad se han convertido en dos de los problemas más importantes. Con el aumento del riesgo de fuga de información personal y uso no autorizado, existe una fuerte demanda de una tecnología que &amp;ldquo;demuestre que uno tiene cierta información sin revelar la información en sí a la otra parte&amp;rdquo;. Esto se logra mediante la &lt;strong>Prueba de Conocimiento Cero (Zero-Knowledge Proof: ZKP)&lt;/strong>.&lt;/p>
&lt;p>La prueba de conocimiento cero es un concepto de teoría criptográfica propuesto por primera vez en la década de 1980 por Shafi Goldwasser, Silvio Micali y Charles Rackoff, pero permaneció como un estudio teórico durante mucho tiempo. Sin embargo, con el surgimiento de la tecnología blockchain y Web3, la situación ha cambiado por completo. Como una &amp;ldquo;varita mágica&amp;rdquo; para resolver simultáneamente el problema de escalabilidad (límites de capacidad de procesamiento) y el problema de privacidad (todas las transacciones son públicas) que enfrentan las blockchains públicas como Ethereum, las ZKP de repente fueron el centro de atención.&lt;/p>
&lt;p>En este artículo, profundizaremos técnica y detalladamente desde los conceptos básicos de las pruebas de conocimiento cero, hasta los profundos mecanismos matemáticos y criptográficos de &lt;strong>zk-SNARKs&lt;/strong> y &lt;strong>zk-STARKs&lt;/strong> (actualmente dominantes), y ejemplos recientes de aplicaciones en Web3 y seguridad, como ZK-Rollups y la identidad descentralizada (DID).&lt;/p>
&lt;hr>
&lt;h2 id="qué-es-la-prueba-de-conocimiento-cero-zkp">¿Qué es la Prueba de Conocimiento Cero (ZKP)?
&lt;/h2>&lt;p>La prueba de conocimiento cero (ZKP) se refiere a un protocolo en el cual un probador (Prover) demuestra a un verificador (Verifier) que una proposición es cierta, de tal manera que &amp;ldquo;no se transmite absolutamente ninguna otra información más que el hecho de que la proposición es cierta&amp;rdquo;.&lt;/p>
&lt;h3 id="3-requisitos-que-debe-cumplir-una-zkp">3 requisitos que debe cumplir una ZKP
&lt;/h3>&lt;p>Para establecerse como una ZKP, debe cumplir estrictamente con las tres propiedades siguientes:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Completitud (Completeness)&lt;/strong>
Si la proposición es verdadera y tanto el probador como el verificador siguen correctamente el protocolo, el verificador debe aceptar la prueba con una probabilidad abrumadora.&lt;/li>
&lt;li>&lt;strong>Solidez (Soundness)&lt;/strong>
Si la proposición es falsa, sin importar cuán alta sea la capacidad de cálculo y cuán malicioso sea el probador, es imposible engañar al verificador para que acepte la prueba (excepto por una probabilidad tan pequeña que puede ser ignorada).&lt;/li>
&lt;li>&lt;strong>Conocimiento Cero (Zero-Knowledge)&lt;/strong>
Si la proposición es verdadera, el verificador no puede obtener ninguna información del proceso de prueba más allá del hecho de que &amp;ldquo;la proposición es verdadera&amp;rdquo;. Desde la perspectiva del verificador, se demuestra mediante la definición matemática de que es posible simular el proceso de prueba (existe un simulador).&lt;/li>
&lt;/ol>
&lt;h3 id="pruebas-interactivas-y-no-interactivas">Pruebas interactivas y no interactivas
&lt;/h3>&lt;p>Existen dos tipos de ZKP: &lt;strong>pruebas interactivas&lt;/strong>, donde el probador y el verificador se comunican múltiples veces, y &lt;strong>pruebas no interactivas&lt;/strong>, donde el probador envía los datos de la prueba solo una vez.&lt;/p>
&lt;h4 id="pruebas-interactivas-interactive-zkp">Pruebas interactivas (Interactive ZKP)
&lt;/h4>&lt;p>Las primeras ZKP se diseñaron como protocolos interactivos. La famosa metáfora de la &amp;ldquo;Cueva de Alí Babá&amp;rdquo; entra en esta categoría. El flujo de un protocolo general es el siguiente:&lt;/p>
&lt;div class="mermaid">sequenceDiagram
participant Prover as "Prover (Probador)"
participant Verifier as "Verifier (Verificador)"
Note over Prover, Verifier: "Flujo básico del protocolo de prueba interactiva"
Prover->>Verifier: "1. Enviar el compromiso (Commitment)"
Verifier->>Prover: "2. Enviar un desafío aleatorio (Challenge)"
Prover->>Verifier: "3. Calcular y enviar la respuesta (Response)"
Note over Verifier: "Verificar la respuesta (Verification)"
Verifier-->>Prover: "4. Aceptar o rechazar (Accept / Reject)"
Note over Prover, Verifier: "※ Para aumentar la precisión, esto se repite decenas de veces"&lt;/div>
&lt;p>Este método es poderoso, pero el verificador debe estar en línea, lo cual es inconveniente para aplicar en sistemas descentralizados asincrónicos como blockchain. En blockchain, cualquiera debe poder verificar pruebas pasadas en cualquier momento.&lt;/p>
&lt;h4 id="transformación-de-fiat-shamir-fiat-shamir-heuristic-y-no-interactividad">Transformación de Fiat-Shamir (Fiat-Shamir Heuristic) y no interactividad
&lt;/h4>&lt;p>Un método revolucionario para convertir pruebas interactivas en pruebas no interactivas (Non-Interactive Zero-Knowledge Proof: NIZK) es la &lt;strong>Transformación de Fiat-Shamir&lt;/strong>.&lt;/p>
&lt;p>En lugar del &amp;ldquo;desafío aleatorio&amp;rdquo; enviado por el verificador, el probador autogenera un &amp;ldquo;desafío pseudoaleatorio&amp;rdquo; utilizando su propio compromiso y el valor hash de la información pública. Suponiendo que una función hash criptográfica (como SHA-256 o Keccak) funcione como un oráculo aleatorio (Random Oracle), el probador no puede predecir ni manipular el desafío con anticipación, lo que le permite completar la prueba enviando un solo mensaje manteniendo el mismo nivel de seguridad que una prueba interactiva.&lt;/p>
&lt;hr>
&lt;h2 id="detalles-técnicos-de-zk-snarks">Detalles técnicos de zk-SNARKs
&lt;/h2>&lt;p>Actualmente, las ZKP más utilizadas son las &lt;strong>zk-SNARKs&lt;/strong> (Zero-Knowledge Succinct Non-Interactive Argument of Knowledge). Como su nombre indica, tienen conocimiento cero (zk), el tamaño de la prueba es muy pequeño y la verificación es rápida (Succinct), y es un argumento de conocimiento no interactivo (Non-Interactive Argument of Knowledge).&lt;/p>
&lt;p>La base de las zk-SNARKs es geometría algebraica avanzada y teoría criptográfica. Convierten la ejecución de programas y cálculos en la verificación de ecuaciones polinómicas específicas.&lt;/p>
&lt;h3 id="1-transformación-a-circuitos-aritméticos-y-r1cs-rank-1-constraint-system">1. Transformación a circuitos aritméticos y R1CS (Rank-1 Constraint System)
&lt;/h3>&lt;p>Primero, cualquier cálculo que se desee probar (un algoritmo o la lógica de un contrato inteligente) se convierte en un &lt;strong>circuito aritmético (Arithmetic Circuit)&lt;/strong> que consiste en puertas de suma y multiplicación.&lt;/p>
&lt;p>A continuación, este circuito aritmético se convierte en un conjunto de ecuaciones matriciales llamado &lt;strong>R1CS (Rank-1 Constraint System)&lt;/strong>. R1CS es el problema de encontrar las matrices $A, B, C$ que cumplan con la siguiente restricción para un vector de variables $x$:&lt;/p>
$$ (A \cdot x) \circ (B \cdot x) = C \cdot x $$
&lt;p>Aquí, $\circ$ representa el producto de Hadamard (producto elemento a elemento). Esta restricción garantiza que todas las puertas lógicas del circuito (especialmente las puertas de multiplicación) se calculen correctamente.&lt;/p>
&lt;h3 id="2-transformación-a-qap-quadratic-arithmetic-program">2. Transformación a QAP (Quadratic Arithmetic Program)
&lt;/h3>&lt;p>Dado que hay innumerables restricciones matriciales en R1CS, verificarlas individualmente es muy ineficiente. Por lo tanto, utilizando la interpolación de Lagrange, estas restricciones se comprimen en una sola ecuación polinómica. Esto es el &lt;strong>QAP (Quadratic Arithmetic Program)&lt;/strong>.&lt;/p>
&lt;p>Al transformarlo en un QAP, el problema a probar se reduce a la pregunta: &amp;ldquo;¿Es un polinomio específico $P(x)$ divisible por otro polinomio conocido $Z(x)$?&amp;rdquo;.&lt;/p>
$$ P(x) = L(x) \cdot R(x) - O(x) $$
&lt;p>Aquí, $L(x), R(x), O(x)$ son combinaciones de polinomios correspondientes a cada fila de las matrices $A, B, C$ respectivamente. Si el probador conoce la solución correcta (Witness), el valor será 0 en cada raíz (punto de evaluación) de $P(x)$, por lo que $P(x)$ tendrá el polinomio objetivo $Z(x)$ como factor. Es decir, existe cierto polinomio $H(x)$ tal que se cumple la siguiente ecuación:&lt;/p>
$$ P(x) = H(x) \cdot Z(x) $$
&lt;p>El verificador puede verificar instantáneamente que todo el cálculo se realizó correctamente comprobando si esta ecuación $P(s) = H(s) \cdot Z(s)$ es cierta en un punto secreto aleatorio $s$. Este es el secreto de &amp;ldquo;Succinct (Conciso)&amp;rdquo;.&lt;/p>
&lt;h3 id="3-criptografía-de-curva-elíptica-y-emparejamientos-bilinear-pairings">3. Criptografía de curva elíptica y emparejamientos (Bilinear Pairings)
&lt;/h3>&lt;p>Sin embargo, si el verificador conociera el punto secreto $s$, el probador podría falsificar un polinomio para satisfacer la ecuación (colapso de la solidez). Por lo tanto, es necesario realizar los cálculos manteniendo $s$ encriptado para que nadie lo conozca (utilizando encriptación homomórfica).&lt;/p>
&lt;p>Lo que logra esto es el &lt;strong>emparejamiento de curva elíptica (Bilinear Pairings)&lt;/strong>.
El emparejamiento $e$ es una función especial que permite calcular, a partir de dos valores encriptados, un valor equivalente al encriptado de su producto.&lt;/p>
$$ e(g_1^a, g_2^b) = e(g_1, g_2)^{ab} $$
&lt;p>El probador, sin conocer $s$ en sí, utiliza los valores encriptados de las potencias de $s$ (esto se llama CRS: Common Reference String) para calcular los valores encriptados de los polinomios $P(s)$ y $H(s)$. El verificador utiliza la función de emparejamiento para verificar si se cumple la relación $P(s) = H(s) \cdot Z(s)$ mientras los valores permanecen encriptados.&lt;/p>
&lt;h3 id="4-configuración-confiable-trusted-setup">4. Configuración confiable (Trusted Setup)
&lt;/h3>&lt;p>La mayor debilidad de las zk-SNARKs (especialmente el inicial Groth16) es que requieren un proceso para generar el punto secreto $s$, la llamada &lt;strong>configuración confiable&lt;/strong>. Si el generador de $s$ conserva ese valor sin destruirlo, sería capaz de generar cualquier prueba falsa (el problema de Toxic Waste).&lt;/p>
&lt;p>Para prevenir esto, se lleva a cabo una ceremonia llamada &amp;ldquo;Ceremony&amp;rdquo; que utiliza Multi-Party Computation (MPC). Muchos participantes colaboran para proporcionar aleatoriedad, y si al menos uno de los participantes descarta honestamente su valor aleatorio, el sistema mantendrá la seguridad en general. Sin embargo, la investigación para eliminar esta dependencia ha continuado durante muchos años.&lt;/p>
&lt;hr>
&lt;h2 id="detalles-técnicos-de-zk-starks">Detalles técnicos de zk-STARKs
&lt;/h2>&lt;p>Como respuesta a la dependencia de la configuración confiable y al riesgo de descifrar la criptografía de curva elíptica por parte de las computadoras cuánticas, aparecieron las &lt;strong>zk-STARKs&lt;/strong> (Zero-Knowledge Scalable Transparent Argument of Knowledge).&lt;/p>
&lt;p>Las STARKs, desarrolladas por Eli Ben-Sasson y otros, no requieren de una configuración confiable, haciendo honor a la palabra &amp;ldquo;Transparent&amp;rdquo; (Transparencia), y tienen la característica de que el tamaño de la prueba y el tiempo de verificación se mantienen eficientes incluso si aumenta la cantidad de cálculo, honrando la palabra &amp;ldquo;Scalable&amp;rdquo; (Escalabilidad).&lt;/p>
&lt;h3 id="1-compromiso-polinómico-y-protocolo-fri">1. Compromiso polinómico y protocolo FRI
&lt;/h3>&lt;p>Las zk-STARKs no basan su seguridad en la criptografía de curva elíptica, sino &lt;strong>exclusivamente en funciones hash&lt;/strong>. Por lo tanto, poseen propiedades de criptografía poscuántica (Post-Quantum Cryptography).&lt;/p>
&lt;p>La verificación del cálculo se realiza utilizando las propiedades de polinomios de una o múltiples dimensiones después de convertirse a un formato llamado AIR (Algebraic Intermediate Representation). El núcleo de las STARKs reside en el protocolo &lt;strong>FRI (Fast Reed-Solomon Interactive Oracle Proof of Proximity)&lt;/strong>.&lt;/p>
&lt;p>El protocolo FRI es una técnica para verificar si &amp;ldquo;cierta función es lo suficientemente cercana (Proximity) a un polinomio de un grado específico&amp;rdquo;. El probador compromete los valores del polinomio como hojas de un árbol de Merkle (Merkle Tree) (compromiso polinómico).&lt;/p>
&lt;div class="mermaid">graph TD
Root["Raíz de Merkle (Compromiso)"] --> Node0["Nodo 0"]
Root --> Node1["Nodo 1"]
Node0 --> Leaf0["P(x_0)"]
Node0 --> Leaf1["P(x_1)"]
Node1 --> Leaf2["P(x_2)"]
Node1 --> Leaf3["P(x_3)"]&lt;/div>
&lt;p>El verificador solicita que se revelen varios puntos aleatorios y utiliza la prueba de Merkle para confirmar que están incluidos en el compromiso. Al repetir esto de forma recursiva, se garantiza con abrumadora probabilidad que el grado del polinomio original es, de hecho, bajo.&lt;/p>
&lt;h3 id="comparación-entre-zk-snarks-y-zk-starks">Comparación entre zk-SNARKs y zk-STARKs
&lt;/h3>&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Característica&lt;/th>
&lt;th style="text-align:left">zk-SNARKs&lt;/th>
&lt;th style="text-align:left">zk-STARKs&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Supuestos criptográficos&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Curva elíptica, emparejamientos&lt;/td>
&lt;td style="text-align:left">Funciones hash resistentes a colisiones&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Configuración confiable&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Necesaria (Plonk, etc., son universales)&lt;/td>
&lt;td style="text-align:left">Innecesaria (Transparente)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Resistencia cuántica&lt;/strong>&lt;/td>
&lt;td style="text-align:left">No&lt;/td>
&lt;td style="text-align:left">Sí&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Tamaño de la prueba&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Muy pequeño (~200 Bytes)&lt;/td>
&lt;td style="text-align:left">Algo grande (decenas de KB)&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Costo computacional de generación de prueba&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Alto&lt;/td>
&lt;td style="text-align:left">Relativamente más bajo que SNARKs&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>Costo de verificación (Gas)&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Muy bajo (constante)&lt;/td>
&lt;td style="text-align:left">Bajo (crece de forma logarítmica)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;p>En los últimos años, con la aparición de &amp;ldquo;SNARKs que no requieren una configuración confiable, o que solo la requieren una vez&amp;rdquo;, como Plonk y Halo2, la frontera entre SNARKs y STARKs se está volviendo cada vez más difusa, pero la diferencia en los enfoques matemáticos fundamentales sigue siendo importante.&lt;/p>
&lt;hr>
&lt;h2 id="las-últimas-aplicaciones-de-las-pruebas-de-conocimiento-cero-en-web3-y-seguridad">Las últimas aplicaciones de las pruebas de conocimiento cero en Web3 y Seguridad
&lt;/h2>&lt;p>Tras pasar de la teoría a la práctica, las ZKP están revolucionando ahora la primera línea de la Web3 y la ciberseguridad.&lt;/p>
&lt;h3 id="1-escalado-definitivo-de-ethereum-mediante-zk-rollups">1. Escalado definitivo de Ethereum mediante ZK-Rollups
&lt;/h3>&lt;p>Las blockchains L1 (capa 1) como Ethereum se enfrentan a importantes limitaciones de escalabilidad (el trilema) debido a su énfasis en la descentralización y la seguridad. La solución definitiva a nivel L2 (capa 2) para resolver esto son los &lt;strong>ZK-Rollups&lt;/strong>.&lt;/p>
&lt;p>En un ZK-Rollup, se ejecutan y procesan miles de transacciones fuera de la cadena (L2) y se genera &amp;ldquo;una ZKP (Validity Proof)&amp;rdquo; que demuestra que todas se ejecutaron correctamente. El contrato inteligente en la cadena L1 solo tiene que verificar esta prueba.&lt;/p>
&lt;div class="mermaid">flowchart LR
Users["Usuarios (Envío de Tx)"] --> Sequencer["Secuenciador (Recolección y ejecución de Tx)"]
Sequencer --> Prover["Probador (Generación de ZKP)"]
Sequencer --> L1Contract["Contrato Inteligente L1 (Publicación de datos de Tx)"]
Prover --> L1Contract["Presentación de ZKP (Prueba)"]
L1Contract --> Verify["Verificación y Actualización de Estado"]&lt;/div>
&lt;p>La mayor ventaja de los ZK-Rollups es que, a diferencia de los Optimistic Rollups (como Arbitrum u Optimism), no requieren un período de desafío (normalmente 7 días) para las pruebas de fraude (Fraud Proof). Debido a que la corrección está garantizada criptográficamente, el retiro de fondos a la L1 (Finality) se completa en el momento en que se verifica la prueba. Actualmente, proyectos como zkSync, Starknet, Scroll y Polygon zkEVM libran una feroz competencia en desarrollo, y la consecución de una &lt;strong>zkEVM&lt;/strong> (compatible con Ethereum Virtual Machine) está acelerando drásticamente el ecosistema.&lt;/p>
&lt;h3 id="2-identidad-con-protección-de-privacidad-zkp-for-identity">2. Identidad con protección de privacidad (ZKP for Identity)
&lt;/h3>&lt;p>La forma de autenticación personal en el mundo digital también está cambiando fundamentalmente gracias a las ZKP.
Por ejemplo, en respuesta a la pregunta &amp;ldquo;¿Tienes 18 años o más?&amp;rdquo;, los sistemas convencionales requerían presentar una licencia de conducir o un pasaporte, entregando a la otra parte información personal innecesaria como el nombre y la dirección.&lt;/p>
&lt;p>Usando ZKP, es posible &lt;strong>probar matemáticamente solo el hecho&lt;/strong> de que, &amp;ldquo;calculando a partir de mi fecha de nacimiento en un certificado digital (Verifiable Credential) emitido por un organismo público, tengo 18 años o más en la fecha actual&amp;rdquo;. El verificador solo necesita verificar la firma del certificado y la ZKP, sin poder conocer la fecha de nacimiento ni la identidad del usuario.&lt;/p>
&lt;p>Incluso en proyectos de prueba de humanidad (Proof of Personhood) como Worldcoin, en lugar de almacenar y compartir los datos del iris directamente, se incorpora un mecanismo que utiliza ZKP para probar únicamente &amp;ldquo;el hecho de ser un ser humano único&amp;rdquo;.&lt;/p>
&lt;h3 id="3-contratos-inteligentes-confidenciales-y-uso-empresarial">3. Contratos inteligentes confidenciales y uso empresarial
&lt;/h3>&lt;p>La naturaleza &amp;ldquo;totalmente pública&amp;rdquo; de las cadenas de bloques públicas ha sido una gran barrera para que las empresas gestionen transacciones confidenciales y la información de la cadena de suministro en la cadena de bloques.&lt;/p>
&lt;p>Usando la tecnología ZKP (por ejemplo, redes especializadas en privacidad como Aleo o Aztec), es posible registrar solo la validez de la actualización del estado en la cadena pública manteniendo cifrados los valores de entrada, los valores de salida e incluso la propia lógica del contrato inteligente ejecutado. Esto hace posible la prevención de la manipulación de precios (MEV) en DeFi (finanzas descentralizadas) y la construcción de redes de consorcios confidenciales entre empresas, todo mientras se disfruta de la alta seguridad de una cadena pública.&lt;/p>
&lt;hr>
&lt;h2 id="retos-futuros-y-perspectivas-de-zkp">Retos futuros y perspectivas de ZKP
&lt;/h2>&lt;p>Si bien ZKP es, sin duda, una tecnología fundamental de próxima generación, todavía quedan algunos retos.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Costo computacional de la generación de pruebas y aceleración de hardware&lt;/strong>
La generación de ZKP requiere un enorme volumen de cálculos de polinomios, FFT (Transformada Rápida de Fourier) y MSM (Multiplicación Multiescalar). Actualmente, el desarrollo de hardware especializado (FPGA y ASIC) para acelerar esta generación de pruebas, es decir, la investigación de la &lt;strong>minería ZKP&lt;/strong> (Prover Network), avanza rápidamente.&lt;/li>
&lt;li>&lt;strong>Estandarización y mejora de la experiencia del desarrollador (DX)&lt;/strong>
Existe una proliferación de lenguajes dedicados para describir circuitos ZKP, como Circom, Cairo, Noir, Leo, etc. La madurez de un estándar que unifique todo esto y la creación de compiladores que generen automáticamente circuitos ZKP a partir de lenguajes como Rust o C++ serán la clave para la adopción de ZKP por parte de los ingenieros de software en general.&lt;/li>
&lt;/ol>
&lt;h2 id="conclusión">Conclusión
&lt;/h2>&lt;p>La Prueba de Conocimiento Cero (ZKP) ha evolucionado de ser una simple &amp;ldquo;tecnología para aumentar el anonimato de las criptomonedas&amp;rdquo; a una &amp;ldquo;tecnología de propósito general que redefine la confianza (Trust) de todo el internet&amp;rdquo;. Las pequeñas pruebas, calculadas en las profundidades de las matemáticas y la teoría de la criptografía, expanden infinitamente la escalabilidad de la cadena de bloques y sirven como un escudo sólido para proteger nuestra privacidad.&lt;/p>
&lt;p>Hacia la verdadera adopción masiva de Web3 y la construcción de un Internet de próxima generación seguro y privado, las pruebas de conocimiento cero continuarán funcionando como la pieza más importante. No podemos quitarle los ojos de encima a la futura evolución de la tecnología ZKP.&lt;/p>
&lt;hr>
&lt;p>&lt;em>Referencias y enlaces relacionados&lt;/em>&lt;/p>
&lt;ul>
&lt;li>Groth, J. (2016). &amp;ldquo;On the Size of Pairing-based Non-interactive Arguments&amp;rdquo;&lt;/li>
&lt;li>Ben-Sasson, E., et al. (2018). &amp;ldquo;Scalable, transparent, and post-quantum secure computational integrity&amp;rdquo;&lt;/li>
&lt;li>Vitalik Buterin&amp;rsquo;s blog on zk-SNARKs and zk-STARKs&lt;/li>
&lt;/ul></description></item><item><title>¿Qué es el cifrado totalmente homomórfico (FHE)? Explicación de la clave de la seguridad de próxima generación</title><link>http://kenji.blog/es/p/fully-homomorphic-encryption-fhe-explained/</link><pubDate>Fri, 11 Sep 2026 11:00:00 +0900</pubDate><guid>http://kenji.blog/es/p/fully-homomorphic-encryption-fhe-explained/</guid><description>&lt;img src="http://kenji.blog/p/fully-homomorphic-encryption-fhe-explained/img/eyecatch.jpg" alt="Featured image of post ¿Qué es el cifrado totalmente homomórfico (FHE)? Explicación de la clave de la seguridad de próxima generación" />&lt;p>A medida que la computación en la nube y la tecnología de IA se establecen como la base de la sociedad, la compensación entre la &amp;ldquo;privacidad de los datos&amp;rdquo; y la &amp;ldquo;utilización de los datos&amp;rdquo; se ha convertido en uno de los problemas más importantes. Aunque existe una demanda creciente para que la IA en la nube analice datos altamente confidenciales como datos médicos, información financiera e información biométrica personal, muchas empresas dudan en enviar datos externamente debido a preocupaciones de seguridad.&lt;/p>
&lt;p>Las tecnologías de cifrado tradicionales (como AES y RSA) son excelentes para proteger los datos almacenados en disco (Data at Rest) y los datos que fluyen por la red (Data in Transit). Sin embargo, &lt;strong>cuando el servidor realiza un procesamiento (cálculo) en los datos, como una búsqueda o aprendizaje automático (Data in Use), es necesario descifrar el cifrado y devolverlo a texto plano&lt;/strong>. Si el servidor es hackeado en este momento de descifrado, o si un administrador malicioso interno husmea en los datos, esto conduce directamente a una fuga de información.&lt;/p>
&lt;p>La tecnología soñada para superar esta debilidad fundamental del &amp;ldquo;descifrado durante el procesamiento&amp;rdquo; es el &lt;strong>Cifrado Totalmente Homomórfico (Fully Homomorphic Encryption: FHE)&lt;/strong>. Al usar FHE, es posible realizar cálculos en datos mientras permanecen cifrados, sin descifrarlos en absoluto, y devolver solo el texto cifrado resultante al cliente.&lt;/p>
&lt;p>En este artículo, explicaremos en profundidad el FHE, la clave de la seguridad de próxima generación, desde el concepto y la historia del FHE, el avance revolucionario de Craig Gentry, los fundamentos matemáticos (como Ring-LWE), el mayor desafío del &amp;ldquo;ruido&amp;rdquo; y su solución (bootstrapping), hasta las bibliotecas de implementación más recientes.&lt;/p>
&lt;hr>
&lt;h2 id="1-qué-es-el-cifrado-homomórfico-conceptos-básicos">1. ¿Qué es el cifrado homomórfico? Conceptos básicos
&lt;/h2>&lt;p>&amp;ldquo;Homomórfico&amp;rdquo; es un término en álgebra que se refiere a la propiedad de mapear entre conjuntos con una determinada estructura preservando la estructura de las operaciones. En criptografía, la &amp;ldquo;propiedad homomórfica&amp;rdquo; es la propiedad de que &lt;strong>las operaciones en el espacio de texto plano corresponden a operaciones en el espacio de texto cifrado&lt;/strong>.&lt;/p>
&lt;p>Expresado en una fórmula matemática simple, sean $m_1$ y $m_2$ los textos planos, $E(\cdot)$ la función de cifrado y $D(\cdot)$ la función de descifrado. Si la operación (como suma o multiplicación) en el texto plano es $\circ$ y la operación en el texto cifrado es $\diamond$, se cumple la siguiente relación:&lt;/p>
$$ D(E(m_1) \diamond E(m_2)) = m_1 \circ m_2 $$
&lt;p>En otras palabras, el resultado de aplicar alguna operación $\diamond$ a los textos cifrados $E(m_1)$ y $E(m_2)$ y luego descifrarlo coincide con el resultado de operar los textos planos originales con $\circ$.&lt;/p>
&lt;h3 id="flujo-de-datos-en-la-computación-en-la-nube">Flujo de datos en la computación en la nube
&lt;/h3>&lt;p>La arquitectura del procesamiento en la nube usando FHE es completamente diferente a la tradicional. La siguiente figura muestra el flujo de procesamiento de datos seguro utilizando FHE.&lt;/p>
&lt;div class="mermaid">graph TD
A["Cliente (Posee la clave privada)"] -->|1. Cifrar texto plano x: E(x)| B["Servidor en la nube (Solo datos cifrados)"]
B -->|2. Aplicar función f manteniendo el cifrado: E(f(x))| B
B -->|3. Texto cifrado del resultado E(y)| A
A -->|4. Descifrar con clave privada: y = f(x)| A
style A fill:#d4edda,stroke:#28a745
style B fill:#f8d7da,stroke:#dc3545&lt;/div>
&lt;p>El servidor recibe los datos cifrados $E(x)$, pero como no tiene la clave privada, le es absolutamente imposible conocer el contenido de los datos. Sin embargo, al utilizar las propiedades del FHE, es posible aplicar una función $f$ (por ejemplo, un modelo de inferencia de aprendizaje automático) al texto cifrado y generar $E(f(x))$. El cliente recibe esto y lo descifra con su propia clave privada para obtener el resultado deseado $y = f(x)$.&lt;/p>
&lt;hr>
&lt;h2 id="2-historia-de-la-evolución-del-cifrado-homomórfico-phe-she-fhe">2. Historia de la evolución del cifrado homomórfico: PHE, SHE, FHE
&lt;/h2>&lt;p>El cifrado homomórfico no alcanzó su forma &amp;ldquo;completa&amp;rdquo; actual de una sola vez. Se clasifica a grandes rasgos en tres etapas dependiendo de los tipos y el número de operaciones que se pueden realizar.&lt;/p>
&lt;h3 id="cifrado-parcialmente-homomórfico-phe">Cifrado Parcialmente Homomórfico (PHE)
&lt;/h3>&lt;p>El PHE es un esquema de cifrado que permite un número ilimitado de operaciones de suma &lt;strong>o&lt;/strong> multiplicación, pero solo una de las dos. De hecho, los cifrados con esta propiedad han existido durante mucho tiempo.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Cifrado RSA (Propiedad homomórfica para la multiplicación)&lt;/strong>
El cifrado RSA posee de forma no intencionada una propiedad homomórfica para la multiplicación. Dados los textos planos $m_1, m_2$ y la clave pública $(e, N)$:
$$ E(m_1) = m_1^e \pmod N $$
$$ E(m_2) = m_2^e \pmod N $$
Al multiplicarlos juntos:
$$ E(m_1) \times E(m_2) = (m_1 \cdot m_2)^e \pmod N = E(m_1 \times m_2) $$
De esta manera, la multiplicación de textos cifrados corresponde a la multiplicación de textos planos.&lt;/li>
&lt;li>&lt;strong>Cifrado Paillier (Propiedad homomórfica para la suma)&lt;/strong>
El cifrado Paillier, inventado en 1999, posee una propiedad homomórfica para la suma. Se ha puesto en práctica en sistemas como la votación electrónica (donde los votos cifrados se suman y solo se descifra el resultado final).&lt;/li>
&lt;/ul>
&lt;h3 id="cifrado-algo-homomórfico-she">Cifrado Algo Homomórfico (SHE)
&lt;/h3>&lt;p>Es un esquema que puede ejecutar &lt;strong>tanto&lt;/strong> sumas como multiplicaciones, pero tiene un &lt;strong>límite en el número de operaciones (profundidad del circuito)&lt;/strong>. Debido a la acumulación de &amp;ldquo;ruido&amp;rdquo;, que se explicará más adelante, el descifrado se vuelve imposible después de realizar un cierto número de multiplicaciones. El cifrado BGN (Boneh-Goh-Nissim) de 2005 es un ejemplo de esto, pero tenía limitaciones para realizar cálculos complejos prácticos (como el aprendizaje profundo).&lt;/p>
&lt;h3 id="cifrado-totalmente-homomórfico-fhe">Cifrado Totalmente Homomórfico (FHE)
&lt;/h3>&lt;p>Es un esquema de cifrado que permite ejecutar tanto sumas como multiplicaciones un &lt;strong>número ilimitado de veces&lt;/strong>. De manera similar a la integridad de Turing en la teoría de la información, si la suma (equivalente a XOR) y la multiplicación (equivalente a AND) se pueden combinar infinitamente, significa que, en principio, cualquier función o algoritmo computable puede ejecutarse mientras permanece cifrado.&lt;/p>
&lt;p>El FHE fue llamado durante mucho tiempo el &amp;ldquo;Santo Grial de la criptografía&amp;rdquo;, e incluso se decía que podría ser imposible de lograr. Sin embargo, en 2009, &lt;strong>Craig Gentry&lt;/strong>, que entonces era estudiante de doctorado en la Universidad de Stanford, propuso el primer esquema FHE basado en redes ideales (Ideal Lattices), sorprendiendo al mundo.&lt;/p>
&lt;hr>
&lt;h2 id="3-fundamentos-matemáticos-del-fhe-el-problema-lwe-y-ring-lwe">3. Fundamentos matemáticos del FHE: El problema LWE y Ring-LWE
&lt;/h2>&lt;p>Muchos de los esquemas FHE principales actuales se basan en el &lt;strong>problema LWE (Learning With Errors)&lt;/strong>, que es un problema matemático complejo en la &amp;ldquo;Criptografía basada en retículos (Lattice-based Cryptography)&amp;rdquo;, también conocida como Criptografía Post-Cuántica (Post-Quantum Cryptography).&lt;/p>
&lt;h3 id="comprensión-intuitiva-del-problema-lwe">Comprensión intuitiva del problema LWE
&lt;/h3>&lt;p>Resolver un sistema de ecuaciones lineales es fácil si se utiliza, por ejemplo, la eliminación de Gauss.&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 \equiv 12 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 \equiv 8 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>Pero, ¿qué pasaría si agregamos un pequeñísimo &amp;ldquo;error aleatorio (ruido)&amp;rdquo; $e$ a los resultados de estas ecuaciones?&lt;/p>
$$ \begin{cases} 3s_1 + 4s_2 + 2s_3 + e_1 \equiv 13 \pmod{17} \\ 1s_1 + 9s_2 + 5s_3 + e_2 \equiv 7 \pmod{17} \\ \vdots \end{cases} $$
&lt;p>El solo hecho de agregar este error $e$ transforma el problema de encontrar el vector de variables secretas $\vec{s}$ en un problema NP-difícil que es extremadamente complicado de resolver, incluso utilizando supercomputadoras actuales o computadoras cuánticas. Este es el problema LWE.&lt;/p>
&lt;h3 id="el-problema-ring-lwe-rlwe">El problema Ring-LWE (RLWE)
&lt;/h3>&lt;p>El problema LWE estándar involucra operaciones con matrices, lo que tenía el problema de que el tamaño de la clave era muy grande (a veces en gigabytes) y la eficiencia computacional era pobre. Para solucionar esto, se introdujo el &lt;strong>problema Ring-LWE (RLWE)&lt;/strong>, que utiliza operaciones sobre anillos de polinomios.&lt;/p>
&lt;p>En RLWE, los elementos pertenecen a un anillo de polinomios $R_q = \mathbb{Z}_q[x] / (x^N + 1)$ (donde $N$ es una potencia de 2 y $q$ es el módulo primo).
Si tomamos como clave privada un polinomio $s(x)$, y generamos un polinomio aleatorio $a(x)$ y un pequeño polinomio de ruido $e(x)$, la clave pública será el siguiente par:&lt;/p>
$$ (a(x), b(x)) \quad \text{where} \quad b(x) = -a(x) \cdot s(x) + e(x) \pmod q $$
&lt;p>Durante el cifrado, las propiedades de estos polinomios se utilizan para codificar el texto plano $m(x)$ y generar el texto cifrado.&lt;/p>
&lt;hr>
&lt;h2 id="4-el-mayor-obstáculo-el-ruido-y-el-bootstrapping-de-gentry">4. El mayor obstáculo: El &amp;ldquo;ruido&amp;rdquo; y el bootstrapping de Gentry
&lt;/h2>&lt;p>El concepto más importante para comprender el FHE es la &lt;strong>&amp;ldquo;gestión del ruido&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>En los cifrados basados en LWE/RLWE, se incluye intencionalmente un pequeño &amp;ldquo;ruido (error)&amp;rdquo; para garantizar la seguridad.
El proceso de descifrado del texto cifrado $c$ para obtener el texto plano $m$ puede representarse a grandes rasgos mediante la siguiente fórmula:&lt;/p>
$$ D(c) = (c \cdot s) \pmod q = m + \text{noise} $$
&lt;p>Durante el descifrado, este &lt;code>noise&lt;/code> (ruido) se elimina mediante procesos como el redondeo para obtener el texto plano correcto $m$. Sin embargo, cuando se realizan operaciones homomórficas (especialmente multiplicaciones) entre textos cifrados, este ruido se amplifica drásticamente.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Suma homomórfica&lt;/strong>: El ruido aumenta de forma aditiva ($e_1 + e_2$). Este es un aumento relativamente leve.&lt;/li>
&lt;li>&lt;strong>Expresión matemática de la propiedad homomórfica para la suma&lt;/strong>:
$$ E(m_1) \oplus E(m_2) = E(m_1 + m_2) $$&lt;/li>
&lt;li>&lt;strong>Multiplicación homomórfica&lt;/strong>: El ruido explota de forma multiplicativa (ya que incluye términos como $e_1 \times e_2$). Después de unas pocas multiplicaciones, el ruido excede el umbral $q/2$, lo que impide un redondeo correcto y hace que el descifrado falle.&lt;/li>
&lt;li>&lt;strong>Expresión matemática de la propiedad homomórfica para la multiplicación&lt;/strong>:
$$ E(m_1) \otimes E(m_2) = E(m_1 \times m_2) $$&lt;/li>
&lt;/ul>
&lt;p>Esta es la razón por la que el FHE no se pudo realizar durante mucho tiempo y se mantuvo en el nivel de SHE (limitado en operaciones).&lt;/p>
&lt;h3 id="la-magia-del-bootstrapping">La magia del Bootstrapping
&lt;/h3>&lt;p>La contribución genial de Craig Gentry fue la invención de una técnica de reducción de ruido llamada &lt;strong>&amp;ldquo;bootstrapping&amp;rdquo;&lt;/strong>. Esto fue un cambio de paradigma en la criptografía.&lt;/p>
&lt;p>Intuitivamente, es una operación de &amp;ldquo;limpiar el texto cifrado &amp;lsquo;descifrándolo&amp;rsquo; mientras permanece en estado cifrado, antes de que se corrompa por estar lleno de ruido, y colocarlo en un nuevo texto cifrado&amp;rdquo;.&lt;/p>
&lt;ol>
&lt;li>Supongamos que hay un texto cifrado con mucho ruido $C_{noisy}$.&lt;/li>
&lt;li>El cliente proporciona previamente al servidor su clave privada $sk$ &amp;ldquo;cifrada con su clave pública&amp;rdquo; $E_{pk}(sk)$ (a esto se le llama clave de bootstrapping).&lt;/li>
&lt;li>El servidor ejecuta un &lt;strong>circuito de descifrado (Decryption Circuit)&lt;/strong> de forma homomórfica sobre $C_{noisy}$.&lt;/li>
&lt;li>Específicamente, realiza un &amp;ldquo;descifrado en el espacio cifrado&amp;rdquo; sobre $E_{pk}(C_{noisy})$ utilizando $E_{pk}(sk)$.&lt;/li>
&lt;li>Dado que este circuito de descifrado es en sí mismo una operación homomórfica, genera nuevo ruido, pero el ruido del nuevo texto cifrado resultante $C_{fresh}$ se restablece a un &amp;ldquo;nivel fijo&amp;rdquo; constante.&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["Texto cifrado con alto ruido C_noisy"] --> B["Circuito de descifrado homomórfico (Eval_Dec)"]
C["Clave privada cifrada E(sk)"] --> B
B --> D["Texto cifrado con bajo ruido C_fresh"]
style B fill:#ffeeba,stroke:#ffc107&lt;/div>
&lt;p>Al ejecutar regularmente este bootstrapping durante el cálculo, en teoría se hizo posible calcular circuitos de profundidad infinita (logrando el FHE). Sin embargo, en el esquema original de Gentry, este proceso de bootstrapping tenía un costo computacional desesperadamente alto, tardando de decenas de minutos a horas por cada ejecución.&lt;/p>
&lt;hr>
&lt;h2 id="5-generaciones-de-fhe-y-evolución-de-los-esquemas-principales">5. Generaciones de FHE y evolución de los esquemas principales
&lt;/h2>&lt;p>En busca de la aplicación práctica del FHE, criptógrafos de todo el mundo han estado compitiendo para mejorar los algoritmos. Actualmente, el FHE se clasifica principalmente en cuatro generaciones o familias.&lt;/p>
&lt;h3 id="2ª-generación-operaciones-exactas-con-enteros-bgv-bfv">2ª Generación: Operaciones exactas con enteros (BGV, BFV)
&lt;/h3>&lt;p>Estos son los esquemas &lt;strong>BGV (Brakerski-Gentry-Vaikuntanathan)&lt;/strong> y &lt;strong>BFV (Brakerski/Fan-Vercauteren)&lt;/strong> que aparecieron entre 2011 y 2012. Se basan en RLWE y son adecuados para la aritmética modular de enteros (cálculos exactos).
Soportan técnicas de procesamiento por lotes (Batching) similares a SIMD (Single Instruction, Multiple Data), lo que permite empaquetar miles de ranuras de datos dentro de un solo texto cifrado polinomial gigante y realizar cálculos en paralelo a la vez.&lt;/p>
&lt;h3 id="3ª-generación-aceleración-del-bootstrapping-gsw-fhew-tfhe">3ª Generación: Aceleración del bootstrapping (GSW, FHEW, TFHE)
&lt;/h3>&lt;p>El esquema &lt;strong>GSW (Gentry-Sahai-Waters)&lt;/strong> de 2013 simplificó aún más la estructura del FHE. Un desarrollo basado en esto es el &lt;strong>TFHE (Fast Fully Homomorphic Encryption over the Torus)&lt;/strong>, que es una de las opciones principales en la actualidad.
La característica del TFHE es que su bootstrapping es extremadamente rápido (en el orden de milisegundos). Es fuerte en operaciones a nivel de puertas (circuitos lógicos como AND, XOR) y tiene un tamaño de texto cifrado relativamente pequeño, por lo que es adecuado para evaluar rápidamente circuitos lógicos arbitrarios.&lt;/p>
&lt;h3 id="4ª-generación-especialización-en-cálculos-aproximados-y-aprendizaje-automático-ckks">4ª Generación: Especialización en cálculos aproximados y aprendizaje automático (CKKS)
&lt;/h3>&lt;p>El esquema &lt;strong>CKKS (Cheon-Kim-Kim-Song)&lt;/strong>, propuesto por Cheon et al. en 2017, es la tecnología definitiva para la protección de la privacidad en la IA y el aprendizaje automático actuales.
Mientras que las versiones anteriores de FHE se centraban en &amp;ldquo;cálculos de enteros exactos&amp;rdquo;, el CKKS admite &lt;strong>&amp;ldquo;cálculos aproximados de números de coma flotante&amp;rdquo;&lt;/strong> mientras los datos permanecen cifrados. Muestra un rendimiento abrumador en cálculos de números reales donde se permiten pequeños errores, como el entrenamiento y la inferencia de redes neuronales.&lt;/p>
&lt;p>La siguiente tabla resume cómo elegir un esquema según su propósito.&lt;/p>
&lt;table>
&lt;thead>
&lt;tr>
&lt;th style="text-align:left">Nombre del Esquema&lt;/th>
&lt;th style="text-align:left">Tipo de datos preferido&lt;/th>
&lt;th style="text-align:left">Casos de uso recomendados&lt;/th>
&lt;th style="text-align:left">Características&lt;/th>
&lt;/tr>
&lt;/thead>
&lt;tbody>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>BFV / BGV&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Enteros (Integer)&lt;/td>
&lt;td style="text-align:left">Cálculos estadísticos exactos, agregación de datos financieros, búsquedas en bases de datos&lt;/td>
&lt;td style="text-align:left">Alto rendimiento a través del procesamiento por lotes SIMD&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>CKKS&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Números reales (Real/Complex)&lt;/td>
&lt;td style="text-align:left">Aprendizaje automático (DNN, regresión logística), procesamiento de señales&lt;/td>
&lt;td style="text-align:left">Aceleración mediante cálculos aproximados, reescalado&lt;/td>
&lt;/tr>
&lt;tr>
&lt;td style="text-align:left">&lt;strong>TFHE&lt;/strong>&lt;/td>
&lt;td style="text-align:left">Valores booleanos (Boolean)&lt;/td>
&lt;td style="text-align:left">Circuitos lógicos arbitrarios, búsqueda de cadenas, evaluación de funciones no lineales&lt;/td>
&lt;td style="text-align:left">Bootstrapping ultrarrápido (en milisegundos)&lt;/td>
&lt;/tr>
&lt;/tbody>
&lt;/table>
&lt;hr>
&lt;h2 id="6-práctica-bibliotecas-fhe-y-código-conceptual">6. Práctica: Bibliotecas FHE y código conceptual
&lt;/h2>&lt;p>Actualmente, existen muchas bibliotecas de código abierto disponibles que permiten usar el FHE sin requerir un conocimiento profundo en criptografía.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Microsoft SEAL (Simple Encrypted Arithmetic Library)&lt;/strong>: Biblioteca en C++ que admite BFV, BGV y CKKS. Es uno de los estándares de la industria. Su enlace en Python, &lt;strong>TenSEAL&lt;/strong>, es popular entre los ingenieros de IA.&lt;/li>
&lt;li>&lt;strong>Zama (Concrete)&lt;/strong>: Un framework basado en TFHE. Puede escribirse en Rust/Python y ofrece la capacidad de compilar modelos PyTorch existentes para ejecutarlos sobre FHE (Concrete ML).&lt;/li>
&lt;li>&lt;strong>OpenFHE&lt;/strong>: Sucesor de PALISADE, es una biblioteca integral en C++ que soporta todos los esquemas principales.&lt;/li>
&lt;/ul>
&lt;h3 id="ejemplo-de-programación-fhe-usando-python-tenseal">Ejemplo de programación FHE usando Python (TenSEAL)
&lt;/h3>&lt;p>Aquí presentamos un ejemplo de código conceptual en Python usando el esquema CKKS para sumar y multiplicar vectores de números reales mientras se mantienen cifrados.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-python" data-lang="python">&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">tenseal&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">ts&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 1. Configuración del contexto (incluye generación de claves)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Usando el esquema CKKS, establecer el grado del polinomio en 8192&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">(&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">SCHEME_TYPE&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">CKKS&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">poly_modulus_degree&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">8192&lt;/span>&lt;span class="p">,&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">coeff_mod_bit_sizes&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="mi">60&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">40&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">60&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">generate_galois_keys&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">context&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">global_scale&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="o">**&lt;/span>&lt;span class="mi">40&lt;/span> &lt;span class="c1"># Factor de escala para números reales&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 2. Lado del cliente: Cifrado de datos&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">1.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">2.5&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.5&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">vector2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="mf">2.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">3.0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mf">4.0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Convertir vectores de texto plano a texto cifrado (normalmente ejecutado en el lado del cliente)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v1&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector1&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_v2&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ts&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ckks_vector&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">context&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">vector2&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 3. Lado del servidor: Operaciones con datos cifrados (Protección de Data in Use)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># El servidor no conoce el texto plano, pero puede realizar sumas y multiplicaciones&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">enc_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_v1&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">enc_v2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># 4. Lado del cliente: Descifrado de los resultados&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Solo el cliente que posee la clave privada puede ver los resultados&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_add&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_add&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="n">res_mul&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">enc_mul&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">decrypt&lt;/span>&lt;span class="p">()&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Resultado de la suma descifrado: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_add&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ejemplo de salida: [3.5000001, 5.5000001, 7.5000002] (Contiene un ligero error debido al cálculo aproximado)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;Resultado de la multiplicación descifrado: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">res_mul&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="c1"># Ejemplo de salida: [3.0000002, 7.5000005, 14.0000003]&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Como se puede ver en el código anterior, los operadores normales de Python como &lt;code>enc_v1 + enc_v2&lt;/code> están sobrecargados, lo que permite escribir cálculos entre textos cifrados de forma muy intuitiva. En el lado del servidor, las operaciones con vectores se completan sin conocer su contenido.&lt;/p>
&lt;hr>
&lt;h2 id="7-desafíos-del-fhe-rendimiento-y-aceleración-de-hardware">7. Desafíos del FHE: Rendimiento y aceleración de hardware
&lt;/h2>&lt;p>Aunque el FHE proporciona una seguridad teóricamente perfecta, el mayor desafío en su implementación práctica es la &lt;strong>&amp;ldquo;sobrecarga de rendimiento (overhead)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Sobrecarga computacional&lt;/strong>: Comparado con los cálculos en texto plano, los cálculos en texto cifrado son de miles a decenas de miles de veces más lentos en una CPU. La multiplicación de polinomios y el bootstrapping requieren cálculos masivos de FFT (Transformada Rápida de Fourier) o NTT (Transformada Teórica de Números).&lt;/li>
&lt;li>&lt;strong>Expansión del tamaño de los datos (Ciphertext Expansion)&lt;/strong>: Unos pocos bytes de texto plano pueden convertirse en megabytes una vez cifrados. Esto ejerce una fuerte presión sobre el ancho de banda de la memoria y la red.&lt;/li>
&lt;/ol>
&lt;h3 id="enfoques-para-soluciones-a-través-del-hardware">Enfoques para soluciones a través del hardware
&lt;/h3>&lt;p>Para superar esta sobrecarga, se están desarrollando en todo el mundo aceleradores de hardware dedicados al FHE (con soporte para ASIC, FPGA y GPU).&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Aceleración por GPU&lt;/strong>: Se están realizando esfuerzos para paralelizar las operaciones NTT y el bootstrapping utilizando potentes GPUs como las de NVIDIA, habiéndose reportado velocidades decenas de veces mayores en comparación con las implementaciones por software (por ejemplo, 100x.ai, el backend CUDA de TFHE-rs de Zama).&lt;/li>
&lt;li>&lt;strong>Proyecto DARPA DPRIVE&lt;/strong>: La Agencia de Proyectos de Investigación Avanzados de Defensa de EE. UU. (DARPA) está promoviendo el proyecto de desarrollo de hardware dedicado &amp;ldquo;DPRIVE (Data Protection in Virtual Environments)&amp;rdquo; para llevar la velocidad de cálculo del FHE a un nivel equivalente al de procesamiento de texto plano (dentro de un margen de sobrecarga de 10 veces), con la participación de Intel, Microsoft, Intellectual Ventures, entre otros.&lt;/li>
&lt;li>&lt;strong>La llegada de la FPU (FHE Processing Unit)&lt;/strong>: Startups como Cornami y Optalysys se están embarcando en el desarrollo de chips dedicados al FHE utilizando computación óptica o arquitecturas de silicio especiales.&lt;/li>
&lt;/ul>
&lt;p>En un futuro cercano, puede que llegue una era en la que las &amp;ldquo;FPU&amp;rdquo; vengan integradas de serie en servidores e infraestructuras en la nube, al igual que ocurre con las NPU (Neural Processing Unit) en el campo de la IA.&lt;/p>
&lt;hr>
&lt;h2 id="8-casos-de-uso-esperados">8. Casos de uso esperados
&lt;/h2>&lt;p>A medida que el FHE se acerca a velocidades prácticas, se esperan innovaciones disruptivas en los siguientes campos:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Protección de la privacidad en análisis médicos y genómicos&lt;/strong>:
Al permitir que la IA en la nube aprenda de los historiales médicos o los datos de ADN de los pacientes en poder de múltiples hospitales mientras se mantienen cifrados con FHE, es posible desarrollar modelos de diagnóstico de cáncer de alta precisión o nuevos fármacos sin violar las leyes de privacidad (como HIPAA o GDPR).&lt;/li>
&lt;li>&lt;strong>Detección de fraudes y prevención de lavado de dinero (AML) en instituciones financieras&lt;/strong>:
Bancos de la competencia pueden cotejar datos entre sí de forma cifrada, sin revelar la información de las cuentas de los clientes o el historial de transacciones, lo que permite realizar análisis interbancarios para detectar enormes redes de transferencias ilícitas.&lt;/li>
&lt;li>&lt;strong>API de inferencia de IA segura (MaaS: Model as a Service)&lt;/strong>:
Los usuarios envían su propia voz, imágenes faciales o indicaciones (prompts) de forma cifrada a servicios de IA (como un LLM tipo ChatGPT). El proveedor de IA genera la respuesta sin conocer en absoluto los datos introducidos por el usuario y la devuelve como texto cifrado. Esto elimina por completo la preocupación de que &amp;ldquo;la IA aprenda o espíe la información personal&amp;rdquo;.&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="9-conclusión-el-futuro-de-la-criptografía-avanza-hacia-el-cálculo-invisible">9. Conclusión: El futuro de la criptografía avanza hacia el &amp;ldquo;cálculo invisible&amp;rdquo;
&lt;/h2>&lt;p>Al igual que la invención de la criptografía de clave pública (RSA) en la década de 1970 hizo posible la comunicación segura en Internet (como HTTPS), la invención del FHE por parte de Craig Gentry es uno de los hitos más importantes en la historia de la criptografía.&lt;/p>
&lt;p>Hoy en día, el cifrado totalmente homomórfico (FHE) ha saltado de la teoría de los laboratorios y ha entrado en una fase en la que Microsoft, IBM, Intel, Google y muchas startups compiten ferozmente por su aplicación práctica. Aunque los desafíos del coste computacional y el tamaño de los datos aún persisten, el rendimiento continúa mejorando a un ritmo que supera la Ley de Moore, gracias al refinamiento de los algoritmos y la evolución de los aceleradores de hardware.&lt;/p>
&lt;p>En unos pocos años, &amp;ldquo;calcular datos mientras están cifrados&amp;rdquo; ya no será algo extraordinario, sino que se convertirá en una de las mejores prácticas estándar de protección de datos en los servicios en la nube. El FHE es verdaderamente la clave de la seguridad de la próxima generación, al materializar &lt;strong>el equilibrio definitivo entre la privacidad y la utilización de los datos&lt;/strong> en nuestra sociedad impulsada por los datos.&lt;/p></description></item></channel></rss>