fbpx
Wikipedia

Generador aleatorio de contraseñas

Un generador aleatorio de contraseña es un programa o un dispositivo hardware que toma entrada de un generador numerico aleatorio o pseudo-aleatorio y automáticamente genera una contraseña. La contraseñas aleatorias pueden ser generadas manualmente, usando fuentes de aleatoriedad como dados o monedas, o bien generadas usando un ordenador.

Aunque haya varios ejemplo de generadores de contraseña "aleatoria" en Internet, normalmente hay truco detrás, pues muchos programas imitan una aleatoriedad con una seguridad bastante débil. Una recomendación bastante común es la de usar herramientas de código abierto donde sea posible, ya que permiten comprobaciones independientes de la calidad de los métodos usados. Darse cuenta que el generar una contraseña aleatoria no asegura que esta tenga una fuerte seguridad, porque, aunque poco probable, se puede generar una contraseña que se pueda hackear con facilidad. En realidad, no hay necesidad de que una contraseña se genere por un proceso perfecto de generación: Simplemente tiene que ser difícil de adivinar.

Ejemplos en distintos lenguajes de programación

A continuación se muestran diferentes soluciones para la generación de contraseñas usando las diferentes lenguajes según el enfoque. No existe relación entre usar un lenguaje u otro en la generación de contraseñas, los ejemplos mostrados a continuación son orientativos.

Enfoque ingenuo

C

#include <time.h> #include <stdio.h> #include <stdlib.h> int main(void) { /* Longitud de la contraseña */ unsigned short int length = 8; /* La fuente del número aleatorio rand() */ srand((unsigned int) time(0) + getpid()); /* caracteres ASCII entre 33 y 126 */ while(length--) { putchar(rand() % 94 + 33); srand(rand()); } printf("\n"); return EXIT_SUCCESS; } 

Este es un ejemplo de uso de semillas incorrectas para la generación de contraseñas en el lenguaje lenguaje C

En este caso, la función C estándar rand, que es un generador de números pseudoaleatorios, se siembra inicialmente utilizando la función time de C que proporciona el tiempo actual (hora en milisegundo normalmente), pero las iteraciones posteriores usan rand en su lugar. De acuerdo con el estándar ANSI C, time devuelve un valor de tipo time , que es la implementación predefinida, que generalmente es un entero de 32 bits que contiene el número actual de segundos desde el 1 de enero de 1970 (ver: Tiempo Unix). Hay aproximadamente 31 millones de segundos en un año, por lo que un atacante que conoce el año (un asunto simple en situaciones donde los cambios frecuentes de contraseña son obligatorios por la política de contraseñas) y el identificador del proceso con el que se generó la contraseña se enfrenta a un número relativamente pequeño, según los estándares criptográficos, de elecciones para evaluar. Si el atacante sabe con más precisión cuándo se generó la contraseña, se enfrenta a un número aún menor de candidatos para probar, un defecto grave en esta implementación.

En situaciones donde el atacante puede obtener una versión encriptada de la contraseña, dicha prueba se puede realizar con la suficiente rapidez para que se puedan verificar unos pocos millones de contraseñas de prueba en cuestión de segundos. Ver: Password cracking.

La función rand presenta otro problema. Todos los generadores de números pseudoaleatorios tienen una memoria interna o estado. El tamaño de ese estado determina la cantidad máxima de valores diferentes que puede producir: un estado de n-bits puede producir como máximo   valores diferentes. En muchos sistemas, rand tiene un estado de 31 o 32 bits, que ya es una limitación de seguridad significativa. La documentación de Microsoft no describe el estado interno de la implementación de Visual C ++ del rand de biblioteca estándar C, pero solo tiene 32767 salidas posibles (15 bits) por llamada.[1]​ Microsoft recomienda utilizar una función diferente y más segura, rand_s, en su lugar. La salida de rand_s es criptográficamente segura, según Microsoft, y no usa la semilla cargada por la función srand. Sin embargo, su interfaz de programación difiere del rand.[2]

PHP

function pass_gen($length = 8) { $pass = array(); for ($i = 0; $i < $length; $i++) { $pass[] = chr(mt_rand(32, 126)); } return implode($pass); } 

En este caso, se usa la función PHP microtime,[3]​ que devuelve la marca de tiempo actual de Unix en microsegundos. Esto aumenta el número de posibilidades, pero alguien con una buena idea de cuándo se generó la contraseña, por ejemplo, la fecha en que un empleado comenzó a trabajar, todavía tiene un espacio de búsqueda razonablemente pequeño. Además, algunos sistemas operativos no ofrecen una resolución de microsegundos de tiempo, lo que reduce drásticamente la cantidad de opciones. Finalmente, la función rand[4]​ generalmente usa la función C rand subyacente y puede tener un espacio de estado pequeño, dependiendo de cómo se implemente. Un generador de números aleatorios alternativo, mt_rand, que se basa en el generador de números pseudoaleatorios Mersenne twister, está disponible en PHP, pero también tiene un límite de 32 bits. Hay propuestas para agregar una fuerte generación de números aleatorios a PHP.[5]

Métodos más fuertes

Existe una variedad de métodos para generar contraseñas aleatorias seguras y criptográficamente seguras. En plataformas Unix se usa comúnmente /dev/random y /dev/urandom , ya sea programáticamente o junto con un programa como makepasswd.[6]​ Los programadores de Windows pueden usar la función CryptGenRandom de la Interfaz de programación de aplicaciones criptográficas (Microsoft CryptoAPI). El lenguaje de programación Java incluye una clase llamada SecureRandom. Otra posibilidad es obtener aleatoriedad midiendo algún fenómeno externo, como la sincronización de la entrada del teclado del usuario.

Muchos sistemas informáticos ya tienen una aplicación (generalmente llamada "apg") para implementar FIPS 181.[7]FIPS 181-Automated Password Generator describe un proceso estándar para convertir bits aleatorios (desde un generador de números aleatorios de hardware) en "palabras" algo pronunciables, adecuadas para una frase de contraseña.[8]​ Sin embargo, en 1994 se descubrió un ataque al algoritmo FIPS 181, de modo que un atacante puede esperar, en promedio, entrar en el 1% de las cuentas que tienen contraseñas basadas en el algoritmo, después de buscar solo 1,6 millones de contraseñas. Esto se debe a la falta de uniformidad en la distribución de las contraseñas generadas, que pueden abordarse utilizando contraseñas más largas o modificando el algoritmo.[9][10]

Java

Aquí hay un ejemplo de código (adaptado de la clase PasswordGenerator r[11]​) que usa SecureRandom para generar una contraseña de 10 caracteres hexadecimales:

String[] symbols = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; int length = 10; Random random = SecureRandom.getInstanceStrong(); // as of JDK 8, this should return the strongest algorithm available to the JVM StringBuilder sb = new StringBuilder(length); for (int i = 0; i < length; i++) { int indexRandom = random.nextInt( symbols.length ); sb.append( symbols[indexRandom] ); } String password = sb.toString(); 

Perl

Este ejemplo en lenguaje Perl utiliza el módulo Crypt::Random::Source para encontrar una fuente de números aleatorios fuertes (que depende de la plataforma).

use Crypt::Random::Source qw(get_strong); while(length($out) < 15) { my $a = get_strong(1); $a =~ s/[^[:graph:]]//g; $out .= $a; } print $out; 

Python

El lenguaje Python incluye una clase SystemRandom que obtiene bits aleatorios de grado criptográfico de /dev/urandom en un sistema tipo Unix, incluidos Linux y Mac OS X, mientras que en Windows usa CryptGenRandom.[12][13]​ Aquí hay un script simple de Python 3 que demuestra el uso de esta clase:

#!/usr/bin/python from secrets import SystemRandom from string import printable longitud = 20 ct = "" for _ in range(longitud): ct += "".join(SystemRandom().choice(printable[:-5])) print(ct) 

Métodos mecánicos

Otro método más es usar dispositivos físicos como los dados para generar la aleatoriedad. Una forma simple de hacerlo es utilizar una tabla de caracteres de 6 por 6. La primera tirada del dado selecciona una fila en la tabla y la segunda una columna. Entonces, por ejemplo, una tirada de 2 seguida de una tirada de 4 seleccionaría la letra "j" de la tabla de fraccionamiento, se muestra un ejemplo a continuación.[14]​ Para generar caracteres en mayúscula / minúscula o algunos símbolos, se puede usar un lanzamiento de una moneda, si esta muestra cara se usa mayúsculas, cruz la minúscula. Si se seleccionó un dígito en las tiradas de dados, un lanzamiento de la moneda con resultado de cara indica el símbolo que está sobre él en un teclado estándar, como el $ encima del '4'.

1 2 3 4 5 6
1 a b c d e f
2 g h i j k l
3 m n o p q r
4 s t u v w x
5 y z 0 1 2 3
6 4 5 6 7 8 9

Referencias

  1. [1]
  2. [2]
  3. microtime
  4. rand
  5. . Archivado desde el original el 19 de octubre de 2008. Consultado el 27 de marzo de 2018. 
  6. «Linux / UNIX: Generating Random Password With mkpasswd / makepasswd / pwgen». www.cyberciti.biz. Consultado el 25 de marzo de 2016. 
  7. «StrongPasswords - Community Help Wiki». help.ubuntu.com. Consultado el 25 de marzo de 2016. 
  8. NIST. Automated Password Generator standard [[Federal Information Processing Standard|FIPS el 4 de julio de 2013 en Wayback Machine. 181]
  9. Shay, Richard; Kelley, Patrick Gage; Komanduri, Saranga; Mazurek, Michelle L.; Ur, Blase; Vidas, Timothy; Bauer, Lujo; Christin, Nicolas et al. (2012). Correct horse battery staple: Exploring the usability of system-assigned passphrases. SOUPS '12 Proceedings of the Eighth Symposium on Usable Privacy and Security. doi:10.1145/2335356.2335366. 
  10. Ganesan, Ravi; Davies, Chris (1994). «A New Attack on Random Pronounceable Password Generators». Proceedings of the 17th {NIST}-{NCSC} National Computer Security Conference (NIST): 184-197. Consultado el 17 de diciembre de 2014. 
  11. http://s13.zetaboards.com/Crypto/topic/7111906/1/?x=90
  12. «9.6. random — Generate pseudo-random numbers — Python 3.5.1 documentation». docs.python.org. Consultado el 25 de marzo de 2016. 
  13. «16.1. os — Miscellaneous operating system interfaces — Python 3.5.1 documentation». docs.python.org. Consultado el 25 de marzo de 2016. 
  14. Levine, John R., Ed.: Internet Secrets, Second edition, page 831 ff. John Wiley and Sons.
  •   Datos: Q7291984

generador, aleatorio, contraseñas, este, artículo, sobre, informática, detectaron, varios, problemas, favor, edítalo, para, mejorarlo, necesita, wikificado, conforme, convenciones, estilo, wikipedia, carece, fuentes, referencias, aparezcan, fuente, acreditada,. En este articulo sobre informatica se detectaron varios problemas Por favor editalo para mejorarlo Necesita ser wikificado conforme a las convenciones de estilo de Wikipedia Carece de fuentes o referencias que aparezcan en una fuente acreditada Este aviso fue puesto el 8 de febrero de 2016 Un generador aleatorio de contrasena es un programa o un dispositivo hardware que toma entrada de un generador numerico aleatorio o pseudo aleatorio y automaticamente genera una contrasena La contrasenas aleatorias pueden ser generadas manualmente usando fuentes de aleatoriedad como dados o monedas o bien generadas usando un ordenador Aunque haya varios ejemplo de generadores de contrasena aleatoria en Internet normalmente hay truco detras pues muchos programas imitan una aleatoriedad con una seguridad bastante debil Una recomendacion bastante comun es la de usar herramientas de codigo abierto donde sea posible ya que permiten comprobaciones independientes de la calidad de los metodos usados Darse cuenta que el generar una contrasena aleatoria no asegura que esta tenga una fuerte seguridad porque aunque poco probable se puede generar una contrasena que se pueda hackear con facilidad En realidad no hay necesidad de que una contrasena se genere por un proceso perfecto de generacion Simplemente tiene que ser dificil de adivinar Indice 1 Ejemplos en distintos lenguajes de programacion 1 1 Enfoque ingenuo 1 1 1 C 1 1 2 PHP 1 2 Metodos mas fuertes 1 2 1 Java 1 2 2 Perl 1 2 3 Python 1 2 4 Metodos mecanicos 1 3 ReferenciasEjemplos en distintos lenguajes de programacion EditarA continuacion se muestran diferentes soluciones para la generacion de contrasenas usando las diferentes lenguajes segun el enfoque No existe relacion entre usar un lenguaje u otro en la generacion de contrasenas los ejemplos mostrados a continuacion son orientativos Enfoque ingenuo Editar C Editar include lt time h gt include lt stdio h gt include lt stdlib h gt int main void Longitud de la contrasena unsigned short int length 8 La fuente del numero aleatorio rand srand unsigned int time 0 getpid caracteres ASCII entre 33 y 126 while length putchar rand 94 33 srand rand printf n return EXIT SUCCESS Este es un ejemplo de uso de semillas incorrectas para la generacion de contrasenas en el lenguaje lenguaje CEn este caso la funcion C estandar rand que es un generador de numeros pseudoaleatorios se siembra inicialmente utilizando la funcion time de C que proporciona el tiempo actual hora en milisegundo normalmente pero las iteraciones posteriores usan rand en su lugar De acuerdo con el estandar ANSI C time devuelve un valor de tipo time que es la implementacion predefinida que generalmente es un entero de 32 bits que contiene el numero actual de segundos desde el 1 de enero de 1970 ver Tiempo Unix Hay aproximadamente 31 millones de segundos en un ano por lo que un atacante que conoce el ano un asunto simple en situaciones donde los cambios frecuentes de contrasena son obligatorios por la politica de contrasenas y el identificador del proceso con el que se genero la contrasena se enfrenta a un numero relativamente pequeno segun los estandares criptograficos de elecciones para evaluar Si el atacante sabe con mas precision cuando se genero la contrasena se enfrenta a un numero aun menor de candidatos para probar un defecto grave en esta implementacion En situaciones donde el atacante puede obtener una version encriptada de la contrasena dicha prueba se puede realizar con la suficiente rapidez para que se puedan verificar unos pocos millones de contrasenas de prueba en cuestion de segundos Ver Password cracking La funcion rand presenta otro problema Todos los generadores de numeros pseudoaleatorios tienen una memoria interna o estado El tamano de ese estado determina la cantidad maxima de valores diferentes que puede producir un estado de n bits puede producir como maximo 2 n displaystyle 2 n valores diferentes En muchos sistemas rand tiene un estado de 31 o 32 bits que ya es una limitacion de seguridad significativa La documentacion de Microsoft no describe el estado interno de la implementacion de Visual C del rand de biblioteca estandar C pero solo tiene 32767 salidas posibles 15 bits por llamada 1 Microsoft recomienda utilizar una funcion diferente y mas segura rand s en su lugar La salida de rand s es criptograficamente segura segun Microsoft y no usa la semilla cargada por la funcion srand Sin embargo su interfaz de programacion difiere del rand 2 PHP Editar function pass gen length 8 pass array for i 0 i lt length i pass chr mt rand 32 126 return implode pass En este caso se usa la funcion PHP microtime 3 que devuelve la marca de tiempo actual de Unix en microsegundos Esto aumenta el numero de posibilidades pero alguien con una buena idea de cuando se genero la contrasena por ejemplo la fecha en que un empleado comenzo a trabajar todavia tiene un espacio de busqueda razonablemente pequeno Ademas algunos sistemas operativos no ofrecen una resolucion de microsegundos de tiempo lo que reduce drasticamente la cantidad de opciones Finalmente la funcion rand 4 generalmente usa la funcion C rand subyacente y puede tener un espacio de estado pequeno dependiendo de como se implemente Un generador de numeros aleatorios alternativo mt rand que se basa en el generador de numeros pseudoaleatorios Mersenne twister esta disponible en PHP pero tambien tiene un limite de 32 bits Hay propuestas para agregar una fuerte generacion de numeros aleatorios a PHP 5 Metodos mas fuertes Editar Existe una variedad de metodos para generar contrasenas aleatorias seguras y criptograficamente seguras En plataformas Unix se usa comunmente dev random y dev urandom ya sea programaticamente o junto con un programa como makepasswd 6 Los programadores de Windows pueden usar la funcion CryptGenRandom de la Interfaz de programacion de aplicaciones criptograficas Microsoft CryptoAPI El lenguaje de programacion Java incluye una clase llamada SecureRandom Otra posibilidad es obtener aleatoriedad midiendo algun fenomeno externo como la sincronizacion de la entrada del teclado del usuario Muchos sistemas informaticos ya tienen una aplicacion generalmente llamada apg para implementar FIPS 181 7 FIPS 181 Automated Password Generator describe un proceso estandar para convertir bits aleatorios desde un generador de numeros aleatorios de hardware en palabras algo pronunciables adecuadas para una frase de contrasena 8 Sin embargo en 1994 se descubrio un ataque al algoritmo FIPS 181 de modo que un atacante puede esperar en promedio entrar en el 1 de las cuentas que tienen contrasenas basadas en el algoritmo despues de buscar solo 1 6 millones de contrasenas Esto se debe a la falta de uniformidad en la distribucion de las contrasenas generadas que pueden abordarse utilizando contrasenas mas largas o modificando el algoritmo 9 10 Java Editar Aqui hay un ejemplo de codigo adaptado de la clase PasswordGenerator r 11 que usa SecureRandom para generar una contrasena de 10 caracteres hexadecimales String symbols 0 1 2 3 4 5 6 7 8 9 a b c d e f int length 10 Random random SecureRandom getInstanceStrong as of JDK 8 this should return the strongest algorithm available to the JVM StringBuilder sb new StringBuilder length for int i 0 i lt length i int indexRandom random nextInt symbols length sb append symbols indexRandom String password sb toString Perl Editar Este ejemplo en lenguaje Perl utiliza el modulo Crypt Random Source para encontrar una fuente de numeros aleatorios fuertes que depende de la plataforma use Crypt Random Source qw get strong while length out lt 15 my a get strong 1 a s graph g out a print out Python Editar El lenguaje Python incluye una clase SystemRandom que obtiene bits aleatorios de grado criptografico de dev urandom en un sistema tipo Unix incluidos Linux y Mac OS X mientras que en Windows usa CryptGenRandom 12 13 Aqui hay un script simple de Python 3 que demuestra el uso de esta clase usr bin python from secrets import SystemRandom from string import printable longitud 20 ct for in range longitud ct join SystemRandom choice printable 5 print ct Metodos mecanicos Editar Otro metodo mas es usar dispositivos fisicos como los dados para generar la aleatoriedad Una forma simple de hacerlo es utilizar una tabla de caracteres de 6 por 6 La primera tirada del dado selecciona una fila en la tabla y la segunda una columna Entonces por ejemplo una tirada de 2 seguida de una tirada de 4 seleccionaria la letra j de la tabla de fraccionamiento se muestra un ejemplo a continuacion 14 Para generar caracteres en mayuscula minuscula o algunos simbolos se puede usar un lanzamiento de una moneda si esta muestra cara se usa mayusculas cruz la minuscula Si se selecciono un digito en las tiradas de dados un lanzamiento de la moneda con resultado de cara indica el simbolo que esta sobre el en un teclado estandar como el encima del 4 1 2 3 4 5 61 a b c d e f2 g h i j k l3 m n o p q r4 s t u v w x5 y z 0 1 2 36 4 5 6 7 8 9Referencias Editar 1 2 microtime rand Copia archivada Archivado desde el original el 19 de octubre de 2008 Consultado el 27 de marzo de 2018 Linux UNIX Generating Random Password With mkpasswd makepasswd pwgen www cyberciti biz Consultado el 25 de marzo de 2016 StrongPasswords Community Help Wiki help ubuntu com Consultado el 25 de marzo de 2016 NIST Automated Password Generator standard Federal Information Processing Standard FIPS Archivado el 4 de julio de 2013 en Wayback Machine 181 Shay Richard Kelley Patrick Gage Komanduri Saranga Mazurek Michelle L Ur Blase Vidas Timothy Bauer Lujo Christin Nicolas et al 2012 Correct horse battery staple Exploring the usability of system assigned passphrases SOUPS 12 Proceedings of the Eighth Symposium on Usable Privacy and Security doi 10 1145 2335356 2335366 Se sugiere usar numero autores ayuda Ganesan Ravi Davies Chris 1994 A New Attack on Random Pronounceable Password Generators Proceedings of the 17th NIST NCSC National Computer Security Conference NIST 184 197 Consultado el 17 de diciembre de 2014 http s13 zetaboards com Crypto topic 7111906 1 x 90 9 6 random Generate pseudo random numbers Python 3 5 1 documentation docs python org Consultado el 25 de marzo de 2016 16 1 os Miscellaneous operating system interfaces Python 3 5 1 documentation docs python org Consultado el 25 de marzo de 2016 Levine John R Ed Internet Secrets Second edition page 831 ff John Wiley and Sons Datos Q7291984Obtenido de https es wikipedia org w index php title Generador aleatorio de contrasenas amp oldid 125315789, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos