Foro de elhacker.net

Seguridad Informática => Hacking => Mensaje iniciado por: MA40 en 9 Noviembre 2020, 13:20 pm



Título: Salts en hashes Bitcoin "wallet.dat"
Publicado por: MA40 en 9 Noviembre 2020, 13:20 pm
Hola.

Estoy haciendo pruebas con HashCat.

En mi archivo de hashes, tengo varios del tipo Bitcoin "wallet.dat".

HashCat dice que algunos hashes tienen salts y otros no.

¿Los hashes de contraseñas de Bitcoin “wallet.dat” realmente tienen salts?

Un saludo.


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: MA40 en 15 Noviembre 2020, 15:13 pm
¿Nadie puede ayudarme?

Un saludo.


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: AlbertoBSD en 20 Noviembre 2020, 19:28 pm
¿Los hashes de contraseñas de Bitcoin “wallet.dat” realmente tienen salts?

Para Bitcoin, la información completa para poder crackear la Wallet siempre debe de tener un SALT.

Si no tiene el salt, posible me sea otro tipo de wallet, ya que sin ese Salt seria fácil generar diccionarios para crackear las wallets rápidamente

Saludos


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: MA40 en 21 Noviembre 2020, 12:52 pm
Hola.

Hay algo que se me escapa.

Sí por salt entendemos lo que se describe en https://es.m.wikipedia.org/wiki/Sal_(criptograf%C3%ADa) (https://es.m.wikipedia.org/wiki/Sal_(criptograf%C3%ADa)) , no entiendo lo siguiente:

Un archivo “wallet.dat” cifrado tiene el hash de la contraseña y si tiene salt, entonces el hash es el de la contraseña + el salt.

Pero un archivo “wallet.dat” es un archivo independiente y transportable. Quiero decir que si tengo en un ordenador instalado Bitcoin Core con su “wallet.dat”, y ahora copio el “wallet.dat” en otro ordenador con Bitcoin Core, en este segundo ordenador también funciona el “wallet.dat”. O sea, puedo transferir bitcoins sólo con la contraseña. ¿Cómo sabe este segundo ordenador qué salt se debe añadir a la contraseña para descifrar las claves privadas?

Según el artículo de la Wikipedia, los salts se guardan aparte de los hashes para que sean efectivos.

Me explico ¿no?

Un saludo.


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: AlbertoBSD en 22 Noviembre 2020, 08:52 am
Si te explicas y tu duda es valida.

El SALT se encuentra dentro del archivo wallet.dat también, son 8 bytes random que se eligen diferente cada vez que cambias tu passphase, asi si mueves tu archivo wallet.dat a otro PC o movil, el bitcoincore sabra encontrar el SALT y utilizarlo junto con tu contraseña para desbloquear las llaves cifradas que tambien estan dentro del mismo archivo.

Saludos!


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: MA40 en 22 Noviembre 2020, 19:25 pm
Muchas gracias AlbertoBSD.

El hash se puede extraer fácilmente del archivo “wallet.dat”. ¿Se podría extraer también el salt? ¿Cómo?

Un saludo.


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: AlbertoBSD en 22 Noviembre 2020, 19:46 pm
Ya hay programas que lo hacen, pero si te interesa hacerlo manual, tienes que localizar la posicion del ascii "mkey" en el archivo, segun he visto solo hay un mkey por wallet, pero no me a tocado ver muchas wallets.

Una vez localizada la posición inicial de ascii mkey en el wallet, el salt se encuentra iniciando -23 posiciones antes del mkey y solo son 8 bytes, ejemplo, el texto selecionado son los 8 bytes en hexadecimal que representan el salt.

(https://albertobsd.dev/uploads/1606070664_salt_imagen.png)


Saludos!


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: MA40 en 23 Noviembre 2020, 14:10 pm
Muchas gracias AlbertoBSD.

Me salen caracteres no imprimibles.

Por otro lado, he probado en HashCat con un hash que tiene salt, un hash del que conozco la contraseña, y sin especificar ningún salt, especificando sólo la contraseña, HashCat la recupera.

¿Cómo es posible?

Un saludo.

EDITO: Y con John the Ripper pasa lo mismo.


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: AlbertoBSD en 23 Noviembre 2020, 19:28 pm
Me salen caracteres no imprimibles.

Si generalmente son valores no imprimibles, se tienen que transformar a un string hexdecimal para poder manejarlo sin problemas..

Muchas gracias AlbertoBSD.
Por otro lado, he probado en HashCat con un hash que tiene salt, un hash del que conozco la contraseña, y sin especificar ningún salt, especificando sólo la contraseña, HashCat la recupera.

A ver tiene o no tiene Salt?

Si te de la contraseña, seguramente el string que le estas pasando a hashcat o johntheripper tiene el salt y no te has dado cuenta, generalmente es un string de 16 digitos hexadecimales que corresponde a los 8 bytes con caracteres no imprimibles.

Por ejemplo tienes un hash tipo

Código:
$bitcoin$64$<....>&16$001122aabbccddee$....

El valor 001122aabbccddee Corresponde al SALT

byte 1 : 00
byte 2 : 11
byte 3 : 22
byte 4 : aa
byte 5 : bb
byte 6 : cc
byte 7 : dd
byte 8 : ee

Entonces el hash que le pasas a los programas tiene o no tiene salt?

Veo que tiene interés en el tema, sigue así investiga mas!! y no utilices los programas sin saber que hacen, así hasta que estés totalmente seguro del proceso.

Saludos!


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: MA40 en 23 Noviembre 2020, 20:03 pm
Tienes toda la razón AlbertoBSD.

Tooooodos los hashes que tengo resulta que llevan el salt incorporado. Soy tooonto.

Es que no le encontraba sentido. Pensaba que los salts se utilizaban precisamente para evitar precisamente eso: encontrar toda la información para una autentificación, todo en un mismo sitio.

Los “wallet.dat” contienen toda la información (cifrada, claro) para una autentificación. Y los hashes que utilizan HashCat y John the Ripper, la llevan.

¿Por qué utiliza entonces salts Bitcoin Core en sus “wallet.dat”? Supongo que para que los hashes sean siempre diferentes aun utilizando la misma contraseña. Eso protege al menos de las tablas arco iris.

Muchísimas gracias AlbertoBSD; creo que ya tengo todo claro. (Bueno, todo todo no, aún me queda saber cómo programar un computador cuántico para descifrar los hashes de Bitcoin). ;D

Un saludo.

EDITO: Por cierto, muy bueno tu blog https://albertobsd.dev/blog/ (https://albertobsd.dev/blog/)


Título: Re: Salts en hashes Bitcoin "wallet.dat"
Publicado por: AlbertoBSD en 23 Noviembre 2020, 20:58 pm
¿Por qué utiliza entonces salts Bitcoin Core en sus “wallet.dat”? Supongo que para que los hashes sean siempre diferentes aun utilizando la misma contraseña. Eso protege al menos de las tablas arco iris.

Exacto, sin los SALT seria muy facil precalcular todas las tablas con los HASH para todas las contraseñas y guardar las mismas tablas  para futuras wallets "encontradas". Ten en cuenta que el proceso es el siguiente:

Tu passphrase es combianada con el SALT (8 bytes random) y es Iterada una N cantidad veces en un proceso que se llama derivacion de llave una función mas o menos asi:

Código
  1. keyderivation("sha512",passphrase,salt,N);

Este proceso hace N-1 veces la operación SHA512 del resultado SHA512(passphrase + salt);

Esto te da un arreglo de 64 BYTES o un string de 128 caracteres en hexadecimal

Y con ese resultado procede en un proceso aparte a Descifrar tu MasterKEY, la masterKEY descifrada se utiliza para descifrar tus llaves Privadas con las cuales se pude mover el BTC.

Con el proceso Anterior imagina que tienes 2 carteras con SALT diferente y password "Hola" pero con el mismo numero de Iteraciones N

el proceso para la cartera A te dara un arreglo de  64 BYTES totalmente distinto parta la cartera B, incluso teniendo la misma contraseña.

Ahora imagina que Quitas el SALT de la ecuación quedaría algo asi:

Código
  1. keyderivation("sha512",passphrase,"",N);

Con las mismas carteras A y B, el proceso te daría el mismo juego de 64 bytes para el mismo password.

Esa es la razón del SALT.

Ahora imagina si a este proceso le agregas un numero de iteraciones N muy grande, mi cartera personal de BTC tiene un N de mas de 100 Millones (lo normal es que sea entre 100 mil y 200 mil), incluso con los GPU mas rapido solo podrias probar 1 o 2 passphrase por segundo, lo normal es que sean unas 2000 palabras por segundo.

EDITO: Por cierto, muy bueno tu blog https://albertobsd.dev/blog/ (https://albertobsd.dev/blog/)

Gracias!!

Saludos!