Un peu froissé, écrit pour ne pas oublier. Les commentaires de la communauté habracrypto devraient être intéressants.
J'ai décidé de vérifier comment Brainwallet cryptographique est le système de sauvegarde du portefeuille multi-devises Jaxx et ce que les mots secrets signifient au niveau du code.
Pour commencer, j'ai fait une copie du portefeuille d'extension Google fraîchement installé dans mon dossier de travail. Correction des fichiers pour l'édition.
Notepad ++ a de grandes fonctionnalités pour rechercher des fichiers et des plugins pour formater le code, donc trouver et ajouter des lignes comme console.warn ("bits =" + bits) vous a aidé à comprendre rapidement ce qui se passe lors de la génération et de la restauration d'un portefeuille. Une fonctionnalité cachée à l'utilisateur a également été découverte, ce qui permet probablement d'élever le niveau de résistance cryptographique aux paranoïaques.
Ainsi, lors de la création d'un portefeuille:
1. 128 bits pseudo-aléatoires sont générés à l'aide de 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. La somme de contrôle 4 bits est calculée
3. Le bitmap total est divisé en morceaux de 12 bits et converti en entier. Nous obtenons 12 index pour la table de code.
4. Une chaîne de mots pour une sauvegarde de portefeuille est collectée à partir d'une table de codes d'une taille de 2225 mots.
5. En fonction de la sélection, différents portefeuilles sont créés en appliquant divers algorithmes de hachage à la graine 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; };
Les internes de tiers contiennent des implémentations de nombreux algorithmes différents, vous pouvez redessiner jaxx pour répondre à vos besoins.
hash160: hash160, hash256: hash256, ripemd160: ripemd160, sha1: sha1, sha256: sha256
Et beaucoup de code intéressant dans lequel je continue de creuser.
Lors de la restauration d'un portefeuille, les indices trouvés dans la table de codes sont complétés par des bits non significatifs de 0 à 12, la somme de contrôle est vérifiée, les clés sont immédiatement générées à partir de la graine reçue et la synchronisation avec la blockchain est lancée.
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
Pour moi, toute cette expérience s'est avérée être un matériau curieux pour approfondir ma connaissance de la crypto.
PS Et oui, pourquoi suis-je:
Que pensez-vous, si la neurocryptanalyse est appliquée à cet algorithme, sera-t-il possible d'accélérer un piratage de portefeuille dont la clé privée est codée de manière déterministe à partir du tableau de bits et utilisée comme germe pour plusieurs portefeuilles.
Je serais heureux et reconnaissant des exemples de code python, il est intéressant de mesurer la vitesse de sélection des clés sur différents matériels.