Título: Funcion BytesToKeySHA512AES en el bitcoin Publicado por: AlbertoBSD en 29 Octubre 2020, 15:26 pm Recientemente publique el tema:Como determina la función AES256CBCDecrypt una correcta desencriptación (https://foro.elhacker.net/criptografia/como_determina_la_funcion_aes256cbcdecrypt_una_correcta_desencriptacion-t507536.0.html) El cual esta relacionado con este de forma algo indirecta.
Todo esto viene del análisis que estoy realizando al código fuente del Bitcoin Core. Hoy hablaré sobre la función BytesToKeySHA512AES la cual es una de las primeras que se utilizan cuando intentas desbloquear una cartera bitcoin protegida con un passphrase. BytesToKeySHA512AES básicamente toma las passphrase ingresada + un salt proporcionado por el mismo archivo wallet.dat y los transforma en un (key, iv) para posteriormente utilizarlos como material para descifrar la llave cifrada. El código fuente de BytesToKeySHA512AES, lo pueden encontrar en Código: https://github.com/bitcoin/bitcoin/blob/master/src/wallet/crypter.cpp Tiene 3 parámetros de entrada y 2 de salida Entrada: Salt Passphrase Count Salida: Key IV La parte interesante del código es la siguiente: Código
Básicamente obtiene el hash sha512 de si mismo (count -1) veces ya la que primera vez fue el hash sha512 de (passphrase + IV) como muestra el siguiente código: Código
Posteriormente copia los primeros 32 bytes al Key y los siguientes 16 bytes al Vector IV Si no están familiarizados con la sintaxis del codigo anterior dejare un código en PHP ejemplificando lo que hace la función: Código
Lo escribí en PHP ya que es mas fácil darle seguimiento a las funciones hash, solo que no estoy 100% seguro de como manejar las copia de los bytes del hash resultante al key y al IV respectivamente. Saludos Título: Re: Funcion BytesToKeySHA512AES en el bitcoin Publicado por: kub0x en 31 Octubre 2020, 15:22 pm Básicamente tienes dos posibilidades,
bruteforcear el passhprase usando la PBKDF o bien bruteforcear la clave AES que resulta de la PBKDF. Supongo que esto ya lo sabes y es prácticamente imposible, pero bueno, ánimo que igual suena la flauta. Saludos. Título: Re: Funcion BytesToKeySHA512AES en el bitcoin Publicado por: AlbertoBSD en 31 Octubre 2020, 19:20 pm bruteforcear el passhprase usando la PBKDF o bien bruteforcear la clave AES que resulta de la PBKDF. La primera opciones tienes que pasar por el proceso completo es decir generar un passphrase random de N cantidad de bytes que buen puede ser 1 byte o bien puede ser 1GB, posteriormente pasarlos por el PBKDF sha512 con un mínimo de 25000 iteraciones. Yo se que la gente no mete passphrase de 1GB de longitud y también están limitadas por los caracteres fácilmente localizables por el teclado sin embargo las mínimo 25K iteraciones del sha512 hacen el proceso un poco mas ineficientes para el crackeo desde el momento que cada passphrase random tiene que pasar por ese proceso. La segunda opciones que mencionas es la que voy implementar ya que solo tienes que generar el KEY y el IV de forma aleatoria y pasalos a la función AES256CBCDecrypt saltándose el costoso proceso de PBKDF. Además esta opción esta claramente limitada por el tamaño de la dupla Key,IV y en la primera opción no voy a estar seguro si probe todas las combinaciones posibles en el passphrase además que un passphrase de mas 46 dígitos ya es mas costoso por que incluyen más posibilidades y el proceso del PBKDF. Supongo que esto ya lo sabes y es prácticamente imposible, pero bueno, ánimo que igual suena la flauta. Si claro que se que es improbable, pero al final mi objetivo será encontrar el camino más eficiente para hacerlo, independientemente de su probabilidad. Saludos! Título: Re: Funcion BytesToKeySHA512AES en el bitcoin Publicado por: Danielㅤ en 31 Octubre 2020, 20:13 pm La única ventaja clara que tenés actualmente es que vos sabés la contraseña, solo buscas saber el proceso de cifrado para proceder al descifrado.
Saludos |