Cryptocurrency · 2013

BIP 39: Mnemonic code for generating deterministic keys

Marek Palatinus, Pavol Rusnak, Aaron Voisine, Sean Bowe

Bitcoin Improvement Proposal 39 · Applications · Specification · 10 September 2013

The poster PDF, wallpaper

Retrieved
27 September 2026
License
MIT
Rights holder
Marek Palatinus, Pavol Rusnak, Aaron Voisine, Sean Bowe
Language
English

License: MIT [...] This BIP falls under the MIT License.

About this edition and its rights

Edition

The MediaWiki source of BIP 39 in the repository github.com/bitcoin/bips at commit 0d1b892 of 31 May 2026, its current version (status Deployed; License: MIT since February 2025; sections Shortcomings and Related Work added in May 2026), with its English wordlist bip-0039/english.txt (https://github.com/bitcoin/bips/blob/0d1b892ddb21c22def4af4541bfed7a2a3480e4a/bip-0039/english.txt, 2048 words, unchanged since 7 February 2014, SHA-256 2f5eed53a4727b4bf8880d8f3f199efc90e58503646d9ff8eff3a2ed3b24dbda). The preamble is in the header (title, number, layer, type, assigned date, authors and their addresses) and in the footer (all its fields). Links show their text, and bare URLs are set in monospace. The indented lines of the Wordlist section, which MediaWiki shows preformatted, are set as bulleted lists, and the four items of the Shortcomings list, parted by blank lines in the source, form one list. Straight quotes of the text are set as typographic quotes. The wordlist follows the text across the page, in its order, down as many columns as the width holds at its size (26 columns of up to 79 words in the A and 50x70 formats, 27 in 60x80), the first four letters of each word (which identify it, as the BIP states) in the ink and the others in a lighter tone; its path in the repository, bip-0039/english.txt, is set above it. Under it is the text of the MIT License as SPDX gives it (https://spdx.org/licenses/MIT.html), without its template copyright line, as the BIP has no copyright line.

Rights

License notice: “License: MIT [...] This BIP falls under the MIT License.”

Preamble and Copyright section of BIP 39 (https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki), added by pull request 1680, merged on 4 February 2025 with the approval of three of its four authors: Pavol Rusnak (“ACK”), Marek Palatinus (“ACK MIT”) and Sean Bowe (“ACK MIT”); Aaron Voisine did not answer, and the BIP editor merged it because “for jointly authored work any of the authors can license the work” (https://github.com/bitcoin/bips/pull/1680). BIP 3, the BIP process in force, states that the License header gives the terms under which “the BIP and its auxiliary files are available” (https://github.com/bitcoin/bips/blob/master/bip-0003.md), which covers bip-0039/english.txt. The poster carries the MIT License text.

Abstract#

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.

Copyright#

This BIP falls under the MIT License.

Motivation#

A mnemonic code or sentence is superior for human interaction compared to the handling of raw binary or hexadecimal representations of a wallet seed. The sentence could be written on paper or spoken over the telephone.

This guide is meant to be a way to transport computer-generated randomness with a human-readable transcription. It’s not a way to process user-created sentences (also known as brainwallets) into a wallet seed.

Generating the mnemonic#

The mnemonic must encode entropy in a multiple of 32 bits. With more entropy security is improved but the sentence length increases. We refer to the initial entropy length as ENT. The allowed size of ENT is 128-256 bits.

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 split into groups of 11 bits, each encoding a number from 0-2047, serving as an index into a wordlist. Finally, we convert these numbers into words and use the joined words as a mnemonic sentence.

The following table describes the relation between the initial entropy length (ENT), the checksum length (CS), and the length of the generated mnemonic sentence (MS) in words.

CS = ENT / 32
MS = (ENT + CS) / 11

|  ENT  | CS | ENT+CS |  MS  |
+-------+----+--------+------+
|  128  |  4 |   132  |  12  |
|  160  |  5 |   165  |  15  |
|  192  |  6 |   198  |  18  |
|  224  |  7 |   231  |  21  |
|  256  |  8 |   264  |  24  |

Wordlist#

An ideal wordlist has the following characteristics:

a) smart selection of words

  • the wordlist is created in such a way that it’s enough to type the first four letters to unambiguously identify the word

b) similar words avoided

  • 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

c) sorted wordlists

  • the wordlist is sorted which allows for more efficient lookup of the code words (i.e. implementations can use binary search instead of linear search)
  • this also allows trie (a prefix tree) to be used, e.g. for better compression

The wordlist can contain native characters, but they must be encoded in UTF-8 using Normalization Form Compatibility Decomposition (NFKD).

From mnemonic to seed#

A user may decide to protect their mnemonic with a passphrase. If a passphrase is not present, an empty string “” is used instead.

To create a binary seed from the mnemonic, we use the PBKDF2 function with a mnemonic sentence (in UTF-8 NFKD) used as the password and the string “mnemonic” + passphrase (again in UTF-8 NFKD) used as the salt. The iteration count is set to 2048 and HMAC-SHA512 is used as the pseudo-random function. The 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 a binary seed is completely independent from generating the sentence. This results in a rather simple code; there are no constraints on sentence structure and clients are free to implement their own wordlists or even whole sentence generators, allowing for flexibility in wordlists for typo detection or other purposes.

Although using a mnemonic not generated by the algorithm described in “Generating the mnemonic” section is possible, this is not advised and software must compute a checksum for the mnemonic sentence using a wordlist and issue a warning if it is invalid.

The described method also provides plausible deniability, because every passphrase generates a valid seed (and thus a deterministic wallet) but only the correct one will make the desired wallet available.

Wordlists#

Since the vast majority of BIP39 wallets supports only the English wordlist, it is strongly discouraged to use non-English wordlists for generating the mnemonic sentences.

If you still feel your application really needs to use a localized wordlist, use one of the following instead of inventing your own.

  • Wordlists

Test vectors#

The test vectors include input entropy, mnemonic and seed. The passphrase “TREZOR” is used for all vectors.

https://github.com/trezor/python-mnemonic/blob/master/vectors.json

Also see https://github.com/bip32JP/bip32JP.github.io/blob/master/test_JP_BIP39.json

(Japanese wordlist test with heavily normalized symbols as passphrase)

Shortcomings#

Some shortcomings have been identified with this proposal:

  • Generated seed depends on the wordlist that was used for the mnemonic. Because the “mnemonic to seed” process uses the mnemonic sentence directly rather than the original entropy, translating the mnemonic to a different wordlist necessarily creates a completely different seed. This is not an issue if you only support the English wordlist, as recommended above.
  • Because the seed is generated by hashing the mnemonic, it is not possible to represent an arbitrary BIP-0032 seed via a BIP-0039 sentence: the conversion is one-way only (from BIP-0039 sentence to BIP-0032 seed).
  • The checksum is short. This means it only gives modest odds of catching random errors (1-in-256 errors will be missed). It is also not able to provide any assistance in correcting errors.
  • No versioning scheme. When originally introduced, there was no way to distinguish the address format that should be used for a BIP-0039 key. This is now largely mitigated by use of descriptor wallets (BIP-0380) in addition to a seed however.

Related Work#

The authors of BIP-0039 proposed the SLIP-0039 scheme as an intended successor to BIP-0039 improving on the above shortcomings.

Reference Implementation#

Reference implementation including wordlists is available from

http://github.com/trezor/python-mnemonic

bip-0039/english.txt
abandonabilityableaboutaboveabsentabsorbabstractabsurdabuseaccessaccidentaccountaccuseachieveacidacousticacquireacrossactactionactoractressactualadaptaddaddictaddressadjustadmitadultadvanceadviceaerobicaffairaffordafraidagainageagentagreeaheadaimairairportaislealarmalbumalcoholalertalienallalleyallowalmostalonealphaalreadyalsoalteralwaysamateuramazingamongamountamusedanalystanchorancientangerangleangryanimalankleannounceannualanotheranswerantennaantiqueanxietyanyapartapologyappearappleapproveaprilarcharcticareaarenaarguearmarmedarmorarmyaroundarrangearrestarrivearrowartartefactartistartworkaskaspectassaultassetassistassumeasthmaathleteatomattackattendattitudeattractauctionauditaugustauntauthorautoautumnaverageavocadoavoidawakeawareawayawesomeawfulawkwardaxisbabybachelorbaconbadgebagbalancebalconyballbamboobananabannerbarbarelybargainbarrelbasebasicbasketbattlebeachbeanbeautybecausebecomebeefbeforebeginbehavebehindbelievebelowbeltbenchbenefitbestbetraybetterbetweenbeyondbicyclebidbikebindbiologybirdbirthbitterblackbladeblameblanketblastbleakblessblindbloodblossomblouseblueblurblushboardboatbodyboilbombbonebonusbookboostborderboringborrowbossbottombounceboxboybracketbrainbrandbrassbravebreadbreezebrickbridgebriefbrightbringbriskbroccolibrokenbronzebroombrotherbrownbrushbubblebuddybudgetbuffalobuildbulbbulkbulletbundlebunkerburdenburgerburstbusbusinessbusybutterbuyerbuzzcabbagecabincablecactuscagecakecallcalmcameracampcancanalcancelcandycannoncanoecanvascanyoncapablecapitalcaptaincarcarboncardcargocarpetcarrycartcasecashcasinocastlecasualcatcatalogcatchcategorycattlecaughtcausecautioncaveceilingcelerycementcensuscenturycerealcertainchairchalkchampionchangechaoschapterchargechasechatcheapcheckcheesechefcherrychestchickenchiefchildchimneychoicechoosechronicchucklechunkchurncigarcinnamoncirclecitizencitycivilclaimclapclarifyclawclaycleanclerkcleverclickclientcliffclimbclinicclipclockclogcloseclothcloudclownclubclumpclusterclutchcoachcoastcoconutcodecoffeecoilcoincollectcolorcolumncombinecomecomfortcomiccommoncompanyconcertconductconfirmcongressconnectconsidercontrolconvincecookcoolcoppercopycoralcorecorncorrectcostcottoncouchcountrycouplecoursecousincovercoyotecrackcradlecraftcramcranecrashcratercrawlcrazycreamcreditcreekcrewcricketcrimecrispcriticcropcrosscrouchcrowdcrucialcruelcruisecrumblecrunchcrushcrycrystalcubeculturecupcupboardcuriouscurrentcurtaincurvecushioncustomcutecycledaddamagedampdancedangerdaringdashdaughterdawndaydealdebatedebrisdecadedecemberdecidedeclinedecoratedecreasedeerdefensedefinedefydegreedelaydeliverdemanddemisedenialdentistdenydepartdependdepositdepthdeputyderivedescribedesertdesigndeskdespairdestroydetaildetectdevelopdevicedevotediagramdialdiamonddiarydicedieseldietdifferdigitaldignitydilemmadinnerdinosaurdirectdirtdisagreediscoverdiseasedishdismissdisorderdisplaydistancedivertdividedivorcedizzydoctordocumentdogdolldolphindomaindonatedonkeydonordoordosedoubledovedraftdragondramadrasticdrawdreamdressdriftdrilldrinkdripdrivedropdrumdryduckdumbduneduringdustdutchdutydwarfdynamiceagereagleearlyearneartheasilyeasteasyechoecologyeconomyedgeediteducateefforteggeighteitherelbowelderelectricelegantelementelephantelevatoreliteelseembarkembodyembraceemergeemotionemployempoweremptyenableenactendendlessendorseenemyenergyenforceengageengineenhanceenjoyenlistenoughenrichenrollensureenterentireentryenvelopeepisodeequalequiperaeraseerodeerosionerroreruptescapeessayessenceestateeternalethicsevidenceevilevokeevolveexactexampleexcessexchangeexciteexcludeexcuseexecuteexerciseexhaustexhibitexileexistexitexoticexpandexpectexpireexplainexposeexpressextendextraeyeeyebrowfabricfacefacultyfadefaintfaithfallfalsefamefamilyfamousfanfancyfantasyfarmfashionfatfatalfatherfatiguefaultfavoritefeaturefebruaryfederalfeefeedfeelfemalefencefestivalfetchfeverfewfiberfictionfieldfigurefilefilmfilterfinalfindfinefingerfinishfirefirmfirstfiscalfishfitfitnessfixflagflameflashflatflavorfleeflightflipfloatflockfloorflowerfluidflushflyfoamfocusfogfoilfoldfollowfoodfootforceforestforgetforkfortuneforumforwardfossilfosterfoundfoxfragileframefrequentfreshfriendfringefrogfrontfrostfrownfrozenfruitfuelfunfunnyfurnacefuryfuturegadgetgaingalaxygallerygamegapgaragegarbagegardengarlicgarmentgasgaspgategathergaugegazegeneralgeniusgenregentlegenuinegestureghostgiantgiftgigglegingergiraffegirlgivegladglanceglareglassglideglimpseglobegloomglorygloveglowgluegoatgoddessgoldgoodgoosegorillagospelgossipgoverngowngrabgracegraingrantgrapegrassgravitygreatgreengridgriefgritgrocerygroupgrowgruntguardguessguideguiltguitargungymhabithairhalfhammerhamsterhandhappyharborhardharshharvesthathavehawkhazardheadhealthheartheavyhedgehogheighthellohelmethelphenherohiddenhighhillhinthiphirehistoryhobbyhockeyholdholeholidayhollowhomehoneyhoodhopehornhorrorhorsehospitalhosthotelhourhoverhubhugehumanhumblehumorhundredhungryhunthurdlehurryhurthusbandhybridiceiconideaidentifyidleignoreillillegalillnessimageimitateimmenseimmuneimpactimposeimproveimpulseinchincludeincomeincreaseindexindicateindoorindustryinfantinflictinforminhaleinheritinitialinjectinjuryinmateinnerinnocentinputinquiryinsaneinsectinsideinspireinstallintactinterestintoinvestinviteinvolveironislandisolateissueitemivoryjacketjaguarjarjazzjealousjeansjellyjeweljobjoinjokejourneyjoyjudgejuicejumpjunglejuniorjunkjustkangarookeenkeepketchupkeykickkidkidneykindkingdomkisskitkitchenkitekittenkiwikneeknifeknockknowlablabellaborladderladylakelamplanguagelaptoplargelaterlatinlaughlaundrylavalawlawnlawsuitlayerlazyleaderleaflearnleavelectureleftleglegallegendleisurelemonlendlengthlensleopardlessonletterlevelliarlibertylibrarylicenselifeliftlightlikelimblimitlinklionliquidlistlittlelivelizardloadloanlobsterlocallocklogiclonelylonglooplotteryloudloungeloveloyalluckyluggagelumberlunarlunchluxurylyricsmachinemadmagicmagnetmaidmailmainmajormakemammalmanmanagemandatemangomansionmanualmaplemarblemarchmarginmarinemarketmarriagemaskmassmastermatchmaterialmathmatrixmattermaximummazemeadowmeanmeasuremeatmechanicmedalmediamelodymeltmembermemorymentionmenumercymergemeritmerrymeshmessagemetalmethodmiddlemidnightmilkmillionmimicmindminimumminorminutemiraclemirrormiserymissmistakemixmixedmixturemobilemodelmodifymommomentmonitormonkeymonstermonthmoonmoralmoremorningmosquitomothermotionmotormountainmousemovemoviemuchmuffinmulemultiplymusclemuseummushroommusicmustmutualmyselfmysterymythnaivenamenapkinnarrownastynationnaturenearneckneednegativeneglectneithernephewnervenestnetnetworkneutralnevernewsnextnicenightnoblenoisenomineenoodlenormalnorthnosenotablenotenothingnoticenovelnownuclearnumbernursenutoakobeyobjectobligeobscureobserveobtainobviousoccuroceanoctoberodoroffofferofficeoftenoilokayoldoliveolympicomitonceoneoniononlineonlyopenoperaopinionopposeoptionorangeorbitorchardorderordinaryorganorientoriginalorphanostrichotheroutdoorouteroutputoutsideovalovenoverownowneroxygenoysterozonepactpaddlepagepairpalacepalmpandapanelpanicpantherpaperparadeparentparkparrotpartypasspatchpathpatientpatrolpatternpausepavepaymentpeacepeanutpearpeasantpelicanpenpenaltypencilpeoplepepperperfectpermitpersonpetphonephotophrasephysicalpianopicnicpicturepiecepigpigeonpillpilotpinkpioneerpipepistolpitchpizzaplaceplanetplasticplateplaypleasepledgepluckplugplungepoempoetpointpolarpolepolicepondponypoolpopularportionpositionpossiblepostpotatopotterypovertypowderpowerpracticepraisepredictpreferpreparepresentprettypreventpriceprideprimaryprintpriorityprisonprivateprizeproblemprocessproduceprofitprogramprojectpromoteproofpropertyprosperprotectproudprovidepublicpuddingpullpulppulsepumpkinpunchpupilpuppypurchasepuritypurposepursepushputpuzzlepyramidqualityquantumquarterquestionquickquitquizquoterabbitraccoonracerackradarradiorailrainraiserallyrampranchrandomrangerapidrarerateratherravenrawrazorreadyrealreasonrebelrebuildrecallreceivereciperecordrecyclereducereflectreformrefuseregionregretregularrejectrelaxreleasereliefrelyremainrememberremindremoverenderrenewrentreopenrepairrepeatreplacereportrequirerescueresembleresistresourceresponseresultretireretreatreturnreunionrevealreviewrewardrhythmribribbonricerichrideridgeriflerightrigidringriotrippleriskritualrivalriverroadroastrobotrobustrocketromanceroofrookieroomroserotateroughroundrouteroyalrubberruderugrulerunrunwayruralsadsaddlesadnesssafesailsaladsalmonsalonsaltsalutesamesamplesandsatisfysatoshisaucesausagesavesayscalescanscarescattersceneschemeschoolsciencescissorsscorpionscoutscrapscreenscriptscrubseasearchseasonseatsecondsecretsectionsecurityseedseeksegmentselectsellseminarseniorsensesentenceseriesservicesessionsettlesetupsevenshadowshaftshallowshareshedshellsheriffshieldshiftshineshipshivershockshoeshootshopshortshouldershoveshrimpshrugshuffleshysiblingsicksidesiegesightsignsilentsilksillysilversimilarsimplesincesingsirensistersituatesixsizeskatesketchskiskillskinskirtskullslabslamsleepslendersliceslideslightslimsloganslotslowslushsmallsmartsmilesmokesmoothsnacksnakesnapsniffsnowsoapsoccersocialsocksodasoftsolarsoldiersolidsolutionsolvesomeonesongsoonsorrysortsoulsoundsoupsourcesouthspacesparespatialspawnspeakspecialspeedspellspendspherespicespiderspikespinspiritsplitspoilsponsorspoonsportspotsprayspreadspringspysquaresqueezesquirrelstablestadiumstaffstagestairsstampstandstartstatestaysteaksteelstemstepstereostickstillstingstockstomachstonestoolstorystovestrategystreetstrikestrongstrugglestudentstuffstumblestylesubjectsubmitsubwaysuccesssuchsuddensuffersugarsuggestsuitsummersunsunnysunsetsupersupplysupremesuresurfacesurgesurprisesurroundsurveysuspectsustainswallowswampswapswarmswearsweetswiftswimswingswitchswordsymbolsymptomsyrupsystemtabletackletagtailtalenttalktanktapetargettasktastetattootaxiteachteamtelltentenanttennistenttermtesttextthankthatthemethentheorytheretheythingthisthoughtthreethrivethrowthumbthundertickettidetigertilttimbertimetinytiptiredtissuetitletoasttobaccotodaytoddlertoetogethertoilettokentomatotomorrowtonetonguetonighttooltoothtoptopictoppletorchtornadotortoisetosstotaltouristtowardtowertowntoytracktradetraffictragictraintransfertraptrashtraveltraytreattreetrendtrialtribetricktriggertrimtriptrophytroubletrucktruetrulytrumpettrusttruthtrytubetuitiontumbletunatunnelturkeyturnturtletwelvetwentytwicetwintwisttwotypetypicaluglyumbrellaunableunawareuncleuncoverunderundounfairunfoldunhappyuniformuniqueunituniverseunknownunlockuntilunusualunveilupdateupgradeupholduponupperupseturbanurgeusageuseusedusefuluselessusualutilityvacantvacuumvaguevalidvalleyvalvevanvanishvaporvariousvastvaultvehiclevelvetvendorventurevenueverbverifyversionveryvesselveteranviablevibrantviciousvictoryvideoviewvillagevintageviolinvirtualvirusvisavisitvisualvitalvividvocalvoicevoidvolcanovolumevotevoyagewagewagonwaitwalkwallwalnutwantwarfarewarmwarriorwashwaspwastewaterwavewaywealthweaponwearweaselweatherwebweddingweekendweirdwelcomewestwetwhalewhatwheatwheelwhenwherewhipwhisperwidewidthwifewildwillwinwindowwinewingwinkwinnerwinterwirewisdomwisewishwitnesswolfwomanwonderwoodwoolwordworkworldworryworthwrapwreckwrestlewristwritewrongyardyearyellowyouyoungyouthzebrazerozonezoo

MIT License. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.