una tener longitud keywords description descripcion debe cuantos contador caracteres security passwords user-experience

security - tener - meta description seo



Caracteres a evitar en contraseñas generadas automáticamente (12)

Aquí están los juegos de caracteres que Steve Gibson usa para su sistema de "Perfect Paper Password" . Son "personajes para permitir" en lugar de "personajes para evitar", pero parecen bastante razonables para lo que desea:

Un conjunto estándar de 64 caracteres

!#%+23456789:=?@ABCDEFGHJKLMNPRS TUVWXYZabcdefghijkmnopqrstuvwxyz

Un conjunto más grande de 88 caracteres

!"#$%&''()*+,-./23456789:;<=>?@ABCDEFGHJKLMNO PRSTUVWXYZ[/]^_abcdefghijkmnopqrstuvwxyz{|}~

Para las contraseñas pronunciables, no estoy familiarizado con los algoritmos, pero es posible que desee ver APG y pwgen como punto de partida.

Necesito generar algunas contraseñas, quiero evitar los caracteres que pueden confundirse entre sí. ¿Hay una lista definitiva de personajes que debo evitar? mi lista actual es

il10o8B3Evu! [] {}

¿Hay otros pares de caracteres que sean fáciles de confundir? para los personajes especiales, me iba a limitar a los que están debajo de las teclas numéricas, aunque sé que esto varía según la nacionalidad de los teclados.

Como pregunta de piloto, me gustaría que mis contraseñas sean "parecidas a las palabras", ¿tienes un algoritmo favorito para eso?

Gracias :)


Como otra opción, puede usar una fuente de monoespacio / terminal como servicio de mensajería para imprimir las contraseñas. Caracteres similares deberían ser mucho más distinguibles de esa manera.


Lea Elegir contraseñas seguras .

Un tidbit interesante desde allí: para obtener contraseñas más seguras, asegúrese de que algunos números y caracteres especiales aparezcan en el medio. Los programas de crackeo los buscan al principio y terminan antes.


No amo el enfoque de lista de palabras. Por ejemplo, en / usr / share / dict / words en OSX, hay 5110 palabras de 4 caracteres. El uso de dos de ellos con un carácter separador produce ~ 600M de combinaciones. Pero si utilizó el conjunto de caracteres directamente con un generador de números aleatorios fuertes, tendría 88 ^ 9 contraseñas posibles, 3.16e + 17 combinaciones.

De cualquier manera, el posible ataque contra este sistema va a ser contra el generador de números aleatorios, así que asegúrese de estar usando uno criptográficamente fuerte. Si utiliza la función de rand estándar de PHP, se atacará registrando y restableciendo miles de contraseñas para muestrear el estado de RNG y luego predecir el estado de RNG restante, lo que reducirá el número de contraseñas posibles que un atacante necesita para probar.


Para agregar a la respuesta de Jim, también podría usar la lista de palabras y reemplazar aleatoriamente ciertos caracteres con símbolos (un @ para un A, un 0 (cero) para un O o un 5 para un S) y / o eliminar las vocales de las palabras .

  • Inm% escritorio
  • p @ per & b0y32H @ t

Aún más humanamente legible.


Para las contraseñas legibles por el ser humano, recientemente utilicé un script PHP muy similar al siguiente. Funcionó bien De acuerdo, las contraseñas no serán increíblemente seguras (ya que son propensas a ataques de diccionario), pero para las contraseñas memorizables o al menos legibles, funciona bien. Sin embargo, esta función no debe usarse tal como está, es más para ilustración que otra cosa.

function generatePassword($syllables = 2, $use_prefix = true) { // Define function unless it is already exists if (!function_exists(''arr'')) { // This function returns random array element function arr(&$arr) { return $arr[rand(0, sizeof($arr)-1)]; } } // Random prefixes $prefix = array(''aero'', ''anti'', ''auto'', ''bi'', ''bio'', ''cine'', ''deca'', ''demo'', ''dyna'', ''eco'', ''ergo'', ''geo'', ''gyno'', ''hypo'', ''kilo'', ''mega'', ''tera'', ''mini'', ''nano'', ''duo'', ''an'', ''arch'', ''auto'', ''be'', ''co'', ''counter'', ''de'', ''dis'', ''ex'', ''fore'', ''in'', ''infra'', ''inter'', ''mal'', ''mis'', ''neo'', ''non'', ''out'', ''pan'', ''post'', ''pre'', ''pseudo'', ''semi'', ''super'', ''trans'', ''twi'', ''vice''); // Random suffixes $suffix = array(''dom'', ''ity'', ''ment'', ''sion'', ''ness'', ''ence'', ''er'', ''ist'', ''tion'', ''or'', ''ance'', ''ive'', ''en'', ''ic'', ''al'', ''able'', ''y'', ''ous'', ''ful'', ''less'', ''ise'', ''ize'', ''ate'', ''ify'', ''fy'', ''ly''); // Vowel sounds $vowels = array(''a'', ''o'', ''e'', ''i'', ''y'', ''u'', ''ou'', ''oo'', ''ae'', ''ea'', ''ie''); // Consonants $consonants = array(''w'', ''r'', ''t'', ''p'', ''s'', ''d'', ''f'', ''g'', ''h'', ''j'', ''k'', ''l'', ''z'', ''x'', ''c'', ''v'', ''b'', ''n'', ''m'', ''qu''); $password = $use_prefix?arr($prefix):''''; $password_suffix = arr($suffix); for($i=0; $i<$syllables; $i++) { // selecting random consonant $doubles = array(''n'', ''m'', ''t'', ''s''); $c = arr($consonants); if (in_array($c, $doubles)&&($i!=0)) { // maybe double it if (rand(0, 2) == 1) // 33% probability $c .= $c; } $password .= $c; // // selecting random vowel $password .= arr($vowels); if ($i == $syllables - 1) // if suffix begin with vovel if (in_array($password_suffix[0], $vowels)) // add one more consonant $password .= arr($consonants); } // selecting random suffix $password .= $password_suffix; return $password; }


Para un cliente internacional hace varios años, tuve que generar contraseñas seguras y aleatorias que luego fueron fusionadas por correo en documentos por mi cliente y enviadas por correo postal a destinatarios en 40 países. Sin saber qué tipo de letra iba a usarse en los documentos, utilicé una lista de personajes como el conjunto de 64 caracteres de Steve Gibson para eliminar la confusión entre glifos similares.

Para hacer las contraseñas resultantes pronunciables y, por lo tanto, más fáciles de recordar, emparejé consonantes y vocales juntas, con algunos dígrafos de consonantes (sh, th, wh, etc.) añadidos a la mezcla.

Para reducir las posibilidades de que se generen palabras inapropiadas u ofensivas (en inglés o en los idiomas de los destinatarios), limité las carreras de caracteres alfabéticos consecutivos a dos, con números o signos de puntuación entre ellos:

Es4tU$sA6 wH@cY8Go2

Al repasar mi método ahora, me doy cuenta de que había margen de mejora en el algoritmo de inadecuación. Usando las reglas anteriores, algunas palabras ofensivas son posibles ahora que algunos números y signos de puntuación son sustituidos por letras.


Un enfoque inicial podría ser generar sílabas inglesas en su mayoría válidas, mezclarlas y luego lanzar una conversión de texto-> l33t. Se ha trabajado en gramáticas generacionales de lenguaje natural, por lo que una de ellas podría ayudar.

Por ejemplo, ah ah son todas las sílabas válidas o están cerca de ella ... mezclarlas -> Ingulah ... l33t it -> 1ngu4h. ¿Es lo mejor que hay? Nah. Pero al menos es semiprononable (si usted habla l33t) y es más seguro computacionalmente.


En mi escuela de posgrado (ingeniería eléctrica, tecnología), todas las cuentas de computadoras se inicializaron con contraseñas que, supongo, fueron generadas por una utilidad de Linux estándar. Consistían en tres sílabas aleatorias, con tres letras minúsculas en cada sílaba. El resultado fue razonablemente seguro (en el orden de miles de millones de combinaciones posibles) pero tan pronunciable que todavía uso algunas de esas contraseñas más de una década después. El ejemplo de James es una excelente demostración de esto.

Un comentario sobre contraseñas en general, de un profesional de seguridad de red: son terribles, por varias razones, entre ellas:

  • Generalmente se rompe fácilmente, ya sea mediante ingeniería social o con software de ataque, especialmente si sabes algo sobre tu objetivo.

    Ejemplo 1: Recientemente necesité revisar un documento técnico protegido con contraseña. Al mirar la fecha, supe quién era nuestro Escritor Técnico en residencia en ese momento, escribí la primera palabra que me vino a la mente e inmediatamente abrí el documento.

    Ejemplo 2: los programas estándar de descifrado de contraseñas permiten al cracker especificar un conjunto de reglas que operan en un diccionario proporcionado por el usuario. Es trivial reemplazar ciertas letras con $ ymb01 $, o traducir a 1337, etc.

  • Las contraseñas "seguras" no lo son. Dada la gran cantidad de contraseñas que la mayoría de la gente necesita recordar, la forma más común de "recordar" una contraseña "fuerte" como "a4 $ N! 8_q" es escribirla en una hoja de papel (o, peor aún, guardarla en un archivo de texto). ''Dijo Nuff.

Si necesita una autenticación realmente segura , el mecanismo aceptado por la industria es multifactor (o de dos factores ). Los "dos factores" generalmente son algo que tienes (como una tarjeta de acceso) y algo que sabes que lo habilita (como un PIN). Ninguno de los dos trabaja sin el otro; necesita los dos.

Por otro lado, considere el nivel de seguridad que realmente necesita. ¿Qué estás protegiendo? ¿Qué tan mal los quieren los "chicos malos" y cuáles son las consecuencias si lo hacen? Las posibilidades son, "Its @ Secret!" es más que suficientemente bueno. :-)



Mi método preferido es obtener una lista de palabras de 3, 4 y 5 letras. Luego seleccione al menos 2 de esos, y coloque un número aleatorio de 2 dígitos o un símbolo especial (% & * @ # $) entre cada palabra. Si lo desea, puede capitalizar hasta un carácter por palabra al azar.

Dependiendo de tus requisitos de fuerza, terminas con contraseñas fáciles de recordar y comunicar como:

  • escritorio de limón%
  • papel y niño32hat

Tenga en cuenta que de vez en cuando obtiene combinaciones de palabras interesantes o inapropiadas (le dejaré usar su imaginación). Por lo general, tengo un botón que permite la generación de una nueva contraseña si la que presenta no es del agrado.

Como regla, solo use símbolos para los que las personas comúnmente conocen el nombre. En un teclado estándar de EE. UU. Evitaría ~ `''/ / ^

Supongo que esto respondió más a la pregunta de su jinete que a su pregunta principal. ..

¡Buena suerte!


function random_readable_pwd($length=12){ // special characters $sym="!/"§$%&/()={[]}/,.-_:;@>|"; // read words from text file to array $filename="special.txt"; if (!file_exists($filename)) { die(''File "''.$filename.''" is not exists!''); } $lines = file($filename); foreach ($lines as $line_num => $line) { $line=substr($line, 0, -2); $words[].=$line; } // Add words while password is smaller than the given length $pwd = ''''; $ran_date=date("s"); while (strlen($pwd) < $length){ $r = mt_rand(0, count($words)-1); // randomly upercare word but not all in one time if ($ran_date % 3 == 0) $words[$r]=ucwords($words[$r]); $pwd .= $words[$r]; //randomly add symbol if ($ran_date % 2 == 0) $pwd .= $sym{mt_rand(0,strlen($sym))}; $ran_date++; } // append a number at the end if length > 2 and // reduce the password size to $length $num = mt_rand(1, 99); if ($length > 2){ $pwd = substr($pwd,0,$length-strlen($num)).$num; } else { $pwd = substr($pwd, 0, $length); } return $pwd; }