Return-Path: Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org [172.17.192.35]) by mail.linuxfoundation.org (Postfix) with ESMTPS id 91AEA94B for ; Fri, 5 Jan 2018 18:09:19 +0000 (UTC) X-Greylist: from auto-whitelisted by SQLgrey-1.7.6 Received: from mx2.mailbox.org (mx2.mailbox.org [80.241.60.215]) by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 797FFA7 for ; Fri, 5 Jan 2018 18:09:18 +0000 (UTC) Received: from smtp2.mailbox.org (smtp2.mailbox.org [80.241.60.241]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx2.mailbox.org (Postfix) with ESMTPS id AB6EA4CE25; Fri, 5 Jan 2018 19:09:16 +0100 (CET) X-Virus-Scanned: amavisd-new at heinlein-support.de Received: from smtp2.mailbox.org ([80.241.60.241]) by gerste.heinlein-support.de (gerste.heinlein-support.de [91.198.250.173]) (amavisd-new, port 10030) with ESMTP id vxITXY8ZgcHZ; Fri, 5 Jan 2018 19:09:03 +0100 (CET) Date: Fri, 5 Jan 2018 18:08:50 +0000 From: nullius To: Sjors Provoost , Bitcoin Protocol Discussion Message-ID: <55374d9210feebf2f758d4e7b21849ee@nym.zone> References: <57f5fcd8644c6f6472cd6a91144a6152@nym.zone> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; protocol="application/pgp-signature"; boundary="s2gulaj2zoqb3hzc" Content-Disposition: inline In-Reply-To: X-Spam-Status: No, score=-2.6 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_LOW autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on smtp1.linux-foundation.org X-Mailman-Approved-At: Fri, 05 Jan 2018 18:17:26 +0000 Cc: arachnid@notdot.net Subject: Re: [bitcoin-dev] BIP 39: Add language identifier strings for wordlists X-BeenThere: bitcoin-dev@lists.linuxfoundation.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: Bitcoin Protocol Discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 05 Jan 2018 18:09:19 -0000 --s2gulaj2zoqb3hzc Content-Type: text/plain; charset=utf-8; format=flowed Content-Disposition: inline Content-Transfer-Encoding: quoted-printable On 2018-01-05 at 16:04:10 +0000, Sjors Provoost =20 wrote: >I=E2=80=99m not a fan of language specific word lists within the current B= IP-39=20 >standard. Very few wallets support anything other than English, which=20 >can lead to vendor lock-in and long term loss of funds if a rare=20 >non-English wallet disappears. > >However, because people can memorize things better in their native=20 >tongue, supporting multiple languages seems quite useful. > >I would prefer a new standard [...] A replacement for BIP-39 [...] > >[snip] >For my above point and some related ideas, see:=20 >https://github.com/satoshilabs/slips/issues/103 You present some interesting ideas; and I will be much interested in the=20 Github issue you referenced=E2=80=94thanks for that. However, this discuss= ion=20 is *far* beyond the scope of my simple proposal and request to add=20 standardized native language and short-ASCII identifier strings to the=20 BIP repository. I suggest that readers solely interested in the=20 existing BIP 39 standard and its direct application to Bitcoin should=20 stop reading right here. ---- That being said, I should briefly address some of the issues you raise=20 (with further discussion best continued elsewhere): I *strongly* urge the importance of language-specific standardized=20 wordlists. Even an individual who has secondarily acquired reasonable=20 fluency in English will most likely have the least difficulty=20 memorizing, transcribing, and otherwise handling a =E2=80=9Cmother-tongue= =E2=80=9D=20 mnemonic. Such an advantage is important in applications whereby even=20 slight errors can be fatal, and every bit counts. This is to say=20 nothing of persons who have limited or no English-language knowledge. Yet for multiple reasons, multilanguage support is only feasible with=20 standardization. Wordlist creation is a highly specialized task. =20 Independent implementation of standards is imperative for avoiding=20 implementation lock-in; and independent implementors (such as I) would=20 be unable to create sets multi-language wordlists on their own, anyway. =20 For a view of the language-specific process involved in creating a=20 wordlist, I invite everybody following this discussion to review BIP=20 repository PRs #92, #130 (Japanese); #100 (Spanish); #114 (Chinese, both=20 variants); #152 (French); #306 (Italian); #544 (Korean, rejected); and=20 #570 (Korean). The rejection of #544 for Korean, and its superseding=20 with #570 is particularly instructive. With standardized wordlists, independent implementation is easy. In my=20 own implementation, the language switching backend (excluding the UI[1])=20 for multilingual mnemonic generation required only relatively small C=20 code changes, as seen here[0]: [0] https://github.com/nym-zone/easyseed/commit/5b6a6668458d96d6ccc4bf19e4f= d40fe6ea72fec#diff-20dcf1782b7568b85ea01ed695abeb02 [1] https://github.com/nym-zone/easyseed/commit/1a6e48bbdac9366d9d5d1912dc0= 62dfc3f0db2c6#diff-20dcf1782b7568b85ea01ed695abeb02 Admittedly, the multilingual requirements for seed generation will take=20 a bit more; and my nonstandard, non-BIP39 ideas which require decoding=20 words directly back to bits will take yet more. But it is still not=20 problematic. I only began writing this tool one week ago, as of today; and it has=20 been a side project requiring small amounts of time, not a full-time=20 dedicated task. When I fully complete all aspects of seed generation,=20 then users will have the option of another simple open-source tool which=20 *will* be able to output a binary or BIP-32-formatted (=E2=80=9Cxprv=E2=80= =9D) 512-bit=20 seed, given input of an existing mnemonic in any language supported by=20 official BIP 39 wordlists. Output can then be imported to any wallet=20 software which supports BIP 32, regardless of the wallet=E2=80=99s langauge= =20 support (and whether or not the wallet supports BIP 39 at all). **The ease of creating such tools squarely answers your concerns about=20 vendor lock-in.** And yes, it=E2=80=99s easy. I can attest as a lone code= r,=20 it=E2=80=99s easy for me to create =E2=80=9Ceasyseed=E2=80=9D as a side pro= ject! Finally, aside: In the discussion at SLIP repository issue #103, I see=20 mention of m-of-n SSSS. I have been mentally whiteboarding just such an=20 application involving mnemonics. Watch for it. It is likely that=20 I will crib the BIP 39 wordlists, given the impossibility that I could=20 create my own set of wordlists in many languages. I only wish that the=20 BIP repository had support for more languages. More! Adding each new=20 language to my implementation(s) will require approximately one-line=20 code changes for me. (Aside further: Why is there not a Dutch wordlist? I should like to=20 add that, please=E2=80=94meneer Provoost. More wordlists!) Aside still yet further: Should you be interested in more general=20 applications of mnemonic phrases for pseudorandom strings, I think you=20 will like this future feature which currently exists only as an Easter=20 egg, (un)documented in my commit log: https://github.com/nym-zone/easyseed/commit/ba77be1b1a1f0c6af50ceba5c89f4ad= ece7e5dff Further discussion is invited by private mail, in an appropriate public=20 venue, or otherwise not on a bitcoin-dev thread which makes a simple=20 request and proposal as to the existing BIP 39 standard=E2=80=94thanks. --=20 nullius@nym.zone | PGP ECC: 0xC2E91CD74A4C57A105F6C21B5A00591B2F307E0C Bitcoin: bc1qcash96s5jqppzsp8hy8swkggf7f6agex98an7h | (Segwit nested: 3NULL3ZCUXr7RDLxXeLPDMZDZYxuaYkCnG) (PGP RSA: 0x36EBB4AB699A10EE) =E2=80=9C=E2=80=98If you=E2=80=99re not doing anything wrong, you have noth= ing to hide.=E2=80=99 No! Because I do nothing wrong, I have nothing to show.=E2=80=9D =E2=80=94= nullius --s2gulaj2zoqb3hzc Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- iHUEARYKAB0WIQSNOMR84IlYpr/EF5vEJ5MVn575SQUCWk+/LwAKCRDEJ5MVn575 SXfHAQDhSEq1659zkl8leF3zg8VJ3lnXA6KxE0N6o18SZDNvyQD+M0RXjCpb/VNp vnOtlVGqXhg0PM1Jg3NBDloZX8H7Qwk= =yhxj -----END PGP SIGNATURE----- --s2gulaj2zoqb3hzc--