<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Matemáticas, Criptografía Y Cuántica on kenji.blog</title><link>http://kenji.blog/es/categories/matem%C3%A1ticas-criptograf%C3%ADa-y-cu%C3%A1ntica/</link><description>Recent content in Matemáticas, Criptografía Y Cuántica on kenji.blog</description><generator>Hugo -- gohugo.io</generator><language>es</language><copyright>kenjinote</copyright><lastBuildDate>Sat, 05 Sep 2026 22:09:22 +0900</lastBuildDate><atom:link href="http://kenji.blog/es/categories/matem%C3%A1ticas-criptograf%C3%ADa-y-cu%C3%A1ntica/index.xml" rel="self" type="application/rss+xml"/><item><title>【PQC】La visión completa de la criptografía post-cuántica: La criptografía de próxima generación de la era de las computadoras cuánticas</title><link>http://kenji.blog/es/p/post-quantum-cryptography/</link><pubDate>Sat, 05 Sep 2026 22:09:22 +0900</pubDate><guid>http://kenji.blog/es/p/post-quantum-cryptography/</guid><description>&lt;img src="http://kenji.blog/p/post-quantum-cryptography/post_quantum_cryptography_1788613735417.jpg" alt="Featured image of post 【PQC】La visión completa de la criptografía post-cuántica: La criptografía de próxima generación de la era de las computadoras cuánticas" />&lt;h2 id="introducción-la-amenaza-de-las-computadoras-cuánticas-a-la-criptografía">Introducción: La &amp;ldquo;amenaza&amp;rdquo; de las computadoras cuánticas a la criptografía
&lt;/h2>&lt;p>En la actualidad, gran parte de nuestras comunicaciones diarias en Internet (como los pagos bancarios en línea, la navegación web (HTTPS), los mensajes en aplicaciones de mensajería, el blockchain y las transacciones de criptomonedas) están protegidas por una tecnología llamada &amp;ldquo;criptografía de clave pública&amp;rdquo;. Específicamente, algoritmos como RSA y la criptografía de curva elíptica (ECC) constituyen la base fundamental que sustenta la fiabilidad de nuestra sociedad digital moderna.&lt;/p>
&lt;p>Estos sistemas criptográficos basan su seguridad en problemas matemáticos difíciles, como la &amp;ldquo;factorización de enteros gigantes&amp;rdquo; y el &amp;ldquo;problema del logaritmo discreto&amp;rdquo;, cuya resolución tomaría un tiempo astronómico para las computadoras clásicas actuales (incluyendo las supercomputadoras). Sin embargo, cuando se materialice el rápido progreso reciente y las &lt;strong>&amp;ldquo;computadoras cuánticas&amp;rdquo;&lt;/strong> se vuelvan prácticas, esta premisa se verá alterada desde sus cimientos.&lt;/p>
&lt;p>En 1994, Peter Shor publicó el &amp;ldquo;Algoritmo de Shor&amp;rdquo;, demostrando matemáticamente que una computadora cuántica con suficiente capacidad puede resolver la factorización de enteros y los problemas de logaritmos discretos en muy poco tiempo. Esto significa el riesgo (conocido como Y2Q: Years to Quantum, o el problema Q-Day) de que toda la comunicación cifrada que protege la Internet actual sea descifrada en el futuro.&lt;/p>
&lt;p>Aún más grave es la existencia de una técnica de ataque llamada &amp;ldquo;Cosechar ahora, descifrar después&amp;rdquo; (Harvest Now, Decrypt Later), en la cual los datos se roban y almacenan hoy para descifrarlos en el futuro cuando la tecnología lo permita. Los datos que requieren mantenerse confidenciales durante décadas, como la información clasificada del estado, la propiedad intelectual corporativa y la información biométrica personal, ya podrían ser objeto de robo con la premisa de ser descifrados en el futuro.&lt;/p>
&lt;p>Para hacer frente a esta crisis sin precedentes, criptógrafos e institutos de investigación de todo el mundo están aunando esfuerzos para desarrollar una tecnología criptográfica de próxima generación que pueda mantener la seguridad incluso contra ataques de computadoras cuánticas: la &lt;strong>Criptografía Post-Cuántica (PQC: Post-Quantum Cryptography)&lt;/strong>. En este artículo, explicaremos en detalle desde los fundamentos de la PQC hasta cómo funcionan sus principales algoritmos, así como las últimas tendencias de estandarización global impulsadas por el Instituto Nacional de Estándares y Tecnología de los Estados Unidos (NIST).&lt;/p>
&lt;hr>
&lt;h2 id="qué-es-la-criptografía-post-cuántica-pqc">¿Qué es la Criptografía Post-Cuántica (PQC)?
&lt;/h2>&lt;p>La Criptografía Post-Cuántica (PQC) es un término general para los algoritmos criptográficos diseñados para funcionar en las computadoras clásicas existentes y, al mismo tiempo, ser resistentes a ataques de las computadoras cuánticas a gran escala que surgirán en el futuro (como el algoritmo de Shor).&lt;/p>
&lt;p>A menudo se confunde con tecnologías como la &amp;ldquo;Criptografía Cuántica&amp;rdquo; y la &amp;ldquo;Distribución Cuántica de Claves (QKD)&amp;rdquo;, pero estos son enfoques completamente diferentes. La Criptografía Cuántica (QKD) es una tecnología basada en hardware que utiliza las leyes de la física cuántica (como la propiedad de que la observación altera el estado) para hacer que las escuchas clandestinas en la ruta de comunicación sean físicamente imposibles. Requiere fibra óptica dedicada y equipo especial, lo que presenta desafíos en términos de costos de implementación y limitaciones de distancia.&lt;/p>
&lt;p>Por otro lado, &lt;strong>la PQC es una tecnología criptográfica basada en software fundamentada puramente en &amp;ldquo;matemáticas&amp;rdquo;&lt;/strong>. Por lo tanto, puede incorporarse como actualizaciones de software en la infraestructura de Internet existente, servidores, teléfonos inteligentes, navegadores, etc., lo que la hace altamente aplicable en el mundo real. Las empresas de TI y las agencias gubernamentales de todo el mundo consideran urgente reemplazar (migrar) los actuales RSA y ECC por esta PQC.&lt;/p>
&lt;hr>
&lt;h2 id="los-4-enfoques-matemáticos-principales-que-sustentan-la-pqc">Los 4 enfoques matemáticos principales que sustentan la PQC
&lt;/h2>&lt;p>Se han propuesto varios algoritmos de PQC basados en problemas matemáticos difíciles de resolver de manera eficiente incluso con computadoras cuánticas (como los problemas NP-difíciles). Aquí presentamos las 4 categorías principales que dominan actualmente.&lt;/p>
&lt;h3 id="enfoques-principales-de-la-criptografía-post-cuántica-pqc">Enfoques principales de la Criptografía Post-Cuántica (PQC)
&lt;/h3>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-gdscript3" data-lang="gdscript3">&lt;span class="line">&lt;span class="cl">&lt;span class="n">graph&lt;/span> &lt;span class="n">LR&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Criptografía&lt;/span> &lt;span class="n">Post&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">Cuántica&lt;/span> &lt;span class="n">PQC&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Criptografía&lt;/span> &lt;span class="n">basada&lt;/span> &lt;span class="n">en&lt;/span> &lt;span class="n">retículos&lt;/span> &lt;span class="n">Lattice&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">H&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Criptografía&lt;/span> &lt;span class="n">basada&lt;/span> &lt;span class="n">en&lt;/span> &lt;span class="nb">hash&lt;/span> &lt;span class="n">Hash&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">M&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Criptografía&lt;/span> &lt;span class="n">multivariante&lt;/span> &lt;span class="n">Multivariate&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">PQC&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">C&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="n">Criptografía&lt;/span> &lt;span class="n">basada&lt;/span> &lt;span class="n">en&lt;/span> &lt;span class="n">códigos&lt;/span> &lt;span class="n">Code&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">based&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="n">L&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">203&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ML&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">KEM&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">L&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">L2&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">204&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ML&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">DSA&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="n">H&lt;/span> &lt;span class="o">--&amp;gt;&lt;/span> &lt;span class="n">H1&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">FIPS&lt;/span> &lt;span class="mi">205&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">SLH&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="n">DSA&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="n">style&lt;/span> &lt;span class="n">PQC&lt;/span> &lt;span class="n">fill&lt;/span>&lt;span class="p">:&lt;/span>&lt;span class="c1">#f9f,stroke:#333,stroke-width:2px&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="1-criptografía-basada-en-retículos-lattice-based-cryptography">1. Criptografía basada en retículos (Lattice-based Cryptography)
&lt;/h3>&lt;p>Actualmente, la criptografía basada en retículos es la más prometedora y predominante en el campo de la PQC. Su seguridad se fundamenta en problemas relacionados con puntos dispuestos regularmente (puntos de retículo) en espacios multidimensionales. Problemas famosos incluyen el &amp;ldquo;Problema del Vector Más Corto (SVP)&amp;rdquo; y el &amp;ldquo;Aprendizaje con Errores (LWE)&amp;rdquo;.&lt;/p>
&lt;p>&lt;strong>Resumen del funcionamiento:&lt;/strong>
Imagine innumerables puntos dispuestos como una cuadrícula (retículo) en un espacio de altísima dimensión (cientos a miles de dimensiones). Encontrar un punto de retículo específico es fácil en 2 o 3 dimensiones, pero a cientos de dimensiones, no se ha descubierto un algoritmo eficiente para encontrarlo, ni para computadoras clásicas ni cuánticas. El problema LWE, en particular, aprovecha la propiedad de que &amp;ldquo;si se agrega intencionalmente un pequeño &amp;lsquo;ruido (error)&amp;rsquo; a un sistema de ecuaciones lineales, se vuelve drásticamente más difícil adivinar las variables originales&amp;rdquo;.&lt;/p>
&lt;p>&lt;strong>Ventajas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Aplicable tanto a la encapsulación de claves (KEM) como a firmas digitales.&lt;/li>
&lt;li>Velocidad de procesamiento extremadamente rápida (a veces más rápida que RSA y ECC).&lt;/li>
&lt;li>Buen equilibrio entre el tamaño de la clave y el tamaño del texto cifrado.&lt;/li>
&lt;/ul>
&lt;p>Muchos de los algoritmos actualmente estandarizados por el NIST (como ML-KEM y ML-DSA) utilizan esta criptografía basada en retículos.&lt;/p>
&lt;h3 id="2-criptografía-basada-en-hash-hash-based-cryptography">2. Criptografía basada en hash (Hash-based Cryptography)
&lt;/h3>&lt;p>La criptografía basada en hash es un algoritmo PQC especializado en firmas digitales. La base de su seguridad depende únicamente de la resistencia a colisiones y la unidireccionalidad de &amp;ldquo;funciones hash criptográficas&amp;rdquo; seguras como SHA-2 y SHA-3.&lt;/p>
&lt;p>&lt;strong>Resumen del funcionamiento:&lt;/strong>
Comienza con un esquema de firma de un solo uso llamado &amp;ldquo;Firma de Lamport&amp;rdquo;. Al agrupar estas firmas utilizando una estructura de datos en forma de árbol llamada &amp;ldquo;Árbol de Merkle&amp;rdquo;, se permiten múltiples firmas con un solo par de claves.&lt;/p>
&lt;p>&lt;strong>Ventajas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>La base de seguridad es extremadamente robusta; hay una fuerte prueba de que &amp;ldquo;es seguro mientras la función hash sea segura&amp;rdquo;.&lt;/li>
&lt;li>Al depender poco de una estructura matemática, el riesgo de que se descubra un método de descifrado imprevisto es bajo.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Desventajas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Solo se puede usar para firmas digitales, no para el establecimiento de claves (KEM).&lt;/li>
&lt;li>El tamaño de la firma tiende a ser grande.&lt;/li>
&lt;li>Existen variantes &amp;ldquo;con estado&amp;rdquo; (stateful) y &amp;ldquo;sin estado&amp;rdquo; (stateless). Las variantes con estado (como XMSS) requieren una gestión estricta del número de usos de la clave, lo que dificulta su implementación.&lt;/li>
&lt;/ul>
&lt;p>NIST ha estandarizado &amp;ldquo;SLH-DSA (anteriormente SPHINCS+)&amp;rdquo; como una firma basada en hash sin estado.&lt;/p>
&lt;h3 id="3-criptografía-multivariante-multivariate-cryptography">3. Criptografía multivariante (Multivariate Cryptography)
&lt;/h3>&lt;p>La criptografía de polinomios multivariantes basa su seguridad en la dificultad de resolver un sistema de ecuaciones polinómicas cuadráticas simultáneas con múltiples variables (el problema MQ). Se sabe que este problema es NP-difícil.&lt;/p>
&lt;p>&lt;strong>Resumen del funcionamiento:&lt;/strong>
El remitente crea un texto cifrado (firma) sustituyendo el texto sin formato (o el valor hash) en una compleja ecuación con múltiples variables proporcionada como clave pública. El destinatario legítimo posee &amp;ldquo;información oculta (una puerta trasera) que transforma la estructura de la ecuación en una forma fácil de resolver&amp;rdquo; como su clave privada, y la utiliza para descifrar (o verificar la firma).&lt;/p>
&lt;p>&lt;strong>Ventajas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>El tamaño de la firma es muy pequeño.&lt;/li>
&lt;li>La velocidad de verificación de la firma es extremadamente rápida. Adecuado para dispositivos IoT con recursos limitados.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Desventajas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>El tamaño de la clave pública es muy grande (puede ser de decenas a cientos de kilobytes).&lt;/li>
&lt;li>En el pasado, algoritmos prominentes (como Rainbow) han sido quebrados por ataques clásicos, lo que dificulta establecer la confianza en su seguridad en comparación con otros métodos.&lt;/li>
&lt;/ul>
&lt;h3 id="4-criptografía-basada-en-códigos-code-based-cryptography">4. Criptografía basada en códigos (Code-based Cryptography)
&lt;/h3>&lt;p>La criptografía basada en códigos aplica a la criptografía la teoría de los &amp;ldquo;códigos de corrección de errores&amp;rdquo; utilizados para corregir errores en las rutas de comunicación. El &amp;ldquo;criptosistema McEliece&amp;rdquo;, propuesto en 1978, es el más famoso y uno de los más antiguos de la PQC.&lt;/p>
&lt;p>&lt;strong>Resumen del funcionamiento:&lt;/strong>
El remitente codifica el texto sin formato utilizando la clave pública del destinatario (una matriz generadora de un código de corrección de errores con una estructura oculta), agrega un error intencional (ruido) y lo envía. El destinatario elimina el error usando la clave privada y extrae el texto sin formato. El atacante debe corregir el error de un código aparentemente aleatorio sin conocer su estructura, lo que se conoce como el &amp;ldquo;problema general de decodificación de síndrome&amp;rdquo;, probado como NP-difícil.&lt;/p>
&lt;p>&lt;strong>Ventajas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>Tras más de 40 años de estudio exhaustivo, no se han encontrado ataques efectivos, lo que le otorga una altísima confianza en su seguridad.&lt;/li>
&lt;li>Procesamiento de cifrado y descifrado rápido.&lt;/li>
&lt;/ul>
&lt;p>&lt;strong>Desventajas:&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>El tamaño de la clave pública es gigantesco (puede ser de varios megabytes). Por lo tanto, es difícil de utilizar en entornos con ancho de banda de comunicación o memoria limitados (como en el handshake de TLS).&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="últimas-tendencias-en-la-estandarización-de-pqc-por-parte-del-nist">Últimas tendencias en la estandarización de PQC por parte del NIST
&lt;/h2>&lt;p>El Instituto Nacional de Estándares y Tecnología de los Estados Unidos (NIST) comenzó en 2016 a solicitar algoritmos criptográficos post-cuánticos de próxima generación en todo el mundo, llevando a cabo evaluaciones rigurosas y múltiples rondas durante varios años.&lt;/p>
&lt;p>En 2024, el NIST anunció finalmente los siguientes tres algoritmos como Estándares Federales de Procesamiento de Información (FIPS) oficiales. Esto proporciona una base sólida para que las organizaciones de todo el mundo comiencen a implementarlos en entornos de producción.&lt;/p>
&lt;h3 id="estándares-fips-promulgados-2024">Estándares FIPS Promulgados (2024)
&lt;/h3>&lt;ol>
&lt;li>
&lt;p>&lt;strong>FIPS 203: ML-KEM (anteriormente CRYSTALS-Kyber)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Uso:&lt;/strong> Mecanismo de encapsulación de claves (KEM) / Cifrado e intercambio de claves&lt;/li>
&lt;li>&lt;strong>Tecnología base:&lt;/strong> Criptografía de retículos (Module-LWE)&lt;/li>
&lt;li>&lt;strong>Características:&lt;/strong> Excelente equilibrio entre tamaño de clave y velocidad. Actuará como el intercambio de claves PQC predeterminado en aplicaciones comunes de Internet, como la comunicación web (TLS) y las aplicaciones de mensajería segura.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FIPS 204: ML-DSA (anteriormente CRYSTALS-Dilithium)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Uso:&lt;/strong> Firma digital&lt;/li>
&lt;li>&lt;strong>Tecnología base:&lt;/strong> Criptografía de retículos (Module-LWE)&lt;/li>
&lt;li>&lt;strong>Características:&lt;/strong> El estándar principal para firmas digitales. Permite un procesamiento eficiente y se convertirá en el nuevo estándar para todos los propósitos de firmas electrónicas, como la firma de software y la autenticación de documentos.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>&lt;strong>FIPS 205: SLH-DSA (anteriormente SPHINCS+)&lt;/strong>&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Uso:&lt;/strong> Firma digital&lt;/li>
&lt;li>&lt;strong>Tecnología base:&lt;/strong> Criptografía basada en hash (sin estado)&lt;/li>
&lt;li>&lt;strong>Características:&lt;/strong> Juega un papel crucial al actuar como respaldo en caso de que se descubran vulnerabilidades en la criptografía de retículos en el futuro. Aunque el tamaño de la firma es mayor, es adecuado para aplicaciones que requieren confiabilidad a largo plazo.&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;h3 id="en-busca-de-una-mayor-diversidad">En busca de una mayor diversidad
&lt;/h3>&lt;p>Si bien el NIST ha completado su proceso de estandarización inicial, continúa explorando más algoritmos. Debido a que el estándar está fuertemente sesgado hacia la &amp;ldquo;criptografía de retículos&amp;rdquo;, se hace hincapié en asegurar la &lt;strong>&amp;ldquo;Diversidad Criptográfica&amp;rdquo; (Crypto Diversity)&lt;/strong>. Se están evaluando métodos como la criptografía basada en códigos como estándares de respaldo para el intercambio de claves, lo que fortalecerá aún más la base de la PQC en el futuro.&lt;/p>
&lt;hr>
&lt;h2 id="escenarios-y-desafíos-en-la-transición-a-pqc-la-importancia-de-la-agilidad-criptográfica">Escenarios y desafíos en la transición a PQC: La importancia de la &amp;ldquo;Agilidad Criptográfica&amp;rdquo;
&lt;/h2>&lt;p>Con el lanzamiento de las normas oficiales por parte del NIST, agencias gubernamentales, instituciones financieras y empresas tecnológicas de todo el mundo intensificarán su transición (migración) del RSA/ECC existente a PQC. Las pautas de la NSA (Agencia de Seguridad Nacional de EE. UU.) y otros también recomiendan completar esta transición de manera temprana.&lt;/p>
&lt;h3 id="adopción-de-un-enfoque-híbrido">Adopción de un enfoque híbrido
&lt;/h3>&lt;p>Como los algoritmos PQC son nuevos, no han superado la &amp;ldquo;prueba del tiempo&amp;rdquo; en comparación con la criptografía clásica. Considerando el riesgo de posibles errores de implementación o el descubrimiento de nuevos métodos de ataque, se recomienda un &lt;strong>&amp;ldquo;enfoque híbrido&amp;rdquo;&lt;/strong> durante el período de transición. Esto implica combinar criptografía existente probada (por ejemplo, ECDHE) con la nueva PQC (por ejemplo, ML-KEM) para el intercambio de claves. Actualmente, los principales navegadores y servicios en la nube están avanzando rápidamente en implementaciones de prueba de este método.&lt;/p>
&lt;h3 id="lograr-la-agilidad-criptográfica-crypto-agility">Lograr la Agilidad Criptográfica (Crypto-Agility)
&lt;/h3>&lt;p>Lo que las empresas y los desarrolladores de sistemas deben tener más presente en el futuro es asegurar la &lt;strong>&amp;ldquo;Agilidad Criptográfica&amp;rdquo; (Crypto-Agility)&lt;/strong>. Es indispensable diseñar una arquitectura flexible que permita reemplazar y actualizar rápidamente los algoritmos criptográficos sin detener el sistema, en caso de que se descubran fallos en los algoritmos en el futuro o surjan nuevos estándares.&lt;/p>
&lt;p>El primer y crucial paso para la transición a PQC es la creación de un Inventario Criptográfico (CBOM: Cryptography Bill of Materials), que permita saber exactamente &amp;ldquo;dónde&amp;rdquo;, &amp;ldquo;qué criptografía&amp;rdquo; y &amp;ldquo;con qué propósito&amp;rdquo; se está utilizando dentro de los sistemas de la empresa.&lt;/p>
&lt;hr>
&lt;h2 id="conclusión-preparándose-para-el-día-q-q-day">Conclusión: Preparándose para el &amp;ldquo;Día Q&amp;rdquo; (Q-Day)
&lt;/h2>&lt;p>Si bien la evolución de las computadoras cuánticas traerá enormes beneficios a la humanidad, también representa la mayor amenaza para la seguridad criptográfica, que es la columna vertebral de nuestra sociedad digital actual. La Criptografía Post-Cuántica (PQC) ya no es un &amp;ldquo;tema de investigación en un futuro lejano&amp;rdquo;. Con el hito de la publicación de los estándares FIPS por parte del NIST, la PQC ha entrado en una fase de &amp;ldquo;implementación y transición&amp;rdquo; a gran escala.&lt;/p>
&lt;p>Teniendo en cuenta la amenaza de &amp;ldquo;Cosechar ahora, descifrar después&amp;rdquo;, migrar a PQC es una prioridad absoluta que todas las organizaciones que manejan datos altamente confidenciales deben abordar &amp;ldquo;ahora mismo&amp;rdquo;. Comprendiendo profundamente las tecnologías criptográficas de próxima generación y aumentando la agilidad criptográfica de los sistemas, preparémonos para superar de forma segura la inminente era de las computadoras cuánticas.&lt;/p></description></item><item><title>¿Realmente las computadoras cuánticas destruirán el cifrado RSA? ~ El algoritmo de Shor y el estado actual ~</title><link>http://kenji.blog/es/p/shors-algorithm-and-rsa-breaking/</link><pubDate>Sat, 05 Sep 2026 22:09:21 +0900</pubDate><guid>http://kenji.blog/es/p/shors-algorithm-and-rsa-breaking/</guid><description>&lt;img src="http://kenji.blog/p/shors-algorithm-and-rsa-breaking/quantum_breaking_rsa_1788613722990.jpg" alt="Featured image of post ¿Realmente las computadoras cuánticas destruirán el cifrado RSA? ~ El algoritmo de Shor y el estado actual ~" />&lt;h2 id="introducción-la-intersección-entre-la-criptografía-y-la-computación-cuántica">Introducción: La intersección entre la criptografía y la computación cuántica
&lt;/h2>&lt;p>En la sociedad de Internet moderna, la base para proteger el secreto de las comunicaciones es la &amp;ldquo;criptografía de clave pública&amp;rdquo;. Entre ellas, un representante típico es el &amp;ldquo;cifrado RSA&amp;rdquo;, desarrollado en 1977 por Ron Rivest, Adi Shamir y Leonard Adleman. Desde los pagos en compras en línea que utilizamos todos los días, la navegación de sitios web (HTTPS) hasta el envío y recepción de correos electrónicos, el cifrado RSA funciona como el corazón de la infraestructura de Internet.&lt;/p>
&lt;p>Sin embargo, con la llegada de las &amp;ldquo;computadoras cuánticas&amp;rdquo;, se ha señalado la posibilidad de que esta seguridad se vea socavada desde sus cimientos. A veces, en los medios de comunicación aparecen titulares sensacionalistas como: &amp;ldquo;Si se perfecciona la computadora cuántica, las contraseñas y códigos de todo el mundo serán descifrados en segundos&amp;rdquo;. Pero, ¿es esto realmente cierto?&lt;/p>
&lt;p>En este artículo, profundizaremos en los mecanismos del GNFS (Criba General del Cuerpo de Números), que es un método clásico de criptoanálisis, y el &amp;ldquo;Algoritmo de Shor&amp;rdquo; (Shor&amp;rsquo;s Algorithm), que es la versión definitiva del algoritmo de descifrado utilizando computadoras cuánticas. Explicaremos de manera sencilla conceptos avanzados como la transformada cuántica de Fourier y el hallazgo de períodos, y examinaremos en detalle el estado actual del hardware cuántico en la era actual NISQ (Noisy Intermediate-Scale Quantum) y los obstáculos necesarios para romper realmente RSA-2048.&lt;/p>
&lt;hr>
&lt;h2 id="la-base-del-cifrado-rsa-la-dificultad-de-la-factorización-de-enteros">La base del cifrado RSA: La dificultad de la factorización de enteros
&lt;/h2>&lt;p>La seguridad del cifrado RSA depende de una asimetría extremadamente simple en matemáticas. Es el hecho de que &amp;ldquo;multiplicar dos números primos gigantescos es fácil, pero encontrar (factorizar) los dos números primos originales a partir del resultado multiplicado (número compuesto) es extremadamente difícil&amp;rdquo;.&lt;/p>
&lt;p>Por ejemplo, supongamos que hay dos números primos $ p = 61 $ y $ q = 53 $. Calcular esta multiplicación $ N = p \times q = 3233 $ es instantáneo. Sin embargo, si solo se da el número &amp;ldquo;3233&amp;rdquo; y se nos pide resolver &amp;ldquo;¿de qué números primos es esta la multiplicación?&amp;rdquo;, a medida que el número crece, la cantidad de cálculo explota exponencialmente.&lt;/p>
&lt;p>En el RSA-2048, que es la corriente principal en la actualidad, la longitud de la clave es de 2048 bits, es decir, se utiliza un gigantesco número compuesto $ N $ de unos 617 dígitos decimales. Si este $ N $ pudiera ser factorizado, el cifrado estaría prácticamente descifrado.&lt;/p>
&lt;h3 id="el-desafío-de-las-computadoras-clásicas-gnfs-criba-general-del-cuerpo-de-números">El desafío de las computadoras clásicas: GNFS (Criba General del Cuerpo de Números)
&lt;/h3>&lt;p>Para resolver el problema de la factorización, matemáticos y criptógrafos han desarrollado varios algoritmos a lo largo de los años. Entre ellos, el que actualmente se considera el más rápido en computadoras clásicas es la &lt;strong>Criba General del Cuerpo de Números (GNFS: General Number Field Sieve)&lt;/strong>.&lt;/p>
&lt;p>GNFS es un método para factorizar un número gigantesco $ N $ extendiendo el cálculo en el anillo de enteros a un cuerpo de números algebraicos más abstracto (Number Field) para su análisis. El flujo general es el siguiente:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Selección de polinomios&lt;/strong> : Encontrar un polinomio $ f(x) $ con el grado y los coeficientes adecuados que tenga a $ N $ como raíz.&lt;/li>
&lt;li>&lt;strong>Recopilación de datos (cribado)&lt;/strong> : Buscar en el cuerpo de los números racionales y en el cuerpo algebraico una gran cantidad de pares de números que se puedan descomponer en números primos pequeños (números suaves, Smooth numbers). Este proceso se llama &amp;ldquo;cribado&amp;rdquo; y es la parte que requiere más tiempo.&lt;/li>
&lt;li>&lt;strong>Generación y reducción de matrices&lt;/strong> : Generar una matriz dispersa gigante (una matriz donde la mayoría de los componentes son 0) basada en las relaciones recopiladas, y usar métodos de álgebra lineal (como el método de Block-Lanczos) para encontrar una solución.&lt;/li>
&lt;li>&lt;strong>Cálculo de raíces cuadradas&lt;/strong> : Finalmente, calcular la raíz cuadrada sobre el cuerpo algebraico para derivar los factores (factores primos) de $ N $.&lt;/li>
&lt;/ol>
&lt;p>La complejidad computacional de GNFS se evalúa asintóticamente como $ O(\exp((\sqrt[3]{\frac{64}{9}} + o(1)) (\log N)^{\frac{1}{3}} (\log \log N)^{\frac{2}{3}})) $. Esto se llama complejidad temporal &amp;ldquo;subexponencial&amp;rdquo; (Sub-exponential). Aunque es más rápido que el tiempo exponencial, es mucho más lento que el tiempo polinómico (Polynomial time).&lt;/p>
&lt;p>De hecho, en 2020, un equipo de investigación internacional logró factorizar el RSA-250 (un número compuesto de 829 bits y 250 dígitos) utilizando GNFS. Este cálculo consumió un enorme tiempo de computación de aproximadamente 2700 CPU core-años, reuniendo recursos informáticos de todo el mundo. Sin embargo, cuando se trata de 2048 bits, se menciona que la cantidad de cálculo necesaria aumentaría a billones de veces la edad del universo, por lo que no importa cuántas supercomputadoras actuales funcionen en paralelo, es imposible descifrarlo en un tiempo realista utilizando métodos clásicos.&lt;/p>
&lt;hr>
&lt;h2 id="la-carta-de-triunfo-de-la-computadora-cuántica-el-algoritmo-de-shor">La carta de triunfo de la computadora cuántica: El algoritmo de Shor
&lt;/h2>&lt;p>Aquí es donde entra en juego el &amp;ldquo;Algoritmo de Shor&amp;rdquo;, publicado por Peter Shor en 1994. Este algoritmo fue revolucionario al poder resolver el problema de la factorización de enteros en una computadora cuántica en &lt;strong>tiempo polinómico&lt;/strong> ( $ O((\log N)^3) $ ). La diferencia entre el tiempo subexponencial y el tiempo polinómico es decisiva, lo que significa que, en teoría, el uso de una computadora cuántica destruiría por completo el cifrado RSA.&lt;/p>
&lt;h3 id="flujo-general-del-algoritmo-de-shor">Flujo general del algoritmo de Shor
&lt;/h3>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">graph TD
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> A[Ingresar el número N a factorizar] --&amp;gt; B[Seleccionar un número entero aleatorio a]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> B --&amp;gt; C{Máximo común divisor&amp;lt;br&amp;gt;de a y N}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|Mayor que 1| D[¡Afortunadamente encontramos un factor primo!]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> C --&amp;gt;|1 Coprimos| E[Turno de la computadora cuántica]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> E --&amp;gt; F[Encontrar el período r de la función&amp;lt;br&amp;gt;f_x = a^x mod N mediante&amp;lt;br&amp;gt;la transformada cuántica de Fourier]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> F --&amp;gt; G{¿Es el período r par y&amp;lt;br&amp;gt;a^r/2 ≢ -1 mod N?}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt;|Sí| H[Calcular el máximo común divisor gcd_a^r/2 ± 1, N]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> H --&amp;gt; I((¡Factorización exitosa!))
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> G --&amp;gt;|No| B
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>El algoritmo de Shor no resuelve directamente el problema de la factorización, sino que utiliza teoremas de la teoría de números para convertirlo en otro problema llamado &amp;ldquo;Problema de hallazgo de períodos&amp;rdquo; (Period Finding Problem), y aborda resolverlo rápidamente aprovechando las características de las computadoras cuánticas.&lt;/p>
&lt;h3 id="paso-1-reducción-de-la-factorización-al-problema-de-hallazgo-de-períodos-procesamiento-clásico">Paso 1: Reducción de la factorización al problema de hallazgo de períodos (Procesamiento clásico)
&lt;/h3>&lt;p>El primer paso del algoritmo se realiza en una computadora clásica.
Para el número $ N $ que queremos factorizar, elegimos un entero aleatorio $ a $ ( $ 1 &lt; a &lt; N $ ) que sea coprimo con $ N $ (su máximo común divisor es 1). Si, por casualidad, el máximo común divisor no es 1, entonces el divisor común encontrado en ese punto es un factor primo de $ N $ y el descifrado está completo, pero la probabilidad es extremadamente baja.&lt;/p>
&lt;p>Luego, consideramos la siguiente secuencia de ecuaciones modulares:
$ f(x) = a^x \pmod N $&lt;/p>
&lt;p>Si sustituimos $ x = 1, 2, 3, \dots $ en esta función $ f(x) $, los valores parecen ser aleatorios, pero dado que estamos calculando dentro de un rango finito, inevitablemente volverá al valor original en algún punto y repetirá la misma secuencia de números. A este período de repetición lo llamamos $ r $. Es decir,
$ a^r \equiv 1 \pmod N $
El problema de encontrar el entero positivo más pequeño $ r $ que cumpla con esto, es el &amp;ldquo;Problema de hallazgo de períodos&amp;rdquo;.&lt;/p>
&lt;p>Si se encuentra este período $ r $, y si $ r $ es par, entonces $ a^r - 1 \equiv 0 \pmod N $, y usando la fórmula de factorización se puede transformar en:
$ (a^{r/2} - 1)(a^{r/2} + 1) \equiv 0 \pmod N $
A partir de aquí, al calcular el máximo común divisor de $ N $ y $ a^{r/2} \pm 1 $ usando el algoritmo de Euclides, se puede obtener un factor primo de $ N $ con una probabilidad extremadamente alta.&lt;/p>
&lt;p>Para encontrar el período $ r $ en una computadora clásica, en última instancia, se requieren pasos exponenciales y no se puede acelerar. Sin embargo, una computadora cuántica puede encontrar este período $ r $ en un instante (en tiempo polinómico).&lt;/p>
&lt;h3 id="paso-2-preparación-del-estado-cuántico-y-superposición">Paso 2: Preparación del estado cuántico y superposición
&lt;/h3>&lt;p>A partir de aquí es el turno de la computadora cuántica.
Las computadoras cuánticas utilizan &amp;ldquo;cúbits&amp;rdquo; (Qubits) que pueden tener los estados &amp;ldquo;0&amp;rdquo; y &amp;ldquo;1&amp;rdquo; simultáneamente. En el algoritmo de Shor, se preparan dos registros: un registro para almacenar la entrada (el primer registro) y un registro para almacenar los resultados del cálculo (el segundo registro).&lt;/p>
&lt;p>Primero, se aplica una operación de puerta cuántica llamada Puerta de Hadamard (Hadamard gate) a todos los cúbits del primer registro. Como resultado, el primer registro se convierte en un &lt;strong>estado de superposición uniforme&lt;/strong> de todos los valores posibles de $ x $ (desde $ 0 $ hasta $ 2^n-1 $, donde $ n $ es un número de bits suficientemente grande).&lt;/p>
&lt;p>En otras palabras, dentro de la computadora cuántica se crea un estado en el que existen de manera simultánea y paralela innumerables valores de entrada $ x=0, 1, 2, 3, \dots $.&lt;/p>
&lt;h3 id="paso-3-exponenciación-modular-cuántica-quantum-modular-exponentiation">Paso 3: Exponenciación modular cuántica (Quantum Modular Exponentiation)
&lt;/h3>&lt;p>A continuación, tomando el estado de superposición del primer registro como entrada, calculamos $ f(x) = a^x \pmod N $ y almacenamos el resultado en el segundo registro.
Dado que este cálculo se ejecuta como una transformación unitaria en el circuito cuántico, el cálculo de $ f(x) $ para todos los $ x $ se realiza &amp;ldquo;simultáneamente y en paralelo (paralelismo cuántico)&amp;rdquo; manteniendo la superposición.&lt;/p>
&lt;p>En este punto, el espacio general del sistema cuántico es:
$ |x, a^x \bmod N\rangle $
que es una enorme superposición de estados.&lt;/p>
&lt;p>Sin embargo, si simplemente medimos (observamos) el segundo registro aquí, un valor aleatorio de $ a^x \bmod N $ se elegirá probabilísticamente, y en conjunto con esto, el $ x $ del primer registro también se fijará a uno solo. Hacer esto equivaldría a calcularlo una vez en una computadora clásica y no nos permitiría encontrar el período $ r $.&lt;/p>
&lt;p>Bajo las reglas de la mecánica cuántica, no podemos mirar directamente el contenido de un estado de superposición. Entonces, ¿cómo extraemos la información global, que es el &amp;ldquo;período&amp;rdquo; de todo el sistema?&lt;/p>
&lt;h3 id="paso-4-transformada-cuántica-de-fourier-qft-quantum-fourier-transform">Paso 4: Transformada Cuántica de Fourier (QFT: Quantum Fourier Transform)
&lt;/h3>&lt;p>La verdadera genialidad del algoritmo de Shor para superar este obstáculo es la aplicación de la &lt;strong>Transformada Cuántica de Fourier (QFT)&lt;/strong> al primer registro.&lt;/p>
&lt;p>Antes de realizar la medición, analizamos las propiedades de onda de la función $ f(x) $. Supongamos que observamos el segundo registro. Asumamos que se obtuvo un valor $ y $. Entonces, el estado del primer registro colapsa en &amp;ldquo;la superposición de todos los $ x $ tal que $ a^x \pmod N = y $&amp;rdquo;.
Los valores de este $ x $ estarán separados por un intervalo del período $ r $ de la forma $ x_0, x_0 + r, x_0 + 2r, x_0 + 3r, \dots $, resultando en un estado discretamente alineado (una especie de distribución de amplitud de probabilidad en forma de peine).&lt;/p>
&lt;p>Aplicamos la Transformada Cuántica de Fourier (QFT) a este estado. Así como la transformada discreta de Fourier clásica convierte una señal en el dominio del tiempo al dominio de la frecuencia, la QFT causa interferencia en las amplitudes de probabilidad del estado cuántico.&lt;/p>
&lt;p>Al aplicar la QFT, debido al efecto de interferencia cuántica, las probabilidades de respuestas incorrectas que no resuenan (están desfasadas) con el período $ r $ se anulan mutuamente y se acercan a cero (interferencia destructiva), y solo se amplifica la probabilidad de la respuesta correcta que tiene la información del período $ r $ (interferencia constructiva).&lt;/p>
&lt;h3 id="paso-5-medición-y-expansión-en-fracciones-continuas-post-procesamiento-clásico">Paso 5: Medición y expansión en fracciones continuas (Post-procesamiento clásico)
&lt;/h3>&lt;p>Si se mide el primer registro después de aplicar la QFT, con una probabilidad muy alta se obtendrá un entero $ c $ muy cercano a la forma $ c \approx \frac{j \cdot 2^n}{r} $ (donde $ j $ es un número entero desconocido y $ 2^n $ es el tamaño del registro).&lt;/p>
&lt;p>Este resultado de medición $ c $ se devuelve a la computadora clásica para crear una fracción $ \frac{c}{2^n} \approx \frac{j}{r} $. Luego, calculando una aproximación utilizando un método matemático llamado &amp;ldquo;expansión en fracciones continuas&amp;rdquo; (Continued fraction expansion), podemos extraer de manera brillante el período $ r $ que está en el denominador.&lt;/p>
&lt;p>Una vez que conocemos $ r $, todo lo que queda es usar la fórmula del Paso 1 para calcular los factores primos de $ N $ y el cifrado RSA estará completamente descifrado.&lt;/p>
&lt;hr>
&lt;h2 id="el-poder-y-los-desafíos-de-las-computadoras-cuánticas-actuales-nisq">El poder y los desafíos de las computadoras cuánticas actuales (NISQ)
&lt;/h2>&lt;p>El algoritmo de Shor es teóricamente perfecto, pero si se pregunta &amp;ldquo;¿Se romperá el cifrado RSA mañana?&amp;rdquo;, la respuesta es claramente &amp;ldquo;no&amp;rdquo;. La razón radica en las limitaciones de la tecnología de hardware de las computadoras cuánticas actuales.&lt;/p>
&lt;h3 id="la-era-nisq-noisy-intermediate-scale-quantum">La era NISQ (Noisy Intermediate-Scale Quantum)
&lt;/h3>&lt;p>En la actualidad nos encontramos en una era llamada &amp;ldquo;NISQ&amp;rdquo;. Los dispositivos NISQ tienen decenas a cientos de cúbits físicos, pero son extremadamente vulnerables al ruido.&lt;/p>
&lt;p>Los cúbits son susceptibles a influencias ambientales externas como el calor y las ondas electromagnéticas, lo que hace que ocurra con frecuencia la &amp;ldquo;decoherencia&amp;rdquo; (pérdida de entrelazamiento cuántico), que destruye el estado cuántico, o los &amp;ldquo;errores de puerta&amp;rdquo; al operar las puertas cuánticas. Si se intenta ejecutar un circuito cuántico muy profundo (con una cantidad masiva de pasos de cálculo) como el algoritmo de Shor, los errores se acumulan durante el cálculo y el resultado final será ruido completo sin significado.&lt;/p>
&lt;h3 id="cúbits-físicos-y-cúbits-lógicos">Cúbits físicos y cúbits lógicos
&lt;/h3>&lt;p>Para resolver este problema de errores, es indispensable la &amp;ldquo;Corrección de errores cuánticos&amp;rdquo; (Quantum Error Correction).
Aunque también se utilizan códigos de corrección de errores en las computadoras clásicas, la corrección de errores cuánticos es muy compleja debido al &amp;ldquo;Teorema de no clonación cuántica&amp;rdquo; que prohíbe copiar estados cuánticos.&lt;/p>
&lt;p>En la corrección de errores cuánticos, se utilizan tecnologías como el &amp;ldquo;Código de superficie&amp;rdquo; (Surface Code) para combinar muchos &amp;ldquo;cúbits físicos&amp;rdquo; ruidosos, y así crear un &amp;ldquo;cúbit lógico&amp;rdquo; ideal y sin errores.&lt;/p>
&lt;p>Teniendo en cuenta las tasas de error actuales, se estima que se necesitarán aproximadamente de 1,000 a 10,000 cúbits físicos para crear un solo cúbit lógico. Esto se denomina la &amp;ldquo;sobrecarga de la corrección de errores&amp;rdquo;.&lt;/p>
&lt;h3 id="cuáles-son-los-recursos-necesarios-para-destruir-rsa-2048">¿Cuáles son los recursos necesarios para destruir RSA-2048?
&lt;/h3>&lt;p>Entonces, para descifrar realmente RSA-2048, ¿cuántos recursos se necesitan para ejecutar el algoritmo de Shor?&lt;/p>
&lt;p>En una estimación de recursos revolucionaria realizada en un artículo de 2021 por Craig Gidney (Google) y Martin Ekerå, utilizando un algoritmo de Shor optimizado y realizando la corrección de errores con código de superficie, se requerirían los siguientes recursos:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Número de cúbits lógicos&lt;/strong> : Aproximadamente 4,096&lt;/li>
&lt;li>&lt;strong>Número de cúbits físicos ** : ** Aproximadamente 20 millones&lt;/strong> (asumiendo una tasa de error de alrededor de $10^{-3}$)&lt;/li>
&lt;li>&lt;strong>Tiempo de cálculo&lt;/strong> : Aproximadamente 8 horas (se requieren de millones a miles de millones de operaciones de puertas físicas)&lt;/li>
&lt;/ul>
&lt;p>Por el contrario, ¿cuál es el nivel alcanzado por el hardware cuántico actual?
A finales de 2023, el procesador cuántico superconductor &amp;ldquo;Condor&amp;rdquo;, anunciado por IBM, tiene 1,121 cúbits. Además, también han aparecido investigaciones innovadoras sobre la generación de cúbits lógicos (como la generación de 48 cúbits lógicos utilizando una computadora cuántica de átomos neutros por la Universidad de Harvard y la empresa QuEra), pero aún no estamos en la etapa en que se puedan ejecutar &amp;ldquo;cálculos perfectos sin ruido&amp;rdquo; de manera continua y prolongada.&lt;/p>
&lt;p>Para escalar desde unos miles de cúbits físicos hasta &lt;strong>20 millones&lt;/strong> de cúbits físicos prácticos (y un sistema interconectado, operando de manera estable a temperaturas criogénicas y capaz de procesar señales de control a ultra alta velocidad) existe un muro de ingeniería tremendo (problemas de cableado, límites de capacidad de enfriamiento y la expansión excesiva de la electrónica de control). Muchos expertos predicen que tomará al menos de 10 a 30 años, o incluso más, lograr una &amp;ldquo;Computadora cuántica tolerante a fallas (FTQC)&amp;rdquo; capaz de descifrar RSA-2048.&lt;/p>
&lt;hr>
&lt;h2 id="la-inminente-amenaza-de-store-now-decrypt-later-y-el-amanecer-de-pqc">La inminente amenaza de &amp;ldquo;Store Now, Decrypt Later&amp;rdquo; y el amanecer de PQC
&lt;/h2>&lt;p>Es prematuro pensar: &amp;ldquo;Si faltan más de 10 años, estamos a salvo&amp;rdquo;. Actualmente existen datos cuyo secreto debe garantizarse durante décadas en el futuro, como la información confidencial del estado, los datos médicos y el diseño de infraestructura a largo plazo.&lt;/p>
&lt;p>Lo que preocupa aquí es el método de ataque &lt;strong>&amp;ldquo;Store Now, Decrypt Later&amp;rdquo; (Almacenar ahora, descifrar después)&lt;/strong> . Estados u organizaciones malintencionadas interceptan todos los datos de comunicaciones cifrados actualmente con RSA o ECC (Criptografía de curva elíptica) y los guardan en sistemas de almacenamiento. Luego, dentro de 10 o 20 años, en el momento en que se complete una poderosa computadora cuántica, utilizarán el algoritmo de Shor para descifrar todos los datos pasados y exponer los secretos.&lt;/p>
&lt;p>Para contrarrestar la amenaza de este desfase temporal, el proceso de estandarización de la &lt;strong>&amp;ldquo;Criptografía Post-Cuántica (PQC: Post-Quantum Cryptography)&amp;rdquo;&lt;/strong> ha avanzado a un ritmo acelerado, centrado principalmente en el NIST (Instituto Nacional de Estándares y Tecnología de EE. UU.).&lt;/p>
&lt;p>PQC es un nuevo algoritmo criptográfico basado en problemas matemáticos que son difíciles de resolver incluso utilizando computadoras cuánticas (es decir, a los que no se puede aplicar el algoritmo de Shor). Los enfoques principales incluyen los siguientes:&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Criptografía basada en retículos (Lattice-based cryptography)&lt;/strong> : Basado en el problema LWE (Learning with Errors), entre otros. Es la corriente principal en la estandarización del NIST (Kyber, Dilithium, etc.).&lt;/li>
&lt;li>&lt;strong>Criptografía basada en códigos (Code-based cryptography)&lt;/strong> : Depende de la dificultad del problema de decodificar códigos de corrección de errores.&lt;/li>
&lt;li>&lt;strong>Criptografía multivariante (Multivariate cryptography)&lt;/strong> : Depende de la dificultad de resolver sistemas de ecuaciones cuadráticas con múltiples variables.&lt;/li>
&lt;li>&lt;strong>Firmas basadas en hash (Hash-based signatures)&lt;/strong> : Firmas digitales que dependen únicamente de la seguridad de la función hash.&lt;/li>
&lt;/ul>
&lt;p>Ya se han iniciado las pruebas de implementación y las implementaciones híbridas de PQC en los principales software y plataformas, como Google Chrome y el iMessage de Apple.&lt;/p>
&lt;h2 id="conclusión">Conclusión
&lt;/h2>&lt;p>Las computadoras cuánticas están pasando de ser el sueño del mundo de la ciencia ficción a un desafío de ingeniería en la realidad. El algoritmo de Shor es un gran logro intelectual de la humanidad que fusiona las matemáticas y la mecánica cuántica, pero al mismo tiempo tiene un &amp;ldquo;poder destructivo&amp;rdquo; oculto que puede sacudir los cimientos de nuestra sociedad digital.&lt;/p>
&lt;p>El cifrado RSA no quedará inutilizable inmediatamente mañana. Sin embargo, considerando la evolución de la tecnología cuántica y el riesgo de &amp;ldquo;Store Now, Decrypt Later&amp;rdquo;, la migración masiva en la historia de la criptografía, que es la transición a PQC, ya ha comenzado. Ahora mismo somos testigos de la primera línea de un cambio de paradigma en la seguridad de la información.&lt;/p></description></item><item><title>La verdadera estructura matemática de la Criba General del Cuerpo de Números (GNFS)</title><link>http://kenji.blog/es/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/</link><pubDate>Sat, 05 Sep 2026 02:26:13 +0900</pubDate><guid>http://kenji.blog/es/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/</guid><description>&lt;img src="http://kenji.blog/p/%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%AE%E7%9C%9F%E3%81%AE%E6%95%B0%E5%AD%A6%E7%9A%84%E6%A7%8B%E9%80%A0/rsa_encryption_break_1788542156523.jpg" alt="Featured image of post La verdadera estructura matemática de la Criba General del Cuerpo de Números (GNFS)" />&lt;h1 id="la-verdadera-estructura-matemática-de-la-criba-general-del-cuerpo-de-números-gnfs">La verdadera estructura matemática de la Criba General del Cuerpo de Números (GNFS)
&lt;/h1>&lt;p>El objetivo final de GNFS es encontrar $X, Y$ tales que $X^2 \equiv Y^2 \pmod N$.
Para lograr esto, los matemáticos construyeron un puente entre el &lt;strong>&amp;ldquo;mundo real de los números enteros&amp;rdquo;&lt;/strong> y el &lt;strong>&amp;ldquo;mundo de los cuerpos algebraicos&amp;rdquo;&lt;/strong>. Ese puente es el &amp;ldquo;homomorfismo&amp;rdquo;.&lt;/p>
&lt;h2 id="etapa-1-conectando-mundos-con-el-homomorfismo-homomorphism">Etapa 1: Conectando mundos con el &amp;ldquo;Homomorfismo&amp;rdquo; (Homomorphism)
&lt;/h2>&lt;h3 id="1-selección-de-polinomios-y-definición-de-raíces">1. Selección de polinomios y definición de raíces
&lt;/h3>&lt;p>Para un número compuesto gigante $N$, elegimos un entero $m$ y un polinomio $f(x)$ de manera que $f(m) \equiv 0 \pmod N$.
(Ejemplo: expandimos $N$ en base $m$, y formamos $f(x)$ a partir de sus coeficientes. Aquí asumimos que $f(x)$ es irreducible sobre el cuerpo de los números racionales $\mathbb{Q}$ (no se puede factorizar más)).&lt;/p>
&lt;p>A continuación, definimos una de las &amp;ldquo;raíces complejas&amp;rdquo; de la ecuación $f(x) = 0$ como $\alpha$.
Naturalmente, $f(\alpha) = 0$. $\alpha$ no es un entero, sino un número complejo (número algebraico) que puede incluir raíces o números imaginarios.&lt;/p>
&lt;h3 id="2-construcción-de-anillos-rings-y-homomorfismos">2. Construcción de Anillos (Rings) y Homomorfismos
&lt;/h3>&lt;p>Aquí preparamos dos &amp;ldquo;anillos&amp;rdquo; matemáticos (mundos donde se definen la suma y la multiplicación):&lt;/p>
&lt;ul>
&lt;li>&lt;strong>Mundo A: $\mathbb{Z}[\alpha]$&lt;/strong> (el anillo de enteros algebraicos que contiene a $\alpha$)
Un mundo de números expresados en la forma $a + b\alpha + c\alpha^2 + \dots$.&lt;/li>
&lt;li>&lt;strong>Mundo B: $\mathbb{Z}/N\mathbb{Z}$&lt;/strong> (el anillo de restos módulo $N$)
Un mundo de congruencias (módulos) compuesto solo por números enteros del $0$ al $N-1$.&lt;/li>
&lt;/ul>
&lt;p>Aquí, definimos el siguiente mapeo (función) $\phi$ del Mundo A al Mundo B:
&lt;strong>$$\phi : \mathbb{Z}[\alpha] \to \mathbb{Z}/N\mathbb{Z}$$&lt;/strong>
&lt;strong>$$\phi(\alpha) = m \pmod N$$&lt;/strong>&lt;/p>
&lt;p>Este mapeo $\phi$ es una operación mágica que reemplaza exactamente la variable $\alpha$ del Mundo A por el entero $m$ del Mundo B.
Este $\phi$ tiene una propiedad extremadamente poderosa llamada &lt;strong>&amp;ldquo;Homomorfismo de Anillos&amp;rdquo; (Ring Homomorphism)&lt;/strong>.
Un homomorfismo es la propiedad de &lt;strong>&amp;ldquo;transportarse a otro mundo sin destruir la estructura de sumas y multiplicaciones&amp;rdquo;&lt;/strong>. Es decir, se cumplen las siguientes ecuaciones:&lt;/p>
&lt;ul>
&lt;li>$\phi(X \times Y) = \phi(X) \times \phi(Y)$&lt;/li>
&lt;li>$\phi(X^2) = \phi(X)^2$&lt;/li>
&lt;/ul>
&lt;p>Qué significa esto. Si podemos crear un &lt;strong>&amp;ldquo;cuadrado ($\gamma^2$)&amp;rdquo;&lt;/strong> de algún elemento complejo $\gamma$ en el &amp;ldquo;Mundo A (el mundo de $\alpha$)&amp;rdquo;, al transportarlo al &amp;ldquo;Mundo B (el mundo de los restos)&amp;rdquo; con $\phi$, ** la forma del cuadrado $\phi(\gamma)^2$ se conservará perfectamente**.&lt;/p>
&lt;hr>
&lt;h2 id="etapa-2-el-colapso-de-la-factorización-prima-y-el-nacimiento-del-ideal-ideal">Etapa 2: El colapso de la factorización prima y el nacimiento del &amp;ldquo;Ideal&amp;rdquo; (Ideal)
&lt;/h2>&lt;p>Queremos recolectar muchos elementos apropiados $(a - b\alpha)$ dentro del Mundo A ($\mathbb{Z}[\alpha]$) y multiplicarlos juntos para crear un &amp;ldquo;cuadrado perfecto&amp;rdquo;.
Normalmente, factorizaríamos cada $(a - b\alpha)$ en &amp;ldquo;factores primos&amp;rdquo; y los combinariamos para que los exponentes de los números primos sean todos pares (resolviéndolo con matrices) para formar un cuadrado.&lt;/p>
&lt;p>&lt;strong>Sin embargo, aquí nos encontramos con un muro algebraico desesperante.&lt;/strong>
En un mundo de cuerpos algebraicos como $\mathbb{Z}[\alpha]$, &lt;strong>se derrumba la &amp;ldquo;unicidad de la factorización prima&amp;rdquo; (la idea que nos enseñaron de que cualquier número puede expresarse como el producto de números primos de una sola manera)&lt;/strong>.&lt;/p>
&lt;p>(Ejemplo: en cierto mundo de cuerpos algebraicos, $6 = 2 \times 3$, y al mismo tiempo $6 = (1+\sqrt{-5}) \times (1-\sqrt{-5})$, haciendo imposible saber cuáles son los verdaderos primos).&lt;/p>
&lt;p>Si la factorización prima no es única, el rompecabezas de &amp;ldquo;contar el número de primos para hacerlos pares&amp;rdquo; (la criba) es en principio imposible de ejecutar.&lt;/p>
&lt;h3 id="la-salvación-de-kummer-y-dedekind-el-ideal">La salvación de Kummer y Dedekind: el &amp;ldquo;Ideal&amp;rdquo;
&lt;/h3>&lt;p>Lo que salvó a las matemáticas de este colapso fue el concepto de &lt;strong>&amp;ldquo;Ideal&amp;rdquo; (número ideal)&lt;/strong> creado por los matemáticos del siglo XIX.
Al pensar en el &amp;ldquo;conjunto de múltiplos (ideal)&amp;rdquo; generado por un elemento en lugar del elemento en sí, volvieron a hacer posible la factorización prima.&lt;/p>
&lt;p>En el anillo de enteros de un cuerpo algebraico $\mathcal{O}_K$ (un anillo más completo que contiene a $\mathbb{Z}[\alpha]$), aunque los elementos no puedan ser factorizados de manera única, se ha demostrado que &lt;strong>&amp;ldquo;los ideales siempre pueden ser factorizados de forma única como un producto de &amp;lsquo;ideales primos ($\mathfrak{p}$)&amp;rsquo;&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Por lo tanto, en GNFS, no descomponemos el elemento $(a - b\alpha)$ en sí, sino que hacemos la &lt;strong>factorización en ideales primos del ideal principal $\langle a - b\alpha \rangle$&lt;/strong> que este genera.&lt;/p>
&lt;hr>
&lt;h2 id="etapa-3-norma-norm-y-las-dos-cribas-sieves">Etapa 3: Norma (Norm) y las dos Cribas (Sieves)
&lt;/h2>&lt;p>Entonces, ¿cómo sabemos en qué ideales primos se descompone el ideal $\langle a - b\alpha \rangle$?
Aquí utilizamos una función llamada &lt;strong>&amp;ldquo;Norma&amp;rdquo; (Norm)&lt;/strong>. La norma es una función que convierte los elementos complejos de los cuerpos algebraicos en &amp;ldquo;números enteros reales ordinarios $\mathbb{Z}$&amp;rdquo;.&lt;/p>
&lt;p>La norma del elemento $(a - b\alpha)$ se calcula mediante un simple cálculo polinomial $b^d f(a/b)$ (donde $d$ es el grado de $f(x)$).&lt;/p>
&lt;p>Por teoremas algebraicos, sabemos que &lt;strong>&amp;ldquo;si la norma de un ideal se descompone completamente en primos pequeños (es un número liso o &amp;lsquo;smooth&amp;rsquo;), entonces su ideal original también se descompone completamente en ideales primos pequeños&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Por lo tanto, GNFS calcula simultáneamente lo siguiente para una gran cantidad de pares de enteros $(a, b)$, y recolecta solo los pares donde ambos son &amp;ldquo;números lisos&amp;rdquo;:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>Criba Racional (Rational Sieve)&lt;/strong>: $a - bm$ (valor en el mundo real)&lt;/li>
&lt;li>&lt;strong>Criba Algebraica (Algebraic Sieve)&lt;/strong>: $b^d f(a/b)$ (norma en el mundo del cuerpo algebraico)&lt;/li>
&lt;/ol>
&lt;p>Recolecta decenas de millones de pares $(a, b)$ donde ambos son lisos, resuelve los datos de factorización prima de los ideales (cuántos ideales primos están incluidos) como una matriz gigante (álgebra lineal sobre GF(2)), y encuentra un conjunto de pares $S$ de manera que &amp;ldquo;cuando se multiplican, los exponentes de todos los ideales primos se vuelven pares&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="etapa-4-dos-obstáculos-que-se-interponen-y-el-grupo-de-clases-de-ideales">Etapa 4: Dos &amp;ldquo;Obstáculos&amp;rdquo; que se interponen y el Grupo de Clases de Ideales
&lt;/h2>&lt;p>Mediante cálculos de matrices, encontramos que multiplicar todos los ideales de $(a - b\alpha)$ que pertenecen al conjunto $S$ resulta en el cuadrado de cierto ideal $I$.
&lt;/p>
$$\prod_{S} \langle a - b\alpha \rangle = I^2$$
&lt;p>&lt;strong>Sin embargo, esto aún no ha terminado. Aquí es donde se encuentra el muro matemático más profundo y difícil de GNFS.&lt;/strong>&lt;/p>
&lt;p>Lo que finalmente queremos no es el &amp;ldquo;cuadrado de un ideal&amp;rdquo;, sino el &lt;strong>&amp;ldquo;cuadrado de un elemento ($\gamma^2$)&amp;rdquo;&lt;/strong> para sustituirlo en el mapeo $\phi$.
El hecho de que se haya convertido en el cuadrado de un ideal no significa que el elemento en sí sea un cuadrado. Aquí existen &lt;strong>dos obstáculos matemáticos (Obstructions) formidables&lt;/strong>.&lt;/p>
&lt;h3 id="obstáculo-1-el-muro-del-grupo-de-clases-de-ideales-ideal-class-group">Obstáculo 1: El muro del Grupo de Clases de Ideales (Ideal Class Group)
&lt;/h3>&lt;p>El ideal $I$ no es necesariamente un &amp;ldquo;ideal generado por un solo elemento (ideal principal)&amp;rdquo;.
Es imposible extraer un elemento concreto $\gamma$ de un ideal que no sea principal.&lt;/p>
&lt;p>Aquí entra el concepto de &lt;strong>&amp;ldquo;Grupo de Clases de Ideales&amp;rdquo; (Class Group, $Cl_K$)&lt;/strong>. El grupo de clases de ideales es un grupo que mide &amp;ldquo;cuántos ideales que no son principales existen en ese mundo del cuerpo algebraico (qué tan destruida está la unicidad de la factorización prima)&amp;rdquo;.
Incluso si $\prod \langle a - b\alpha \rangle$ se convierte en $I^2$, si $I$ no es el elemento identidad (ideal principal) en el grupo de clases de ideales, no podemos retroceder al cuadrado de un elemento.&lt;/p>
&lt;h3 id="obstáculo-2-el-muro-del-grupo-de-unidades-unit-group">Obstáculo 2: El muro del Grupo de Unidades (Unit Group)
&lt;/h3>&lt;p>Supongamos que por suerte $I$ era un ideal principal $\langle \gamma \rangle$.
Entonces tenemos que $\prod \langle a - b\alpha \rangle = \langle \gamma^2 \rangle$.
Podrías pensar &amp;ldquo;¡Genial, el elemento también es un cuadrado!&amp;rdquo;, pero estarías muy equivocado.&lt;/p>
&lt;p>Que los ideales (conjuntos de múltiplos) sean iguales no significa que los elementos sean completamente iguales. Siempre ocurre una desviación por una &lt;strong>&amp;ldquo;Unidad&amp;rdquo; (Unit: un número cuyo inverso multiplicativo también es entero. Por ejemplo, 1 o -1)&lt;/strong>.
Es decir, la verdadera igualdad de los elementos es la siguiente:
&lt;/p>
$$\prod_{S} (a - b\alpha) = u \cdot \gamma^2$$
&lt;p>
($u$ es un elemento del grupo de unidades $U_K$)&lt;/p>
&lt;p>A menos que esta unidad $u$ sea en sí misma un cuadrado (elemento cuadrático) de algo, el lado izquierdo nunca podrá ser un &amp;ldquo;cuadrado perfecto de un elemento&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="etapa-5-la-magia-de-adleman-caracteres-cuadráticos-quadratic-characters">Etapa 5: La magia de Adleman, &amp;ldquo;Caracteres Cuadráticos&amp;rdquo; (Quadratic Characters)
&lt;/h2>&lt;p>Los obstáculos del grupo de clases de ideales y del grupo de unidades. ¿Cómo los superamos?
Aquí es donde entra la genial técnica introducida por el criptógrafo Leonard Adleman (la &amp;ldquo;A&amp;rdquo; de RSA) y otros: los &lt;strong>&amp;ldquo;Caracteres Cuadráticos&amp;rdquo; (Quadratic Characters)&lt;/strong>.&lt;/p>
&lt;p>Para determinar &amp;ldquo;si un elemento es un cuadrado perfecto dentro de un cuerpo algebraico&amp;rdquo;, utilizamos una versión para cuerpos algebraicos del símbolo de Legendre (residuo cuadrático).
En la matriz gigante anterior (el rompecabezas para hacer que el número de ideales primos sea par), &lt;strong>añadimos en secreto unas cuantas decenas de condiciones (columnas) adicionales para que &amp;ldquo;los caracteres cuadráticos para algunos ideales primos especiales $\mathfrak{q}$ también sean todos $1$ (pares)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Cuando encontramos un conjunto $S$ que incluso satisface estas condiciones adicionales mediante el cálculo de matrices, por los teoremas profundos de la teoría de números algebraicos, se garantiza que &lt;strong>&amp;ldquo;los obstáculos tanto del grupo de clases de ideales como del grupo de unidades desaparecerán naturalmente con una probabilidad abrumadora&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>Con esto, por fin obtenemos la verdadera ecuación.
&lt;/p>
$$\prod_{S} (a - b\alpha) = \gamma^2$$
&lt;hr>
&lt;h2 id="etapa-final-la-fusión-de-los-mundos-y-el-colapso-criptográfico">Etapa Final: La fusión de los mundos y el colapso criptográfico
&lt;/h2>&lt;p>Por fin, todas las piezas del rompecabezas están en su lugar.&lt;/p>
&lt;p>&lt;strong>[Elementos del Mundo del Cuerpo Algebraico (Mundo A)]&lt;/strong>
$\gamma^2 = \prod (a - b\alpha)$
(De aquí usamos un algoritmo de raíz cuadrada para encontrar $\gamma$)&lt;/p>
&lt;p>&lt;strong>[Elementos del Mundo Real (Mundo de los Números Racionales)]&lt;/strong>
$V^2 = \prod (a - bm)$
(Como esta es una simple multiplicación de enteros, podemos encontrar la raíz cuadrada $V$ normalmente)&lt;/p>
&lt;p>Ahora, es el turno del puente mágico que construimos al principio: &lt;strong>el homomorfismo $\phi$&lt;/strong>.
Transportamos el elemento $\gamma$ del Mundo A al Mundo B (el mundo de restos módulo $N$) usando $\phi$ (el mapeo que sustituye $\alpha$ por $m$).
&lt;/p>
$$Y = \phi(\gamma) \pmod N$$
&lt;p>Por otro lado, tomamos la $V$ que creamos en el mundo real directamente al mundo de los restos y la llamamos $X$.
&lt;/p>
$$X = V \pmod N$$
&lt;p>Debido a la propiedad de &amp;ldquo;conservar estructuras&amp;rdquo; del homomorfismo, la relación de los cuadrados que se sostenía en el Mundo A se preserva perfectamente en el Mundo B (el mundo módulo $N$).
Además, dado que el par original $(a, b)$ fue creado correspondientemente en la forma $a - b\alpha$ y $a - bm$, estas $X$ e $Y$ chocan en el mundo módulo $N$ y producen la siguiente igualdad absoluta:&lt;/p>
&lt;p>&lt;strong>$$X^2 \equiv Y^2 \pmod N$$&lt;/strong>&lt;/p>
&lt;p>El resto es rezar para que $X$ e $Y$ no sean una solución trivial ($X \equiv \pm Y$), y calcular:
&lt;strong>$\gcd(X - Y, N)$&lt;/strong>&lt;/p>
&lt;p>Si es una solución no trivial, el algoritmo de Euclides correrá en 0.001 segundos e imprimirá en la pantalla de salida el corazón del cifrado RSA: los primos secretos $p$ y $q$.&lt;/p>
&lt;hr>
&lt;p>Esta es la &lt;strong>forma completa de la &amp;ldquo;Criba General del Cuerpo de Números (GNFS)&amp;rdquo;&lt;/strong>, que reúne lo mejor de las matemáticas modernas.&lt;/p></description></item><item><title>¿Qué es la 'Criba General del Cuerpo de Números (GNFS)', la matemática más fuerte de la humanidad que rompe el cifrado de Internet?</title><link>http://kenji.blog/es/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/</link><pubDate>Sat, 05 Sep 2026 02:09:08 +0900</pubDate><guid>http://kenji.blog/es/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E6%9A%97%E5%8F%B7%E3%82%92%E7%A0%B4%E3%82%8B%E4%BA%BA%E9%A1%9E%E6%9C%80%E5%BC%B7%E3%81%AE%E6%95%B0%E5%AD%A6%E4%B8%80%E8%88%AC%E6%95%B0%E4%BD%93%E7%AF%A9%E6%B3%95gnfs%E3%81%A8%E3%81%AF/gnfs_two_worlds_1788542142485.jpg" alt="Featured image of post ¿Qué es la 'Criba General del Cuerpo de Números (GNFS)', la matemática más fuerte de la humanidad que rompe el cifrado de Internet?" />&lt;h1 id="qué-es-la-criba-general-del-cuerpo-de-números-gnfs-las-matemáticas-más-fuertes-de-la-humanidad-que-rompen-el-cifrado-de-internet">¿Qué es la &amp;ldquo;Criba General del Cuerpo de Números (GNFS)&amp;rdquo;, las matemáticas más fuertes de la humanidad que rompen el cifrado de Internet?
&lt;/h1>&lt;p>El Internet que usamos todos los días. Los mensajes de LINE, YouTube, las compras en Amazon, todas las comunicaciones están protegidas por &amp;ldquo;cifrado&amp;rdquo;.
Actualmente, el representante del cifrado más utilizado en todo el mundo es el &amp;ldquo;Cifrado RSA&amp;rdquo;.&lt;/p>
&lt;p>La clave de la defensa del cifrado RSA es muy simple. Utiliza la propiedad matemática de que &lt;strong>&amp;ldquo;la factorización de números primos gigantescos no puede ser resuelta ni siquiera por computadoras&amp;rdquo;&lt;/strong>.
Por ejemplo, si es &amp;ldquo;15&amp;rdquo;, se sabe inmediatamente que es &amp;ldquo;3 × 5&amp;rdquo;, pero en el momento en que esto se convierte en un &amp;ldquo;número de 270 dígitos&amp;rdquo;, incluso reuniendo las supercomputadoras de todo el mundo llevaría cientos de millones de años resolverlo.&lt;/p>
&lt;p>Sin embargo, los matemáticos tampoco se han quedado callados. Para romper este cifrado inexpugnable, la humanidad ha creado un algoritmo (procedimiento de cálculo) parecido a la magia llamado &lt;strong>&amp;ldquo;Criba General del Cuerpo de Números (GNFS: General Number Field Sieve)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;p>En este artículo, sin usar términos técnicos en absoluto, explicaremos paso a paso y de manera completa el truco por el cual este &amp;ldquo;algoritmo más fuerte de la humanidad&amp;rdquo; rompe el cifrado, solo con conocimientos de &lt;strong>matemáticas de secundaria (factorización de primos, álgebra, máximo común divisor)&lt;/strong>!&lt;/p>
&lt;hr>
&lt;h2 id="capítulo-1-el-objetivo-de-descifrar-el-código-es-la-fórmula-de-tercer-año-de-secundaria">Capítulo 1: El objetivo de descifrar el código es &amp;ldquo;la fórmula de tercer año de secundaria&amp;rdquo;
&lt;/h2>&lt;p>El mayor ataque especial para enfrentar la factorización de números primos gigantes. Es esta fórmula que se aprende en tercer año de secundaria.&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>$X^2 - Y^2 = (X + Y)(X - Y)$&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>Puede que pienses: &amp;ldquo;¿Eh, se puede romper un cifrado con una fórmula tan básica?&amp;rdquo;. Sin embargo, esta es precisamente la llave maestra que lo revela todo.&lt;/p>
&lt;p>El objetivo principal para romper el cifrado es, para un número gigante $N$,
encontrar &lt;strong>&amp;ldquo;números ($X$ e $Y$) cuyo residuo al dividir $X^2$ e $Y^2$ por $N$ sea el mismo&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;h3 id="por-qué-se-puede-descifrar-el-código-si-el-residuo-es-el-mismo">¿Por qué se puede descifrar el código si &amp;ldquo;el residuo es el mismo&amp;rdquo;?
&lt;/h3>&lt;p>Supongamos que el &amp;ldquo;residuo al dividir por $N$&amp;rdquo; de dos números, $X^2$ e $Y^2$, es el mismo.
Que el residuo sea el mismo significa que existe la regla de que &lt;strong>la resta &amp;ldquo;$X^2 - Y^2$&amp;rdquo; siempre se divide exactamente por $N$ (es un múltiplo de $N$)&lt;/strong>.&lt;/p>
&lt;p>Aquí, supongamos que el número gigante $N$ usado en el cifrado está hecho por la multiplicación de dos números primos secretos ($p$ y $q$) ($N = p \times q$).&lt;/p>
&lt;p>Al factorizar $X^2 - Y^2$, se convierte en &lt;strong>$(X - Y)(X + Y)$&lt;/strong>.
El hecho de que esto sea un múltiplo de $N$ significa que en algún lugar de esta multiplicación están escondidos los números primos secretos $p$ y $q$.&lt;/p>
&lt;p>Aquí ocurre un milagro.
La probabilidad de que los dos números primos $p$ y $q$ se separen en habitaciones diferentes, &lt;strong>&amp;quot;$p$ va a la habitación de $(X - Y)$&amp;quot; y &amp;ldquo;$q$ va a la habitación de $(X + Y)$&amp;rdquo;&lt;/strong>, es matemáticamente del ** 50% (un medio)**.&lt;/p>
&lt;p>Con solo el número primo $p$ entrando en la habitación de $(X - Y)$, calculemos el &lt;strong>&amp;ldquo;máximo común divisor (la pieza común más grande)&amp;rdquo;&lt;/strong> de $(X - Y)$ y $N$.&lt;/p>
&lt;ul>
&lt;li>Contenido de $(X - Y)$ = $p \times$ algún número&lt;/li>
&lt;li>Contenido de $N$ = $p \times q$
¡La única pieza común es &lt;strong>&amp;quot;$p$&amp;quot;&lt;/strong>!&lt;/li>
&lt;/ul>
&lt;p>Es decir, en el momento en que se calcula el máximo común divisor, el número primo oculto $p$ cae, ¡y el cifrado se descifra por completo! (*El máximo común divisor se puede calcular en un instante incluso en un teléfono inteligente si usas el &amp;ldquo;Algoritmo de Euclides&amp;rdquo;).&lt;/p>
&lt;p>&lt;strong>[Breve columna: ¿Por qué al cuadrado? ¿No se puede al cubo o al doble?]&lt;/strong>&lt;/p>
&lt;blockquote>
&lt;p>Si es &amp;ldquo;$2X - 2Y$&amp;rdquo;, se convierte en $2(X - Y)$ y como solo hay una habitación, no se pueden separar los números primos. Si es &amp;ldquo;$X^3 - Y^3$&amp;rdquo;, el tamaño de las habitaciones se desequilibra y el cálculo se vuelve innecesariamente pesado. Para separar los números primos en dos, la opción más eficiente que se divide bellamente en dos habitaciones es &amp;ldquo;al cuadrado&amp;rdquo;.&lt;/p>
&lt;/blockquote>
&lt;hr>
&lt;h2 id="capítulo-2-cómo-buscar-x-e-y-el-rompecabezas-de-recolectar-tarjetas-de-números-primos">Capítulo 2: ¿Cómo buscar X e Y? &amp;ldquo;El rompecabezas de recolectar tarjetas de números primos&amp;rdquo;
&lt;/h2>&lt;p>Ya sabemos el objetivo. Sin embargo, incluso si buscas al azar &amp;ldquo;$X^2$ e $Y^2$ que tengan el mismo residuo&amp;rdquo;, no lo encontrarás hasta que se acabe la vida útil del universo.
Por eso, los matemáticos idearon un método genial llamado &lt;strong>&amp;ldquo;el rompecabezas de recolectar tarjetas de números primos&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;h3 id="paso-1-recolectar-solo-el-oro-en-polvo-números-suaves-con-un-tamiz">Paso 1: Recolectar solo el oro en polvo (números suaves) con un tamiz
&lt;/h3>&lt;p>Primero, preparamos un número adecuado $Z$, lo elevamos al cuadrado y calculamos el residuo $W$ al dividirlo por $N$.
(El mundo del residuo de $Z^2 = W$)&lt;/p>
&lt;p>Factorizamos el residuo $W$ resultante. Aquí, solo cuando aparece un &lt;strong>&amp;quot;$W$ compuesto solo de números primos pequeños como 2, 3, 5, 7, etc.&amp;quot;&lt;/strong>, guardamos esa fórmula como una &amp;ldquo;tarjeta ganadora&amp;rdquo;, y si se mezclan números primos grandes, la tiramos.
Es como la tarea de tirar piedras grandes con un tamiz en un río y recolectar solo el polvo de oro.&lt;/p>
&lt;h3 id="paso-2-el-rompecabezas-de-hacer-todo-número-par">Paso 2: El rompecabezas de hacer todo &amp;ldquo;número par&amp;rdquo;
&lt;/h3>&lt;p>Por ejemplo, supongamos que se reunieron las siguientes tres tarjetas de polvo de oro:&lt;/p>
&lt;ul>
&lt;li>Tarjeta A: $Z_1^2 = 2^3 \times 3^1$&lt;/li>
&lt;li>Tarjeta B: $Z_2^2 = 2^1 \times 5^1$&lt;/li>
&lt;li>Tarjeta C: $Z_3^2 = 3^1 \times 5^1$&lt;/li>
&lt;/ul>
&lt;p>Multipliquemos todo esto.
El lado derecho se convierte en $(2^3 \times 3^1) \times (2^1 \times 5^1) \times (3^1 \times 5^1)$,
y al organizarlo todo junto queda &lt;strong>&amp;quot;$2^4 \times 3^2 \times 5^2$&amp;quot;&lt;/strong>.&lt;/p>
&lt;p>¡Increíblemente, la cantidad de números primos se ha vuelto &amp;ldquo;4, 2, 2&amp;rdquo;, &lt;strong>todos en cantidades pares&lt;/strong>!
El hecho de que todos sean cantidades pares significa que si reducimos la cantidad total a la mitad, se convierte en el &amp;ldquo;cuadrado de algo&amp;rdquo;.
Es decir, $(2^2 \times 3^1 \times 5^1)^2 = (60)^2$.&lt;/p>
&lt;p>Dado que el lado izquierdo es $(Z_1 \times Z_2 \times Z_3)^2$, ¡con esto finalmente se completa el tan esperado par de &amp;ldquo;$X^2 = Y^2$&amp;rdquo; que es
&lt;strong>$X = (Z_1 \times Z_2 \times Z_3)$&lt;/strong>
&lt;strong>$Y = 60$&lt;/strong>!&lt;/p>
&lt;p>Dado que a las computadoras se les da muy bien el rompecabezas de calcular si la cantidad de números primos es &amp;ldquo;par o impar (0 o 1)&amp;rdquo;, con este método pueden encontrar $X$ e $Y$ a alta velocidad.&lt;/p>
&lt;hr>
&lt;h2 id="capítulo-3-el-muro-de-la-desesperación-que-se-interpone">Capítulo 3: El muro de la desesperación que se interpone
&lt;/h2>&lt;p>¡Con esto se puede romper cualquier cifrado!&amp;hellip; Eso pensarías, pero surge un gran problema.
Si el número $N$ del cifrado tiene hasta &amp;ldquo;100 dígitos&amp;rdquo;, se puede resolver con este método (llamado criba cuadrática), pero cuando $N$ se convierte en &amp;ldquo;200 dígitos, 300 dígitos&amp;rdquo;, el $W$ que aparece en el medio del cálculo se vuelve demasiado grande.&lt;/p>
&lt;p>Cuando los números se vuelven demasiado grandes, de repente dejan de aparecer los &amp;ldquo;números hechos solo de primos pequeños (polvo de oro)&amp;rdquo;. Se vuelve más difícil que buscar una lente de contacto en el desierto, y ya no se pueden juntar en absoluto las tarjetas para resolver el rompecabezas.&lt;/p>
&lt;p>Aquí finalmente aparece el arma definitiva de la humanidad, la &lt;strong>&amp;ldquo;Criba General del Cuerpo de Números (GNFS)&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="capítulo-4-la-idea-más-fuerte-de-la-humanidad-crear-dos-mundos">Capítulo 4: La idea más fuerte de la humanidad: Crear &amp;ldquo;dos mundos&amp;rdquo;
&lt;/h2>&lt;p>La idea genial de GNFS es: &lt;strong>&amp;ldquo;Como calculamos solo en el mundo real, los números se vuelven enormes. Entonces, hagamos un &amp;lsquo;mundo oculto&amp;rsquo; usando polinomios (expresiones algebraicas) y dividamos el peso del cálculo en dos&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;h3 id="la-magia-de-las-expresiones-algebraicas">La magia de las expresiones algebraicas
&lt;/h3>&lt;p>GNFS convierte un número gigante $N$ en una expresión algebraica usando un número base $m$.
Por ejemplo, si $N=100$, usando $m=4$, $100 = 4^3 + 2(4^2) + 4$.
Usando la letra $x$, convertimos esto en la expresión (el mundo oculto) &lt;strong>$f(x) = x^3 + 2x^2 + x$&lt;/strong>.&lt;/p>
&lt;p>Lo interesante de esta expresión es que tiene la propiedad de que &lt;strong>&amp;ldquo;si sustituyes la letra $x$ por $m$ (4 en el ejemplo anterior), siempre puedes regresar (teletransportarte) al número real $N$&amp;rdquo;&lt;/strong>.&lt;/p>
&lt;h3 id="buscar-oro-en-polvo-en-dos-mundos-al-mismo-tiempo">Buscar oro en polvo en dos mundos al mismo tiempo
&lt;/h3>&lt;p>GNFS crea muchos pares de números enteros $(a, b)$ y realiza los siguientes dos cálculos al mismo tiempo:&lt;/p>
&lt;ol>
&lt;li>&lt;strong>El mundo real&lt;/strong>: $a - b \times m$&lt;/li>
&lt;li>&lt;strong>El mundo algebraico&lt;/strong>: el valor de calcular $a - b \times x$ con las reglas del álgebra&lt;/li>
&lt;/ol>
&lt;p>Al dividir el problema en dos mundos, el tamaño de los números manejados se vuelve drásticamente menor (más ligero). Es la imagen de partir una roca gigante en dos para convertirla en piedras fáciles de manejar.&lt;/p>
&lt;p>Luego, con un tamiz (criba), se recolectan solo los pares milagrosos $(a, b)$ que son &lt;strong>&amp;ldquo;tanto en el mundo real como en el mundo algebraico, &amp;lsquo;hechos solo de números primos pequeños (polvo de oro)&amp;rsquo;&amp;rdquo;&lt;/strong>. Este es el origen del nombre &amp;ldquo;Criba del Cuerpo de Números&amp;rdquo;.&lt;/p>
&lt;h3 id="el-momento-en-que-finalmente-se-rompe-el-cifrado">El momento en que finalmente se rompe el cifrado
&lt;/h3>&lt;p>Cuando se reúnen decenas de millones de &amp;ldquo;tarjetas de polvo de oro&amp;rdquo; de ambos mundos, utilizando los cálculos de matrices gigantes de una supercomputadora, descubrimos las &amp;ldquo;combinaciones donde la cantidad de números primos se vuelve toda par&amp;rdquo; que hicimos en el Capítulo 2.&lt;/p>
&lt;p>Una vez que se encuentra la combinación,&lt;/p>
&lt;ul>
&lt;li>Sea el número al cuadrado creado en el mundo real &lt;strong>$X^2$&lt;/strong>&lt;/li>
&lt;li>Sea la expresión al cuadrado creada en el mundo algebraico &lt;strong>$Y(x)^2$&lt;/strong>&lt;/li>
&lt;/ul>
&lt;p>Finalmente, sustituimos $x$ en el $Y(x)$ del mundo algebraico por $m$, para teletransportarlo y unirlo al mundo real.
Entonces, como magia matemática, se completa estrictamente el estado en que &lt;strong>&amp;ldquo;el residuo de $X^2$ y $Y^2$ es el mismo&amp;rdquo;&lt;/strong>!&lt;/p>
&lt;p>El resto es como en el Capítulo 1, si calculamos el máximo común divisor de $X - Y$ y $N$, el inexpugnable cifrado RSA colapsa estruendosamente, y los números primos secretos hacen su aparición.&lt;/p>
&lt;hr>
&lt;h2 id="conclusión-las-matemáticas-no-terminan">Conclusión: Las matemáticas no terminan
&lt;/h2>&lt;p>Es posible que hayas pensado: &amp;ldquo;¡Genial, con GNFS se puede romper cualquier cifrado!&amp;rdquo;.
Sin embargo, el cifrado RSA tampoco se queda atrás. Lo que se utiliza en el Internet actual es un número gigantesco monstruoso llamado &amp;ldquo;RSA-2048 (unos 617 dígitos)&amp;rdquo;.&lt;/p>
&lt;p>Aunque GNFS es el algoritmo más fuerte de la humanidad, se dice que incluso para resolver 270 dígitos (RSA-270), llevaría miles o decenas de miles de años incluso conectando las computadoras de todo el mundo. Por ahora, nuestros datos de LINE o bancos están a salvo.&lt;/p>
&lt;p>Sin embargo, ¿qué pasaría si apareciera &lt;strong>&amp;ldquo;una magia para encontrar $X$ e $Y$ en un instante sin importar cuán grande sea el número&amp;rdquo;&lt;/strong>?
En realidad, la existencia más cercana a eso es la &lt;strong>&amp;ldquo;computadora cuántica (Algoritmo de Shor)&amp;rdquo;&lt;/strong> actualmente en desarrollo. Usando las propiedades ondulatorias de la mecánica cuántica, se ha demostrado matemáticamente que se puede ignorar el molesto rompecabezas de recolección de tarjetas y encontrar la respuesta en un solo intento.&lt;/p>
&lt;p>La interminable batalla de ingenio entre los creadores de cifrados (defensa) y los creadores de algoritmos para romperlos (ataque).
Saber que la &amp;ldquo;factorización de primos&amp;rdquo; o el &amp;ldquo;álgebra&amp;rdquo; que se aprenden en la secundaria son en realidad armas que luchan ferozmente en la vanguardia de la seguridad mundial, ¿no hace que las clases de matemáticas parezcan un poco más interesantes?&lt;/p>
&lt;p>¡Podrías ser tú, que estás leyendo este artículo, quien descubra el algoritmo más fuerte del futuro!&lt;/p>
&lt;hr>
&lt;p>&lt;em>(※Este artículo conceptualiza el encanto matemático del criptoanálisis para estudiantes de secundaria. El GNFS real se calcula estrictamente usando matemáticas universitarias avanzadas, como el grupo de clases de ideales de cuerpos algebraicos y homomorfismos)&lt;/em>&lt;/p></description></item><item><title>La conjetura de Collatz</title><link>http://kenji.blog/es/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/</link><pubDate>Tue, 15 Jul 2025 18:03:03 +0900</pubDate><guid>http://kenji.blog/es/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B3%E3%83%A9%E3%83%83%E3%83%84%E4%BA%88%E6%83%B3/img.png" alt="Featured image of post La conjetura de Collatz" />&lt;h1 id="es-cierto-que-cualquier-número-termina-en-1--jugando-con-la-conjetura-de-collatz">¿Es cierto que &amp;ldquo;cualquier número termina en 1&amp;rdquo;? ── Jugando con la Conjetura de Collatz
&lt;/h1>&lt;p>¡Hola! Soy kenji.&lt;/p>
&lt;p>De repente, si escuchas sobre &amp;ldquo;una regla donde cualquier número termina finalmente en 1&amp;rdquo;,
¿no te parece un poco extraño?&lt;/p>
&lt;blockquote>
&lt;p>Por ejemplo, el 19, el 87 o incluso el 1000000.
Si sigues una regla simple y manipulas el número, por alguna razón siempre converge a &amp;ldquo;1&amp;rdquo; al final.&lt;/p>
&lt;/blockquote>
&lt;p>Esta historia que parece un sueño es la &lt;strong>Conjetura de Collatz (Collatz Conjecture)&lt;/strong>.&lt;/p>
&lt;hr>
&lt;h2 id="para-empezar-qué-es-la-conjetura-de-collatz">Para empezar, ¿qué es la Conjetura de Collatz?
&lt;/h2>&lt;p>Primero, presentaré la regla.&lt;/p>
&lt;ul>
&lt;li>
&lt;p>Inicio: Elige cualquier &lt;strong>entero positivo&lt;/strong>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>Operación:&lt;/p>
&lt;ul>
&lt;li>Si es par → divídelo a la mitad (n → n / 2)&lt;/li>
&lt;li>Si es impar → multiplícalo por 3 y suma 1 (n → 3n + 1)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ul>
&lt;p>Si repites esto una y otra vez, la conjetura es que &lt;strong>cualquier número finalmente llegará a 1&lt;/strong>.&lt;/p>
&lt;p>Por ejemplo, si empezamos con el &lt;code>6&lt;/code>:&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">6 → 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Efectivamente llegó a &amp;ldquo;1&amp;rdquo;. ¡Bienvenido de vuelta!&lt;/p>
&lt;hr>
&lt;h2 id="hagámoslo-con-código-collatz-en-python">Hagámoslo con código: Collatz en Python
&lt;/h2>&lt;p>Bueno, en estos casos ¡es más rápido probar con código!
Imprimamos la &amp;ldquo;secuencia de Collatz&amp;rdquo; en Python.&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;/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="k">def&lt;/span> &lt;span class="nf">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">]&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">while&lt;/span> &lt;span class="n">n&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 class="k">if&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">//&lt;/span> &lt;span class="mi">2&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">n&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="o">+&lt;/span> &lt;span class="mi">1&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="n">steps&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"># Ejemplo: empezando con 19&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">19&lt;/span>&lt;span class="p">))&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Al ejecutarlo:&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[19, 58, 29, 88, 44, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8, 4, 2, 1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Llega perfectamente al 1.
Da bastantes rodeos, pero al final ¡alcanza la meta!&lt;/p>
&lt;p>Por cierto, incluso si empiezas con 29, también llegará a 1 de la misma manera.&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">pythonprint(collatz(29))
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Al ejecutarlo:&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">[27, 82, 41, 124, 62, 31, 94, 47, 142, 71, 214, 107, 322, 161, 484, 242,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">121, 364, 182, 91, 274, 137, 412, 206, 103, 310, 155, 466, 233, 700, 350,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">175, 526, 263, 790, 395, 1186, 593, 1780, 890, 445, 1336, 668, 334, 167,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">502, 251, 754, 377, 1132, 566, 283, 850, 425, 1276, 638, 319, 958, 479,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">1438, 719, 2158, 1079, 3238, 1619, 4858, 2429, 7288, 3644, 1822, 911,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">2734, 1367, 4102, 2051, 6154, 3077, 9232, 4616, 2308, 1154, 577, 1732,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">866, 433, 1300, 650, 325, 976, 488, 244, 122, 61, 184, 92, 46, 23, 70, 35,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">106, 53, 160, 80, 40, 20, 10, 5, 16, 8, 4, 2, 1]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>¡Vaya, toma 111 pasos!&lt;/p>
&lt;p>Y además, hay momentos en los que se infla por encima de 9000.
Es un patrón que da muchísimas vueltas antes de llegar a la meta.&lt;/p>
&lt;hr>
&lt;h2 id="y-al-final-qué-tiene-de-increíble">Y, al final, ¿qué tiene de increíble?
&lt;/h2>&lt;p>Lo increíble de esta conjetura es,&lt;/p>
&lt;blockquote>
&lt;p>&lt;strong>Aunque no está comprobada, parece que funciona con cualquier número y termina en 1&lt;/strong>&lt;/p>
&lt;/blockquote>
&lt;p>Es justo eso.&lt;/p>
&lt;p>¿Eh? Entonces, ¿qué pasa con 1 billón, o 1 trillón&amp;hellip;?&lt;/p>
&lt;p>Si pensaste eso, eres muy perspicaz.
De hecho, usando computadoras se ha verificado hasta aproximadamente &amp;ldquo;2 elevado a 68&amp;rdquo;,
y &lt;strong>todos llegan a 1&lt;/strong>. Increíble&amp;hellip;&lt;/p>
&lt;p>Pero, &lt;strong>no se ha demostrado teóricamente que &amp;ldquo;todos lo hagan&amp;rdquo;&lt;/strong>.
Esto es lo que en el mundo de las matemáticas se llama un &amp;ldquo;problema no resuelto&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="quién-es-el-sr-collatz">¿Quién es el Sr. Collatz?
&lt;/h2>&lt;p>Y, al leer hasta aquí, seguro piensas &amp;ldquo;¿y quién es Collatz?&amp;rdquo;.
¡Lo presentaré adecuadamente!&lt;/p>
&lt;ul>
&lt;li>Nombre: &lt;strong>Lothar Collatz&lt;/strong>&lt;/li>
&lt;li>Nacionalidad: Alemán&lt;/li>
&lt;li>Nacimiento: 1910 - 1990&lt;/li>
&lt;li>Profesión: Matemático (destacado en análisis funcional y teoría de números)&lt;/li>
&lt;/ul>
&lt;p>Propuso esta conjetura en 1937, y
después de eso, durante más de 80 años &lt;strong>nadie ha podido demostrarla ni refutarla&lt;/strong>.&lt;/p>
&lt;p>Por cierto, este problema es tan simple pero tan profundo,
que incluso el famoso Paul Erdős (un matemático súper famoso) dijo:&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Las matemáticas aún no están listas para la conjetura de Collatz&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>En otras palabras, la teoría es que las matemáticas de la humanidad aún no han alcanzado este misterio&amp;hellip;&lt;/p>
&lt;hr>
&lt;h2 id="no-se-necesitan-fórmulas-matemáticas-difíciles">No se necesitan &amp;ldquo;fórmulas matemáticas difíciles&amp;rdquo;
&lt;/h2>&lt;p>Lo bueno de la conjetura de Collatz es que &lt;strong>cualquiera puede jugar&lt;/strong>.&lt;/p>
&lt;p>Puedes hacerlo si tienes papel y bolígrafo.
Si escribes el código en Python, puedes probarlo automáticamente.
Y aun así, &lt;strong>los matemáticos más avanzados lo están intentando en serio&lt;/strong>.&lt;/p>
&lt;p>No sé, ¿no te emociona?&lt;/p>
&lt;hr>
&lt;h2 id="bonus-código-para-probar-de-una-vez">Bonus: Código para probar de una vez
&lt;/h2>&lt;p>También dejaré un código para probar varios números a la vez.&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;/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="k">for&lt;/span> &lt;span class="n">n&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="nb">range&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="mi">21&lt;/span>&lt;span class="p">):&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">steps&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">collatz&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="nb">print&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="sa">f&lt;/span>&lt;span class="s2">&amp;#34;&lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="n">steps&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2"> (pasos: &lt;/span>&lt;span class="si">{&lt;/span>&lt;span class="nb">len&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">steps&lt;/span>&lt;span class="p">)&lt;/span>&lt;span class="o">-&lt;/span>&lt;span class="mi">1&lt;/span>&lt;span class="si">}&lt;/span>&lt;span class="s2">)&amp;#34;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Esto imprimirá la secuencia de Collatz del &amp;ldquo;1 al 20&amp;rdquo; de una vez.&lt;/p>
&lt;hr>
&lt;h2 id="conclusión-este-mundo-al-final-es-misterioso">Conclusión: Este mundo, al final, es misterioso
&lt;/h2>&lt;p>Así que, la conjetura de Collatz.&lt;/p>
&lt;ul>
&lt;li>Aunque es súper simple&lt;/li>
&lt;li>Nadie puede probarlo&lt;/li>
&lt;li>Es un gran problema en el mundo de las matemáticas&lt;/li>
&lt;/ul>
&lt;p>Es como una masa de misterio.&lt;/p>
&lt;p>¡Incluso los principiantes en programación pueden probarlo, así que anímate a jugar!&lt;/p>
&lt;hr>
&lt;h2 id="enlaces-recomendados-para-interesados">Enlaces recomendados (para interesados)
&lt;/h2>&lt;ul>
&lt;li>&lt;a class="link" href="https://es.wikipedia.org/wiki/Conjetura_de_Collatz" target="_blank" rel="noopener"
>Wikipedia: Conjetura de Collatz&lt;/a>&lt;/li>
&lt;li>&lt;a class="link" href="https://arxiv.org/abs/1909.03562" target="_blank" rel="noopener"
>Artículo de Terence Tao (en inglés)&lt;/a>&lt;/li>
&lt;li>¡También es divertido crear una versión visual en Python! (Lo haré si hay peticiones)&lt;/li>
&lt;/ul>
&lt;hr>
&lt;p>Si quieres conocer más de este tipo de temas &amp;ldquo;Matemáticas misteriosas × Programación&amp;rdquo;,
no dudes en pedirme &amp;ldquo;cuéntame más&amp;rdquo;.
¡Pronto te presentaré la Hipótesis de Riemann, historias sobre números primos y muchas cosas más!&lt;/p>
&lt;hr>
&lt;p>📮 ¡Fin!&lt;/p>
&lt;hr></description></item><item><title>Principio de Kerckhoffs</title><link>http://kenji.blog/es/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/</link><pubDate>Wed, 16 Apr 2025 23:53:08 +0900</pubDate><guid>http://kenji.blog/es/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/</guid><description>&lt;img src="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_2.png" alt="Featured image of post Principio de Kerckhoffs" />&lt;h1 id="principio-de-kerckhoffs">Principio de Kerckhoffs
&lt;/h1>&lt;hr>
&lt;p>¡Hola!&lt;/p>
&lt;p>Hoy me gustaría hablar sobre un tema un poco interesante y, de hecho, extremadamente importante: el &amp;ldquo;Principio de Kerckhoffs&amp;rdquo;.&lt;/p>
&lt;p>Ah, esperen, esperen.
Quizás algunos de ustedes piensen: &amp;ldquo;Nunca he oído hablar del &amp;lsquo;Principio de Kerckhoffs&amp;rsquo; y suena demasiado técnico&amp;hellip;&amp;rdquo;. No se preocupen. Este artículo está escrito precisamente para ustedes.&lt;/p>
&lt;hr>
&lt;h2 id="qué-significa-una-criptografía-segura">¿Qué significa una &amp;ldquo;criptografía segura&amp;rdquo;?
&lt;/h2>&lt;p>Por ejemplo, imaginen que alguien les dice: &amp;ldquo;Esta caja fuerte solo puede ser abierta por quienes conocen el método secreto&amp;rdquo;.&lt;/p>
&lt;p>A primera vista, eso parece muy seguro, ¿verdad?
Pero, si lo piensan bien, ¿no les da un poco de inquietud?&lt;/p>
&lt;p>Algo así como, &amp;ldquo;¿qué pasa si se descubre ese secreto? ¿Se acabó todo?&amp;rdquo;.&lt;/p>
&lt;p>De hecho, este es el motivo por el cual aparece el Principio de Kerckhoffs.&lt;/p>
&lt;hr>
&lt;h2 id="pero-qué-es-el-principio-de-kerckhoffs">Pero, ¿qué es el &amp;ldquo;Principio de Kerckhoffs&amp;rdquo;?
&lt;/h2>&lt;p>En términos muy generales, es la idea de que:&lt;/p>
&lt;p>&lt;strong>&amp;ldquo;Un sistema criptográfico debe ser seguro incluso si se conoce su funcionamiento.&amp;rdquo;&lt;/strong>&lt;/p>
&lt;p>Dicho de otra manera: &amp;ldquo;La seguridad debe depender únicamente de la &amp;lsquo;clave secreta&amp;rsquo;, ¡y está bien que el método de encriptación en sí sea público!&amp;rdquo;.&lt;/p>
&lt;p>Por el contrario, esto significa que &amp;ldquo;un sistema donde solo el algoritmo (el funcionamiento) es un secreto, se considera poco confiable&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="si-el-funcionamiento-es-secreto-es-seguro-puede-ser-un-poco-peligroso">&amp;ldquo;Si el funcionamiento es secreto, es seguro&amp;rdquo; puede ser un poco peligroso
&lt;/h2>&lt;p>Una forma de pensar muy común es esta:&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Nadie ha visto el interior de esta aplicación, así que la seguridad está bien.&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Entiendo el sentimiento.
Pero, eso es lo mismo que decir &amp;ldquo;como nadie lo ha visto, no encontrarán los defectos, así que estamos a salvo&amp;rdquo;.&lt;/p>
&lt;p>En realidad, el simple hecho de que &amp;ldquo;nadie lo haya visto&amp;rdquo; puede convertirse en un riesgo en sí mismo.&lt;/p>
&lt;hr>
&lt;h2 id="pero-por-qué-es-tan-importante-este-principio">¿Pero por qué es tan importante este principio?
&lt;/h2>&lt;p>La razón es que, si alguien logra descubrir cómo funciona y puede descifrarlo fácilmente, entonces ese sistema criptográfico ya no sirve.&lt;/p>
&lt;p>Para usar una analogía, es como tener una cerradura con un mecanismo muy complejo, pero que resulta que se puede abrir con una llave maestra comprada en una tienda de todo a un dólar.&lt;/p>
&lt;p>Lo importante no es decir &amp;ldquo;estamos seguros porque la llave es secreta&amp;rdquo;, sino &amp;ldquo;incluso si mostramos todo el mecanismo, no se puede abrir sin la llave correcta&amp;rdquo;.&lt;/p>
&lt;hr>
&lt;h2 id="el-sentimiento-de-pero-no-da-un-poco-de-miedo">El sentimiento de &amp;ldquo;¿pero no da un poco de miedo?&amp;rdquo;
&lt;/h2>&lt;p>Aquí es donde muchas personas sienten:&lt;/p>
&lt;blockquote>
&lt;p>&amp;ldquo;Revelar todo el mecanismo, ¿no da un poco de miedo?&amp;rdquo;&lt;/p>
&lt;/blockquote>
&lt;p>Esa inquietud es comprensible.
Porque es natural pensar: &amp;ldquo;Si muestro todo lo que hay dentro, ¿no me copiarán o lo usarán con malas intenciones?&amp;rdquo;.&lt;/p>
&lt;p>Pero, ahí es exactamente donde radica el núcleo del Principio de Kerckhoffs.
La &amp;ldquo;fortaleza que no se desmorona incluso al mostrar el interior&amp;rdquo; es lo que constituye la verdadera seguridad.&lt;/p>
&lt;hr>
&lt;h2 id="dicho-esto-requiere-un-poco-de-valor-al-principio">Dicho esto, requiere un poco de valor al principio
&lt;/h2>&lt;p>Si nos ponemos en el lugar de los desarrolladores, &amp;ldquo;hacer público el funcionamiento = que se vean las debilidades&amp;rdquo;, y claro, eso da nervios.&lt;/p>
&lt;p>Pero piénsenlo un momento.&lt;/p>
&lt;p>Un sistema que se muestra de forma transparente y dice &amp;ldquo;cualquiera puede verificarlo&amp;rdquo;, al final resulta más confiable.&lt;/p>
&lt;p>Es parecido a las relaciones humanas, ¿verdad?&lt;/p>
&lt;p>&amp;ldquo;Las personas que nos aceptan después de mostrarles nuestro verdadero yo&amp;rdquo; son, al fin y al cabo, las que más tranquilidad nos dan.&lt;/p>
&lt;hr>
&lt;h2 id="en-conclusión">En conclusión
&lt;/h2>&lt;p>El Principio de Kerckhoffs puede sonar un poco teórico, pero su esencia es muy simple.&lt;/p>
&lt;p>Se trata simplemente de:
&lt;strong>&amp;ldquo;Creemos un sistema que no se rompa sin importar a quién se lo mostremos.&amp;rdquo;&lt;/strong>&lt;/p>
&lt;p>Más allá de los secretos superficiales, un diseño sólido.
En lugar de código que no quieres que nadie vea, código que no te dé vergüenza mostrar.&lt;/p>
&lt;p>Ese tipo de &amp;ldquo;fortaleza&amp;rdquo; será cada vez más demandado en los tiempos venideros.&lt;/p>
&lt;hr>
&lt;p>¡Gracias por leer!&lt;/p>
&lt;p>Hablar de seguridad puede ser un poco difícil, pero tiene partes que se conectan con &amp;ldquo;las relaciones humanas&amp;rdquo; o &amp;ldquo;la sensación de seguridad en la vida diaria&amp;rdquo;, ¿verdad?
Sin presiones, si vamos aprendiendo poco a poco, seguro que traerá cosas buenas.&lt;/p>
&lt;hr>
&lt;p>&lt;img src="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img.png"
width="189"
height="282"
srcset="http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_hu715032b7fe5224f655ebb7d29b676305_77325_480x0_resize_box_3.png 480w, http://kenji.blog/p/%E3%82%B1%E3%83%AB%E3%82%AF%E3%83%9B%E3%83%95%E3%82%B9%E3%81%AE%E5%8E%9F%E7%90%86/img_hu715032b7fe5224f655ebb7d29b676305_77325_1024x0_resize_box_3.png 1024w"
loading="lazy"
alt="Auguste Kerckhoffs"
class="gallery-image"
data-flex-grow="67"
data-flex-basis="160px"
>&lt;/p></description></item><item><title>Código en C para generar números primos</title><link>http://kenji.blog/es/p/%E7%B4%A0%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bc%E8%A8%80%E8%AA%9E%E3%82%B3%E3%83%BC%E3%83%89/</link><pubDate>Sat, 24 Aug 2024 09:38:10 +0900</pubDate><guid>http://kenji.blog/es/p/%E7%B4%A0%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bc%E8%A8%80%E8%AA%9E%E3%82%B3%E3%83%BC%E3%83%89/</guid><description>&lt;img src="http://kenji.blog/p/%E7%B4%A0%E6%95%B0%E3%82%92%E7%94%9F%E6%88%90%E3%81%99%E3%82%8Bc%E8%A8%80%E8%AA%9E%E3%82%B3%E3%83%BC%E3%83%89/img.png" alt="Featured image of post Código en C para generar números primos" />&lt;p>A continuación, se muestra un código en C simple que genera números primos dentro de un rango especificado. En este ejemplo, se enumeran los números primos del 1 al n.&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-cpp" data-lang="cpp">&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdio.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">#include&lt;/span> &lt;span class="cpf">&amp;lt;stdbool.h&amp;gt;&lt;/span>&lt;span class="cp">
&lt;/span>&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="cp">&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">bool&lt;/span> &lt;span class="nf">isPrime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">1&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">2&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="mi">3&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&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">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">5&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">*&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">num&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">6&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="mi">0&lt;/span> &lt;span class="o">||&lt;/span> &lt;span class="n">num&lt;/span> &lt;span class="o">%&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">i&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">0&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="k">return&lt;/span> &lt;span class="nb">false&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="nb">true&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="kt">void&lt;/span> &lt;span class="nf">printPrimes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;2 &amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">for&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="kt">int&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="mi">3&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">&amp;lt;=&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span> &lt;span class="n">i&lt;/span> &lt;span class="o">+=&lt;/span> &lt;span class="mi">2&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">if&lt;/span> &lt;span class="p">(&lt;/span>&lt;span class="n">isPrime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">i&lt;/span>&lt;span class="p">))&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;%d &amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">i&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="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="kt">int&lt;/span> &lt;span class="nf">main&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="p">{&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="kt">int&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Ingrese el valor maximo del rango para generar numeros primos: &amp;#34;&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">scanf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;%d&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="o">&amp;amp;&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printf&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s">&amp;#34;Los numeros primos de 1 a %d son los siguientes:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s">&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="n">printPrimes&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">n&lt;/span>&lt;span class="p">);&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl"> &lt;span class="k">return&lt;/span> &lt;span class="mi">0&lt;/span>&lt;span class="p">;&lt;/span>
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">&lt;span class="p">}&lt;/span>
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Este código funciona de la siguiente manera:&lt;/p>
&lt;ol>
&lt;li>Función isPrime: Determina si un número dado es primo. Por razones de eficiencia, primero verifica si es divisible por 2 y 3, y luego procede a verificar en múltiplos de 6.&lt;/li>
&lt;li>Función printPrimes: Imprime los números primos dentro del rango especificado. El 2 se imprime primero, y luego solo se verifican los números impares.&lt;/li>
&lt;li>Función main: Pide al usuario que ingrese el valor máximo del rango y luego imprime los números primos dentro de ese rango.&lt;/li>
&lt;/ol>
&lt;p>Al compilar y ejecutar este código, se mostrarán los números primos dentro del rango especificado.&lt;/p></description></item><item><title>Introducción a Mathematica</title><link>http://kenji.blog/es/p/mathematica%E5%85%A5%E9%96%80/</link><pubDate>Thu, 25 Jul 2024 01:36:19 +0900</pubDate><guid>http://kenji.blog/es/p/mathematica%E5%85%A5%E9%96%80/</guid><description>&lt;img src="http://kenji.blog/p/mathematica%E5%85%A5%E9%96%80/img.png" alt="Featured image of post Introducción a Mathematica" />&lt;h1 id="introducción-a-mathematica">Introducción a Mathematica
&lt;/h1>&lt;h2 id="resolver-ecuaciones">Resolver ecuaciones
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Solve[x^2 - 3 x + 2 == 0, x]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{x -&amp;gt; 1}, {x -&amp;gt; 2}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="encontrar-soluciones-enteras-para-una-ecuación">Encontrar soluciones enteras para una ecuación
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Solve[x^2 - 3 x + 2 == 0 &amp;amp;&amp;amp; 0 &amp;lt;= x &amp;lt;= 2, x, Integers]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{x -&amp;gt; 1}, {x -&amp;gt; 2}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="resolver-un-sistema-de-ecuaciones">Resolver un sistema de ecuaciones
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Solve[{x + y == 3, x - y == 1}, {x, y}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{x -&amp;gt; 2, y -&amp;gt; 1}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="resolver-inecuaciones">Resolver inecuaciones
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Reduce[x^2 - 3 x + 2 &amp;gt; 0, x]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">x &amp;lt; 1 || x &amp;gt; 2
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="derivar">Derivar
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">D[x^2, x]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">2 x
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="integrar">Integrar
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Integrate[x^2, x]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">x^3/3
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-el-límite">Calcular el límite
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Limit[1/x, x -&amp;gt; 0]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Infinity
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-una-serie">Calcular una serie
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Sum[1/n^2, {n, 1, Infinity}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">π^2/6
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="crear-una-matriz">Crear una matriz
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">m = {{1, 2}, {3, 4}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="multiplicar-matrices">Multiplicar matrices
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">m . m
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{7, 10}, {15, 22}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-la-matriz-inversa">Calcular la matriz inversa
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Inverse[m]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{-2, 1}, {1.5, -0.5}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-valores-propios-y-vectores-propios">Calcular valores propios y vectores propios
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Eigensystem[m]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{{5, 0}, {{1, 1}, {1, -1}}}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-el-producto-punto-de-vectores">Calcular el producto punto de vectores
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{1, 2} . {3, 4}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">11
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-el-producto-cruzado-de-vectores">Calcular el producto cruzado de vectores
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Cross[{1, 2, 3}, {4, 5, 6}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{-3, 6, -3}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-la-magnitud-norma-de-un-vector">Calcular la magnitud (norma) de un vector
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Norm[{1, 2, 3}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">√14
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-el-ángulo-entre-vectores">Calcular el ángulo entre vectores
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ArcCos[{1, 2} . {3, 4}/(Norm[{1, 2}] Norm[{3, 4}])]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ArcCos[11/(√5 √25)]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-la-proyección-de-un-vector">Calcular la proyección de un vector
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{1, 2} . {3, 4}/Norm[{3, 4}] {3, 4}/Norm[{3, 4}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{11/5, 22/5}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-la-rotación-de-un-vector">Calcular la rotación de un vector
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RotationMatrix[π/2].{1, 0}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{0, 1}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-la-traslación-de-un-vector">Calcular la traslación de un vector
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">TranslationTransform[{1, 2}][{3, 4}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{4, 6}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-la-escala-de-un-vector">Calcular la escala de un vector
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ScalingTransform[{2, 3}][{1, 1}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{2, 3}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="calcular-la-reflexión-de-un-vector">Calcular la reflexión de un vector
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">ReflectionTransform[{1, 1}][{1, 1}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{0, 0}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="generar-un-número-aleatorio">Generar un número aleatorio
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomReal[]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">0.123456
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="generar-un-número-aleatorio-entero">Generar un número aleatorio (entero)
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomInteger[]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">123456
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="generar-un-número-aleatorio-rango-específico">Generar un número aleatorio (rango específico)
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomReal[{1, 10}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">5.6789
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="generar-un-número-aleatorio-entero-rango-específico">Generar un número aleatorio (entero, rango específico)
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomInteger[{1, 10}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">5
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="generar-un-número-aleatorio-distribución-específica">Generar un número aleatorio (distribución específica)
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomVariate[NormalDistribution[0, 1]]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">0.123456
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="generar-números-aleatorios-distribución-y-cantidad-específicas">Generar números aleatorios (distribución y cantidad específicas)
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">RandomVariate[NormalDistribution[0, 1], 10]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{0.123456, 0.234567, ..., 0.987654}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="generar-números-aleatorios-distribución-cantidad-y-semilla-específicas">Generar números aleatorios (distribución, cantidad y semilla específicas)
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">SeedRandom[12345]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">RandomVariate[NormalDistribution[0, 1], 10]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{0.123456, 0.234567, ..., 0.987654}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="aplicar-una-función-a-los-elementos-de-un-array">Aplicar una función a los elementos de un array
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Map[Sqrt, {1, 4, 9}]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Sqrt /@ {1, 4, 9}
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Map[#^(1/2)&amp;amp;, {1, 4, 9}]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{1, 2, 3}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="definir-una-función-usando-una-expresión-lambda">Definir una función usando una expresión lambda
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">f = Function[x, x^2]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">f[3]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">9
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="componer-funciones">Componer funciones
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">f = Function[x, x^2]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">g = Function[x, x + 1]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h = Function[x, f[g[x]]]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">h[3]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">16
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="hacer-referencia-al-resultado-del-cálculo-anterior">Hacer referencia al resultado del cálculo anterior
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">% + 1
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">17
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="función-pura">Función pura
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">(#+3)&amp;amp;[5]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">8
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h2 id="extraer-elementos-de-un-array">Extraer elementos de un array
&lt;/h2>&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">Select[{1, 2, 3, 4, 5}, EvenQ]
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">Select[{1, 2, 3, 4, 5}, Mod[#,2]==0&amp;amp;]
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>Salida&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;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre tabindex="0" class="chroma">&lt;code class="language-fallback" data-lang="fallback">&lt;span class="line">&lt;span class="cl">{2, 4}
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div></description></item><item><title>El problema de Monty Hall</title><link>http://kenji.blog/es/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/</link><pubDate>Sun, 31 Mar 2024 23:41:51 +0900</pubDate><guid>http://kenji.blog/es/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/</guid><description>&lt;img src="http://kenji.blog/p/%E3%83%A2%E3%83%B3%E3%83%86%E3%82%A3%E3%83%9B%E3%83%BC%E3%83%AB%E5%95%8F%E9%A1%8C/img_1.png" alt="Featured image of post El problema de Monty Hall" />&lt;h2 id="qué-es-el-problema-de-monty-hall">¿Qué es el problema de Monty Hall?
&lt;/h2>&lt;p>El problema de Monty Hall es uno de los juegos que se realizaban en el programa de televisión estadounidense &amp;ldquo;Let&amp;rsquo;s Make a Deal&amp;rdquo;, y consiste en el siguiente problema:&lt;/p>
&lt;p>Premisa: De tres puertas, una contiene un premio y las otras dos no contienen premio.&lt;/p>
&lt;ol>
&lt;li>El participante elige una de las tres puertas.&lt;/li>
&lt;li>El presentador abre una puerta sin premio de entre las dos puertas que el participante no eligió.&lt;/li>
&lt;li>Se le pregunta al participante si desea cambiar la puerta elegida.&lt;/li>
&lt;/ol>
&lt;p>En este caso, el problema es considerar si es mejor para el participante cambiar de puerta o no cambiarla.&lt;/p>
&lt;h2 id="solución">Solución
&lt;/h2>&lt;p>La solución al problema de Monty Hall es la siguiente:&lt;/p>
&lt;ol>
&lt;li>
&lt;p>Si el participante no cambia la puerta que eligió inicialmente&lt;/p>
&lt;ul>
&lt;li>Probabilidad de ganar: 1/3&lt;/li>
&lt;li>Probabilidad de perder: 2/3&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>
&lt;p>Después de que el presentador abre la puerta sin premio&lt;/p>
&lt;ul>
&lt;li>Si no cambia, la probabilidad de ganar: 1/3 (no cambia respecto a la probabilidad de ganar del punto 1)&lt;/li>
&lt;li>Si cambia, la probabilidad de ganar: 2/3 (la probabilidad contraria a ganar del punto 1)&lt;/li>
&lt;/ul>
&lt;/li>
&lt;/ol>
&lt;p>Por lo tanto, la probabilidad de ganar es mayor si el participante cambia de puerta.&lt;/p>
&lt;h2 id="referencias">Referencias
&lt;/h2>&lt;ul>
&lt;li>Wikipedia &lt;a class="link" href="https://en.wikipedia.org/wiki/Monty_Hall_problem" target="_blank" rel="noopener"
>Monty Hall problem&lt;/a>&lt;/li>
&lt;/ul></description></item><item><title>Grandes Matemáticos</title><link>http://kenji.blog/es/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/</link><pubDate>Thu, 22 Sep 2022 23:06:37 +0900</pubDate><guid>http://kenji.blog/es/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/</guid><description>&lt;img src="http://kenji.blog/p/%E6%95%B0%E5%AD%A6%E3%81%AE%E5%81%89%E4%BA%BA%E3%81%9F%E3%81%A1/img.png" alt="Featured image of post Grandes Matemáticos" />&lt;h3 id="fermat-p-de-fermat-1601-1665">Fermat (P, de Fermat, 1601-1665)
&lt;/h3>&lt;p>Matemático francés representante del siglo XVII. Sentó las bases de la geometría analítica, la teoría de la probabilidad, el cálculo diferencial, etc. También es el fundador de la teoría de números.&lt;/p>
&lt;h3 id="diofanto-diophantus-c-207-c-291">Diofanto (Diophantus, c. 207-c. 291)
&lt;/h3>&lt;p>Matemático griego. Famoso por la introducción de notación simbólica y el estudio de soluciones racionales. Su obra representativa es &amp;ldquo;Arithmetica&amp;rdquo;. El campo de encontrar soluciones racionales a ecuaciones se llama análisis diofántico.&lt;/p>
&lt;h3 id="euler-l-euler-1707-1783">Euler (L. Euler, 1707-1783)
&lt;/h3>&lt;p>El rey de las matemáticas nacido en Suiza. Logró resultados en todas las áreas posibles de las matemáticas. Dejó más de 700 artículos y 45 libros.&lt;/p>
&lt;h3 id="legendre-a-m-legendre-1752-1833">Legendre (A. M. Legendre, 1752-1833)
&lt;/h3>&lt;p>Matemático francés. Dejó numerosos logros en la teoría de números, integrales elípticas, problemas de atracción gravitatoria, etc. La palabra &amp;ldquo;teoría de números&amp;rdquo; se deriva de su obra principal homónima.&lt;/p>
&lt;h3 id="kummer-e-e-kummer-1810-1893">Kummer (E. E. Kummer, 1810-1893)
&lt;/h3>&lt;p>Matemático alemán. Logró grandes resultados aplicando la teoría de números de los campos ciclotómicos al último teorema de Fermat.&lt;/p>
&lt;h3 id="descartes-r-descartes-1596-1650">Descartes (R. Descartes, 1596-1650)
&lt;/h3>&lt;p>Original filósofo francés. Sus obras representativas incluyen el &amp;ldquo;Discurso del método&amp;rdquo;, la &amp;ldquo;Geometría&amp;rdquo; y &amp;ldquo;El mundo&amp;rdquo;.&lt;/p>
&lt;h3 id="pascal-b-pascal-1623-1662">Pascal (B. Pascal, 1623-1662)
&lt;/h3>&lt;p>Filósofo francés conocido por su investigación en la teoría de la probabilidad y los fluidos. Más tarde se unió a la secta jansenista y se dedicó a actividades religiosas. &amp;ldquo;Pensamientos&amp;rdquo; es una obra de esa época.&lt;/p>
&lt;h3 id="bachet-c-g-bachet-1581-1638">Bachet (C. G. Bachet, 1581-1638)
&lt;/h3>&lt;p>Noble francés que estudió rompecabezas numéricos como pasatiempo. Publicó una traducción latina de la &amp;ldquo;Arithmetica&amp;rdquo; de Diofanto, donde incluyó su propia investigación como comentarios.&lt;/p>
&lt;h3 id="wallis-j-wallis-1616-1703">Wallis (J. Wallis, 1616-1703)
&lt;/h3>&lt;p>Matemático inglés. En su obra principal &amp;ldquo;Arithmetica Infinitorum&amp;rdquo;, dio una forma matemática al concepto de límite y contribuyó a sentar las bases del cálculo.&lt;/p>
&lt;h3 id="brouncker-w-brouncker-1620-1684">Brouncker (W. Brouncker, 1620-1684)
&lt;/h3>&lt;p>Noble irlandés. Primer presidente de la Royal Society (Academia Británica de Ciencias). Entusiasta de las matemáticas que interactuó con Wallis y otros.&lt;/p>
&lt;h3 id="lagrange-j-l-lagrange-1736-1813">Lagrange (J. L. Lagrange, 1736-1813)
&lt;/h3>&lt;p>Matemático francés nacido en Italia. Sucedió a Euler como director del departamento de matemáticas de la Academia de Ciencias de Berlín. Logró grandes resultados en la teoría de números, la mecánica analítica, etc.&lt;/p>
&lt;h3 id="siegel-c-l-siegel-1896-1981">Siegel (C. L. Siegel, 1896-1981)
&lt;/h3>&lt;p>Especialista alemán en teoría de números. Hizo numerosas contribuciones a la teoría analítica de números.&lt;/p>
&lt;h3 id="fibonacci-l-fibonacci-c-1175-c-1250">Fibonacci (L. Fibonacci, c. 1175-c. 1250)
&lt;/h3>&lt;p>Matemático italiano. En su obra principal &amp;ldquo;Liber Abaci&amp;rdquo;, utilizó números indo-arábigos y se esforzó por popularizarlos. También discutió los números congruentes en &amp;ldquo;Liber Quadratorum&amp;rdquo;.&lt;/p>
&lt;h3 id="baker-a-baker-1939-">Baker (A. Baker, 1939-)
&lt;/h3>&lt;p>Especialista inglés en teoría de números. Recibió la Medalla Fields junto con Heisuke Hironaka por sus contribuciones a la teoría de números trascendentes.&lt;/p>
&lt;h3 id="poincaré-j-poincare-1854-1912">Poincaré (J. Poincare, 1854-1912)
&lt;/h3>&lt;p>Matemático francés llamado el último erudito universal de las matemáticas. Dejó obras destacadas en la teoría de funciones automórficas, geometría no euclidiana, ecuaciones diferenciales, mecánica celeste, electrodinámica, etc., así como en la crítica científica.&lt;/p>
&lt;h3 id="mordell-l-j-mordell-1888-1972">Mordell (L. J. Mordell, 1888-1972)
&lt;/h3>&lt;p>Matemático nacido en EE. UU. Sus padres eran inmigrantes de Lituania. Tiene muchos artículos sobre la teoría de ecuaciones diofánticas, pero el teorema de Mordell en la teoría de curvas elípticas es particularmente famoso. André Weil amplió esto al caso de las curvas algebraicas generales, y a partir de ahí, la geometría algebraica aritmética experimentó un desarrollo explosivo.&lt;/p>
&lt;h3 id="weil-a-weil-1906-">Weil (A. Weil, 1906-)
&lt;/h3>&lt;p>Matemático francés de ascendencia judía. De joven, se interesó por el último teorema de Fermat y, con el propósito de aplicarlo a la teoría de números, revisó fundamentalmente la geometría algebraica y estableció bases rigurosas. También es conocido por sus escritos sobre la historia de las matemáticas.&lt;/p>
&lt;h3 id="mersenne-m-mersenne-1588-1648">Mersenne (M. Mersenne, 1588-1648)
&lt;/h3>&lt;p>Sacerdote católico francés de la Orden de los Mínimos. Facilitó la correspondencia entre matemáticos de varias regiones. El número que lleva el nombre de número de Mersenne es, de hecho, un número ideado por Fermat.&lt;/p>
&lt;h3 id="roberval-g-p-de-roberval-1602-1675">Roberval (G. P. de Roberval, 1602-1675)
&lt;/h3>&lt;p>Matemático francés. Casi la única persona en ese momento que había obtenido un puesto de profesor como matemático, conocido por su estudio de la cicloide.&lt;/p>
&lt;h3 id="abel-n-h-abel-1802-1829">Abel (N. H. Abel, 1802-1829)
&lt;/h3>&lt;p>Matemático noruego. Logró resultados sobresalientes como la imposibilidad de resolver la ecuación general de quinto grado, la teoría de funciones elípticas y la teoría de integrales abelianas, pero murió joven.&lt;/p>
&lt;h3 id="jacobi-k-g-jacob-1804-1851">Jacobi (K. G. Jacob, 1804-1851)
&lt;/h3>&lt;p>Matemático alemán de ascendencia judía. Dejó grandes resultados en la teoría de funciones elípticas, la teoría de funciones theta, ecuaciones diferenciales, cálculo de variaciones, etc. Introdujo los logros de Abel al mundo. Es conocido por declarar que el propósito de la ciencia es &amp;ldquo;el honor de la mente humana&amp;rdquo; y rechazar el pragmatismo.&lt;/p>
&lt;h3 id="gauss-c-f-gauss-1777-1855">Gauss (C. F. Gauss, 1777-1855)
&lt;/h3>&lt;p>El rey de las matemáticas nacido en Alemania. Conocido por la teoría de números, geometría no euclidiana, geodesia, series hipergeométricas, teoría de superficies, estudio del magnetismo terrestre, etc. Era un perfeccionista y se dice que no publicaba resultados a menos que tuvieran un nivel de perfección tan alto que no dejara rastro de su proceso. Su obra principal es &amp;ldquo;Disquisitiones Arithmeticae&amp;rdquo;.&lt;/p>
&lt;h3 id="lamé-g-lame-1795-1870">Lamé (G. Lame, 1795-1870)
&lt;/h3>&lt;p>Matemático francés. Contribuyó a la mecánica de la elasticidad, la teoría de la conducción del calor, etc.&lt;/p>
&lt;h3 id="liouville-j-liouville-1809-1882">Liouville (J. Liouville, 1809-1882)
&lt;/h3>&lt;p>Matemático francés. Contribuyó a las ecuaciones diferenciales, la teoría de números trascendentes y la teoría de funciones.&lt;/p>
&lt;h3 id="cauchy-a-l-cauchy-1789-1857">Cauchy (A. L. Cauchy, 1789-1857)
&lt;/h3>&lt;p>Matemático francés. Fue prolífico y tuvo muchos logros en física teórica y matemáticas. Se dice que en Francia es tan respetado como Gauss.&lt;/p>
&lt;h3 id="galois-e-galois-1811-1832">Galois (E. Galois, 1811-1832)
&lt;/h3>&lt;p>Matemático francés. Aclaró el teorema de Abel de que las ecuaciones de grado 5 o superior generalmente no se pueden resolver algebraicamente introduciendo el concepto de grupo. Cayó en un duelo a una edad temprana, pero ahora se sabe que fue provocado por un asunto trivial de mujeres.&lt;/p>
&lt;h3 id="hensel-k-hensel-1861-1941">Hensel (K, Hensel, 1861-1941)
&lt;/h3>&lt;p>Matemático alemán. Discípulo de Kronecker. Introdujo una teoría llamada sistema p-ádico (análisis p-ádico) en la teoría de números aplicando métodos de teoría de funciones.&lt;/p>
&lt;h3 id="hasse-h-hesse-1898-1979">Hasse (H. Hesse, 1898-1979)
&lt;/h3>&lt;p>Matemático alemán. Discípulo de Hensel, contribuyó a los fundamentos del análisis p-ádico y su aplicación. Organización de la teoría de campos de clases, estudio de la función L de curvas elípticas, etc.&lt;/p>
&lt;h3 id="kronecker-l-kronecker-1823-1891">Kronecker (L. Kronecker, 1823-1891)
&lt;/h3>&lt;p>Matemático alemán de ascendencia judía. Contribuyó a la teoría de funciones elípticas, la teoría de números, etc. También es conocido por abogar por una fundamentación aritmética de las matemáticas, pero su personalidad fuertemente subjetiva le dio una imagen negativa a lo largo de su vida, ya que criticó injustificadamente a su colega de la Universidad de Berlín, Weierstrass, y obstaculizó el empleo de Cantor.&lt;/p>
&lt;h3 id="hilbert-d-hilbert-1862-1943">Hilbert (D. Hilbert, 1862-1943)
&lt;/h3>&lt;p>Matemático alemán. Dejó una gran huella en todas las áreas de las matemáticas, incluida la teoría de invariantes, la teoría de números algebraicos y los fundamentos de las matemáticas. Los 23 problemas que propuso en el Congreso Internacional de Matemáticos en París (1900) tuvieron un gran impacto en el desarrollo de las matemáticas.&lt;/p>
&lt;h3 id="riemann-b-riemann-1826-1866">Riemann (B. Riemann, 1826-1866)
&lt;/h3>&lt;p>Matemático alemán. Logró grandes resultados relacionados con la esencia de las matemáticas, como el concepto de superficie de Riemann en la teoría de funciones complejas y la geometría de Riemann.&lt;/p>
&lt;h3 id="faltings-g-faltings-1954-">Faltings (G. Faltings, 1954-)
&lt;/h3>&lt;p>Matemático alemán. Resolvió la conjetura de Mordell en 1983.&lt;/p>
&lt;h3 id="wiles-a-wiles-1953-">Wiles (A, Wiles, 1953-)
&lt;/h3>&lt;p>Matemático nacido en Gran Bretaña. Una figura destacada en este campo, habiendo hecho contribuciones significativas a través de su investigación sobre la conjetura principal de Iwasawa y la conjetura de Birch y Swinnerton-Dyer.&lt;/p>
&lt;h3 id="referencias">Referencias
&lt;/h3>&lt;p>¡El último teorema de Fermat resuelto! Desde Euler hasta la demostración de Wiles (Kodansha)&lt;/p></description></item></channel></rss>