¿Por qué son importantes los números primos en criptografía?


191

Una cosa que siempre me sorprende como no criptógrafo: ¿por qué es tan importante usar números primos? ¿Qué los hace tan especiales en criptografía?

¿Alguien tiene una breve explicación simple ? (Soy consciente de que hay muchos iniciadores y que la Criptografía Aplicada es la Biblia, pero como dije: no estoy buscando implementar mi propio algoritmo criptográfico, y las cosas que encontré solo hicieron explotar mi cerebro: no hay 10 páginas de fórmulas matemáticas Por favor :))

Gracias por todas las respuestas Acepté el que me dejó el concepto más claro.


Un par de observaciones: 1. Las personas a continuación mencionan que "la factorización prima de grandes números lleva mucho tiempo". En realidad, lo mismo es cierto para cualquier factorización. Lo importante es que cualquier entero! = 0 tiene una factorización única como producto de primos (incluido 1, que tiene una descomposición de longitud 0).
TT_

1
2. Consulte mi explicación de por qué los primos son importantes para las funciones hash: stackoverflow.com/questions/1145217/... Está relacionado con la propiedad de polinomios con coeficientes que pertenecen a un campo (lo que probablemente no sea una explicación breve).
TT_

2
Demasiado simple explicación corta → Resolver: a * b = 91. Ahora, resuelve: 13 * 7 = x. La segunda ecuación es mucho más rápida de resolver (para un humano o una computadora).
Dem Pilafian

Respuestas:


204

La explicación más básica y general: la criptografía tiene que ver con la teoría de números , y todos los números enteros (excepto 0 y 1) están compuestos por números primos, por lo que se trata mucho de números primos en la teoría de números.

Más específicamente, algunos algoritmos criptográficos importantes como el RSA dependen de manera crítica del hecho de que la factorización prima de grandes números lleva mucho tiempo. Básicamente, tiene una "clave pública" que consiste en un producto de dos números primos grandes utilizados para cifrar un mensaje, y una "clave secreta" que consiste en esos dos números primos utilizados para descifrar el mensaje. Puede hacer pública la clave pública, y todos pueden usarla para cifrar mensajes, pero solo usted conoce los factores primos y puede descifrar los mensajes. Todos los demás tendrían que factorizar el número, lo que lleva demasiado tiempo para ser práctico, dado el estado actual del arte de la teoría de números.


77
A medida que entramos en la era de la computación cuántica, parece apropiado tener en cuenta que la factorización de los números primos usando una computadora cuántica se puede lograr en tiempo polinómico usando el algoritmo de Shor en.wikipedia.org/wiki/Shor%27s_algorithm Es probable que ya existan computadoras que puedan descifrar cifrado de clave pública como RSA
stujo

16
@stujo: estás sobreestimando masivamente el estado de la computación cuántica. De hecho, es cierto que no existe tal computadora. El número más grande que se ha factorizado utilizando el Algoritmo de Shor y los esfuerzos de investigación de vanguardia en hardware cuántico es 21. Eso no es 21 bits, sino el número 21, factores primos 3 y 7.
Michael Borgwardt

1
No estoy seguro de qué datos están actualizados, es difícil obtener información sobre el último trabajo, creo que fue en 2012, este artículo es de 2014 ( m.phys.org/news/2014-11-largest-factored- quantum-device.html ) ¿Hemos visto datos públicos de 2016? No excluir lo que podría clasificarse. Aunque no puede ejecutar el algoritmo Shors, D-Wave ahora tiene más de 1000 qbits
estujo

1
@stujo: los mismos principios regirán cuando todos usemos CPU cuánticas, ya que los primos pueden seguir creciendo, todo se trata de encontrar más grandes, poco prácticos para las CPU cuánticas, el problema existe si algunos usan CPUS regular para crear claves, y algunos usan CPU cuánticas para romper esos El poder de las CPU cuánticas, según tengo entendido, es que usa qbits, cada qbit puede tener 3 valores, por lo tanto, la nueva tecnología es base 3 no base 2. una CPU de 64 qbits tendría 3 ^ 64 combinaciones en una palabra. No sé cómo afecta el rendimiento.
juanmf

55
@juanmf: tu comprensión de la computación cuántica es completamente errónea. No tiene absolutamente nada que ver con tener 3 valores, eso sería completamente poco interesante. Los detalles son muy complejos, pero el efecto es que algunos algoritmos cuánticos pueden resolver problemas en una complejidad Big-O menor que los algoritmos "normales" en hardware no cuántico.
Michael Borgwardt

137

¿Sencillo? Sip.

Si multiplica dos números primos grandes, obtendrá un número no primo enorme con solo dos factores primos (grandes).

Factorizar ese número es una operación no trivial, y ese hecho es la fuente de muchos algoritmos criptográficos. Ver funciones unidireccionales para más información.

Anexo: Solo un poco más de explicación. El producto de los dos números primos se puede utilizar como una clave pública, mientras que los primos mismos como una clave privada. Cualquier operación realizada a los datos que solo se pueden deshacer al conocer uno de los dos factores no será trivial para desencriptar.


2
También vale la pena señalar que, además del problema de factorización, una gran cantidad de criptografía moderna también (o en su lugar) se basa en el problema del logaritmo discreto. Ambas son funciones "unidireccionales": es fácil tomar entradas conocidas y calcular una respuesta, pero es difícil tomar una respuesta y calcular esas entradas.
nezroy

44
Vincular esta explicación al término "función unidireccional" sería útil: en.wikipedia.org/wiki/One-way_function
Chris Conway

Pero si la clave pública se puede usar para cifrar, ¿por qué no se puede usar para hacer lo contrario?
jayarjo

45

Aquí hay un ejemplo muy simple y común.

El algoritmo de cifrado RSA, que se usa comúnmente en sitios web de comercio seguro, se basa en el hecho de que es fácil tomar dos números primos (muy grandes) y multiplicarlos, mientras que es extremadamente difícil hacer lo contrario, es decir: tomar un número muy grande, dado que tiene solo dos factores primos, y encontrarlos.


30
Solo para tu información, el número que obtienes al multiplicar dos primos se llama semi-primo.
Matthew Brubaker

15

Lo importante no son los números primos, sino los algoritmos que funcionan con números primos. En particular, encontrar los factores de un número (cualquier número).

Como sabes, cualquier número tiene al menos dos factores. Los números primos tienen la propiedad única de que tienen exactamente dos factores: 1 y ellos mismos.

La razón por la que la factorización es tan importante es que los matemáticos y los informáticos no saben cómo factorizar un número sin simplemente probar todas las combinaciones posibles. Es decir, primero intente dividir por 2, luego por 3, luego por 4, y así sucesivamente. Si intentas factorizar un número primo, especialmente uno muy grande, tendrás que probar (esencialmente) cada número posible entre 2 y ese número primo grande. Incluso en las computadoras más rápidas, llevará años (incluso siglos) factorizar los tipos de números primos utilizados en la criptografía.

Es el hecho de que no sabemos cómo factorizar eficientemente un gran número lo que da fuerza a los algoritmos criptográficos. Si, algún día, alguien descubre cómo hacerlo, todos los algoritmos criptográficos que utilizamos actualmente quedarán obsoletos. Esto sigue siendo un área abierta de investigación.


10
En realidad, solo tiene que probar los números primos hasta la raíz cuadrada del número que está tratando de factorizar.
Matthew Brubaker el

3
Lo sé. Fue un detalle que "pasé por alto" en nombre de la simplicidad.
Barry Brown el

@MatthewBrubaker ¿Te importaría explicar por qué es esto? Realmente no entiendo.
Kartik Chugh

44
@KartikChugh ヅ decir nque no es primo & n = a * b. Si a > sqrt(n), bdebe ser más pequeño y viceversa, de lo contrario, lo a * b > nque negaría nuestro reclamo inicial. Entonces, para verificar la prima, solo verificamos hasta sqrt.
Abhinav Gauniyal

13

Porque nadie conoce un algoritmo rápido para factorizar un número entero en sus factores primos. Sin embargo, es muy fácil verificar si un conjunto de factores primos se multiplica a un número entero determinado.


1
Curiosamente, ya es posible en tiempo rápido averiguar si un número es primo.
nes1983

Falta un "si los factores primos son grandes" aquí.
Ben Voigt

@Ben: no falta. El problema es difícil en general. Tenga en cuenta que los problemas que son difíciles en general pueden tener casos fáciles. En este caso, los primos pequeños no son los únicos casos fáciles.
nes1983

2
Nadie lo sabe "en público". Es posible que las agencias de inteligencia de los distintos gobiernos mundiales tengan técnicas que no están compartiendo. Contratan a un gran número de graduados en matemáticas. Por ejemplo, la NSA promovió en secreto la generación primaria aleatoria por "Dual EC_DRBG", que sabían que era débil, como parte de un esquema criptográfico estándar para uso público. bits.blogs.nytimes.com/2013/09/10/…
don bright

don: los documentos nevados parecen revelar que ese no es el caso. dibujan una imagen bastante concluyente de que (en general, podría haber esquinas), la NSA no puede descifrar los datos cifrados a través de magia matemática especial que solo ellos conocen. Schneier discutió el tema ampliamente.
nes1983

12

Hay algunos buenos recursos para aumentar la criptografía. Aquí hay uno:

Desde esa página:

En el sistema de criptografía de clave pública más comúnmente utilizado, inventado por Ron Rivest, Adi Shamir y Len Adleman en 1977, tanto las claves públicas como las privadas se derivan de un par de números primos grandes de acuerdo con una fórmula matemática relativamente simple. En teoría, podría ser posible derivar la clave privada de la clave pública trabajando la fórmula al revés. Pero solo el producto de los números primos grandes es público, y factorizar números de ese tamaño en números primos es tan difícil que incluso las supercomputadoras más poderosas del mundo no pueden romper una clave pública ordinaria.

El libro de Bruce Schneier, Criptografía Aplicada, es otro. Recomiendo mucho ese libro; Es divertido leer.


9

Para ser un poco más concreto acerca de cómo RSA usa las propiedades de los números primos, el algoritmo RSA depende críticamente del teorema de Euler , que establece que para números relativamente primos "a" y "N", a ^ e es congruente con 1 módulo N, donde e es la función totient de Euler de N.

¿Dónde entran los números primos en eso? Calcular la función totient de Euler de N de manera eficiente requiere conocer la factorización prima de N. En el caso del algoritmo RSA, donde N = pq para algunos primos "p" y "q", entonces e = (p - 1) (q - 1) = N - p - q + 1. Pero sin conocer pyq, el cálculo de e es muy difícil.

De manera más abstracta, muchos protocolos criptográficos utilizan diversas funciones de trampillas , funciones que son fáciles de calcular pero difíciles de invertir. La teoría de números es una rica fuente de tales funciones trampa (como la multiplicación de números primos grandes), y los números primos son absolutamente centrales para la teoría de números.


7

Sugeriría el libro A Mathematical Journey In Code . El libro tiene una sensación agradable, lo cual es sorprendente, ya que se trata de criptografía. El libro resume el viaje de Sarah Flannery desde el aprendizaje de los acertijos cuando era niño hasta la creación del algoritmo Cayley-Purser (CP) a la edad de 16 años. Ofrece una explicación increíblemente detallada de funciones unidireccionales, teoría de números y números primos y cómo se relacionan con criptografía.

Lo que hace que este libro sea aún más específico para su pregunta es que Sarah intentó implementar un nuevo algoritmo de clave pública utilizando matrices. Fue mucho más rápido que usar números primos, pero se encontró un agujero de bucle que podría explotarlo. Resulta que su algoritmo se usó mejor como mecanismo de cifrado privado. El libro es un gran testimonio del uso de números primos para el cifrado, ya que ha resistido la prueba del tiempo y los desafíos de las personas muy inteligentes.



6

No soy matemático ni críptico, así que aquí hay una observación externa en términos simples (sin ecuaciones elegantes, lo siento).

Todo este hilo está lleno de explicaciones sobre CÓMO se usan los primos en la criptografía, es difícil encontrar a alguien en este hilo que explique de una manera fácil POR QUÉ se usan los primos ... probablemente porque todos dan ese conocimiento por sentado.

Solo mirar el problema desde afuera puede generar una reacción como; pero si usan las sumas de dos primos, ¿por qué no crear una lista de todas las sumas posibles que pueden generar dos primos?

En este sitio hay una lista de 455,042,511 primos, donde el primo más alto es 9,987,500,000 ( 10 dígitos).

El primo más grande conocido (a partir de febrero de 2015) es 2 a la potencia de 257,885,161 - 1, que es 17,425,170 dígitos.

Esto significa que no tiene sentido mantener una lista de todos los números primos conocidos y mucho menos todas sus sumas posibles. Es más fácil tomar un número y verificar si es primo.

Calcular grandes números primos en sí mismo es una tarea monumental, por lo que el cálculo inverso de dos números primos que se han multiplicado entre sí, tanto los criptógrafos como los matemáticos dirían que es bastante difícil ... hoy en día.


3
Solo tu último párrafo es realmente válido. El argumento de las sumas también se puede decir para cualquier número compuesto (hay un amplio rango [técnicamente infinitamente grande], el almacenamiento de todas las sumas es inviable / estúpido). Además, las sumas de números primos no tienen tanta relevancia en la criptografía, más importante (generalmente, como en el caso de RSA) es su producto. Además, al calcular en reversa probablemente te refieres a factorizar . Eso probablemente ayudará con lo que quieres decir allí.
initramfs

4

Los algoritmos criptográficos generalmente dependen de su seguridad para tener un "problema difícil". La mayoría de los algoritmos modernos parecen usar la factorización de números muy grandes como su problema difícil: si multiplica dos números grandes juntos, calcular sus factores es "difícil" (es decir, consume mucho tiempo). Si esos dos números son números primos, entonces solo hay una respuesta, lo que lo hace aún más difícil, y también garantiza que cuando encuentre la respuesta, sea la correcta, no alguna otra respuesta que simplemente dé el mismo resultado.


4

Creo que lo importante en la criptografía no son los primos en sí, sino la dificultad del problema de factorización primo

Supongamos que tiene un número entero muy grande que se sabe que es producto de dos primos myn, no es fácil encontrar lo que son myn. Algoritmo como RSA depende de este hecho.

Por cierto, hay un artículo publicado sobre algoritmos que puede "resolver" este problema de factorización principal en un tiempo aceptable usando una computadora cuántica. Por lo tanto, es posible que los algoritmos más nuevos en criptografía ya no dependan de esta "dificultad" de factorización principal cuando la computadora cuántica llega a la ciudad :)


3

Porque los algoritmos de factorización se aceleran considerablemente con cada factor encontrado. Hacer que ambas claves privadas sean primarias garantiza que el primer factor encontrado también será el último. Idealmente, ambas claves privadas también tendrán un valor casi igual, ya que solo importa la fuerza de la clave más débil.


Esto me parece un poco redundante. Una parte de la parte clave más débil que podría comentarse con la respuesta principal :)
Ulysse BN

-1

Los números primos se utilizan principalmente en criptografía, ya que consume un tiempo considerable para determinar si un número dado es primo o no. Para el hacker, si algún algoritmo toma mucho tiempo para descifrar el código, se vuelve inútil para ellos.


77
Averiguar si un número es primo es barato y necesitamos que sea barato. ¿De qué otra manera podríamos saber que elegimos primos como nuestros factores primos en RSA o un primo como módulo en criptografía de campo finito? Lo que es caro es factorizar un gran número compuesto en sus grandes factores primos.
CodesInChaos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.