Un poco arrugado, escribió para no olvidar. Los comentarios de la comunidad habracrypto deberían ser interesantes.
Decidí comprobar cómo Brainwallet criptográfico es el sistema de respaldo de la billetera multidivisa Jaxx y qué significan las palabras secretas a nivel de código.
Para comenzar, hice una copia de la cartera de extensión de Google recién instalada en mi carpeta de trabajo. Se corrigieron los archivos para su edición.
Notepad ++ tiene excelentes funciones para buscar archivos y complementos para formatear código, por lo que buscar y agregar líneas como console.warn ("bits =" + bits) lo ayudó a descubrir rápidamente qué sucede al generar y restaurar una billetera. También se descubrió una función oculta para el usuario, que probablemente permite elevar el nivel de resistencia criptográfica a la paranoia.
Entonces, al crear una billetera:
1. Se generan 128 bits pseudoaleatorios usando rng:
function generateMnemonic(strength, rng, wordlist) { strength = strength || 128 rng = rng || randomBytes var hex = rng(strength / 8).toString('hex') console.warn('hex=' + hex) return entropyToMnemonic(hex, wordlist) }
2. Se calcula la suma de control de 4 bits
3. El mapa de bits total se divide en partes de 12 bits y se convierte a Entero. Obtenemos 12 índices para la tabla de códigos.
4. Se recopila una cadena de palabras para una copia de seguridad de billetera de una tabla de códigos con un tamaño de 2225 palabras.
5. Según la selección, se crean diferentes billeteras aplicando varios algoritmos de hash a la semilla de 128 bits.
var jaxx; (function (jaxx) { var Seed = (function () { function Seed() { } Seed.generateMnemonic = function () { return thirdparty.bip39.generateMnemonic(); }; Seed.validateSeed = function (seed) { return (thirdparty.bip39.validateMnemonic(seed)) ? true : false; };
Los componentes internos de terceros contienen implementaciones de muchos algoritmos diferentes, puede volver a dibujar jaxx para satisfacer sus necesidades.
hash160: hash160, hash256: hash256, ripemd160: ripemd160, sha1: sha1, sha256: sha256
Y mucho código interesante en el que sigo cavando.
Al restaurar una billetera, los índices encontrados en la tabla de códigos se complementan con 0 a 12 bits no significativos, se verifica la suma de verificación, las claves se generan inmediatamente a partir de la semilla recibida y se inicia la sincronización con la cadena de bloques.
words=boil,matter,crawl,clean,choice,gasp,clay,defy,crew,amount,cushion,pretty
chunks=00011001000,10001001010,00110010101,00101010010,00101000001,01100000001,00101010001,00111001101,00110011010,00001000000,00110110011,10101010001
bits=000110010001000100101000110010101001010100100010100000101100000001001010100010011100110100110011010000010000000011011001110101010001
checksum=0001
Para mí, toda esta experiencia resultó ser un material curioso para profundizar mi conocimiento de la criptografía.
PD Y sí, ¿por qué estoy yo?
¿Qué crees que, si se aplica el neurocriptoanálisis a este algoritmo, será posible acelerar un pirateo de billetera cuya clave privada está codificada de forma determinista desde la matriz de bits y se utiliza como semilla para varias billeteras?
Me alegraría y agradecería los ejemplos de código de Python, es interesante medir la velocidad de selección de teclas en diferentes hardware.