IOTA Seeds
Update: use the Trinity wallet.
https://trinity.iota.org/
It is best to start with a clean offline machine. Install a fresh copy of Ubuntu 18.04.1 LTS
https://www.ubuntu.com/download/desktop
Download https://github.com/iotaledger/trinity-wallet/releases
Trinity videos https://iotanodes.org/trinity/
Never use a 3rd party to create your seed. iotaseedgenerator.com, iotaseed.io, iota-help.com, etc... have the opportunity to scam.
example
example
For maximum security, your seed should be 81 random characters consisting of only uppercase A-Z and the number 9.
Go offline and generate the seed yourself.
For greater protection use a live CD https://en.wikipedia.org/wiki/List_of_live_CDs
or a live USB. https://en.wikipedia.org/wiki/Live_USB#Examples_of_Live_USB_operating_systems
Print it on paper and keep it in a secure location.
Store your seed in an encrypted file, and protect it with a password.
An open source password manager like KeePass and a USB flash drive work well.
KeePass also has a built-in password generator. https://keepass.info/ https://www.keepassx.org/
Select the Collect additional entropy checkbox. https://keepass.info/screenshots/keepass_2x/pwgen_big.png
Use Two-Channel Auto-Type Obfuscation to thwart keyloggers. https://keepass.info/help/v2/autotype_obfuscation.html
Do not use a function that is generated by a deterministic algorithm. Only use a random number generator that is cryptographically secure.
Linux:
cat /dev/urandom |tr -dc A-Z9|head -c${1:-81}
echo $(cat /dev/urandom | tr -dc A-Z9-9 | head -c81)
Mac:
cat /dev/urandom |LC_ALL=C tr -dc 'A-Z9' | fold -w 81 | head -n 1
cat /dev/urandom | LC_ALL=C tr -dc 'A-Z9-9' | fold -w 81 | head -n 1
NodeJS:
[...Array(81)].map(() => (function getRandomChar() { return 'ABCDEFGHIJKLMNOPQRSTUVWXYZ9'[crypto.randomBytes(1)[0]] || getRandomChar() })()).join('')
JavaScript:
[...Array(81)].map(() => (function getRandomChar() { return 'ABCDEFGHIJKLMNOPQRSTUVWXYZ9'[window.crypto.getRandomValues(new Uint8Array(1))] || getRandomChar() })()).join('')
Python 3:
import secrets; print("".join(secrets.choice("ABCDEFGHIJKLMNOPQRSTUVWXYZ9") for _ in range(81)))
Ruby:
require 'securerandom'; (1..81).map{'ABCDEFGHIJKLMNOPQRSTUVWXYZ9'[SecureRandom.random_number(27)]}.join('')
Windows: (To open a Powershell console, press Windows-Key then type powershell in the search.)
$randomBuffer = [byte[]](1..1); $seed = [char[]](1..81); -join($seed | foreach { Do {(new-object Security.Cryptography.RNGCryptoServiceProvider).GetBytes($randomBuffer); $randomChar = [char[]]([char]'A'..[char]'Z' + [char]'9'..[char]'9')[$randomBuffer[0]]} While ($randomChar -eq $null); $randomChar })
JavaScript:
Save seedgen.html and sjcl.js then run offline.
source:
https://github.com/knarz/seedgen
https://github.com/bitwiseshiftleft/sjcl/releases/tag/1.0.7
Python 3:
import sys
if sys.version_info < (3, 6):
sys.stdout.write("Requires Python 3.6 \n")
sys.exit(1)
import secrets #https://docs.python.org/3/library/secrets.html
import string
import ctypes
import os
seed = ''.join(secrets.choice(string.ascii_uppercase + '9') for _ in range(81))
#print(seed)
#Write directly to a USB flash drive to avoid hitting the swap file.
f1 = open("f:\seed.txt", "a") #change to your USB drive letter
f1.write(seed)
f1.write("\r\n")
f1.flush()
os.fsync(f1)
f1.close()
location = id(seed)
size = sys.getsizeof(seed)
bufsize = len(seed) + 1 #null-terminated add 1
offset = size - bufsize
print("Location of seed variable:",hex(location)), size
#print("Seed:", ctypes.string_at(location, size))
#print([x for x in globals().values() if id(x)==location])
print("Wipe seed from memory: 0x%08x size %i bytes" % (location, bufsize-1))
ctypes.memset(location + offset, 0, bufsize)
print("Seed:", ctypes.string_at(location, size))
#print([x for x in globals().values() if id(x)==location])
print(repr(seed))
input('File seed.txt saved. Press ENTER to exit.')
Save as iotaseed.py then run offline.
Java:
https://github.com/eukaryote31/iota-seed-gen
JavaScript: IOTA paper wallet generator
https://github.com/arancauchi/IOTA-Paper-Wallet
Go:
https://github.com/erdii/iota-seedgen
After the computer generates the random string, manually change/swap some of the characters yourself.
Generate, restore IOTA seed from Bitcoin BIP39 mnemonic
https://github.com/mlouielu/iota-mnemonic
What is a seed?
What is my seed?
The Secret to Security - Is Secrecy
One seed to sow your key(s)
How to generate a seed safely?
Secure Seed Commands for IOTA
Secure Cryptocurrency Seeds
Generating a IOTA seed using a dice
IOTA_Paperwallet_Selfprint_v02.pdf
https://public.tangle.works/winternitz.pdf
home