Ethereum uses ECDSA to generate public-private key pairs as Bitcoin does.
Ethereum address is generated by hashing public key with keccak256, slicing last 20 bytes, and adding “0x” at the top.
privateKey -> derive with ECDSA -> publicKey -> hash -> Ethereum address
const Web3 = require("web3"); const mnemonic = "*"; const HDWalletProvider = require('truffle-hdwallet-provider'); let provider = new HDWalletProvider(mnemonic, 'https://ropsten.infura.io/v3/*', 0, 1); let web3 = new Web3(provider); let account = web3.eth.accounts.create(); console.log("address:" + account.address); console.log("privateKey:" + account.privateKey);
$ node address.js
address:0xefC5B5d9A4BDA3bE4f4da8e7AaFe25F08C5EAce7
privateKey:********
$ node address.js
address:0xB19C2356a88F5437e253d404DA642EC914dCC794
privateKey:********
ニーモニック(mnemonic)はあるだけで口座管理ができる
キーストアはパスワードがないと何も出来ない
MetaMaskのウォレットではmnemonicから秘密鍵を作る仕組みがある
### mnemonic
12ワードは128bitのエントロピーから生成される(randomな値)
エントロピーからチェックサムを生成し足し合わせバイト列に変換し11bit(最大2048)ごとに分割
分割した値をindex値としてワードリストの索引
PBKDF2-SHA512から生成 2048回ストレッチ
なるほど、中々凄いことになってるわ