<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Math on kenji.blog</title><link>http://kenji.blog/es/tags/math/</link><description>Recent content in Math on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>kenjinote</copyright><lastBuildDate>Fri, 11 Sep 2026 22:00:00 +0900</lastBuildDate><atom:link href="http://kenji.blog/es/tags/math/index.xml" rel="self" type="application/rss+xml"/><item><title>【Para Principiantes】Descifrando la estructura matemática del modelo Transformer</title><link>http://kenji.blog/es/p/transformer-mathematical-structure/</link><pubDate>Fri, 11 Sep 2026 22:00:00 +0900</pubDate><guid>http://kenji.blog/es/p/transformer-mathematical-structure/</guid><description>&lt;img src="http://kenji.blog/p/transformer-mathematical-structure/img/eyecatch.jpg" alt="Featured image of post 【Para Principiantes】Descifrando la estructura matemática del modelo Transformer" />&lt;h1 id="introducción-por-qué-aprender-las-matemáticas-de-transformer">Introducción: ¿Por qué aprender las matemáticas de Transformer?
&lt;/h1>&lt;p>No sería exagerado decir que &amp;ldquo;Transformer&amp;rdquo; es la arquitectura que reescribió la historia del procesamiento del lenguaje natural (NLP) moderno y de toda la IA en general. Propuesto por primera vez en 2017 por investigadores de Google en el artículo &amp;ldquo;Attention Is All You Need&amp;rdquo;, este modelo funciona actualmente como el corazón de los grandes modelos de lenguaje (LLM) que dominan el mundo, como la serie GPT de OpenAI (la tecnología base de ChatGPT), BERT de Google y Claude de Anthropic.&lt;/p>
&lt;p>Sin embargo, aunque es común encontrar explicaciones cualitativas sobre cómo funciona Transformer, como &amp;ldquo;utiliza un mecanismo de Attention (atención) para comprender el contexto&amp;rdquo;, en realidad hay muy pocas explicaciones profundas dirigidas a principiantes sobre la &lt;strong>estructura matemática&lt;/strong> que hay detrás. Para comprender verdaderamente cómo la IA procesa las &amp;ldquo;palabras&amp;rdquo; como &amp;ldquo;fórmulas matemáticas&amp;rdquo; y genera oraciones asombrosamente naturales, es indispensable descifrar su mecanismo matemático.&lt;/p>
&lt;p>En este artículo, dirigido a personas con conocimientos básicos de matemáticas y programación (aquellos que comprenden conceptos de nivel de secundaria como matrices y derivadas), desentrañaremos de manera exhaustiva y fácil de entender la estructura matemática de los componentes centrales de Transformer: el &amp;ldquo;Mecanismo de Self-Attention&amp;rdquo;, el &amp;ldquo;Modelo de Consulta, Clave y Valor (Q/K/V)&amp;rdquo;, la &amp;ldquo;Normalización con la función Softmax&amp;rdquo; y el &amp;ldquo;Positional Encoding&amp;rdquo;.&lt;/p>
&lt;p>Es posible que te sientas abrumado por la cantidad de fórmulas matemáticas, pero cada cálculo tiene un &amp;ldquo;significado&amp;rdquo; claro. Para cuando termines de leer este artículo, deberías poder comprender que Transformer no es simplemente una caja negra mágica, sino un cristal de matemáticas y estadísticas diseñado con gran precisión.&lt;/p>
&lt;hr>
&lt;h1 id="1-limitaciones-de-los-métodos-tradicionales-y-la-innovación-de-transformer">1. Limitaciones de los métodos tradicionales y la innovación de Transformer
&lt;/h1>&lt;p>Antes de la aparición de Transformer, la corriente principal en el procesamiento del lenguaje natural eran las Redes Neuronales Recurrentes (RNN) y su derivado, LSTM (Long Short-Term Memory). Las RNN están diseñadas para procesar datos de series temporales y leen el texto palabra por palabra, secuencialmente desde el principio.&lt;/p>
&lt;p>Sin embargo, las RNN tenían dos debilidades fatales:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Dificultad para aprender dependencias a largo plazo&lt;/strong>: A medida que las oraciones se vuelven más largas, la información de las primeras palabras ingresadas se desvanece antes de llegar al final (problema del desvanecimiento del gradiente).&lt;/li>
&lt;li>&lt;strong>Imposibilidad de realizar cálculos en paralelo&lt;/strong>: Dado que las palabras deben procesarse en orden, es difícil realizar cálculos paralelos a gran escala utilizando GPUs, lo que hace que el entrenamiento lleve una enorme cantidad de tiempo.&lt;/li>
&lt;/ol>
&lt;p>Transformer abandonó por completo la estructura de las RNN y provocó un cambio de paradigma al capturar el contexto utilizando únicamente &amp;ldquo;Attention&amp;rdquo;. Esto hizo posible que, sin importar cuán larga sea la secuencia, no haya pérdida de información y se puedan paralelizar los cálculos para aprovechar al máximo el rendimiento de la GPU.&lt;/p>
&lt;hr>
&lt;h1 id="2-arquitectura-general-de-transformer">2. Arquitectura general de Transformer
&lt;/h1>&lt;p>Primero, demos un vistazo general a la arquitectura de Transformer. Transformer se compone principalmente de dos bloques: el &amp;ldquo;Encoder&amp;rdquo; (codificador) y el &amp;ldquo;Decoder&amp;rdquo; (decodificador). Tomando como ejemplo una tarea de traducción, el Encoder convierte el idioma de entrada (ej: inglés) en una representación vectorial matemática, y el Decoder genera el idioma de salida (ej: japonés) basándose en esa representación vectorial.&lt;/p>
&lt;p>El siguiente diagrama es una simplificación de la estructura interna del bloque Encoder.&lt;/p>
&lt;div class="mermaid">graph TD
A["Tokens de Entrada"] --> B["Incrustación de Entrada"]
B --> C["Codificación Posicional"]
C --> D["Autoatención Multicabezal"]
D --> E["Suma y Normalización de Capa"]
E --> F["Red Neuronal Prealimentada"]
F --> G["Suma y Normalización de Capa"]
G --> H["Salida a la Siguiente Capa"]
C -.->|"Conexión Residual"| E
E -.->|"Conexión Residual"| G&lt;/div>
&lt;p>A partir de aquí, veamos paso a paso las operaciones matemáticas que se realizan en cada componente.&lt;/p>
&lt;hr>
&lt;h1 id="3-vectorización-de-palabras-y-codificación-posicional-positional-encoding">3. Vectorización de palabras y codificación posicional (Positional Encoding)
&lt;/h1>&lt;p>Las computadoras no pueden entender el texto tal cual. El texto de entrada primero se divide en unidades llamadas &amp;ldquo;Tokens&amp;rdquo;, y cada uno se convierte en un vector de longitud fija. Esto es el &lt;strong>Input Embedding&lt;/strong> (Incrustación de Entrada).&lt;/p>
&lt;h2 id="31-las-matemáticas-de-input-embedding">3.1 Las matemáticas de Input Embedding
&lt;/h2>&lt;p>Supongamos que el tamaño del vocabulario es $V$ y la dimensionalidad de los vectores de incrustación es $d_{model}$ (en el artículo original $d_{model} = 512$). Cada palabra $w_i$ se convierte en un vector $x_i \in \mathbb{R}^{d_{model}}$ utilizando una matriz de incrustación $W_E \in \mathbb{R}^{V \times d_{model}}$.&lt;/p>
$$ x_i = W_E \cdot \text{one\_hot}(w_i) $$
&lt;p>Con esto, toda la oración se representa como una matriz $X \in \mathbb{R}^{N \times d_{model}}$ ($N$ es la longitud de la oración).&lt;/p>
&lt;h2 id="32-la-necesidad-y-fórmulas-de-positional-encoding-codificación-posicional">3.2 La necesidad y fórmulas de Positional Encoding (Codificación Posicional)
&lt;/h2>&lt;p>A diferencia de las RNN, Transformer no procesa las palabras en orden secuencial, sino que procesa todas las palabras de forma simultánea y paralela. Esto es una gran ventaja en términos de velocidad de cálculo, pero al mismo tiempo causa el problema de que &lt;strong>se pierde la importante información del &amp;ldquo;orden de las palabras&amp;rdquo;&lt;/strong>. Por ejemplo, &amp;ldquo;El perro muerde al hombre&amp;rdquo; y &amp;ldquo;El hombre muerde al perro&amp;rdquo; tienen el mismo conjunto de palabras de entrada, pero significados completamente diferentes.&lt;/p>
&lt;p>Para proporcionar esta información del orden de las palabras al modelo, se ideó el &lt;strong>Positional Encoding&lt;/strong>.
El Positional Encoding $PE$ para la dimensión $i$-ésima de una palabra en la posición $pos$ se calcula utilizando las siguientes funciones trigonométricas.&lt;/p>
$$ PE_{(pos, 2i)} = \sin\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$
$$ PE_{(pos, 2i+1)} = \cos\left(\frac{pos}{10000^{2i/d_{model}}}\right) $$
&lt;p>Donde $pos$ es la posición de la palabra ($0, 1, 2, \dots, N-1$) e $i$ es el índice de la dimensión del vector ($0, 1, \dots, d_{model}/2 - 1$).&lt;/p>
&lt;h3 id="por-qué-usar-seno-y-coseno">¿Por qué usar seno y coseno?
&lt;/h3>&lt;p>A simple vista parece una fórmula extremadamente compleja y extraña, pero hay una profunda razón matemática para esto. Al usar funciones trigonométricas, el modelo puede aprender fácilmente no solo la &lt;strong>&amp;ldquo;posición absoluta&amp;rdquo;&lt;/strong>, sino también &lt;strong>la diferencia de &amp;ldquo;posición relativa&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Recuerda los teoremas de suma de funciones trigonométricas que se aprenden en la escuela secundaria.
&lt;/p>
$$ \sin(\alpha + \beta) = \sin\alpha \cos\beta + \cos\alpha \sin\beta $$
$$ \cos(\alpha + \beta) = \cos\alpha \cos\beta - \sin\alpha \sin\beta $$
&lt;p>El Positional Encoding de una posición $pos + k$, que está desplazada por un offset $k$ de una posición $pos$, se puede expresar como una combinación lineal del Positional Encoding de la posición $pos$. Es decir, utilizando una matriz $M_k$, se puede escribir de la siguiente manera:&lt;/p>
$$ PE_{pos+k} = M_k \cdot PE_{pos} $$
&lt;p>De esta manera, el mecanismo de Attention puede reconocer fácilmente la distancia relativa entre las palabras (&amp;ldquo;qué tan lejos están&amp;rdquo;) a través del cálculo del producto punto. Además, al combinar múltiples ondas senoidales y cosenoidales con diferentes longitudes de onda, existe la ventaja de poder generar vectores de posición únicos sin importar cuán larga sea la oración.&lt;/p>
&lt;p>La matriz de entrada final $X_{input}$ será la suma de los vectores de incrustación de las palabras y esta codificación posicional.&lt;/p>
$$ X_{input} = X + PE $$
&lt;hr>
&lt;h1 id="4-las-matemáticas-profundas-de-self-attention-mecanismo-de-autoatención">4. Las matemáticas profundas de Self-Attention (Mecanismo de Autoatención)
&lt;/h1>&lt;p>Por fin, nos adentramos en el componente más importante de Transformer: &lt;strong>Self-Attention&lt;/strong>. El propósito de Self-Attention es &amp;ldquo;calcular el grado de relación entre todas las palabras dentro de una oración y actualizar el vector de cada palabra a una representación más rica que tenga en cuenta el contexto&amp;rdquo;.&lt;/p>
&lt;p>Aquí se utiliza la analogía de un &amp;ldquo;sistema de búsqueda&amp;rdquo;.&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Query (Q)&lt;/strong>: Consulta (Término de búsqueda). &amp;ldquo;¿Qué información estoy buscando ahora?&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Key (K)&lt;/strong>: Clave (Encabezado). &amp;ldquo;¿Qué información poseo?&amp;rdquo;&lt;/li>
&lt;li>&lt;strong>Value (V)&lt;/strong>: Valor (Entidad). &amp;ldquo;¿Qué información proporciono realmente?&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;h2 id="41-generación-de-las-matrices-q-k-v">4.1 Generación de las matrices $Q, K, V$
&lt;/h2>&lt;p>Para una matriz de entrada $X \in \mathbb{R}^{N \times d_{model}}$ (ignoraremos el tamaño del lote aquí para simplificar), multiplicamos por las matrices de pesos aprendibles $W^Q, W^K, W^V \in \mathbb{R}^{d_{model} \times d_k}$ para calcular la consulta $Q$, la clave $K$ y el valor $V$. (Normalmente $d_k = d_v = d_{model} / h$)&lt;/p>
$$ Q = X W^Q $$
$$ K = X W^K $$
$$ V = X W^V $$
&lt;p>Aquí, $Q, K, V$ son todas matrices de $\mathbb{R}^{N \times d_k}$.&lt;/p>
&lt;h2 id="42-cálculo-del-attention-score-producto-punto">4.2 Cálculo del Attention Score (Producto Punto)
&lt;/h2>&lt;p>Para medir qué tan relacionada está la Query de cada palabra con la Key de todas las demás palabras, calculamos el &lt;strong>producto punto&lt;/strong> de los vectores. Expresado en operaciones de matrices, queda de la siguiente manera:&lt;/p>
$$ \text{Scores} = Q K^T $$
&lt;p>Cada elemento $s_{ij}$ de la matriz resultante $\text{Scores} \in \mathbb{R}^{N \times N}$ obtenida por este cálculo representa el producto punto entre la Query de la palabra $i$ y la Key de la palabra $j$, es decir, la &amp;ldquo;fuerza de la relación&amp;rdquo;.&lt;/p>
&lt;h2 id="43-escalamiento-scale">4.3 Escalamiento (Scale)
&lt;/h2>&lt;p>Hay un problema con el cálculo de la puntuación mediante el producto punto. Cuando la dimensionalidad $d_k$ de los vectores se vuelve grande, el valor del producto punto puede volverse extremadamente grande o pequeño.&lt;/p>
&lt;p>Demostremos esto matemáticamente.
Supongamos que cada elemento de la consulta $q \sim \mathcal{N}(0, 1)$ y cada elemento de la clave $k \sim \mathcal{N}(0, 1)$ siguen distribuciones normales estándar independientes.
Encontremos la media y la varianza del producto punto $q \cdot k = \sum_{i=1}^{d_k} q_i k_i$.
Media: Dado que $\mathbb{E}[q_i k_i] = \mathbb{E}[q_i] \mathbb{E}[k_i] = 0 \times 0 = 0$, la media de la suma también es $0$.
Varianza: La varianza de $q_i k_i$ es, debido a la independencia, $\text{Var}(q_i k_i) = \mathbb{E}[(q_i k_i)^2] - (\mathbb{E}[q_i k_i])^2 = 1 \times 1 - 0 = 1$.
Por lo tanto, la varianza de todo el producto punto será igual a la dimensionalidad $d_k$.&lt;/p>
$$ \text{Var}(q \cdot k) = d_k $$
&lt;p>Si la varianza se vuelve grande, al aplicar la función Softmax más adelante, el gradiente para todo valor que no sea el máximo se volverá extremadamente pequeño (lo que se conoce como &amp;ldquo;desvanecimiento del gradiente&amp;rdquo;), lo que impedirá que el aprendizaje avance.
Para evitar esto, dividimos (escalamos) las puntuaciones por $\sqrt{d_k}$ para mantener la varianza siempre en $1$.&lt;/p>
$$ \text{Scaled Scores} = \frac{Q K^T}{\sqrt{d_k}} $$
&lt;h2 id="44-probabilización-mediante-la-función-softmax">4.4 Probabilización mediante la función Softmax
&lt;/h2>&lt;p>Para convertir las puntuaciones obtenidas en una distribución de probabilidad (pesos) cuya suma sea $1$, aplicamos la &lt;strong>función Softmax&lt;/strong> fila por fila.&lt;/p>
$$ a_{ij} = \text{softmax}(s_i)_j = \frac{\exp(s_{ij} / \sqrt{d_k})}{\sum_{m=1}^N \exp(s_{im} / \sqrt{d_k})} $$
&lt;p>La matriz $A \in \mathbb{R}^{N \times N}$ se denomina matriz de Attention Weight (Pesos de Atención). Al observar cada fila $i$ de esta matriz, podemos ver expresado como un valor de 0 a 1 &amp;ldquo;a qué otras palabras $j$ y en qué medida se debe prestar atención (Attention) para comprender la palabra $i$&amp;rdquo;.&lt;/p>
&lt;h2 id="45-suma-ponderada-de-value">4.5 Suma ponderada de Value
&lt;/h2>&lt;p>Finalmente, utilizamos la matriz de Attention Weight $A$ obtenida para calcular la suma ponderada de la matriz Value $V$.&lt;/p>
$$ \text{Output} = A V = \text{softmax}\left(\frac{Q K^T}{\sqrt{d_k}}\right) V $$
&lt;p>La matriz $Z \in \mathbb{R}^{N \times d_v}$ obtenida mediante esta operación es un conjunto de &amp;ldquo;representaciones vectoriales de palabras actualizadas teniendo en cuenta el contexto&amp;rdquo;.
Esta es la totalidad del &lt;strong>Scaled Dot-Product Attention&lt;/strong> definido en el artículo.&lt;/p>
&lt;hr>
&lt;h1 id="5-multi-head-attention-atención-multicabezal">5. Multi-Head Attention (Atención Multicabezal)
&lt;/h1>&lt;p>Con un solo cálculo de Attention (cabezal único), existe la posibilidad de que solo se capture el contexto desde un único punto de vista (por ejemplo, la &amp;ldquo;relación gramatical&amp;rdquo;). Por lo tanto, para capturar simultáneamente diversas relaciones semánticas y sintácticas del lenguaje (como &amp;ldquo;sujeto y predicado&amp;rdquo;, &amp;ldquo;pronombre y su referente&amp;rdquo;, etc.), se introdujo el &lt;strong>Multi-Head Attention&lt;/strong>.&lt;/p>
&lt;p>Realizamos la generación anterior de $Q, K, V$ y el cálculo de Attention en paralelo $h$ veces (número de cabezales, $h=8$ en el artículo original).&lt;/p>
$$ \text{head}_i = \text{Attention}(X W_i^Q, X W_i^K, X W_i^V) $$
&lt;p>Aquí, $W_i^Q, W_i^K, W_i^V \in \mathbb{R}^{d_{model} \times d_k}$ son matrices de pesos aprendibles dedicadas para el cabezal $i$-ésimo.&lt;/p>
&lt;p>Los resultados emitidos desde cada cabezal $\text{head}_i \in \mathbb{R}^{N \times d_v}$ se concatenan horizontalmente (Concatenate).&lt;/p>
$$ \text{Concat}(\text{head}_1, \dots, \text{head}_h) \in \mathbb{R}^{N \times (h \cdot d_v)} $$
&lt;p>Normalmente se configura para que $h \cdot d_v = d_{model}$, de modo que la dimensionalidad después de la concatenación vuelva a ser $d_{model}$ como en la entrada. Finalmente, multiplicamos esta matriz por una matriz de pesos $W^O \in \mathbb{R}^{d_{model} \times d_{model}}$ para obtener la salida final.&lt;/p>
$$ \text{MultiHead}(Q, K, V) = \text{Concat}(\text{head}_1, \dots, \text{head}_h) W^O $$
&lt;div class="mermaid">graph TD
X["Entrada X"] --> Q1["Q1"]
X --> K1["K1"]
X --> V1["V1"]
Q1 &amp; K1 &amp; V1 --> H1["Cabezal 1"]
X --> Q2["Q2"]
X --> K2["K2"]
X --> V2["V2"]
Q2 &amp; K2 &amp; V2 --> H2["Cabezal 2"]
X --> QN["..."]
X --> KN["..."]
X --> VN["..."]
QN &amp; KN &amp; VN --> HN["Cabezal h"]
H1 &amp; H2 &amp; HN --> C["Concatenar"]
C --> WO["Multiplicar por WO"]
WO --> OUT["Salida Multicabezal"]&lt;/div>
&lt;hr>
&lt;h1 id="6-feed-forward-neural-network-ffn">6. Feed-Forward Neural Network (FFN)
&lt;/h1>&lt;p>La salida de Multi-Head Attention se introduce a continuación en una &lt;strong>Position-wise Feed-Forward Network (FFN)&lt;/strong>.
Esta es una red neuronal totalmente conectada de dos capas que se aplica &amp;ldquo;independientemente para cada posición (palabra)&amp;rdquo; en la secuencia.&lt;/p>
&lt;p>Expresado matemáticamente, se ve de la siguiente manera:&lt;/p>
$$ \text{FFN}(x) = \max(0, x W_1 + b_1) W_2 + b_2 $$
&lt;p>Aquí, $\max(0, z)$ representa la función de activación ReLU (Rectified Linear Unit) (en los modelos recientes se usan a menudo GELU o SwiGLU).&lt;/p>
&lt;p>El papel de esta red es sumamente importante. Mientras que el mecanismo de Attention aprende &amp;ldquo;las relaciones entre palabras (relaciones espaciales/secuenciales)&amp;rdquo;, la FFN se encarga de &amp;ldquo;la transformación no lineal de características de cada vector de palabra en sí&amp;rdquo;.
Normalmente, la dimensionalidad se expande significativamente en la primera capa mediante los pesos $W_1$ (por ejemplo, de $d_{model}=512$ a $d_{ff}=2048$, expandiéndose 4 veces), se realizan cálculos complejos en el espacio de características y, luego, en la segunda capa se vuelve a la dimensión original utilizando los pesos $W_2$. Esta &amp;ldquo;expansión y reducción de dimensiones&amp;rdquo; aumenta dramáticamente el poder de representación del modelo.&lt;/p>
&lt;hr>
&lt;h1 id="7-conexiones-residuales-residual-connection-y-normalización-de-capas-layer-normalization">7. Conexiones Residuales (Residual Connection) y Normalización de Capas (Layer Normalization)
&lt;/h1>&lt;p>En el aprendizaje profundo, al hacer que las redes sean más profundas, los gradientes tienden a desvanecerse o explotar durante el entrenamiento, lo que provoca que el aprendizaje falle. Para prevenir esto, alrededor de cada subcapa (Attention y FFN) de Transformer, se han colocado una &lt;strong>Conexión Residual (Residual Connection)&lt;/strong> y una &lt;strong>Normalización de Capas (Layer Normalization)&lt;/strong>.&lt;/p>
&lt;p>Matemáticamente, la salida de la subcapa se procesa de la siguiente manera:&lt;/p>
$$ \text{Output} = \text{LayerNorm}(x + \text{Sublayer}(x)) $$
&lt;h2 id="71-conexión-residual-x--textsublayerx">7.1 Conexión Residual ($x + \text{Sublayer}(x)$)
&lt;/h2>&lt;p>La entrada $x$ se suma directamente a la salida de la subcapa. Esto permite que el gradiente viaje directamente a las capas más superficiales a través del atajo durante la retropropagación, estabilizando así el aprendizaje incluso si se añaden más capas.&lt;/p>
&lt;h2 id="72-las-matemáticas-de-layer-normalization">7.2 Las matemáticas de Layer Normalization
&lt;/h2>&lt;p>La Layer Normalization es una técnica que calcula la media y la varianza a lo largo de la dimensión de las características y normaliza los datos. En una entrada con tamaño de lote $B$, longitud de secuencia $N$ y dimensionalidad $d_{model}$, la normalización se realiza para un único vector de palabra $x \in \mathbb{R}^{d_{model}}$.&lt;/p>
&lt;p>Se calculan la media $\mu$ y la varianza $\sigma^2$:
&lt;/p>
$$ \mu = \frac{1}{d_{model}} \sum_{i=1}^{d_{model}} x_i $$
$$ \sigma^2 = \frac{1}{d_{model}} \sum_{i=1}^{d_{model}} (x_i - \mu)^2 $$
&lt;p>Y se obtiene la salida normalizada $\hat{x}$:
&lt;/p>
$$ \text{LN}(x) = \frac{x - \mu}{\sqrt{\sigma^2 + \epsilon}} \odot \gamma + \beta $$
&lt;p>
(Donde $\epsilon$ es una constante minúscula para evitar la división por cero. $\gamma$ y $\beta$ son parámetros de escala y desplazamiento aprendibles).&lt;/p>
&lt;p>La razón por la que se adoptó la normalización a lo largo de las capas (Layer Normalization) en lugar de la normalización a lo largo de los lotes (Batch Normalization) es que las estadísticas entre lotes tienden a volverse inestables al procesar datos de secuencia de longitudes variables, como las oraciones. Con Layer Normalization, Transformer puede realizar un aprendizaje estable de forma independiente del tamaño del lote.&lt;/p>
&lt;hr>
&lt;h1 id="8-estructuras-específicas-del-decoder-masked-attention-y-cross-attention">8. Estructuras específicas del Decoder: Masked Attention y Cross-Attention
&lt;/h1>&lt;p>La estructura que hemos explicado hasta ahora es la del Encoder. En el bloque del Decoder que genera las oraciones, la estructura es un poco diferente.&lt;/p>
&lt;h2 id="81-masked-multi-head-attention">8.1 Masked Multi-Head Attention
&lt;/h2>&lt;p>El papel del Decoder es &amp;ldquo;predecir la siguiente palabra a partir de las palabras pasadas&amp;rdquo;. Por lo tanto, si &amp;ldquo;mira las palabras futuras&amp;rdquo; durante el entrenamiento, sería hacer trampa. La operación matemática para prevenir esto es el &lt;strong>Masking&lt;/strong> (Enmascaramiento).&lt;/p>
&lt;p>A la matriz de puntuaciones $Q K^T$, le sumamos una matriz de máscara $M$ que establece un valor extremadamente pequeño cercano a $-\infty$ en la parte triangular superior (correspondiente a la información futura).&lt;/p>
$$ M_{ij} = \begin{cases} 0 &amp; (i \le j) \\ -\infty &amp; (i > j) \end{cases} $$
$$ \text{Masked Attention}(Q, K, V) = \text{softmax}\left(\frac{Q K^T + M}{\sqrt{d_k}}\right) V $$
&lt;p>Al calcular la función Softmax, dado que $\exp(-\infty) = 0$, el Attention Weight para las palabras futuras se vuelve completamente $0$. Esto permite una generación autorregresiva manteniendo la causalidad (Causality).&lt;/p>
&lt;h2 id="82-encoder-decoder-cross-attention">8.2 Encoder-Decoder Cross-Attention
&lt;/h2>&lt;p>La segunda subcapa del Decoder es el &lt;strong>Cross-Attention&lt;/strong>, que hace referencia a la salida del Encoder.
Aquí, $Q$ se genera a partir de la capa anterior del Decoder, mientras que $K$ y $V$ se generan a partir de la salida de la capa final del Encoder.&lt;/p>
$$ Q_{decoder} = X_{dec} W^Q $$
$$ K_{encoder} = X_{enc} W^K $$
$$ V_{encoder} = X_{enc} W^V $$
&lt;p>Con este cálculo, en tareas como la traducción, el modelo puede aprender &amp;ldquo;a qué parte de la oración original extranjera está fuertemente relacionada la palabra que se está traduciendo ahora&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h1 id="9-complejidad-computacional-y-las-matemáticas-de-la-optimización-moderna">9. Complejidad computacional y las matemáticas de la optimización moderna
&lt;/h1>&lt;p>Aunque Transformer es un modelo maravilloso, también tiene &amp;ldquo;debilidades&amp;rdquo; debidas a su estructura matemática.
Preste atención a la complejidad computacional del Self-Attention. En el cálculo de la matriz de puntuación $Q K^T$, multiplicamos una matriz de $(N \times d_k)$ por una matriz de $(d_k \times N)$, por lo que la complejidad es &lt;strong>$O(N^2 \cdot d_{model})$&lt;/strong>.&lt;/p>
&lt;p>Es decir, &lt;strong>el costo computacional y el uso de memoria aumentan de manera cuadrática con respecto a la longitud de la secuencia $N$&lt;/strong>.
Cuando las oraciones son cortas esto no es un problema, pero si intentas ingresar a un LLM un contexto extremadamente largo, como el de un libro entero, $N$ alcanza las decenas o cientos de miles, y el cálculo tradicional de Attention agotará inmediatamente la memoria de la GPU.&lt;/p>
&lt;p>Para romper esta maldición de $O(N^2)$, en los últimos años se han propuesto varias optimizaciones desde perspectivas matemáticas y de hardware.
El ejemplo más representativo es &lt;strong>FlashAttention&lt;/strong>. FlashAttention es un algoritmo que divide el cálculo de Attention en mosaicos (Tiling) para minimizar la transferencia de datos (accesos a memoria) entre la jerarquía de memoria de la GPU (SRAM y HBM). A pesar de arrojar matemáticamente el mismo resultado exacto que el Attention estándar (Exact Attention), ha logrado una aceleración y reducción de memoria dramáticas gracias a la optimización a nivel de hardware, haciendo posible la realización de modelos de contexto largo como GPT-4.&lt;/p>
&lt;p>Además, se están investigando activamente otras aproximaciones de la complejidad computacional como $O(N \log N)$ y $O(N)$, tales como Sparse Attention y Linear Attention.&lt;/p>
&lt;hr>
&lt;h1 id="10-imagen-de-implementación-pseudocódigo-al-estilo-pytorch">10. Imagen de implementación (Pseudocódigo al estilo PyTorch)
&lt;/h1>&lt;p>Si trasladamos la estructura matemática explicada hasta aquí a un código de programación real (Python / PyTorch), veremos que se puede escribir de una forma asombrosamente simple. Aquí mostramos el pseudocódigo del núcleo de Self-Attention.&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;/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">torch&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">torch.nn.functional&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="nn">F&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kn">import&lt;/span> &lt;span class="nn">math&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="k">def&lt;/span> &lt;span class="nf">scaled_dot_product_attention&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">mask&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="kc">None&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># formas de q, k, v: [batch_size, num_heads, seq_length, d_k]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">d_k&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">q&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">size&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&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"># 1. Cálculo de puntuación mediante producto punto: Q * K^T&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="c1"># Se calculan los productos de las matrices transponiendo las dos últimas dimensiones&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">matmul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">q&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">k&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">transpose&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">2&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mi">1&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"># 2. Escalamiento&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">scores&lt;/span> &lt;span class="o">/&lt;/span> &lt;span class="n">math&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">sqrt&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">d_k&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. Enmascaramiento (En el caso de Masked Attention)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="n">mask&lt;/span> &lt;span class="ow">is&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="kc">None&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scores&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">scores&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">masked_fill&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">mask&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">-&lt;/span>&lt;span class="mf">1e9&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"># 4. Probabilización mediante Softmax&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">attention_weights&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">F&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">softmax&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">scores&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">dim&lt;/span>&lt;span class="o">=-&lt;/span>&lt;span class="mi">1&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"># 5. Multiplicación por la matriz Value&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">output&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">torch&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">matmul&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">attention_weights&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">v&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="k">return&lt;/span> &lt;span class="n">output&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">attention_weights&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Podemos ver que el $Q K^T / \sqrt{d_k}$ expresado matemáticamente, se implementa de manera intuitiva como &lt;code>torch.matmul(q, k.transpose(-2, -1)) / math.sqrt(d_k)&lt;/code>. Es un aspecto sumamente interesante del aprendizaje profundo que la teoría matemática pueda materializarse en unas pocas líneas de código con la ayuda de bibliotecas de optimización avanzadas.&lt;/p>
&lt;hr>
&lt;h1 id="conclusión-la-forma-de-la-inteligencia-vista-desde-las-fórmulas-matemáticas">Conclusión: La forma de la &amp;ldquo;Inteligencia&amp;rdquo; vista desde las fórmulas matemáticas
&lt;/h1>&lt;p>En este artículo, hemos desentrañado la estructura matemática profunda del modelo Transformer.&lt;/p>
&lt;p>El Embedding que asigna palabras a un espacio vectorial multidimensional, el Positional Encoding que expresa la información de posición como la composición de ondas trigonométricas, y el mecanismo de Self-Attention, un cálculo de producto punto de matrices nacido de una analogía con la recuperación de información. Cada uno de estos componentes no es más que una acumulación de matemáticas fundamentales como el álgebra lineal, el cálculo diferencial e integral, y la probabilidad y estadística.&lt;/p>
&lt;p>Sin embargo, cuando estas simples operaciones matriciales se apilan en numerosas capas y aprenden patrones de gigantescos conjuntos de datos a través de miles de millones o billones de parámetros, surge una &amp;ldquo;forma de inteligencia&amp;rdquo; que parece comprender nuestras &amp;ldquo;palabras&amp;rdquo;, realizar deducciones lógicas y, a veces, generar ideas creativas.&lt;/p>
&lt;p>Como sugiere el provocador título &amp;ldquo;Attention Is All You Need&amp;rdquo;, la belleza de esta arquitectura, que descarta los complejos procesamientos recurrentes o convolucionales y se especializa en el puro cálculo de &amp;ldquo;Atención&amp;rdquo; (grado de relación), reside precisamente en su simplicidad matemática.&lt;/p>
&lt;p>En el futuro, podrían surgir nuevas arquitecturas que superen a Transformer (como los State Space Models, por ejemplo, Mamba), pero el marco matemático de &amp;ldquo;comprensión del contexto mediante Attention&amp;rdquo; forjado por Transformer quedará grabado para siempre en la historia de la IA.&lt;/p>
&lt;p>Si en el futuro tienes la oportunidad de usar LLMs como ChatGPT o Claude, imagina los billones de multiplicaciones de matrices de $Q K^T$ por segundo y las funciones Softmax calculando probabilidades en segundo plano. Esto aumentará tu resolución sobre la tecnología y hará que el mundo de la IA te parezca aún más fascinante.&lt;/p>
&lt;h3 id="referencias">Referencias
&lt;/h3>&lt;ul>
&lt;li>Vaswani, A., et al. (2017). &amp;ldquo;Attention Is All You Need.&amp;rdquo; &lt;em>Advances in Neural Information Processing Systems&lt;/em>.&lt;/li>
&lt;li>Alammar, J. (2018). &amp;ldquo;The Illustrated Transformer.&amp;rdquo;&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>&lt;em>Este artículo fue escrito como una guía para aquellos que aprenden los fundamentos matemáticos del procesamiento de lenguaje natural y la inteligencia artificial. ¡Si tienes alguna pregunta o discusión, por favor háznoslo saber en la sección de comentarios!&lt;/em>&lt;/p></description></item><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>La Hipótesis de Riemann y la Distribución de los Números Primos: Su Profunda Relación con la Criptografía Moderna</title><link>http://kenji.blog/es/p/riemann-hypothesis-prime-distribution-cryptography/</link><pubDate>Fri, 11 Sep 2026 16:00:00 +0900</pubDate><guid>http://kenji.blog/es/p/riemann-hypothesis-prime-distribution-cryptography/</guid><description>&lt;img src="http://kenji.blog/p/riemann-hypothesis-prime-distribution-cryptography/img/eyecatch.jpg" alt="Featured image of post La Hipótesis de Riemann y la Distribución de los Números Primos: Su Profunda Relación con la Criptografía Moderna" />&lt;h1 id="1-introducción-el-misterio-cósmico-de-los-números-primos-y-la-hipótesis-de-riemann">1. Introducción: El misterio cósmico de los números primos y la Hipótesis de Riemann
&lt;/h1>&lt;p>Los &amp;ldquo;números primos&amp;rdquo; (Prime Numbers) son números naturales divisibles únicamente por 1 y por sí mismos, y también se les llama los &amp;ldquo;átomos&amp;rdquo; del mundo de las matemáticas. Esta secuencia que continúa con 2, 3, 5, 7, 11, 13&amp;hellip; parece a primera vista aparecer de manera caótica y aleatoria. Desde que el matemático de la antigua Grecia, Euclides, demostró que &amp;ldquo;los números primos son infinitos&amp;rdquo;, innumerables matemáticos han intentado desentrañar la regularidad oculta en esta disposición de números primos.&lt;/p>
&lt;p>Quien más se acercó a este misterio de los números primos fue el matemático alemán Bernhard Riemann, quien en 1859 propuso la &lt;strong>&amp;ldquo;Hipótesis de Riemann&amp;rdquo; (Riemann Hypothesis)&lt;/strong>. La Hipótesis de Riemann es uno de los problemas más importantes y no resueltos de las matemáticas modernas, y tiene una recompensa de 1 millón de dólares al ser uno de los Problemas del Milenio establecidos por el Instituto Clay de Matemáticas.&lt;/p>
&lt;p>A primera vista, un problema tan difícil de matemáticas puras relacionado con la distribución de los números primos puede parecer ajeno a nuestra vida diaria. Sin embargo, la seguridad de Internet que sustenta la infraestructura de la sociedad moderna, en particular &lt;strong>las tecnologías criptográficas modernas como la criptografía RSA y la criptografía de curva elíptica (ECC)&lt;/strong>, dependen profundamente de las propiedades de los números primos gigantes.&lt;/p>
&lt;p>En este artículo, emprenderemos un viaje matemático desde la distribución de los números primos, pasando por el Teorema de los Números Primos, la función zeta de Riemann, hasta llegar al núcleo de la Hipótesis de Riemann. Profundizaremos en detalle sobre cómo se relaciona con la criptografía moderna y qué sucedería en el mundo si se demostrara la Hipótesis de Riemann.&lt;/p>
&lt;hr>
&lt;h1 id="2-el-teorema-de-los-números-primos-y-la-distribución-de-los-números-primos-el-descubrimiento-de-gauss">2. El Teorema de los Números Primos y la distribución de los números primos: El descubrimiento de Gauss
&lt;/h1>&lt;p>Para comprender cómo se distribuyen los números primos, los matemáticos consideraron la &lt;strong>función contadora de números primos (Prime-counting function)&lt;/strong> $\pi(x)$, que representa &amp;ldquo;cuántos números primos existen menores o iguales a un cierto número $x$&amp;rdquo;.&lt;/p>
&lt;p>Por ejemplo:&lt;/p>
&lt;ul>
&lt;li>$\pi(10) = 4$ (2, 3, 5, 7)&lt;/li>
&lt;li>$\pi(100) = 25$&lt;/li>
&lt;li>$\pi(1000) = 168$&lt;/li>
&lt;/ul>
&lt;p>El matemático prodigio de 15 años Carl Friedrich Gauss calculó tablas masivas de números primos y descubrió que la frecuencia de aparición de los números primos disminuye en proporción inversa al logaritmo natural $\ln x$. En otras palabras, conjeturó que la probabilidad de encontrar un número primo cerca de un cierto número $x$ es aproximadamente $\frac{1}{\ln x}$.&lt;/p>
&lt;p>La expresión de esto utilizando integrales es la &lt;strong>integral logarítmica (Logarithmic integral)&lt;/strong> $\text{Li}(x)$.&lt;/p>
$$ \text{Li}(x) = \int_{2}^{x} \frac{dt}{\ln t} $$
&lt;p>La conjetura de Gauss fue demostrada de forma independiente en 1896 por Jacques Hadamard y Charles-Jean de La Vallée Poussin, y se estableció como el &lt;strong>Teorema de los Números Primos (Prime Number Theorem, PNT)&lt;/strong>.&lt;/p>
$$ \lim_{x \to \infty} \frac{\pi(x)}{\text{Li}(x)} = 1 $$
&lt;p>O se expresa de manera aproximada de la siguiente forma:&lt;/p>
$$ \pi(x) \sim \frac{x}{\ln x} $$
&lt;p>Gracias a este teorema, sabemos que, a nivel macroscópico, los números primos tienen una distribución muy suave y predecible. Sin embargo, a nivel microscópico, siempre existe un &amp;ldquo;error&amp;rdquo; o &amp;ldquo;fluctuación&amp;rdquo; entre $\pi(x)$ y $\text{Li}(x)$. La verdadera naturaleza de esta fluctuación es exactamente el mayor misterio que la Hipótesis de Riemann intenta desentrañar.&lt;/p>
&lt;hr>
&lt;h1 id="3-la-función-zeta-de-riemann-y-el-producto-de-euler">3. La función zeta de Riemann y el producto de Euler
&lt;/h1>&lt;p>El arma más poderosa para analizar la distribución de los números primos es la &lt;strong>función zeta de Riemann (Riemann Zeta Function)&lt;/strong>. Originalmente fue una serie infinita definida por Leonhard Euler para números reales $s > 1$.&lt;/p>
$$ \zeta(s) = \sum_{n=1}^\infty \frac{1}{n^s} = 1 + \frac{1}{2^s} + \frac{1}{3^s} + \frac{1}{4^s} + \dots $$
&lt;p>Uno de los mayores logros de Euler fue demostrar que esta serie infinita podía expresarse como un producto infinito sobre todos los números primos $p$. Este es el &lt;strong>producto de Euler (Euler Product Formula)&lt;/strong>.&lt;/p>
$$ \zeta(s) = \prod_{p \text{ prime}} \frac{1}{1 - p^{-s}} = \left( \frac{1}{1 - 2^{-s}} \right) \left( \frac{1}{1 - 3^{-s}} \right) \left( \frac{1}{1 - 5^{-s}} \right) \dots $$
&lt;p>Una comprensión intuitiva de la demostración es que si expandimos cada término del lado derecho como una serie geométrica y los multiplicamos, gracias al teorema fundamental de la aritmética (todo número natural se puede expresar de forma única como el producto de números primos), se reconstruye completamente la suma de los recíprocos de los números naturales en el lado izquierdo.&lt;/p>
&lt;p>&lt;strong>Esta única fórmula se convirtió en el puente que conecta el análisis matemático (series infinitas y funciones continuas) y la teoría de números (números primos y números discretos).&lt;/strong> Estudiar la función zeta es sinónimo de estudiar la distribución de los números primos.&lt;/p>
&lt;hr>
&lt;h1 id="4-continuación-analítica-y-la-extensión-al-plano-complejo">4. Continuación analítica y la extensión al plano complejo
&lt;/h1>&lt;p>La genialidad de Riemann radica en haber extendido la variable $s$ de $\zeta(s)$, que Euler había considerado únicamente para números reales, a &lt;strong>números complejos $s = \sigma + it$ ($\sigma$ es la parte real, $t$ es la parte imaginaria)&lt;/strong>.&lt;/p>
&lt;p>La serie infinita original converge solo para $\sigma > 1$, pero Riemann utilizó una técnica llamada &amp;ldquo;continuación analítica&amp;rdquo; (Analytic Continuation) para extender la definición de manera que $\zeta(s)$ tenga sentido en todo el plano complejo, excluyendo el polo en $s = 1$.&lt;/p>
&lt;p>Además, dedujo una hermosa ecuación funcional (Functional equation) que satisface la función zeta.&lt;/p>
$$ \zeta(s) = 2^s \pi^{s-1} \sin\left(\frac{\pi s}{2}\right) \Gamma(1-s) \zeta(1-s) $$
&lt;p>Donde $\Gamma(x)$ es la función gamma. A través de esta ecuación, podemos conocer las propiedades del semiplano izquierdo a partir de las propiedades del semiplano derecho.&lt;/p>
&lt;h3 id="ceros-de-la-función-zeta-zeros-of-the-zeta-function">Ceros de la Función Zeta (Zeros of the Zeta Function)
&lt;/h3>&lt;p>Los números complejos $s$ para los cuales el valor de la función zeta se vuelve 0 se denominan &amp;ldquo;ceros&amp;rdquo;.
A partir de la ecuación funcional, cuando $s$ es un número par negativo ($-2, -4, -6, \dots$), dado que $\sin(\pi s / 2)$ se vuelve 0, se tiene $\zeta(s) = 0$. Estos se conocen como &lt;strong>ceros triviales (Trivial zeros)&lt;/strong>.&lt;/p>
&lt;p>Sin embargo, lo que es importante para la distribución de los números primos son los otros ceros, es decir, los &lt;strong>ceros no triviales (Non-trivial zeros)&lt;/strong> que existen en la &amp;ldquo;banda crítica&amp;rdquo; (Critical strip) donde $0 \le \sigma \le 1$.&lt;/p>
&lt;hr>
&lt;h1 id="5-el-núcleo-de-la-hipótesis-de-riemann-y-la-fórmula-explícita">5. El núcleo de la Hipótesis de Riemann y la fórmula explícita
&lt;/h1>&lt;p>Riemann calculó unos pocos ceros y formuló una conjetura sorprendente. Esta es la &lt;strong>Hipótesis de Riemann&lt;/strong>.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Hipótesis de Riemann (Riemann Hypothesis)&lt;/strong>
Todos los ceros no triviales de la función zeta de Riemann $\zeta(s)$ se encuentran en la línea recta donde la parte real es igual a $1/2$ ($\text{Re}(s) = 1/2$).&lt;/p>
&lt;/blockquote>
&lt;p>A esta recta donde la parte real es 1/2 se le llama la &amp;ldquo;línea crítica&amp;rdquo; (Critical line).&lt;/p>
&lt;div class="mermaid">graph TD
A["Función zeta de Riemann ζ(s)"] --> B["Extensión al plano complejo mediante continuación analítica"]
B --> C["Ceros triviales (s = -2, -4, -6 ...)"]
B --> D["Ceros no triviales (0 &lt;= Re(s) &lt;= 1)"]
D --> E["Hipótesis de Riemann"]
E --> F["Todos los ceros no triviales están en Re(s) = 1/2"]
F --> G["Hacia la demostración del límite del término de error de la distribución de primos"]&lt;/div>
&lt;p>¿Por qué es tan importante la Hipótesis de Riemann? Porque los ceros de la función zeta determinan &lt;strong>completamente&lt;/strong> la distribución de los números primos.&lt;/p>
&lt;p>Riemann y el posterior matemático von Mangoldt derivaron una &amp;ldquo;fórmula explícita&amp;rdquo; (Explicit formula) que describe con precisión la distribución de los números primos. Utilizando la función de Chebyshev $\psi(x)$, se expresa de la siguiente manera:&lt;/p>
$$ \psi(x) = x - \sum_{\rho} \frac{x^\rho}{\rho} - \ln(2\pi) - \frac{1}{2}\ln(1 - x^{-2}) $$
&lt;p>Aquí, $\rho$ es la suma sobre todos los ceros no triviales de la función zeta.
El término principal es $x$ (que corresponde al Teorema de los Números Primos), y al sumar y restar los términos ondulatorios que dependen de los ceros $\rho$, se restaura la distribución precisa en forma de escalera de los números primos. Se puede decir que los ceros no triviales representan la &amp;ldquo;frecuencia (onda)&amp;rdquo; de la distribución de los números primos.&lt;/p>
&lt;p>Si la Hipótesis de Riemann es correcta y la parte real de todos los ceros no triviales $\rho$ es exactamente $1/2$, entonces el término de error del Teorema de los Números Primos se mantendrá dentro del rango mínimo teóricamente concebible.&lt;/p>
$$ |\pi(x) - \text{Li}(x)| \le \frac{1}{8\pi} \sqrt{x} \ln x \quad \text{for} \quad x \ge 2657 $$
&lt;p>En otras palabras, &lt;strong>si la Hipótesis de Riemann es verdadera, se demuestra que los números primos están distribuidos de la manera más &amp;ldquo;regular y hermosa&amp;rdquo; que podamos imaginar&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h1 id="6-la-relación-inseparable-entre-la-criptografía-moderna-y-los-números-primos">6. La relación inseparable entre la criptografía moderna y los números primos
&lt;/h1>&lt;p>Hasta aquí hemos estado en el profundo mundo de las matemáticas puras, pero las propiedades de estos números primos sostienen desde sus cimientos a la sociedad digital moderna. El principal representante de esto es la criptografía de clave pública, liderada por la &lt;strong>criptografía RSA&lt;/strong>.&lt;/p>
&lt;p>La seguridad de todas las comunicaciones, como los pagos con tarjeta de crédito en Internet, la transmisión de contraseñas y las firmas digitales de blockchain, depende de los &amp;ldquo;números primos&amp;rdquo;.&lt;/p>
&lt;h3 id="funcionamiento-de-la-criptografía-rsa">Funcionamiento de la criptografía RSA
&lt;/h3>&lt;p>La seguridad de la criptografía RSA se basa en el hecho matemático de que &amp;ldquo;la factorización en números primos de números compuestos de muchos dígitos es extremadamente difícil&amp;rdquo; (el problema de la factorización de enteros).&lt;/p>
&lt;ol>
&lt;li>
&lt;p>&lt;strong>Generación de claves&lt;/strong>:
Se eligen aleatoriamente dos números primos gigantes, $p$ y $q$ (por ejemplo, de 2048 bits cada uno).
Se multiplican para calcular $N = p \times q$. Este $N$ se convierte en parte de la clave pública.
Utilizando la función indicatriz de Euler $\phi(N) = (p-1)(q-1)$, se genera la clave privada $d$.&lt;/p>
$$ e \times d \equiv 1 \pmod{\phi(N)} $$
&lt;/li>
&lt;li>
&lt;p>&lt;strong>Cifrado y descifrado&lt;/strong>:
El texto plano $M$ se transforma en el texto cifrado $C$ utilizando la clave pública $e, N$.
&lt;/p>
$$ C \equiv M^e \pmod{N} $$
&lt;p>
Solo quien posee la clave privada $d$ puede descifrarlo.
&lt;/p>
$$ M \equiv C^d \pmod{N} $$
&lt;/li>
&lt;/ol>
&lt;div class="mermaid">graph LR
A["Texto plano (Plaintext)"] --> B["Cifrado con clave pública (e, N)"]
B --> C["Texto cifrado (Ciphertext)"]
C --> D["Descifrado con clave privada (d)"]
D --> E["Texto plano original"]
F["Atacante (Attacker)"] -- "Intenta la factorización prima de N" --> C
F -.-> G["Si p y q son desconocidos, d es incalculable"]&lt;/div>
&lt;p>Para romper la criptografía RSA, es necesario encontrar los números primos originales $p$ y $q$ a partir del enorme $N$ (factorización prima). Incluso utilizando los algoritmos convencionales actuales (como la criba general del cuerpo de números: GNFS, por sus siglas en inglés), factorizar un número de cientos de dígitos tomaría un tiempo que supera con creces la edad del universo, incluso utilizando supercomputadoras.&lt;/p>
&lt;hr>
&lt;h1 id="7-el-impacto-de-la-hipótesis-de-riemann-en-la-criptografía">7. El impacto de la Hipótesis de Riemann en la criptografía
&lt;/h1>&lt;p>Entonces, ¿cómo se cruzan la &amp;ldquo;Hipótesis de Riemann&amp;rdquo;, que se encuentra en la cima de las matemáticas puras, y la &amp;ldquo;criptografía&amp;rdquo;?&lt;/p>
&lt;h3 id="71-algoritmos-de-generación-de-números-primos-test-de-primalidad-y-la-hipótesis-generalizada-de-riemann-grh">7.1. Algoritmos de generación de números primos (test de primalidad) y la Hipótesis Generalizada de Riemann (GRH)
&lt;/h3>&lt;p>Para operar la criptografía RSA, primero es necesario generar los primos gigantes $p$ y $q$. Sin embargo, no es fácil determinar de manera segura y rápida si &amp;ldquo;un número es primo o no&amp;rdquo;.&lt;/p>
&lt;p>Actualmente, lo que se utiliza de forma práctica es un algoritmo probabilístico llamado el &lt;strong>test de primalidad de Miller-Rabin (Miller-Rabin primality test)&lt;/strong>. Este algoritmo es rápido, pero conlleva el riesgo de identificar incorrectamente un número compuesto como primo con una probabilidad extremadamente baja (un &amp;ldquo;pseudoprimo&amp;rdquo;).&lt;/p>
&lt;p>Sin embargo, si asumimos como cierta la &lt;strong>&amp;ldquo;Hipótesis Generalizada de Riemann&amp;rdquo; (Generalized Riemann Hypothesis, GRH)&lt;/strong>, que extiende la Hipótesis de Riemann a las funciones L de Dirichlet, la historia cambia drásticamente.
Si la GRH es verdadera, se garantiza matemáticamente un límite superior en el número de pruebas en el test de Miller-Rabin, elevándolo de un algoritmo probabilístico a un &lt;strong>&amp;ldquo;algoritmo determinista de tiempo polinómico&amp;rdquo;&lt;/strong> (este era un hecho crucial conocido incluso antes de que se descubriera el test de primalidad AKS).&lt;/p>
&lt;p>En otras palabras, la Hipótesis de Riemann (y sus generalizaciones) desempeña el papel de otorgar una garantía directa a la creación de los cimientos de la criptografía: &amp;ldquo;si es posible generar números primos gigantes a gran velocidad y con absoluta confianza&amp;rdquo;.&lt;/p>
&lt;h3 id="72-relación-con-los-algoritmos-de-factorización">7.2. Relación con los algoritmos de factorización
&lt;/h3>&lt;p>A la hora de evaluar la complejidad computacional de los algoritmos de quienes intentan descifrar la criptografía (como la criba general del cuerpo de números), también es indispensable el conocimiento sobre la distribución de los números primos. Muchos algoritmos de factorización dependen de la distribución de &amp;ldquo;números lisos&amp;rdquo; (Smooth numbers: números que solo tienen factores primos pequeños).&lt;/p>
&lt;p>Para evaluar rigurosamente con qué frecuencia aparecen los números lisos, se requiere una profunda comprensión de la distribución de los números primos, y es aquí donde también se emplean técnicas de teoría analítica de números que están directamente vinculadas a la función zeta y a la Hipótesis de Riemann. Si se demuestra la Hipótesis de Riemann y se determina completamente el error en la distribución de los números primos, también será posible identificar de manera más precisa los límites de rendimiento de los algoritmos de factorización en números primos.&lt;/p>
&lt;hr>
&lt;h1 id="8-si-se-demuestra-la-hipótesis-de-riemann-se-romperá-la-criptografía">8. Si se demuestra la Hipótesis de Riemann, ¿se romperá la criptografía?
&lt;/h1>&lt;p>A veces se cuenta como una leyenda urbana que &amp;ldquo;si se resuelve la Hipótesis de Riemann, la criptografía RSA colapsará en un instante&amp;rdquo;, pero &lt;strong>esto es matemáticamente inexacto&lt;/strong>.&lt;/p>
&lt;p>La demostración de la Hipótesis de Riemann en sí misma no produciría inmediatamente un algoritmo mágico que acelere drásticamente la factorización de números primos. Esto se debe a que la Hipótesis de Riemann es simplemente un teorema sobre la &amp;ldquo;regularidad de la distribución macroscópica&amp;rdquo; de los números primos, y no nos indica directamente qué números primos dividen a un número particular $N$ (propiedad local).&lt;/p>
&lt;p>Sin embargo, el impacto no es nulo.
Existe una probabilidad extremadamente alta de que, en el proceso de demostrar la Hipótesis de Riemann, se descubran &lt;strong>&amp;ldquo;nuevas herramientas matemáticas&amp;rdquo; y &amp;ldquo;métodos analíticos desconocidos&amp;rdquo;&lt;/strong>. Si observamos la historia, cuando se demostró el Último Teorema de Fermat o la Conjetura de Poincaré, las nuevas teorías desarrolladas en el proceso hicieron avanzar enormemente a todas las matemáticas.&lt;/p>
&lt;p>Si se establecen métodos desconocidos de geometría algebraica o geometría no conmutativa que puedan manipular por completo las propiedades de los ceros de la función zeta de Riemann, no se puede descartar la posibilidad de que conduzcan al descubrimiento de algoritmos de factorización innovadores (por ejemplo, algoritmos clásicos que reduzcan la complejidad computacional a tiempo polinómico). En ese sentido, los criptógrafos nunca pueden quitarle los ojos de encima al progreso de la Hipótesis de Riemann.&lt;/p>
&lt;h3 id="las-computadoras-cuánticas-y-el-algoritmo-de-shor">Las computadoras cuánticas y el algoritmo de Shor
&lt;/h3>&lt;p>Una amenaza más directa y realista para la criptografía no es la demostración de la Hipótesis de Riemann, sino &lt;strong>las computadoras cuánticas&lt;/strong>. El &amp;ldquo;algoritmo de Shor&amp;rdquo;, publicado por Peter Shor en 1994, demostró que si existiera una computadora cuántica con suficiente capacidad, la factorización en números primos podría resolverse en tiempo polinómico. Con esto, la criptografía RSA y la criptografía de curva elíptica quedarían fundamentalmente rotas.&lt;/p>
&lt;p>Actualmente, en todo el mundo se está promoviendo la transición hacia la &amp;ldquo;criptografía post-cuántica (Post-Quantum Cryptography, PQC)&amp;rdquo; (como la criptografía basada en retículos), que no puede ser descifrada ni siquiera por computadoras cuánticas. La tecnología criptográfica que depende de los números primos puede, en cierto sentido, estar llegando al final de su edad de oro, pero el valor matemático de los números primos en sí mismos nunca se perderá.&lt;/p>
&lt;hr>
&lt;h1 id="9-conclusión-la-intersección-entre-la-abstracción-matemática-y-la-sociedad-real">9. Conclusión: La intersección entre la abstracción matemática y la sociedad real
&lt;/h1>&lt;div class="mermaid">graph TD
A["Búsqueda en las matemáticas puras"] --> B["Resolución de la Hipótesis de Riemann"]
B --> C["Comprensión completa de la distribución de números primos"]
C --> D["Desarrollo espectacular de la teoría de números y geometría algebraica"]
D -.-> E["Posibilidad de nuevos algoritmos de factorización prima"]
E -.-> F["Actualización de la evaluación de seguridad de la criptografía"]
A --> G["Matemáticas aplicadas e informática"]
G --> H["Mejora en la eficiencia del test de primalidad y generación criptográfica"]
H --> F&lt;/div>
&lt;p>La incansable búsqueda sobre los números primos que continúa desde la antigua Grecia fue sublimada en una hermosa sinfonía sobre el plano complejo (los ceros de la función zeta) por un genio llamado Riemann. Y sorprendentemente, ese cristal de matemáticas puras y puristas se está aplicando, siglos después, como el escudo más fuerte para garantizar la seguridad de la sociedad de Internet.&lt;/p>
&lt;p>La Hipótesis de Riemann es una entidad que simboliza simultáneamente la &amp;ldquo;belleza abstracta&amp;rdquo; que poseen las matemáticas y su &amp;ldquo;asombrosa aplicabilidad al mundo físico y a la sociedad real&amp;rdquo;.&lt;/p>
&lt;p>Cuando esta gigantesca montaña matemática, a cuya cima aún nadie ha llegado, sea conquistada algún día, comprenderemos por completo la verdad cósmica de los números primos, y al mismo tiempo obtendremos una nueva perspectiva sobre los cimientos de la sociedad de la información. Aprender sobre criptografía es, de hecho, un viaje que recorre la historia de la sabiduría de la humanidad.&lt;/p></description></item></channel></rss>