Estoy jugando e intentando escribir una implementación de RSA. El problema es que estoy estancado en la generación de los números primos masivos que están involucrados en la generación de un par de claves. ¿Podría alguien señalarme una forma rápida de generar números primos/primos probables?Generando REALMENTE grandes números primos
Respuesta
No genera números primos exactamente. Generas un gran número impar al azar, luego pruebas si ese número es primo, si no generas otro aleatoriamente. Hay algunas leyes de números primos que básicamente establecen que sus probabilidades de "golpear" un primo mediante intentos aleatorios son (2/ln n)
Por ejemplo, si quiere un número primo aleatorio de 512 bits, encontrará uno en 2/(512 * ln (2)) Así que aproximadamente 1 de cada 177 de los números que intente será primo.
Hay varias formas de comprobar si un número es primo, uno bueno es el "Test de Miller-Rabin" como se indicó anteriormente.
También, OpenSSL tiene una utilidad agradable para la prueba de números primos:
$ openssl prime 119054759245460753
1A6F7AC39A53511 is not prime
Eche un vistazo a cómo lo hace TrueCrypt. Además, eche un vistazo a Rabin-Miller para probar pseudoprimas grandes.
¿Por qué asumes que TrueCrypt genera números primos? Hasta donde yo sé, solo usa crypto simétrico. – CodesInChaos
No mencionó el idioma que está utilizando. Algunos tienen un método para hacer esto incorporado. Por ejemplo, en Java esto es tan fácil como llamar al nextProbablePrime() en un BigInteger.
Estoy usando Objective-C – computergeek6
Dependiendo de cómo se implemente esa funcionalidad, puede comprometer la elección de su clave si se reduce el espacio de búsqueda. – Stephen
La respuesta anterior es incorrecta: 2 * 3 * 5 * 7 * 11 * 13 + 1 = 30031 = 509 * 59.
Creo que el cartel se misremembering la prueba (reales) que hay son una incontable número de números primos.
En realidad, solo hay un número contable (pero infinito) de números primos. Además, el otro póster (cuya publicación parece borrarse ahora) no está recordando mal la construcción de la prueba (así es como funciona), sino que está haciendo un mal uso de ella. – oggy
De hecho. Recuerde que los enteros son contables, va "1, 2, ...". Entonces son primos y racionales; son números reales que no son contables. – jrockway
Mono tiene una clase BigInteger que es de código abierto al igual que java. Puedes echarle un vistazo a esos. Probablemente sean portátiles :) g'luck
hay un algoritmo debido a U. Maurer que genera al azar demostrables (en contraste con estadísticamente altamente probable) números primos que son casi uniformemente distribuido en el conjunto de todos los números primos de un tamaño especial. Tengo una implementación de Python que es bastante eficiente en: http://s13.zetaboards.com/Crypto/topic/7234475/1/
- 1. Generando números aleatorios muy grandes java
- 2. Encontrar factores primos para números grandes usando CPUs especialmente diseñadas
- 3. números primos C#
- 4. Conversión de números primos
- 5. Aprendiendo F # - imprimiendo números primos
- 6. Clojure números primos secuencia perezosa
- 7. Números primos BigInteger de Java
- 8. Problemas con los números primos
- 9. Lista diferida de números primos
- 10. Factorización de números grandes
- 11. Algoritmo rápido para encontrar números primos?
- 12. Diversión de cálculo de números primos
- 13. Generando Números Aleatorios en Go
- 14. Generando números aleatorios no uniformes
- 15. Tipos para números grandes
- 16. División de números grandes
- 17. Preservar números grandes
- 18. Generando indicadores en cuadros de datos grandes
- 19. Generando un rango de números en MySQL
- 20. Generando números de cuenta únicos - llamada recursiva
- 21. ¿La forma más rápida de calcular números primos en C#?
- 22. Mathematica: genera una lista de números primos hasta un límite
- 23. ¿Cómo pronuncias números hexadecimales grandes?
- 24. ¿Manejar números grandes en C++?
- 25. Clojure - Calcular con números grandes
- 26. JSON.parse analiza/convierte números grandes incorrectamente
- 27. BigDecimal.movePointRight() se bloquea con números muy grandes
- 28. Algoritmo rápido para encontrar el número de números primos entre dos números
- 29. extremadamente grandes números enteros en PHP
- 30. Manejo de números grandes en el código
Gracias. Esto explica muchos de los problemas que estaba teniendo. – computergeek6
puede generar primos en openssl también: 'openssl prime -generate -bits 512' – mykhal