Seleccionamos la contraseña para el TIN indio en dos segundos, o por qué las matemáticas de fuerza bruta

En India hay un análogo local de nuestra DCI: "adhar". El sistema electrónico "eAdhar" está atornillado. En eAdhara, cada letra está bloqueada con una contraseña. Y todo estaría bien, pero la contraseña está compuesta de acuerdo con un patrón simple: las primeras cuatro letras del nombre son mayúsculas, más el año de nacimiento.


Cuatro letras mayúsculas y cuatro números. De estos, se pueden compilar 2.821.109.909.456 combinaciones. Si marca mil combinaciones por segundo, una contraseña tomará noventa años.


Demasiado largo ¿Podemos acelerar un par ( billones ) de veces?


92 años → 52 días. Grupo


Con tres billones de combinaciones, tuvimos un poco más. Aún así, la plantilla es conocida:


([AZ][AZ][AZ][AZ]) ([0–9][0–9][0–9][0–9]) (4  ) (4 ) ( 1) ( 2) 

Dado este patrón, líneas como S2N65GE1 pueden descartarse inmediatamente. ¿Cuántas combinaciones obtienes entonces?


El primer grupo son cuatro caracteres alfabéticos. 26 opciones, 4 posiciones, obtenemos:


264=$45697


4 posiciones de 10 dígitos, de manera similar:


104=$10,00


De esto obtenemos el número total de combinaciones:


456976×10000=$456976000


Calculemos cuánto más rápido será ahora la fuerza bruta. Nuevamente, procedemos de 1000 intentos por segundo:


456,976,000/1,000=$4,569,76


O 52 días, 21 horas, 22 minutos y 40 segundos. En lugar de 92 años. No esta mal. Pero aún queda mucho tiempo. ¿Qué más se puede hacer? Lo mismo: reducir el número de combinaciones.


52 días → 12 horas. Enciende el sentido común


El primer y segundo grupo no es un conjunto aleatorio de caracteres, sino las primeras letras del nombre y año de nacimiento. Comencemos con el año de nacimiento.


No tiene sentido seleccionar contraseñas para los nacidos en 1642 o 2594. Por lo tanto, el rango de combinaciones se puede reducir de forma segura de 0000–9999 a 1918–2018. Por lo tanto, cubriremos el más o menos de todos los que viven entre los 0 y los 100 años. Gracias a esto, tanto el número de combinaciones como el tiempo se reducen, respectivamente:


456,976×100=$45,697,60


45697600/1000=$45697.


O 12 horas, 41 minutos y 37 segundos.


12 horas → 2 minutos. Sacrificamos la precisión


12 horas es genial, pero ... Tenemos que ir más profundo .


Ahora tenemos 45 millones de combinaciones que cubren con precisión a todos los usuarios de eAdhara. Pero, ¿qué pasa si sacrificando una pequeña fracción por el aumento de la velocidad?


Hemos perfeccionado las combinaciones digitales. Las letras hacen algo similar. La lógica es simple: no hay año de nacimiento 9999, y de la misma manera no hay un nombre indio con "AAAA" al principio. Pero, ¿cómo determinar todas las combinaciones adecuadas?


Python Photon


Recolecté nombres indios del sitio del catálogo, Photon me ayudó mucho en esto. El resultado es 3.283 nombres únicos. Queda por recortar las primeras cuatro letras y eliminar los duplicados:


 grep -oP ”^\w{4}” custom.txt | sort | uniq | dd conv=ucase 

Grep, sort, uniq, dd


¡Resultó 1,598 prefijos! Había bastantes duplicados, porque las primeras cuatro letras en nombres como "Sanjeev" y "Sanjit" son las mismas.


1.598 prefijos: ¿no son suficientes para mil quinientos millones de personas? Estoy de acuerdo Pero no olvide que estos son prefijos, no nombres. Publiqué la lista resultante en Gist . De hecho, debería haber más. Puede confundirse, recolectar 10,000 nombres de otros sitios y obtener 3,000 prefijos únicos, pero no tuve tiempo para esto. Entonces comenzaremos desde 1,598.

Calculemos cuánto tiempo se necesita ahora:


1598×100=$15980


159800/1000=$159.


O 2 minutos y 39.8 segundos.


2 minutos → 2 segundos. Wikipedia al rescate


2 minutos 40 segundos es el tiempo que tomará ordenar todas las combinaciones. Pero, ¿qué pasa si la undécima combinación es correcta? ¿O el último? O el primero?


Ahora la lista de combinaciones está ordenada alfabéticamente. Pero esto no tiene sentido: ¿quién dijo que los nombres en "A" son más comunes que en "B", o que hay más niños de un año que setenta años?


Es necesario tener en cuenta la probabilidad de cada combinación. En Wikipedia escriben:


En India, más del 50% de la población tiene menos de 25 años y más del 65% tiene menos de 35 años.

Basado en esto, en lugar de la lista 1–100, puede intentar esto:


 25–01 (  ,       ,     ) 25–35 36–100 

Entonces resulta que la probabilidad de la primera 1598×25=$39,95 las combinaciones aumentan al 50%. Hemos descifrado la mitad de las contraseñas para 39950/1000=$39.9 segundos! En el siguiente 1598×10/1000=$15. segundos, recogeremos otro 15% de las contraseñas. Total: 65% de las contraseñas en 55,9 segundos.


Ahora a los nombres.


En Google es fácil encontrar los nombres TOP-100 de cualquier país. Basado en datos de India, moví las combinaciones apropiadas al principio de la lista. Suponemos que el 15% de la población de la India tiene nombres populares. Por lo tanto, el 15% de las contraseñas se pueden descifrar casi al instante.


Hindúes: 80% de la población de la India. Entonces, si pones los nombres hindúes arriba en la lista, acelerará el 80% de los intentos. Después del paso anterior, nos quedamos 100 intentos Si el 80% de ellos son nombres hindúes, entonces el 79% (dejamos el 1% a nombres populares, pero no hindúes) vamos a romper en el próximo 65% de los intentos.


Cuentemos todo juntos, teniendo en cuenta las estadísticas de edad. Dividir en grupos:


 100:   { 50:  00  25  { 7:  , 43:   { 34: , 9:   } } 15:  26  35  { 3:  , 13*:   { 10: , 3:   } } 45:  36  100  { 7:  , 38:   { 30: , 8:   } } } 

Ahora hagamos un algoritmo eficiente para descifrar contraseñas:



Los números rojos son una prioridad de búsqueda. Las combinaciones para personas del primer grupo se prueban primero, luego segundo, luego tercero y así sucesivamente.


¿Cuánto tiempo lleva piratear ahora?


Fase 1
1 = 11 segundos para descifrar 7 contraseñas
2 = 3 segundos para descifrar 3 contraseñas
3 = 11 segundos para descifrar 7 contraseñas

Hemos descifrado las contraseñas de 17 personas, quedan 83. Eliminaremos las combinaciones anteriores de la lista e intentaremos los siguientes conjuntos: 4, 5, 6.


Fase 2
4 = 54 segundos para descifrar 34 contraseñas
5 = 16 segundos para descifrar 10 contraseñas
6 = 47 segundos para descifrar 30 contraseñas

Nuevamente, elimine las combinaciones de las fases anteriores.


Fase 3
7 = 14 segundos para descifrar 9 contraseñas
8 = 5 segundos para descifrar 3 contraseñas
9 = 12 segundos para descifrar 8 contraseñas

Tiempo total : 11+3+11+54+16+47+14+5+12=$17 segundos o 2 minutos y 13 segundos.


Contraseñas descifradas : 100


Tiempo promedio para una contraseña : 173 / 100 = $ 1.7 segundos


92 años → 1.73 segundos. Nitsche entonces, ¿verdad?

Source: https://habr.com/ru/post/es420995/


All Articles