11

I can go to https://www.bitaddress.org/ , download their software to my system, disconnect my system from the Internet, then move my mouse over their page randomly to generate entropy and then get a single Bitcoin wallet. The single wallet address is really simple that I can carry with me in any form (print it to a paper, copy it to a file on any device and secure it the way I wish, etc.)

Does something equally simple exist for Ethereum?

I tried https://www.myetherwallet.com/ but I think it enforces added complexity on me to secure the private key. For example, first it forces me to pick a password that it would use to secure the private key. Then the resulting wallet looks complex like the following:

{
  "version": 3,
  "id": "54f...",
  "address": "46d...",
  "Crypto": {
    "ciphertext": "9c3...",
    "cipherparams": {
      "iv": "ac6..."
    },
    "cipher": "aes-128-ctr",
    "kdf": "scrypt",
    "kdfparams": {
      "dklen": 32,
      "salt": "9c8...",
      "n": 1024,
      "r": 8,
      "p": 1
    },
    "mac": "559..."
  }
}

(Note: I have used ... to truncate long strings. Also don't worry, I won't use this wallet anywhere.)

Along with saving this JSON file in exactly this format, I also need to remember an additional password.

So back to my question: Is there any Ethereum address generator that can just give me a private key and a public key that I can secure however I wish?

4 Answers 4

7

This one will provide a simple Ethereum address and private key as you asked for.

https://vanity-eth.tk/

Output:

Address: 0x1Ff482D42D8727258A1686102Fa4ba925C46Bc42

Private key: c6cbd7d76bc5baca530c875663711b947efa6a86a900a9e8645ce32e5821484e

I haven't audited the code yet. I only use it for testing and debugging purposes.

6
  • 7
    Hi, I'm the author of Vanity-ETH. You can totally use the generated addresses to store your beloved tokens, the random numbers are cryptographically secure, and you can use the site offline to avoid any attempt of theft of your private key.
    – Boris K
    Commented Jul 31, 2018 at 6:39
  • I just realized that this site doesn't provide the cryptographic public key (useful for sending encrypted messages). That would be a useful thing to add I think if you have a second @BorisK Commented Nov 19, 2018 at 18:24
  • 1
    @BorisK Awesome tool. If I have a random Hex string, which I want to use as a private key, can I use this tool to convert it to an Ethereum address? If yes, how? If not, then can you suggest any other JS based tool that can work offline to do this job? Commented Feb 20, 2020 at 11:26
  • @MidnightEngineer Here is a 2 lines function that does exactly what you want: git.io/JvEcG
    – Boris K
    Commented Feb 24, 2020 at 13:32
  • @BorisK your function converts an existing private key to a public key. But not every random hex string is a ED25519 private key. Commented Jun 14, 2022 at 15:39
4

Regarding the main question, yes, many options exist some of which are simple, such as the BIP39 Tool noted in a prior answer, hosted by Ian Coleman (disclosure: I am a contributor to that tool on Github), however, that will generate a mnemonic and resulting crypto vault (using BIP39, then BIP32 and BIP44), and not just a single private-public key pair.

Again, most wallets now use BIP32 which is a Hierarchal Deterministic (HD) wallet that uses extended public/private keys that can derive up to 2 billion wallet addresses (and if using BIP44, this is 2 billion per supported cryptocurrency), versus generating a single address tied to a public/private key pair.

Nonetheless, for the sake of the main question, below I provided an example program that can be run as a .py file in Python 3 that will generate a single private key and derive an ethereum address.

Regarding the Myetherwallet reference: The JSON file you described is a Keystore that is AES-encrypted, and what you pasted are the ciphertext and algorithm parameters such as salt and initialization vector (and all of which are need to decrypt, together with the password). The reason why sites will export it like this after forcing you to choose a password, is so that you only keep encrypted data on your device and not the plaintext which a hacker could steal.

Here is an example light program that can be run in Python (including offline) that will generate a cryptographically-secure random number (using the secrets library) to seed the private key, and then computes the public key and its Keccak_256 hash to derive an ethereum address based on the trailing 40 hex characters of that hash digest. See here to learn more about how ethereum addresses are generated.

The eth_keys library (from the Ethereum Foundation) is used in the below program and also contains error checking to make sure the private key is valid, in terms of elliptic curve secp256k1 which is for used in Ethereum, together with the hashing algorithm Keccak_256 (which comes from the below sha3 library).

import secrets
import sha3
import eth_keys
from eth_keys import keys

private_key = str(hex(secrets.randbits(256))[2:])
private_key_bytes = bytes.fromhex(private_key)
public_key_hex = keys.PrivateKey(private_key_bytes).public_key
public_key_bytes = bytes.fromhex(str(public_key_hex)[2:])
keccak256_of_public_key_bytes = sha3.keccak_256(public_key_bytes).hexdigest()
public_address = keys.PublicKey(public_key_bytes).to_address()
checksum = keys.PublicKey(public_key_bytes).to_checksum_address()

print('\n Private_key:',private_key,
      '\n Private_key_bytes:',private_key_bytes,
      '\n Public_key_hex:',public_key_hex,
      '\n Public_key_bytes:',public_key_bytes,
      '\n Full_Keccak_digest:',keccak256_of_public_key_bytes,
      '\n Ethereum address:',public_address,
      '\n Checksum Format of Above Ethereum:',checksum)

Note: The use of single private-public key pairs is not supported in many wallets, as most wallets use BIP39 which allow a user to derive up to 2 billion addresses per supported cryptocurrency. Nonetheless, if you understand the risks and convenience/security trade-offs, having a single private key that controls only one address (compared to having a single mnemonic that controls and entire crypto vault), then it could have its place in a portfolio of crypto assets.

Also, in some networks such as bitcoin, such addresses shouldn't be used unless sending nothing less than the entire balance, as the lack of a return "change" address can result in a total loss of the difference (i.e. remaining amount not sent) depending on the software used (and is another reason why brain wallets are not widely used anymore).

3

Check this site out: https://iancoleman.io/bip39/

Generate wallets using 12-word mnemonics.

Provides public and private keys derived from that 12-word mnemonic.

2
  • 2
    Which part of my question did you answer? Commented Dec 5, 2017 at 15:06
  • "So back to my question: Is there any Ethereum address generator that can just give me a private key and a public key that I can secure however I wish?" I answered that one... Commented Nov 1, 2018 at 16:09
1

Sure. Private and public keys are tied to encryption algotithm and not Ethereum structure. Check this one, for example. https://github.com/vkobel/ethereum-generate-wallet

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.