public inbox for bitcoindev@googlegroups.com
 help / color / mirror / Atom feed
From: Michael Wozniak <mw@osfda•org>
To: Andreas Schildbach <andreas@schildbach•de>
Cc: bitcoin-development@lists•sourceforge.net
Subject: Re: [Bitcoin-development] BIP 38 NFC normalisation issue
Date: Tue, 15 Jul 2014 09:32:01 -0400	[thread overview]
Message-ID: <365F4709-54A6-4E14-BA6F-BCFB36DBAA96@osfda.org> (raw)
In-Reply-To: <lq39p1$gff$1@ger.gmane.org>

I have a python implementation that seems to pass this test vector:

https://github.com/wozz/electrum/blob/bip38_import/lib/bip38.py#L299



On Jul 15, 2014, at 9:19 AM, Andreas Schildbach <andreas@schildbach•de> wrote:

> I think generally control-characters (such as \u0000) should be
> disallowed in passphrases. (Even the use of whitespaces is very
> questionable.)
> 
> I'm ok with allowing pile-of-poo's. On mobile phones there is keyboards
> just containing emoticons -- why not allow those? Assuming NFC works of
> course.
> 
> 
> On 07/15/2014 03:07 PM, Eric Winer wrote:
>> I don't know for sure if the test vector is correct NFC form.  But for
>> what it's worth, the Pile of Poo character is pretty easily accessible
>> on the iPhone and Android keyboards, and in this string it's already in
>> NFC form (f09f92a9 in the test result).  I've certainly seen it in
>> usernames around the internet, and wouldn't be surprised to see it in
>> passphrases entered on smartphones, especially if the author of a
>> BIP38-compatible app includes a (possibly ill-advised) suggestion to
>> have your passphrase "include special characters".
>> 
>> I haven't seen the NULL character on any smartphone keyboards, though -
>> I assume the iOS and Android developers had the foresight to know how
>> much havoc that would wreak on systems assuming null-terminated strings.
>> It seems unlikely that NULL would be in a real-world passphrase entered
>> by a sane user.
>> 
>> 
>> On Tue, Jul 15, 2014 at 8:03 AM, Mike Hearn <mike@plan99•net
>> <mailto:mike@plan99•net>> wrote:
>> 
>>    [+cc aaron]
>> 
>>    We recently added an implementation of BIP 38 (password protected
>>    private keys) to bitcoinj. It came to my attention that the third
>>    test vector may be broken. It gives a hex version of what the NFC
>>    normalised version of the input string should be, but this does not
>>    match the results of the Java unicode normaliser, and in fact I
>>    can't even get Python to print the names of the characters past the
>>    embedded null. I'm curious where this normalised version came from.
>> 
>>    Given that "pile of poo" is not a character I think any sane user
>>    would put into a passphrase, I question the value of this test
>>    vector. NFC form is intended to collapse things like umlaut control
>>    characters onto their prior code point, but here we're feeding the
>>    algorithm what is basically garbage so I'm not totally surprised
>>    that different implementations appear to disagree on the outcome.
>> 
>>    Proposed action: we remove this test vector as it does not represent
>>    any real world usage of the spec, or if we desperately need to
>>    verify NFC normalisation I suggest using a different, more realistic
>>    test string, like Zürich, or something written in Thai.
>> 
>> 
>> 
>>    Test 3:
>> 
>>      * Passphrase ϓ␀𐐀💩 (\u03D2\u0301\u0000\U00010400\U0001F4A9; GREEK
>>        UPSILON WITH HOOK <http://codepoints.net/U+03D2>, COMBINING
>>        ACUTE ACCENT <http://codepoints.net/U+0301>, NULL
>>        <http://codepoints.net/U+0000>, DESERET CAPITAL LETTER LONG I
>>        <http://codepoints.net/U+10400>, PILE OF POO
>>        <http://codepoints.net/U+1F4A9>)
>>      * Encrypted key:
>>        6PRW5o9FLp4gJDDVqJQKJFTpMvdsSGJxMYHtHaQBF3ooa8mwD69bapcDQn
>>      * Bitcoin Address: 16ktGzmfrurhbhi6JGqsMWf7TyqK9HNAeF
>>      * Unencrypted private key (WIF):
>>        5Jajm8eQ22H3pGWLEVCXyvND8dQZhiQhoLJNKjYXk9roUFTMSZ4
>>      * /Note:/ The non-standard UTF-8 characters in this passphrase
>>        should be NFC normalized to result in a passphrase
>>        of0xcf9300f0909080f09f92a9 before further processing
>> 
>> 
>> 
>> 
>>    ------------------------------------------------------------------------------
>>    Want fast and easy access to all the code in your enterprise? Index and
>>    search up to 200,000 lines of code with a free copy of Black Duck
>>    Code Sight - the same software that powers the world's largest code
>>    search on Ohloh, the Black Duck Open Hub! Try it now.
>>    http://p.sf.net/sfu/bds
>>    _______________________________________________
>>    Bitcoin-development mailing list
>>    Bitcoin-development@lists•sourceforge.net
>>    <mailto:Bitcoin-development@lists•sourceforge.net>
>>    https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>> 
>> 
>> 
>> 
>> ------------------------------------------------------------------------------
>> Want fast and easy access to all the code in your enterprise? Index and
>> search up to 200,000 lines of code with a free copy of Black Duck
>> Code Sight - the same software that powers the world's largest code
>> search on Ohloh, the Black Duck Open Hub! Try it now.
>> http://p.sf.net/sfu/bds
>> 
>> 
>> 
>> _______________________________________________
>> Bitcoin-development mailing list
>> Bitcoin-development@lists•sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/bitcoin-development
>> 
> 
> 
> 
> ------------------------------------------------------------------------------
> Want fast and easy access to all the code in your enterprise? Index and
> search up to 200,000 lines of code with a free copy of Black Duck
> Code Sight - the same software that powers the world's largest code
> search on Ohloh, the Black Duck Open Hub! Try it now.
> http://p.sf.net/sfu/bds
> _______________________________________________
> Bitcoin-development mailing list
> Bitcoin-development@lists•sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/bitcoin-development




  reply	other threads:[~2014-07-15 13:32 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-15 12:03 Mike Hearn
2014-07-15 13:07 ` Eric Winer
2014-07-15 13:19   ` Andreas Schildbach
2014-07-15 13:32     ` Michael Wozniak [this message]
2014-07-15 15:13   ` Brooks Boyd
2014-07-15 18:20     ` Mike Hearn
2014-07-15 22:23       ` Aaron Voisine
2014-07-16  9:12         ` Mike Hearn
2014-07-16  9:17         ` Andreas Schildbach
2014-07-16  9:29           ` Mike Hearn
2014-07-16 10:46             ` Andreas Schildbach
2014-07-16 11:04               ` Andreas Schildbach
2014-07-16 21:06                 ` Aaron Voisine
2014-07-16 22:02                   ` Andreas Schildbach
2014-07-16 22:22                     ` Andreas Schildbach
2014-07-17 10:59                     ` Mike Hearn
2014-07-17 11:27                       ` Andreas Schildbach
2014-07-16 12:38             ` Wladimir
2014-07-15 15:17   ` Jeff Garzik
2014-07-15 15:20     ` Mike Hearn
2014-07-15 15:32     ` Andreas Schildbach
2014-07-15 15:53       ` Jeff Garzik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=365F4709-54A6-4E14-BA6F-BCFB36DBAA96@osfda.org \
    --to=mw@osfda$(echo .)org \
    --cc=andreas@schildbach$(echo .)de \
    --cc=bitcoin-development@lists$(echo .)sourceforge.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox