Ethereum Account Generator
Generate BIP39 mnemonic, derive Ethereum private/public keys and address, and sign a sample transaction ready to broadcast. Fully client-side.
About
Deriving an Ethereum account from entropy requires a precise chain of cryptographic operations. A failure at any step - weak randomness, incorrect derivation path, broken checksum - produces keys that either cannot control funds or expose them to theft. This tool implements the full BIP39 โ BIP32 โ secp256k1 pipeline client-side: 128-bit entropy generates a 12-word mnemonic, PBKDF2-HMAC-SHA512 with 2048 iterations stretches it into a 512-bit seed, and hierarchical deterministic derivation at path m/44'/60'/0'/0/0 yields the private key. The public key is computed via scalar multiplication on the secp256k1 curve (order n ≈ 1.158 ร 1077), and the address is the last 20 bytes of the Keccak-256 hash of the uncompressed public key.
The tool also constructs and signs a sample Ethereum transaction using ECDSA with EIP-155 replay protection (chainId = 1). The signed raw transaction hex can be broadcast to mainnet via any Ethereum node. This is an educational and development utility. For production wallets holding real value, use air-gapped hardware signers. Browser environments are susceptible to extensions, clipboard hijacking, and memory inspection. Treat any key generated here as potentially observable.
Formulas
The mnemonic encodes entropy with an appended checksum. Given entropy E of 128 bits, the checksum CS is the first 4 bits of SHA-256(E). The combined 132 bits are split into 12 groups of 11 bits, each indexing the BIP39 wordlist.
Seed derivation uses PBKDF2:
Master key derivation (BIP32):
Child key derivation for hardened index i (where i โฅ 231):
Public key from private key via elliptic curve scalar multiplication on secp256k1:
where G is the generator point and k is the 256-bit private key scalar. The Ethereum address is:
Transaction signing uses ECDSA. The transaction is RLP-encoded with fields (nonce, gasPrice, gasLimit, to, value, data, chainId, 0, 0) per EIP-155. The hash h = Keccak256(RLP(tx)) is signed to produce (r, s, v).
Where k = private key scalar, K = public key point, G = generator point, c = chain code, CS = checksum bits, E = entropy, v = recovery parameter (chainId ร 2 + 35 or 36).
Reference Data
| Parameter | Value | Standard |
|---|---|---|
| Entropy Length | 128 bits | BIP39 |
| Mnemonic Words | 12 | BIP39 |
| Wordlist Size | 2048 | BIP39 English |
| Checksum Bits | 4 (entropy_bits รท 32) | BIP39 |
| PBKDF2 Iterations | 2048 | BIP39 |
| PBKDF2 Hash | HMAC-SHA512 | BIP39 |
| Seed Length | 512 bits (64 bytes) | BIP39 |
| HD Derivation Path | m/44'/60'/0'/0/0 | BIP44 / SLIP44 |
| Curve | secp256k1 | SEC 2 |
| Curve Order (n) | 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 | SEC 2 |
| Generator Point (Gx) | 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798 | SEC 2 |
| Private Key Length | 256 bits (32 bytes) | ECDSA |
| Uncompressed Public Key | 65 bytes (04 || x || y) | SEC 1 |
| Address Derivation | Keccak-256 of pubkey[1:] โ last 20 bytes | Ethereum Yellow Paper |
| Address Checksum | EIP-55 mixed-case encoding | EIP-55 |
| Transaction Signing | ECDSA + EIP-155 (v = chainId ร 2 + 35/36) | EIP-155 |
| Chain ID (Mainnet) | 1 | EIP-155 |
| Gas Limit (sample) | 21000 | Ethereum simple transfer |
| RLP Encoding | Recursive Length Prefix | Ethereum Yellow Paper, Appendix B |
| SLIP44 Coin Type | 60 (Ethereum) | SLIP44 |
| BIP39 Salt Prefix | "mnemonic" | BIP39 |
| Master Key HMAC Key | "Bitcoin seed" | BIP32 |