summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory Maxwell <greg@xiph.org>2018-09-07 02:31:15 +0000
committerbitcoindev <bitcoindev@gnusha.org>2018-09-07 02:31:33 +0000
commit0438b1f946469c3d416926383113b5d3929c2e35 (patch)
tree4666ad1c07e76deff14e4d0d2f8c4b3c23dc3be7
parenteeda8c92660a69c57c9a392da6fd91c5adf492ba (diff)
downloadpi-bitcoindev-0438b1f946469c3d416926383113b5d3929c2e35.tar.gz
pi-bitcoindev-0438b1f946469c3d416926383113b5d3929c2e35.zip
Re: [bitcoin-dev] Overhauled BIP151
-rw-r--r--96/0b0fb2435cf1a3fc21da4e84c13e86d87a27d2262
1 files changed, 262 insertions, 0 deletions
diff --git a/96/0b0fb2435cf1a3fc21da4e84c13e86d87a27d2 b/96/0b0fb2435cf1a3fc21da4e84c13e86d87a27d2
new file mode 100644
index 000000000..63d8213e6
--- /dev/null
+++ b/96/0b0fb2435cf1a3fc21da4e84c13e86d87a27d2
@@ -0,0 +1,262 @@
+Return-Path: <gmaxwell@gmail.com>
+Received: from smtp1.linuxfoundation.org (smtp1.linux-foundation.org
+ [172.17.192.35])
+ by mail.linuxfoundation.org (Postfix) with ESMTPS id EACA4EDA
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Fri, 7 Sep 2018 02:31:33 +0000 (UTC)
+X-Greylist: whitelisted by SQLgrey-1.7.6
+Received: from mail-ua1-f67.google.com (mail-ua1-f67.google.com
+ [209.85.222.67])
+ by smtp1.linuxfoundation.org (Postfix) with ESMTPS id 6D51A7EB
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Fri, 7 Sep 2018 02:31:30 +0000 (UTC)
+Received: by mail-ua1-f67.google.com with SMTP id r15-v6so10820944uao.1
+ for <bitcoin-dev@lists.linuxfoundation.org>;
+ Thu, 06 Sep 2018 19:31:30 -0700 (PDT)
+X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+ d=1e100.net; s=20161025;
+ h=x-gm-message-state:mime-version:references:in-reply-to:from:date
+ :message-id:subject:to:cc;
+ bh=KgBNrwMGlTidaWKGh1UL1/a+ixWoBP7I5cGHzbBgns0=;
+ b=CfNTpCWAnxrSZ5ltqxVpeE8K6KS5WMxthTlXHwdWu/T5kVZyfm3FFDleJjo4HU0qaP
+ RmFaYK2nlFlBZmEK2b5IGG7sXub9KBHVoacRHZblq73te4LRmc5X/4Gp3paaG8EqyI3e
+ Vs5+WBL7s+nEq9KpGOS39wpf0VTJwDu7i1A7euBYDr0ZPsylvM9vTCepxdia2edEi0v7
+ OhU8Xl+4K+zIjA6KQVT0Z4Fz3h8eXzz0Ici2oCEySYozUPRs5q16sZwOWUP0dCpC+dZl
+ UG6TS/6ZpoPosVI8m34UWFY4QIvnGkEOo2HyGEnD48/i3ex1XvCgc+EHqb+yAYRrCU+2
+ t1Ag==
+X-Gm-Message-State: APzg51AJrWXj2et0g3cr1IP37RV8X0MeJVKwybrxSoYhSXuOUhGvfxkW
+ nWbtg3bJmUpXhpP8ZpM4bggzO2HBYXM1aVJpHNZ61O0+
+X-Google-Smtp-Source: ANB0VdZw90FB/XfnfKTmQKEj+vLbnUvKp4QHO2ASyVNIkakv7Bt0T4N8rVNT9V1MCpYNxi4Z2am2k6PrMv3IVpY0oqU=
+X-Received: by 2002:a67:eb01:: with SMTP id a1-v6mr2054552vso.13.1536287489394;
+ Thu, 06 Sep 2018 19:31:29 -0700 (PDT)
+MIME-Version: 1.0
+References: <640D015D-3DDB-43C4-9752-96ADABF64C91@jonasschnelli.ch>
+ <061aa38d8ceeb6caaae19d7c86e435a5f86b293b.camel@timruffing.de>
+In-Reply-To: <061aa38d8ceeb6caaae19d7c86e435a5f86b293b.camel@timruffing.de>
+From: Gregory Maxwell <greg@xiph.org>
+Date: Fri, 7 Sep 2018 02:31:15 +0000
+Message-ID: <CAAS2fgQPkR63FmUyP8mAkmv4D-ttJ1C3rZismNr9_takBRS1qQ@mail.gmail.com>
+To: crypto@timruffing.de, bitcoin-dev@lists.linuxfoundation.org
+Content-Type: text/plain; charset="UTF-8"
+X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,FREEMAIL_FROM,
+ RCVD_IN_DNSWL_NONE 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, 07 Sep 2018 13:45:59 +0000
+Subject: Re: [bitcoin-dev] Overhauled BIP151
+X-BeenThere: bitcoin-dev@lists.linuxfoundation.org
+X-Mailman-Version: 2.1.12
+Precedence: list
+List-Id: Bitcoin Protocol Discussion <bitcoin-dev.lists.linuxfoundation.org>
+List-Unsubscribe: <https://lists.linuxfoundation.org/mailman/options/bitcoin-dev>,
+ <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=unsubscribe>
+List-Archive: <http://lists.linuxfoundation.org/pipermail/bitcoin-dev/>
+List-Post: <mailto:bitcoin-dev@lists.linuxfoundation.org>
+List-Help: <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=help>
+List-Subscribe: <https://lists.linuxfoundation.org/mailman/listinfo/bitcoin-dev>,
+ <mailto:bitcoin-dev-request@lists.linuxfoundation.org?subject=subscribe>
+X-List-Received-Date: Fri, 07 Sep 2018 02:31:34 -0000
+
+On Thu, Sep 6, 2018 at 11:33 PM Tim Ruffing via bitcoin-dev
+<bitcoin-dev@lists.linuxfoundation.org> wrote:
+> Now you can argue that the attacker is storing encrypted traffic today to decrypt it later.
+
+That is the argument. We know for that state level parties are storing
+unimaginable amounts of data for future decryption, that threat isn't
+theoretical.
+
+> Sure,
+> but if that's your threat model then Bitcoin is probably not the right tool for you. (And if
+
+Why not?
+
+> you insist that Bitcoin is the right tool, then you can and probably should use it over Tor
+> anyway.)
+
+Currently, Tor provides _no confidentiality at all_ in that threat
+model. Part of why I think this enhancement is interesting is because
+without it BIP151 doesn't actually add anything for those p2p
+connections running over Tor, but with it -- it at least adds some
+long term confidentiality hedge.
+
+> It's not worth the hassle, would hinder adoption,
+
+Why do you say this?
+
+> impression of "bulletproof" security. Even worse, there will be too many people that will suddenly
+> assume that Bitcoin is post-quantum secure.
+
+People already make that claim with respect to public key hashing. I
+don't think "we shouldn't improve security because someone will
+mistake an improvement for perfection" is an an especially interesting
+argument.
+
+> Key exchange indistinguishable from random
+> ==========================================
+> I would rather love to see a simple ECDH key exchange as currently used but with an encoding of
+> public key that provides indistinguishability from random bitstrings. "Elligator" does not work
+> but "Elligator Squared" [1] does the job for secp256k1 -- it just doubles the size of the public
+
+Here is where I turn the argument around on you: This requires
+writing a non-trivial amount of moderately complex new cryptographic
+code (which is not the case for PQ schemes-- that merely requires
+dropping in pre-existing code) and yet I am not aware of any attack
+model that this which would any improvement in actually delivered
+security: Bitcoin traffic is _trivially_ identifiable by its traffic
+patterns.
+
+(Blockstream previously wrote the SW forward transform for asset
+generation, but this requires the inverse too, as well as glue code.
+It also isn't clear to me if it's possible to make this construction
+constant time, which would be okay for BIP151 purposes but if we
+wanted to have a generic uniform encoder in libsecp256k1 I think we'd
+prefer it be constant time? maybe?)
+
+The scheme in the BIP thus far achieves the property that there are no
+fixed bytes for brain-dead byte matching DPI traffic filtering or
+anti-virus to match on (or accidentally false positive on). AV false
+positives are already an existing problem with the current protocol
+and any fixed bytes in the communication are at risk for false
+positives or targeted filtering. And achieving that property
+requires basically nothing: a test for the first byte of a generated
+serialized pubkey and a negate on the private key if it was wrong.
+
+> key. Together with the encrypted packet lengths, the entire data stream looks like random then,
+
+No, it doesn't-- due to traffic analysis. Including, for example, the
+pattern that 64-bytes must be sent in each direction, before further
+data continues, bursts of traffic coinciding with blocks newly found
+on the network, etc.
+
+I don't believe that indistinguishable keys are actually useful
+outside of the context of things like stegnographic embedding-- cases
+where protocol 'metadata' doesn't tell you that a key is there
+regardless.
+
+I suppose if the code already existed to do it I might as well go
+"okay, sure why not", it's not going to harm anything (the added
+computation time to generate the uniform encoding would probably be no
+more than a 10% slowdown). I wouldn't argue against it on the basis
+that someone might believe it resulted in anti-censorship properties
+that it doesn't have ... even though it's clearly the case... because
+I categorically reject that form of argument. :)
+
+I think your view on the two distinctive proposals is askew: PQ
+agreement has a clear benefit under a plausible threat model and is
+quite easy to implement... while uniform encoding is somewhat harder
+to implement (though admittedly not very hard) but doesn't appear to
+provide a concrete benefit under any threat model that I'm currently
+aware of...
+
+> The key derivation can be improved. It should include each peer's understanding of its role,
+> i.e., requester (or "initiator" is the more common term) or responder. At the moment, an attacker
+> can create a situation where two peers think they're in the same session (with the same session
+> id) but they're actually not. Also, it's possible for an attacker to rerandomize the public keys.
+> That's nothing bad by itself but anything which restricts the flexibility of the attacker without
+> adding complexity is a good idea. Something like
+> "salt = BitcoinSharedSecret||INITIATOR_PUBKEY||RESPONDER_PUBKEY" should just avoid this issue.
+
+I also prefer the contributory key model, but Pieter proved me on IRC
+last week that the attack form that I was concerned about was not
+possible.
+
+Do you actually have an attack in mind that you can spell out here? I
+don't see a harm in changing that, but given that I'd already twice
+talked myself out of proposing the same thing, I'd like to understand
+if I'm missing something. :)
+
+> Re-keying
+> =========
+> The problem with signalling re-keying in the length field is that the length field is not covered
+> by the MAC.
+
+It's AAD data in the mac, unless I misunderstand the protocol.
+
+> Deterministic rekeying rules may be better. Otherwise there will be implementations that rekey
+> every 10 seconds
+
+That would be pretty harmless, since the rekeying operation costs
+similar to one message decryption.
+
+> and implementations that just don't rekey at all (rendering the 10 s rekeying
+> interval in the opposite direction useless).
+
+The protocol requires rekeying at least after a given amount of data
+is transmitted. Peers that violate that can be disconnected. But it
+could be unfortunately infrequent.
+
+> Different policies also make it possible to
+> fingerprint implementations.
+
+I agree that is a good point.
+
+Personally I'd prefer that we used a ciphersuite that effectively
+"rekeyed" every message-- along the lines of the constructions
+described https://blog.cr.yp.to/20170723-random.html Unfortunately I
+was unable to find _any_ well analyized authenticated encryption mode
+that has the fast erasure property. It's too bad because it would be
+trivial to adhoc one (e.g. use the extra 32 bytes from the poly1305
+chacha run to update the keys for the next message).
+
+> What's better: 5 min or 30 min? I don't know, but both are reasonable choices. (Thats's very much
+
+It doesn't much matter, except for fingerprinting reasons.
+
+> like discussions about ciphers... What's better AES-GCM or ChaCha20/Poly1305? I don't know, but
+> again both are reasonable choices.)
+
+Here we have a very clear motiviation. On devices without hardware
+AES/clmul constant time AES-GCM is _terribly slow_ compared to
+ChaCha20/Poly1305. Performance on the slowest devices is where the
+the ones where the ciphersuite choice likely matters at all (because
+it could actually make a meaningful difference in their system's
+ability to keep up), and the slowest devices that I'm aware of users
+commonly using are also devices without good AES-GCM performance.
+Unfortunately.
+
+On fast desktop hardware the performance of AES-GCM and
+ChaCha20/Poly1305 is also fairly close.
+
+So when it matters, chacha20/poly1305 is higher performance by a wide
+margin. (Too bad, because otherwise I'd much rather use AES-GCM)
+
+> I didn't think about this in detail: maybe there are a few meaningful cases where padding could
+> hide the message length without too much overhead. (I'm not convinced, just a random thought.)
+
+This can be done at the message level. E.g. new TX messages that round
+tx sizes up to the next multiple. I don't think useful low overhead
+padding is otherwise possible.
+
+
+> written in stone, again to avoid complexity and to avoid fingerprinting.
+
+Writing things in stone is a great way to never finish a protocol.
+Right now we know we have new upcoming proposals for messages where
+the overhead matters, e.g. we need a replacement addr message ASAP,
+and there is ongoing work for transaction relay that would also
+benefit from low overhead.
+
+The norm in Bitcoin is to ignore messages you don't know how to parse
+anyways, so there is no complexity that arises from "may negotiate"
+itself-- only from actually making use of that possibility in the
+future, so the merits of any particular usage could be decided when
+something wants to actually use it. The purpose of pointing out "may
+negotiate" is, I think, primarily to avoid a debate about who would
+assign numbers from this limited space in the future-- and the answer
+just is that they're implementation defined (e.g. by the BIPs using
+them).
+
+> necessary anyway, so maybe just use IDs for anything? ASCII is nice if you want to debug your code
+> or some random network failure but that's hard anyway when encryption is used.
+
+Right, encryption kills external analysers in any case. It's also easy
+to just logprintf traffic (this is open source software after all),
+which doesn't have a decoding problem.
+
+> - "The Re-Keying must be done after every 1GB of data sent or received" Hm, every peer updates its
+> own sending key, so this should just read "sent" instead of "sent or received"?
+
+I think it says 'received there' mostly because it's implicitly
+telling you that you can hang up on someone who violates it. I agree
+it would be more consistent to express it sending side there.
+