From 8f8044b12db7af31c0250e8d74c26a742b965428 Mon Sep 17 00:00:00 2001 From: Sean Bowe Date: Mon, 20 Jan 2014 12:21:43 -0700 Subject: Restructured, fixed some grammar/spelling errors. --- bip-0039.mediawiki | 76 +++++++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/bip-0039.mediawiki b/bip-0039.mediawiki index aa2c0b3..77da086 100644 --- a/bip-0039.mediawiki +++ b/bip-0039.mediawiki @@ -5,6 +5,7 @@ Pavol Rusnak ThomasV Aaron Voisine + Sean Bowe Status: Draft Type: Standards Track Created: 10-09-2013 @@ -12,35 +13,36 @@ ==Abstract== -This BIP describes an usage of mnemonic code or mnemonic sentence - a group of -easy to remember words - to generate deterministic wallets. +This BIP describes the implementation of a mnemonic code or mnemonic sentence -- +a group of easy to remember words -- for the generation of deterministic wallets. -It consists of two parts: generating the mnemonic and converting it into -a binary seed. This seed can be later used to generate deterministic wallets -using BIP-0032 or similar methods. +It consists of two parts: generating the mnenomic, and converting it into a +binary seed. This seed can be later used to generate deterministic wallets using +BIP-0032 or similar methods. ==Motivation== -Such mnemonic code or mnemonic sentence is much easier to work with than working -with the binary data directly (or its hexadecimal interpretation). The sentence -could be writen down on paper (e.g. for storing in a secure location such as -safe), told over telephone or other voice communication method, or memorized -in ones memory (this method is called brainwallet). +A mnenomic code or sentence is superior for human interaction compared to the +handling of raw binary or hexidecimal representations of a wallet seed. The +sentence could be written on paper, spoken over the telephone, or memorized as a +brain wallet. ==Generating the mnemonic== -First, we decide how much entropy we want mnemonic to encode. Recommended size -is 128-256 bits, but basically any multiple of 32 bits will do. More bits -mean more security, but also longer word sentence. +The mnemonic must encode entropy in any multiple of 32 bits. With larger entropy +security is improved but the sentence length increases. We can refer to the +initial entropy length as ENT. The recommended size of ENT is 128-256 bits. -We take initial entropy of ENT bits and compute its checksum by taking first -ENT / 32 bits of its SHA256 hash. We append these bits to the end of the initial -entropy. Next we take these concatenated bits and split them into groups of 11 -bits. Each group encodes number from 0-2047 which is a position in a wordlist. -We convert numbers into words and use joined words as mnemonic sentence. +First, an initial entropy of ENT bits is generated. A checksum is generated by +taking the first
ENT / 32
bits of its SHA256 hash. This checksum is +appended to the end of the initial entropy. Next, these concatenated bits are +are split into groups of 11 bits, each encoding a number from 0-2047, serving +as an index to a wordlist. Later, we will convert these numbers into words and +use the joined words as a mnemonic sentence. -The following table describes the relation between initial entropy length (ENT), -checksum length (CS) and length of the generated mnemonic sentence (MS) in words. +The following table describes the relation between the initial entropy +length (ENT), the checksum length (CS) and length of the generated mnemonic +sentence (MS) in words.
 CS = ENT / 32
@@ -57,46 +59,44 @@ MS = (ENT + CS) / 11
 
 ==Wordlist==
 
-In previous section we described how to pick words from a wordlist. Now we
-describe how does a good wordlist look like.
+An ideal wordlist has the following characteristics:
 
 a) smart selection of words
-   - wordlist is created in such way that it's enough to type just first four
+   - wordlist is created in such way that it's enough to type the first four
      letters to unambiguously identify the word
 
 b) similar words avoided
-   - words as "build" and "built", "woman" and "women" or "quick" or "quickly"
+   - word pairs like "build" and "built", "woman" and "women", or "quick" and "quickly"
      not only make remembering the sentence difficult, but are also more error
-     prone and more difficult to guess (see point below)
-   - we avoid these words by carefully selecting them during addition
+     prone and more difficult to guess
 
 c) sorted wordlists
-   - wordlist is sorted which allow more efficient lookup of the code words
+   - wordlist is sorted which allows for more efficient lookup of the code words
      (i.e. implementation can use binary search instead of linear search)
    - this also allows trie (prefix tree) to be used, e.g. for better compression
 
-Wordlist can contain native characters, but they have to be encoded using UTF-8.
+The wordlist can contain native characters, but they have to be encoded using UTF-8.
 
 ==From mnemonic to seed==
 
-User can decide to protect his mnemonic by passphrase. If passphrase is not present
-an empty string "" is used instead.
+A user may decide to protect their mnemonic by passphrase. If a passphrase is not
+present, an empty string "" is used instead.
 
-To create binary seed from mnemonic, we use PBKDF2 function with mnemonic sentence
-(in UTF-8) used as a password and string "mnemonic" + passphrase (again in UTF-8)
-used as a salt. Iteration count is set to 2048 and HMAC-SHA512 is used as a pseudo-
-random function. Desired length of the derived key is 512 bits (= 64 bytes).
+To create a binary seed from the mnemonic, we use PBKDF2 function with a mnemonic
+sentence (in UTF-8) used as a password and string "mnemonic" + passphrase (again
+in UTF-8) used as a salt. Iteration count is set to 2048 and HMAC-SHA512 is used as
+a pseudo-random function. Desired length of the derived key is 512 bits (= 64 bytes).
 
 This seed can be later used to generate deterministic wallets using BIP-0032 or
 similar methods.
 
 The conversion of the mnemonic sentence to binary seed is completely independent
-from generating the sentence. This results in rather simple code, there are no
+from generating the sentence. This results in rather simple code; there are no
 constraints on sentence structure and clients are free to implement their own
-wordlists or even whole sentence generators (they'll lose the proposed method
-for typo detection in that case, but they can come up with their own).
+wordlists or even whole sentence generators, allowing for flexibility in wordlists
+for typo detection or other purposes.
 
-Described method also provides plausable deniability, because every passphrase
+Described method also provides plausible deniability, because every passphrase
 generates a valid seed (and thus deterministic wallet) but only the correct one
 will make the desired wallet available.
 
-- 
cgit v1.2.3