From 32af2c9dc2d88df12b02409a023d647ee1de4c8a Mon Sep 17 00:00:00 2001 From: dhruv <856960+dhruv@users.noreply.github.com> Date: Fri, 7 Oct 2022 11:59:24 -0700 Subject: [PATCH] Add BIP324 --- README.mediawiki | 9 +- bip-0151.mediawiki | 1 + bip-0324.mediawiki | 601 ++++++++++++++++++++++ bip-0324/garbage_terminator.png | Bin 0 -> 267163 bytes bip-0324/packet_encoding_test_vectors.csv | 8 + bip-0324/reference.py | 575 +++++++++++++++++++++ bip-0324/run_test_vectors.py | 53 ++ bip-0324/xelligatorswift_test_vectors.csv | 17 + bip-0324/xswiftec_test_vectors.csv | 33 ++ 9 files changed, 1296 insertions(+), 1 deletion(-) create mode 100644 bip-0324.mediawiki create mode 100644 bip-0324/garbage_terminator.png create mode 100644 bip-0324/packet_encoding_test_vectors.csv create mode 100644 bip-0324/reference.py create mode 100644 bip-0324/run_test_vectors.py create mode 100644 bip-0324/xelligatorswift_test_vectors.csv create mode 100644 bip-0324/xswiftec_test_vectors.csv diff --git a/README.mediawiki b/README.mediawiki index a2a52419..f4a9ac02 100644 --- a/README.mediawiki +++ b/README.mediawiki @@ -825,7 +825,7 @@ Those proposing changes should consider that ultimately consent may rest with th | Peer-to-Peer Communication Encryption | Jonas Schnelli | Standard -| Withdrawn +| Replaced |- style="background-color: #cfffcf" | [[bip-0152.mediawiki|152]] | Peer Services @@ -980,6 +980,13 @@ Those proposing changes should consider that ultimately consent may rest with th | Karl-Johan Alm | Standard | Draft +|- +| [[bip-0324.mediawiki|324]] +| Peer Services +| Version 2 P2P Encrypted Transport Protocol +| Dhruv Mehta, Tim Ruffing, Jonas Schnelli, Pieter Wuille +| Standard +| Draft |- style="background-color: #ffffcf" | [[bip-0325.mediawiki|325]] | Applications diff --git a/bip-0151.mediawiki b/bip-0151.mediawiki index 005c5527..9b913656 100644 --- a/bip-0151.mediawiki +++ b/bip-0151.mediawiki @@ -9,6 +9,7 @@ Type: Standards Track Created: 2016-03-23 License: PD + Superseded-By: 324 == Abstract == diff --git a/bip-0324.mediawiki b/bip-0324.mediawiki new file mode 100644 index 00000000..8a8861a5 --- /dev/null +++ b/bip-0324.mediawiki @@ -0,0 +1,601 @@ +
+  BIP: 324
+  Layer: Peer Services
+  Title: Version 2 P2P Encrypted Transport Protocol
+  Author: Dhruv Mehta 
+          Tim Ruffing 
+          Jonas Schnelli 
+          Pieter Wuille 
+  Comments-URI: https://github.com/bitcoin/bips/wiki/Comments:BIP-0324
+  Status: Draft
+  Type: Standards Track
+  Created: 2019-03-08
+  License: BSD-3-Clause
+  Replaces: 151
+
+ +== Introduction == + +=== Abstract === +This document proposes a new Bitcoin P2P transport protocol, which features opportunistic encryption, a mild bandwidth reduction, and the ability to negotiate upgrades before exchanging application messages. + +=== Copyright === +This document is licensed under the 3-clause BSD license. + +=== Motivation === +Bitcoin is a permissionless network whose purpose is to reach consensus over public data. Since all data relayed in the Bitcoin P2P network is inherently public, and the protocol lacks a notion of cryptographic identities, peers talk to each other over unencrypted and unauthenticated connections. Nevertheless, this plaintext nature of the current P2P protocol (referred to as v1 in this document) has severe drawbacks in the presence of attackers: + +* While the relayed data itself is public in nature, the associated metadata may reveal private information and hamper privacy of users. For example, a global passive attacker eavesdropping on all Bitcoin P2P connections can trivially identify the source and timing of a transaction. +* Since connections are unauthenticated, they can be tampered with at a low cost and often even with a low risk of detection. For example, an attacker can alter specific bytes of a connection (such as node flags) on-the-fly without the need to keep any state. +* The protocol is self-revealing. For example, deep packet inspection can identify a P2P connection trivially because connections start with a fixed sequence of magic bytes. The ability to detect connections enables censorship and facilitates the aforementioned attacks as well as other attacks which require the attacker to control the connections of victims, e.g., eclipse attacks targeted at miners. + +This proposal for a new P2P protocol version (v2) aims to improve upon this by raising the costs for performing these attacks substantially, primarily through the use of unauthenticated, opportunistic transport encryption. In addition, the bytestream on the wire is made pseudorandom (i.e., indistinguishable from uniformly random bytes) to a passive eavesdropper. + +* Encryption, even when it is unauthenticated and only used when both endpoints support v2, impedes eavesdropping by forcing the attacker to become active: either by performing a persistent man-in-the-middle (MitM) attack, by downgrading connections to v1, or by spinning up their own nodes and getting honest nodes to make connections to them. Active attacks at scale are more resource intensive in general, but in case of manual, deliberate connections (as opposed to automatic, random ones) they are also in principle detectable: even very basic checks, e.g., operators manually comparing protocol versions and session IDs (as supported by the proposed protocol), will expose the attacker. +* Tampering, while already an inherently active attack, is costlier if the attacker is forced to maintain the state necessary for a full MitM interception. +* A pseudorandom bytestream excludes identification techniques based on pattern matching, and makes it easier to shape the bytestream in order to mimic other protocols used on the Internet. This raises the cost of a connection censoring firewall, forcing them to either resort to a full MitM attack, or operate on a more obvious allowlist basis, rather than a blocklist basis. + +''' Why encrypt without authentication?''' + +As we have argued above, unauthenticated encryption'''What does ''authentication'' mean in this context?''' Unfortunately, the term authentication in the context of secure channel protocols is ambiguous. It can refer to: +* The encryption scheme guaranteeing that a message obtained via successful decryption was encrypted by someone having access to the (symmetric) encryption key, and not modified after encryption by a third party. The proposal in this document achieves that property through the use of an AEAD. +* The communication protocol establishing that the communication partner's identity matches who we expect them to be, through some public key mechanism. The proposal in this document does '''not''' include such a mechanism. provides strictly better security than no encryption. Thus all connections should use encryption, even if they are unauthenticated. + +When it comes to authentication, the situation is not as clear as for encryption. Due to Bitcoin's permissionless nature, authentication will always be restricted to specific scenarios (e.g., connections between peers belonging to the same operator), and whether some form of (possibly partially anonymous) authentication is desired depends on the specific requirements of the involved peers. As a consequence, we believe that authentication should be addressed separately (if desired), and this proposal aims to provide a solid technical basis for future protocol upgrades, including the addition of optional authentication (see [https://github.com/sipa/writeups/tree/main/private-authentication-protocols Private authentication protocols]). + +''' Why have a pseudorandom bytestream when traffic analysis is still possible? ''' + +Traffic analysis, e.g., observing packet lengths and timing, as well as active attacks can still reveal that the Bitcoin v2 P2P protocol is in use. Nevertheless, a pseudorandom bytestream raises the cost of fingerprinting the protocol substantially, and may force some intermediaries to attack any protocol they cannot identify, causing collateral cost. + +A pseudorandom bytestream is not self-identifying. Moreover, it is unopinionated and thus a canonical choice for similar protocols. As a result, Bitcoin P2P traffic will be indistinguishable from traffic of other protocols which make the same choice (e.g., [https://gitlab.com/yawning/obfs4 obfs4] and a recently proposed [https://datatracker.ietf.org/doc/draft-cpbs-pseudorandom-ctls/ cTLS extension]). Moreover, traffic shapers and protocol wrappers (for example, making the traffic look like HTTPS or SSH) can further mitigate traffic analysis and active attacks but are out of scope for this proposal. + +''' Why not use a secure tunnel protocol? ''' + +Our goal includes making opportunistic encryption ubiquitously available, as that provides the best defense against large-scale attacks. That implies protecting both the manual, deliberate connections node operators instruct their software to make, as well as the the automatic connections Bitcoin nodes make with each other based on IP addresses obtained via gossip. While encryption per se is already possible with proxy networks or VPN networks, these are not desirable or applicable for automatic connections at scale: +* Proxy networks like Tor or I2P introduce a separate address space, independent from network topology, with a very low cost per address making eclipse attacks cheaper. In comparison, clearnet IPv4 and IPv6 networks make obtaining multiple network identities in distinct, well-known network partitions carry a non-trivial cost. Thus, it is not desirable to have a substantial portion of nodes be exclusively connected this way, as this would significantly reduce Eclipse attack costs.'''Why is it a bad idea to have nodes exclusively connected over Tor?''' See the [https://arxiv.org/abs/1410.6079 Bitcoin over Tor isn't a Good Idea] paper Additionally, Tor connections come with significant bandwidth and latency costs that may not be desirable for all network users. +* VPN networks like WireGuard or OpenVPN inherently define a private network, which requires manual configuration and therefore is not a realistic avenue for automatic connections. + +Thus, to achieve our goal, we need a solution that has minimal costs, works without configuration, and is always enabled – on top of any network layer rather than be part of the network layer. + +''' Why not use a general-purpose transport encryption protocol? ''' + +While it would be possible to rely on an off-the-shelf transport encryption protocol such as TLS or Noise, the specific requirements of the Bitcoin P2P network laid out above make these protocols an unsuitable choice. + +The primary requirement which existing protocols fail to meet is a sufficiently modular treatment of encryption and authentication. As we argue above, whether and which form of authentication is desired in the Bitcoin P2P network will depend on the specific requirements of the involved peers (resulting in a mix of authenticated and unauthenticated connections), and thus the question of authentication should be decoupled from encryption. However, native support for a handful of standard authentication scenarios (e.g., using digital signatures and certificates) is at core of the design of existing general-purpose transport encryption protocols. This focus on authentication would not provide clear benefits for the Bitcoin P2P network but would come with a large amount of additional complexity. + +In contrast, our proposal instead aims for simple modular design that makes it possible to address authentication separately. Our proposal provides a foundation for authentication by exporting a ''session ID'' that uniquely identifies the encrypted channel. After an encrypted channel has been established, the two endpoints are able to use any authentication protocol to confirm that they have the same session ID. (This is sometimes called ''channel binding'' because the session ID binds the encrypted channel to the authentication protocol.) Since in our proposal, any authentication needs to run after an encrypted connection has been established, the price we pay for this modularity is a possibly higher number of roundtrips as opposed to other protocols that perform authentication alongside with the Diffie-Hellman key exchange.'''Do other protocols not support exporting a session ID?''' While [https://noiseprotocol.org/noise.html#channel-binding Noise] and [https://datatracker.ietf.org/doc/draft-ietf-kitten-tls-channel-bindings-for-tls13/ TLS (as a draft)] offer similar protocol extensions for exporting session IDs, using channel binding for authentication is not at the focus of their design and would not avoid the bulk of additional complexity due to the native support of authentication methods. However, the resulting increase in connection establishment latency is a not a concern for Bitcoin's long-lived connections, [https://www.dsn.kastel.kit.edu/bitcoin/ which typically live for hours or even weeks]. + +Besides this fundamentally different treatment of authentication, further technical issues arise when applying TLS or Noise to our desired use case: + +* Neither offers a pseudorandom bytestream. +* Neither offers native support for elliptic curve cryptography on the curve secp256k1 as otherwise used in Bitcoin. While using secp256k1 is not strictly necessary, it is the obvious choice is for any new asymmetric cryptography in Bitcoin because it minimizes the cryptographic hardness assumptions as well as the dependencies that Bitcoin software will need. +* Neither offers shapability of the bytestream. +* Both provide a stream-based interface to the application layer whereas Bitcoin requires a packet-based interface, resulting in the need for an additional thin layer to perform packet serialization and deserialization. + +While existing protocols could be amended to address all of the aforementioned issues, this would negate the benefits of using them as off-the-shelf solution, e.g., the possibility to re-use existing implementations and security analyses. + +== Goals == + +This proposal aims to achieve the following properties: + +* Confidentiality against passive attacks: A passive attacker having recorded a v2 P2P bytestream (without timing and fragmentation information) must not be able to determine the plaintext being exchanged by the nodes. +* Observability of active attacks: A session ID identifying the encrypted channel uniquely is derived deterministically from a Diffie-Hellman negotiation. An active man-in-the-middle attacker is forced to incur a risk of being detected as peer operators can compare session IDs manually, or using optional authentication methods possibly introduced in future protocol versions. +* Pseudorandom bytestream: A passive attacker having recorded a v2 P2P bytestream (without timing information and fragmentation information) must not be able to distinguish it from a uniformly random bytestream. +* Shapable bytestream: It should be possible to shape the bytestream to increase resistance to traffic analysis (for example, to conceal block propagation), or censorship avoidance.'''How can shapability help circumvent fragmentation-pattern based censoring?''' See [https://gitlab.torproject.org/legacy/trac/-/issues/20348#note_2229522 this Tor issue] as an example. +* Forward secrecy: An eavesdropping attacker who compromises a peer's sessions secrets should not be able to decrypt past session traffic, except for the latest few packets. +* Upgradability: The proposal provides an upgrade path using transport versioning which can be used to add features like authentication, PQC handshake upgrade, etc. in the future. +* Compatibility: v2 clients will allow inbound v1 connections to minimize risk of network partitions. +* Low overhead: the introduction of a new P2P transport protocol should not substantially increase computational cost or bandwidth for nodes that implement it, compared to the current protocol. + +== Specification == + +The specification consists of three parts: + +* The '''Transport layer''' concerns how to set up an encrypted connection between two nodes, capable of transporting application-level messages between them. +* The '''Application layer''' concerns how to encode Bitcoin P2P messages and commands for transport by the Transport Layer. +* The '''Signaling''' concerns how v2 nodes advertise their support for the v2 protocol to potential peers. + +=== Transport layer specification === + +In this section we define the encryption protocol for messages between peers. + +==== Overview and design ==== + +We first give an informal overview of the entire protocol flow and packet encryption. + +'''Protocol flow overview''' + +Given a newly-established connection (typically TCP/IP) between two v2 P2P nodes, there are 3 phases the connection goes through. The first starts immediately, i.e. there are no v1 messages or any other bytes exchanged on the link beforehand. The two parties are called the '''initiator''' (who established the connection) and the '''responder''' (who accepted the connection). + +# The '''Key exchange phase''', where nodes exchange data to establish shared secrets. +#* The initiator: +#** Generates a random ephemeral secp256k1 private key and sends a corresponding 64-byte ElligatorSwift'''What is ElligatorSwift and why use it?''' The [https://eprint.iacr.org/2022/759.pdf SwiftEC paper] describes a method called ElligatorSwift which allows encoding elliptic curve points in a way that is indistinguishable from a uniformly distributed bitstream. While a random 256-bit string has about 50% chance of being a valid X coordinate on the secp256k1 curve, every 512-bit string is a valid ElligatorSwift encoding of a curve point, making the encoded point indistinguishable from random when using an encoder that can sample uniformly.'''How fast is ElligatorSwift?''' Our benchmarks show that ElligatorSwift encoded ECDH is about 50% more expensive than unencoded ECDH. Given the fast performance of ECDH and the low frequency of new connections, we found the performance trade-off acceptable for the pseudorandom bytestream and future censorship resistance it can enable.-encoded public key to the responder. +#** May send up to 4095'''How was the limit of 4095 bytes garbage chosen?''' It is a balance between having sufficient freedom to hide information, and allowing it to be large enough so that the necessary 64 bytes of public key is small compared to it on the one hand, and bandwidth waste on the other hand. bytes of arbitrary data after their public key, called '''garbage''', providing a form of shapability and avoiding a recognizable pattern of exactly 64 bytes.'''Why does the affordance for garbage exist in the protocol?''' The garbage strings after the public keys are needed for shapability of the handshake. Neither peer can send decoy packets before having received at least the other peer's public key, i.e., neither peer can send more than 64 bytes before having received 64 bytes. +#* The responder: +#** Waits until one byte is received which does not match the 12 bytes consisting of the network magic followed by "version\x00". If the first 12 bytes do match, the connection is treated as using the v1 protocol instead.'''What if a v2 initiator's public key starts accidentally with these 12 bytes?''' This is so unlikely (probability of ''2-96'') to happen randomly in the v2 protocol that the initiator does not need to specifically avoid it.Bitcoin Core versions <=0.4.0 and >=22.0 ignore valid P2P messages that are received prior to a VERSION message. Bitcoin Core versions between 0.4.0 and 22.0 assign a misbehavior score to the peer upon receiving such messages. v2 clients implementing this proposal will interpret any message other than VERSION received as the first message to be the initiation of a v2 connection, and will result in disconnection for v1 initiators that send any message type other than VERSION as the first message. We are not aware of any implementations where this could pose a problem. +#** Similarly generates a random ephemeral private key and sends a corresponding 64-byte ElligatorSwift-encoded public key to the initiator. +#** Similarly may send up to 4095 bytes of garbage data after their public key. +#* Both parties: +#** Receive (the remainder of) the full 64-byte public key from the other side. +#** Use X-only'''Why use X-only ECDH?''' Using only the X coordinate provides the same security as using a full encoding of the secret curve point but allows for more efficient implementation by avoiding the need for square roots to compute Y coordinates. ECDH to compute a shared secret from their private key and the exchanged public keys'''Why is the shared secret computation a function of the exact 64-byte public encodings sent?''' This makes sure that an attacker cannot modify the public key encoding used without modifying the rest of the stream. If a third party wants the ability to modify stream bytes, they need to perform a full MitM attack on the connection., and deterministically derive from the secret 4 '''encryption keys''' (two in each direction: one for packet lengths, one for content encryption), a '''session id''', and two 16-byte '''garbage terminators''''''What length is sufficient for garbage terminators?''' The length of the garbage terminators determines the probability of accidental termination of a legitimate v2 connection due to garbage bytes (sent prior to ECDH) inadvertently including the terminator. 16 byte terminators with 4095 bytes of garbage yield a negligible probability of such collision which is likely orders of magnitude lower than random connection failure on the Internet.'''What does a garbage terminator in the wild look like?'''
[[File:bip-0324/garbage_terminator.png|none|256px|A garbage terminator model TX-v2 in the wild... sent by the responder]]
+
(one in each direction) using HKDF-SHA256. +#** Send their 16-byte garbage terminator'''Why does the protocol need a garbage terminator?''' While it is in principle possible to use the garbage authentication packet directly as a terminator (scan until a valid authentication packet follows), this would be significantly slower than just scanning for a fixed byte sequence, as it would require recomputing a Poly1305 tag after every received byte. followed by a '''garbage authentication packet''''''Why does the protocol require a garbage authentication packet?''' Otherwise the garbage would be modifiable by a third party without consequences. We want to force any active attacker to have to maintain a full protocol state. In addition, such malleability without the consequence of connection termination could enable protocol fingerprinting., an '''encrypted packet''' (see further) with arbitrary '''contents''', and '''associated data''' equal to the garbage. +#** Receive up to 4111 bytes, stopping when encountering the garbage terminator. +#** Receive an encrypted packet, verify that it decrypts correctly with associated data set to the garbage received, and then ignore its contents. +#* At this point, both parties have the same keys, and all further communication proceeds in the form of encrypted packets. Packets have an '''ignore bit''', which makes them '''decoy packets''' if set. Decoy packets are to be ignored by the receiver apart from verifying they decrypt correctly. Either peer may send such decoy packets at any point after this. These form the primary shapability mechanism in the protocol. How and when to use them is out of scope for this document. +# The '''Version negotiation phase''', where parties negotiate what transport version they will use, as well as data defined by that version.'''What features could be added in future protocol versions?''' Examples of features that could be added in future versions include post-quantum cryptography upgrades to the handshake, and optional authentication. +#* The responder: +#** Sends a '''version packet''' with empty content, to indicate support for the v2 P2P protocol proposed by this document. Any other value for content is reserved for future versions. +#* The initiator: +#** Receives a packet, ignores its contents. The idea is that features added by future versions get negotiated based on what is supported by both parties. Since there is just one version so far, the contents here can simply be ignored. But in the future, receiving a non-empty contents here may trigger other behavior; we defer specifying the encoding for such version content until there is a need for it.'''How will future versions encode version numbers in the version packet?''' Future versions could, for example, specify that the contents of the version packet is to be interpreted as an integer version number (with empty representing 0), and if the minimum of both numbers is N, that being interpreted as choosing a "v2.N" protocol version. Alternatively, certain bytes of the version packet contents could be interpreted as a bitvector of optional features. +#** Sends a '''version packet''' with empty content as well, to indicate support for the v2 P2P protocol. +#* The responder: +#** Receives a packet, ignores its contents. +# The '''Application phase''', where the packets exchanged have contents to be interpreted as application data. +#* Whenever either peer has a message to send, it sends a packet with that application message as '''contents'''. + +In order to provide a means of avoiding the recognizable pattern of first messages being at least 64 bytes, a future backwards-compatible upgrade to this protocol may allow both peers to send their public key + garbage + garbage terminator in multiple rounds, slicing those bytes up into messages arbitrarily, as long as progress is guaranteed.'''How can progress be guaranteed in a backwards-compatible way?''' In order to guarantee progress, it must be ensured that no deadlock occurs, i.e., no state is reached in which each party waits for the other party indefinitely. For example, any upgrade that adheres to the following conditions will guarantee progress: + +* The initiator must start by sending at least as many bytes as necessary to mismatch the magic/version 12 bytes prefix. +* The responder must start sending after having received at least one byte that mismatches that 12-byte prefix. +* As soon as either party has received the other peer's garbage terminator, or has received 4095 bytes of garbage, they must send their own garbage terminator. (When either of these conditions is met, the other party has nothing to respond with anymore that would be needed to guarantee progress otherwise.) +* Whenever either party receives any nonzero number of bytes, while not having sent their garbage terminator completely yet, they must send at least one byte in response without waiting for more bytes. +* After either party has sent their garbage terminator, they must also send the garbage authentication packet without waiting for more bytes, and transition to the version negotiation phase. + +Since the protocol as specified here adheres to these conditions, any upgrade which also adheres to these conditions will be backwards-compatible. + +Note that the version negotiation phase does not need to wait for the key exchange phase to complete; version packets can be sent immediately after sending the garbage authentication packet. So the first two phases together, jointly called '''the handshake''', comprise just 1.5 roundtrips: + +* the initiator sends public key + garbage +* the responder sends public key + garbage + garbage terminator + garbage authentication packet + version packet +* the initiator sends garbage terminator + garbage authentication packet + version packet + +'''Packet encryption overview''' + +All data on the wire after the garbage terminators takes the form of encrypted packets. Every packet encodes an encrypted variable-length byte array, called the '''contents''', as well as an '''ignore bit''' as mentioned before. The total size of a packet is 20 bytes plus the length of its contents. + +Each packet consists of: +* A 3-byte encrypted '''length''' field, encoding the length of the '''contents''' (between ''0'' and ''224-1'''''Is ''224-1'' bytes sufficient as maximum content size?''' The current Bitcoin P2P protocol has no messages which support more than 4000000 bytes of application payload. By supporting up to ''224-1'' we can accommodate future evolutions needing more than 4 times that value. Hypothetical protocol changes that have even more data to exchange than that should probably use multiple separate messages anyway, because of the per-peer receive buffer sizes involved, and the inability to start processing a message before it is fully received. Of course, future versions of the transport protocol could change the size of the length field, if this were really needed., inclusive). +* An authenticated encryption of the '''plaintext''', which consists of: +** A 1-byte '''header''' which consists of transport layer protocol flags. Currently only the highest bit is defined as the '''ignore bit'''. The other bits are ignored, but this may change in future versions'''Why is the header a part of the plaintext and not included alongside the length field?''' The packet length field is the minimum information that must be available before we can leverage the standard RFC8439 AEAD. Any other data, including metadata like the header being in the content encryption makes it easier to reason about the protocol security w.r.t. data being used before it is authenticated. If the ignore bit was not part of the content, another mechanism would be needed to authenticate it; for example, it could be fed as AAD to the AEAD cipher. We feel the complexity of such an approach outweighs the benefit of saving one byte per message.. +** The variable-length '''contents'''. + +The encryption of the plaintext uses '''[https://en.wikipedia.org/wiki/ChaCha20-Poly1305 ChaCha20Poly1305]''''''Why is ChaCha20Poly1305 chosen as basis for packet encryption?''' It is a very widely used authenticated encryption cipher (used amongst others in SSH, TLS 1.2, TLS 1.3, [https://en.wikipedia.org/wiki/QUIC QUIC], Noise, and [https://www.wireguard.com/protocol/ WireGuard]; in the latter it is currently even the only supported cipher), with very good performance in general purpose software implementations. While AES-based ciphers (including the winners in the [https://competitions.cr.yp.to/caesar.html CAESAR] competition in non-lightweight categories) perform significantly better on systems with AES hardware acceleration, they are also significantly slower in pure software implementations. We choose to optimize for the weakest hardware., an [https://en.wikipedia.org/wiki/Authenticated_encryption authenticated encryption with associated data] (AEAD) cipher specified in [https://datatracker.ietf.org/doc/html/rfc8439 RFC 8439]. Every packet's plaintext is treated as a separate AEAD message, with a different nonce for each. + +The length must be dealt with specially, as it is needed to determine packet boundaries before the whole packet is received and authenticated. As we want a stream that is pseudorandom to a passive attacker, it still needs encryption. We use unauthenticated'''Why is the length encryption not separately authenticated?''' Informally, the relevant security goal we aim for is to hide the number of packets and their lengths (i.e., the packet boundaries) against a passive attacker that receives the bytestream without timing or fragmentation information. (A formal definition can be found for example in [https://himsen.github.io/pdf/thesis.pdf Hansen 2016 (Definition 22)] under the name "boundary hiding against chosen-plaintext attacks (BH-CPA)".) However, we do not aim to hide packet boundaries against active attackers because active attackers can always exploit the fact that the Bitcoin P2P protocol is largely query-response based: they can trickle the bytes on the stream one-by-one unmodified and observe when a response comes (see [https://himsen.github.io/pdf/thesis.pdf Hansen 2016 (Section 3.9)] for a in-depth discussion). With that in mind, we accept that an active (non-MitM) attacker is able to figure out some information about packet boundaries by flipping certain bits in the unauthenticated length field, and observing the other side disconnecting immediately or later. Thus, we choose to use unauthenticated encryption for the length data, which is sufficient to achieve boundary hiding against passive attackers, and saves 16 bytes of bandwidth per packet. '''ChaCha20''' encryption for this, with an independent key. Note that the plaintext length is still implicitly authenticated by the encryption of the plaintext, but this can only be verified after receiving the whole packet. This design is inspired by that of the ChaCha20Poly1305 cipher suite in [http://bxr.su/OpenBSD/usr.bin/ssh/PROTOCOL.chacha20poly1305 OpenSSH].'''How does packet encryption differ from the OpenSSH design?''' The differences are: +* The length field is only 3 bytes instead of 4, as that is sufficient for our purposes. +* Length encryption keeps drawing pseudorandom bytes from the same ChaCha20 cipher for multiple packets, rather than incrementing the nonce for every packet. +* The Poly1305 authentication tag only covers the encrypted plaintext, and not the encrypted length field. This means that plaintext encryption uses the standard ChaCha20Poly1305 construction without any modifications, maximizing applicability of analysis and review of that cipher. The length encryption can be seen as a separate layer, using a separate key, and thus cannot affect any of the confidentiality or integrity guarantees of the plaintext encryption. On the other hand, this change w.r.t. OpenSSH also does not worsen any properties, as incorrect lengths will still trigger authentication failure for the overall packet (the plaintext length is implicitly authenticated by ChaCha20Poly1305). +* A hash step is performed every 224'''How was the rekeying interval 224 chosen?''' Assuming a node sends only ping messages every 20 minutes (the timeout interval for post-[https://github.com/bitcoin/bips/blob/master/bip-0031.mediawiki BIP31] connections) on a connection, the node will transmit 224 packets in about 3.11 days. This means ''soft rekeying'' after a fixed number of packets automatically translates to an upper-bound of time interval for rekeying, while being much simpler to coordinate than an actual time-based rekeying regime. At the same time, doing it once every 224 messages is sufficiently infrequent that it has only negligible impact on performance. Furthermore, 224 times 3 bytes (the number of bytes consumed by each length encryption) is 672, which is a multiple of 64 minus 32. This means that at the end of 224 length encryptions, exactly 32 bytes of keystream data remain that can be used as next key. messages to rekey the the encryption ciphers, in order to provide forward security. + Because only fixed-length chunks (3-byte length fields) are encrypted, we do not need to treat all length chunks as separate messages. Instead, a single cipher (with the same nonce) is used for multiple consecutive length fields. This avoids wasting 61 pseudorandom bytes per packet, and makes the cost of having a separate cipher for length encryption negligible.'''Is it acceptable to use a less standard construction for length encryption?''' The fact that multiple (non-overlapping) bytes generated by a single ChaCha20 cipher are used for the encryption of multiple consecutive length fields is uncommon. We feel the performance cost gained by this deviation is worth it (especially for small packets, which are very common in Bitcoin's P2P protocol), given the low guarantees that are feasible for length encryption in the first place, and the result is still sufficient to provide pseudorandomness from the view of passive attackers. For plaintext encryption, we independently use a very standard construction, as the stakes for confidentiality and integrity there are much higher. + +In order to provide forward security'''What value does forward security provide?''' Re-keying ensures [https://eprint.iacr.org/2001/035.pdf forward secrecy within a session], i.e., an attacker compromising the current session secrets cannot derive past encryption keys in the same session.'''Why have a cipher with forward secrecy but no periodical refresh of the ECDH key exchange?''' Our cipher ratchets encryption keys forward in order to protect messages encrypted under ''past'' encryption keys. In contrast, re-performing ECDH key exchange would protect messages encrypted under ''future'' encryption keys, i.e., it would re-establish security after the attacker had compromised one of the peers ''temporarily'' (e.g., the attacker obtains a memory dump). We do not believe protecting against that is a priority: an attacker that, for whatever reason, is capable of an attack that reveals encryption keys (or other session secrets) of a peer once is likely capable of performing the same attack again after peers have re-performed the ECDH key exchange. Thus, we do not believe the benefits of re-performing key exchange outweigh the additional complexity that comes with the necessary coordination between the peers. We note that the initiator could choose to close and re-open the entire connection in order to force a refresh of the ECDH key exchange, but that introduces other issues: a connection slot needs to be kept open at the responder side, it is not cryptographically guaranteed that really the same initiator will use it, and the observable TCP reset and handshake may create a detectable pattern., the encryption keys for both plaintext and length encryption are cycled every 224 messages, by switching to a new key that is generated by the key stream using the old key. + +==== Handshake: key exchange and version negotiation ==== + +Next we specify the handshake of a connection in detail. + +As explained before, these messages are sent to set up the connection: + +
+ ----------------------------------------------------------------------------------------------------
+ | Initiator                         Responder                                                      |
+ |                                                                                                  |
+ | x, ellswift_X = ellswift_create(initiating=True)                                                 |
+ |                                                                                                  |
+ |           --- ellswift_X + initiator_garbage (initiator_garbage_len bytes; max 4095) --->        |
+ |                                                                                                  |
+ |                                   y, ellswift_Y = ellswift_create(initiating=False)              |
+ |                                   ecdh_secret = v2_ecdh(                                         |
+ |                                                     y, ellswift_X, ellswift_Y, initiating=False) |
+ |                                   v2_initialize(initiator, ecdh_secret, initiating=False)        |
+ |                                                                                                  |
+ |           <-- ellswift_Y + responder_garbage (responder_garbage_len bytes; max 4095) +           |
+ |                    responder_garbage_terminator (16 bytes) +                                     |
+ |                    v2_enc_packet(initiator, b'', aad=responder_garbage) +                        |
+ |                    v2_enc_packet(initiator, RESPONDER_TRANSPORT_VERSION) ---                     |
+ |                                                                                                  |
+ | ecdh_secret = v2_ecdh(x, ellswift_Y, ellswift_X, initiating=True)                                |
+ | v2_initialize(responder, ecdh_secret, initiating=True)                                           |
+ |                                                                                                  |
+ |            --- initiator_garbage_terminator (16 bytes) +                                         |
+ |                    v2_enc_packet(responder, b'', aad=initiator_garbage) +                        |
+ |                    v2_enc_packet(responder, INITIATOR_TRANSPORT_VERSION) --->                    |
+ |                                                                                                  |
+ ----------------------------------------------------------------------------------------------------
+
+ +===== Shared secret computation ===== + +The peers derive their shared secret through X-only ECDH, hashed together with the exactly 64-byte public keys' encodings sent over the wire. + +
+def v2_ecdh(priv, ellswift_theirs, ellswift_ours, initiating):
+    ecdh_point_x32 = ellswift_ecdh_xonly(ellswift_theirs, priv)
+    if initiating:
+        # Initiating, place our public key encoding first.
+        return sha256_tagged("bip324_ellswift_xonly_ecdh", ellswift_ours + ellswift_theirs + ecdh_point_x32)
+    else:
+        # Responding, place their public key encoding first.
+        return sha256_tagged("bip324_ellswift_xonly_ecdh", ellswift_theirs + ellswift_ours + ecdh_point_x32)
+
+ +Here, sha256_tagged(tag, x) returns a tagged hash value SHA256(SHA256(tag) || SHA256(tag) || x) as in [https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#specification BIP340]. + +===== ElligatorSwift encoding of curve X coordinates ===== + +The functions ellswift_create and ellswift_ecdh_xonly encapsulate the construction of ElligatorSwift-encoded public keys, and the computation of X-only ECDH with +ElligatorSwift-encoded public keys. + +First we define a constant: +* Let ''c = 0xa2d2ba93507f1df233770c2a797962cc61f6d15da14ecd47d8d27ae1cd5f852''.'''What is the ''c'' constant used in ''XSwiftEC''?''' The algorithm requires a constant ''√-3 (mod p)''; in other words, a number ''c'' such that ''-c2 mod p = 3''. There are two solutions to this equation, one which is itself a square modulo ''p'', and its negation. We choose the square one. + +To define the needed functions, we first introduce a helper function, matching the XSwiftEC function from the [https://eprint.iacr.org/2022/759.pdf SwiftEC] paper, instantiated for the secp256k1 curve, with minor modifications. It maps pairs of integers ''(u, t)'' (both in range ''0..p-1'') to valid X coordinates on the curve. Note that the specification here does not attempt to be constant time, as it does not operate on secret data. In what follows, we use the notation from [https://github.com/bitcoin/bips/blob/master/bip-0340.mediawiki#specification BIP340]. + +* ''XSwiftEC(u, t)'': +** Alter the inputs to guarantee an X coordinate on the curve:'''Why do the inputs to the XSwiftEC algorithm need to be altered?''' This step deviates from the paper, which maps a negligibly small subset of inputs (around ''3/2256'') to the point at infinity. To avoid the need to deal with the case where a peer could craft encodings that intentionally trigger this edge case, we remap them to inputs that yield a valid X coordinate. +*** If ''u mod p = 0'', let ''u = 1'' instead. +*** If ''t mod p = 0'', let ''t = 1'' instead. +*** If ''(u3 + t2 + 7) mod p = 0'', let ''t = 2t (mod p)'' instead. +** Let ''X = (u3 + 7 - t2)/(2t) (mod p).'''''What does the division (/) sign in modular arithmetic refer to?''' Note that the division in these expressions corresponds to multiplication with the modular inverse modulo ''p'', i.e. ''a / b (mod p)'' with nonzero ''b'' is the unique solution ''x'' for which ''bx = a (mod p)''. It can be computed as ''abp-2 (mod p)'', but more efficient algorithms exist. +** Let ''Y = (X + t)/(cu) (mod p)''. +** For every ''x'' in ''{u + 4Y2, (-X/Y - u)/2, (X/Y - u)/2}'' (all ''mod p''; the order matters): +*** If ''lift_x(x)'' succeeds, return ''x''. There is at least one such ''x''. + +To find encodings of a given X coordinate ''x'', we first need the inverse of ''XSwiftEC''. The function ''XSwiftECInv(x, u, case)'' either returns ''t'' such that ''XSwiftEC(u, t) = x'', or ''None''. The ''case'' variable is an integer in range 0 to 7 inclusive, which selects which of the up to 8 valid such ''t'' values to return: + +* ''XSwiftECInv(x, u, case)'': +** If ''case & 2 = 0'': +*** If ''lift_x(-x - u)'' succeeds, return ''None''. +*** Let ''v = x'' if ''case & 1 = 0''; let ''v = -x - u (mod p)'' otherwise. +*** Let ''s = -(u3 + 7)/(u2 + uv + v2) (mod p)''. +** If ''case & 2 = 2'': +*** Let ''s = x - u (mod p)''. +*** If ''s = 0'', return ''None''. +*** Let ''r'' be the square root of ''-s(4(u3 + 7) + 3u2s) (mod p).'''''How to compute a square root mod ''p''?''' Due to the structure of ''p'', a candidate for the square root of ''a'' mod ''p'' can be computed as ''x = a(p+1)/4 mod p''. If ''a'' is not a square mod ''p'', this formula returns the square root of ''-a mod p'' instead, so it is necessary to verify that ''x2 mod p = a''. If that is the case ''-x mod p'' is a solution too, but we define "the" square root to be equal to that expression (the square root will therefore always be a square itself, as ''(p+1)/4'' is even). This algorithm is a specialization of the [https://en.wikipedia.org/wiki/Tonelli%E2%80%93Shanks_algorithm Tonelli-Shanks algorithm]. Return ''None'' if it does not exist. +*** If ''case & 1 = 1'': +**** If ''r = 0'', return ''None''. +**** let ''r = -r (mod p)''. +*** Let ''v = (-u + r/s)/2''. +** Let ''w'' be the square root of ''s (mod p)''. Return ''None'' if it does not exist. +** If ''case & 4 = 4'', let ''w = -w (mod p)''. +** Return ''w(u(c - 1)/2 - v)''. + +The overall ''XElligatorSwift'' algorithm, matching the name used in the paper, then uses this inverse to randomly'''''Can the ElligatorSwift encoding be used to construct public key encodings that satisfy a certain structure (and not pseudorandom)?''' The algorithm chooses the first 32 bytes (i.e., the value ''u'') and then computes a corresponding ''t'' such that the mapping to the curve point holds. In general, picking ''u'' from a uniformly random distribution provides pseudorandomness. But we can also fix any of the 32 bytes in ''u'', and the algorithm will still find a corresponding ''t''. The fact that it is possible to fix the first 32 bytes, combined with the garbage bytes in the handshake, provides a limited but very simple method of parroting other protocols such as [https://tls13.xargs.org/ TLS 1.3], which can be deployed by one of the peers without explicit support from the other peer. More general methods of parroting, e.g., introduced by defining new protocol or a protocol upgrade, are not precluded. sample encodings of ''x'': + +* ''XElligatorSwift(x)'': +** Loop: +*** Let ''u'' be a random non-zero integer in range ''1..p-1'' inclusive. +*** Let ''case'' be a random integer in range ''0..7'' inclusive. +*** Compute ''t = XSwiftECInv(x, u, case)''. +*** If ''t'' is not ''None'', return ''(u, t)''. Otherwise, restart loop. + +This is used to define the ellswift_create algorithm used in the previous section; it generates a random private key, along with a uniformly sampled 64-byte ElligatorSwift-encoded public key corresponding to it: + +* ''ellswift_create()'': +** Generate a random private key ''priv'' in range ''1..p-1''. +** Let ''P = priv⋅G'', the corresponding public key point to ''priv''. +** Let ''(u, t) = XElligatorSwift(x(P))'', an encoding of ''x(P)''. +** ''ellswift_pub = bytes(u) || bytes(t)'', its encoding as 64 bytes. +** Return ''(priv, ellswift_pub)''. + +Finally the ellswift_ecdh_xonly algorithm is: + +* ''ellswift_ecdh_xonly(ellswift_theirs, priv)'': +** Let ''u = int(ellswift_theirs[:32]) mod p''. +** Let ''t = int(ellswift_theirs[32:]) mod p''. +** Return ''bytes(x(priv⋅lift_x(XSwiftEC(u, t))))''.'''Does it matter which point ''lift_x'' maps to?''' Either point is valid, as they are negations of each other, and negations do not affect the output X coordinate. + +===== Keys and session ID derivation ===== + +The authenticated encryption construction proposed here requires two 32-byte keys per communication direction. These (in addition to a session ID) are computed using HKDF'''Why use HKDF for deriving key material?''' The shared secret already involves a hash function to make sure the public key encodings contribute to it, which negates some of the need for HKDF already. We still use it as it is the standard mechanism for deriving many keys from a single secret, and its computational cost is low enough to be negligible compared to the rest of a connection setup. as specified in [https://tools.ietf.org/html/rfc5869 RFC 5869] with SHA256 as the hash function: + +
+def initialize_v2_transport(peer, ecdh_secret, initiating):
+    # Include NETWORK_MAGIC to ensure a connection between nodes on different networks will immediately fail
+    prk = HKDF_Extract(Hash=sha256, salt=b'bitcoin_v2_shared_secret' + NETWORK_MAGIC, ikm=ecdh_secret)
+
+    peer.session_id = HKDF_Expand(Hash=sha256, PRK=prk, info=b'session_id', L=32)
+
+    # Initialize the packet encryption ciphers.
+    initiator_L = HKDF_Expand(Hash=sha256, PRK=prk, info=b'initiator_L', L=32)
+    initiator_P = HKDF_Expand(Hash=sha256, PRK=prk, info=b'initiator_P', L=32)
+    responder_L = HKDF_Expand(Hash=sha256, PRK=prk, info=b'responder_L', L=32)
+    responder_P = HKDF_Expand(Hash=sha256, PRK=prk, info=b'responder_P', L=32)
+    garbage_terminators = HKDF_Expand(Hash=sha256, PRK=prk, info=b'garbage_terminators', L=32)
+    initiator_garbage_terminator = garbage_terminators[:16]
+    responder_garbage_terminator = garbage_terminators[16:]
+
+    if initiating:
+        peer.send_L = FSChaCha20(initiator_L)
+        peer.send_P = FSChaCha20Poly1305(initiator_P)
+        peer.send_garbage_terminator = initiator_garbage_terminator
+        peer.recv_L = FSChaCha20(responder_L)
+        peer.recv_P = FSChaCha20Poly1305(responder_P)
+        peer.recv_garbage_terminator = responder_garbage_terminator
+    else:
+        peer.send_L = FSChaCha20(responder_L)
+        peer.send_P = FSChaCha20Poly1305(responder_P)
+        peer.send_garbage_terminator = responder_garbage_terminator
+        peer.recv_L = FSChaCha20(initiator_L)
+        peer.recv_P = FSChaCha20Poly1305(initiator_P)
+        peer.recv_garbage_terminator = initiator_garbage_terminator
+
+    # To achieve forward secrecy we must wipe the key material used to initialize the ciphers:
+    memory_cleanse(ecdh_secret, prk, initiator_L, initiator_P, responder_L, responder_K)
+
+ +The session ID uniquely identifies the encrypted channel. v2 clients supporting this proposal may present the entire session ID (encoded as a hex string) to the node operator to allow for manual, out of band comparison with the peer node operator. Future transport versions may introduce optional authentication methods that compare the session ID as seen by the two endpoints in order to bind the encrypted channel to the authentication. + +===== Overall handshake pseudocode ===== + +To establish a v2 encrypted connection, the initiator generates an ephemeral secp256k1 keypair and sends an unencrypted ElligatorSwift encoding of the public key to the responding peer followed by unencrypted pseudorandom bytes initiator_garbage of length garbage_len < 4096. + +
+def initiate_v2_handshake(peer, garbage_len):
+    peer.privkey_ours, peer.ellswift_ours = ellswift_create(initiating=True)
+    peer.sent_garbage = rand_bytes(garbage_len)
+    send(peer, peer.ellswift_ours + peer.sent_garbage)
+
+ +The responder generates an ephemeral keypair for itself and derives the shared ECDH secret (using the first 64 received bytes) which enables it to instantiate the encrypted transport. It then sends 64 bytes of the unencrypted ElligatorSwift encoding of its own public key and its own responder_garbage also of length garbage_len < 4096. If the first 12 bytes received match the v1 prefix, the v1 protocol is used instead. + +
+TRANSPORT_VERSION = b''
+NETWORK_MAGIC = b'\xf9\xbe\xb4\xd9' # Mainnet network magic; differs on other networks.
+V1_PREFIX = NETWORK_MAGIC + b'version\x00'
+
+def respond_v2_handshake(peer, garbage_len):
+    peer.received_prefix = b""
+    while len(peer.received_prefix) < 12:
+        peer.received_prefix += receive(peer, 1)
+        if peer.received_prefix[-1] != V1_PREFIX[len(peer.received_prefix) - 1]:
+            peer.privkey_ours, peer.ellswift_ours = ellswift_create(initiating=False)
+            peer.sent_garbage = rand_bytes(garbage_len)
+            send(peer, ellswift_Y + peer.sent_garbage)
+            return
+    use_v1_protocol()
+
+ +Upon receiving the encoded responder public key, the initiator derives the shared ECDH secret and instantiates the encrypted transport. It then sends the derived 16-byte initiator_garbage_terminator followed by an authenticated, encrypted packet with empty contents'''Does the content of the garbage authentication packet need to be empty?''' The receiver ignores the content of the garbage authentication packet, so its content can be anything, and it can in principle be used as a shaping mechanism too. There is however no need for that, as immediately afterwards the initiator can start using decoy packets as (much more flexible) shaping mechanism instead. to authenticate the garbage, and its own version packet. It then receives the responder's garbage and garbage authentication packet (delimited by the garbage terminator), and checks if the garbage is authenticated correctly. The responder performs very similar steps, but includes the earlier received prefix bytes in the public key. As mentioned before, the encrypted packets for the '''version negotiation phase''' can be piggybacked with the garbage authentication packet to minimize roundtrips. + +
+def complete_handshake(peer, initiating):
+    received_prefix = b'' if initiating else peer.received_prefix
+    ellswift_theirs = receive(peer, 64 - len(received_prefix))
+    ecdh_secret = v2_ecdh(peer.privkey_ours, ellswift_theirs, peer.ellswift_ours,
+                          initiating=initiating)
+    initialize_v2_transport(peer, ecdh_secret, initiating=True)
+    # Send garbage terminator + garbage authentication packet + version packet.
+    send(peer, peer.send_garbage_terminator +
+               v2_enc_packet(peer, b'', aad=peer.sent_garbage) +
+               v2_enc_packet(peer, TRANSPORT_VERSION))
+    # Skip garbage, until encountering garbage terminator.
+    received_garbage = recv(peer, 16)
+    for i in range(4096):
+        if received_garbage[-16:] == peer.recv_garbage_terminator:
+            # Receive, decode, and ignore garbage authentication packet (decoy or not)
+            v2_receive_packet(peer, aad=received_garbage, skip_decoy=False)
+            # Receive, decode, and ignore version packet, skipping decoys
+            v2_receive_packet(peer)
+            return
+        else:
+            received_garbage += recv(peer, 1)
+    # Garbage terminator was not seen after 4 KiB of garbage.
+    disconnect(peer)
+
+ +==== Packet encryption ==== + +Lastly, we specify the packet encryption cipher in detail. + +===== Existing cryptographic primitives ===== + +Packet encryption is built on two existing primitives: + +* '''ChaCha20Poly1305''' is specified as AEAD_CHACHA20_POLY1305 in [https://datatracker.ietf.org/doc/html/rfc8439#section-2.8 RFC 8439 section 2.8]. It is an authenticated encryption protocol with associated data (AEAD), taking a 256-bit key, 96-bit nonce, and an arbitrary-length byte array of associated authenticated data (AAD). Due to the built-in authentication tag, ciphertexts are 16 bytes longer than the corresponding plaintext. In what follows: +** aead_chacha20_poly1305_encrypt(key, nonce, aad, plaintext) refers to a function that takes as input a 32-byte array ''key'', a 12-byte array ''nonce'', an arbitrary-length byte array ''aad'', and an arbitrary-length byte array ''plaintext'', and returns a byte array ''ciphertext'', 16 bytes longer than the plaintext. +** aead_chacha20_poly1305_decrypt(key, nonce, aad, ciphertext) refers to a function that takes as input a 32-byte array ''key'', a 12-byte array ''nonce'', an arbitrary-length byte array ''aad'', and an arbitrary-length byte array ''ciphertext'', and returns either a byte array ''plaintext'' (16 bytes shorter than the ciphertext), or ''None'' in case the ciphertext was not a valid ChaCha20Poly1305 encryption of any plaintext with the specified ''key'', ''nonce'', and ''aad''. +* The '''ChaCha20 Block Function''' is specified in [https://datatracker.ietf.org/doc/html/rfc8439#section-2.8 RFC 8439 section 2.3]. It is a pseudorandom function (PRF) taking a 256-bit key, 96-bit nonce, and 32-bit counter, and outputs 64 pseudorandom bytes. It is the underlying building block on which ChaCha20 (and ultimately, ChaCha20Poly1305) is built. In what follows: +** chacha20_block(key, nonce, count) refers to a function that takes as input a 32-byte array ''key'', a 12-byte array ''nonce'', and an integer ''count'' in range ''0..232-1'', and returns a byte array of length 64. + +These will be used for plaintext encryption and length encryption, respectively. + +===== Rekeying wrappers: FSChaCha20Poly1305 and FSChaCha20 ===== + +To provide re-keying every 224 packets, we specify two wrappers. + +The first is '''FSChaCha20Poly1305''', which represents a ChaCha20Poly1305 AEAD, which automatically changes the nonce after every message, and rekeys every 224 messages by encrypting 32 zero bytes'''Why is rekeying implemented in terms of an invocation of the AEAD?''' This means the FSChaCha20Poly1305 wrapper can be thought of as a pure layer around the ChaCha20Poly1305 AEAD. Actual implementations can take advantage of the fact that this formulation is equivalent to using byte 64 through 95 of the keystream output of the underlying ChaCha20 cipher as new key, avoiding the need for Poly1305 in the process., and using the first 32 bytes of the result. Each message will be used for one packet. Note that in our protocol, any FSChaCha20Poly1305 instance is always either exclusively encryption or exclusively decryption, as separate instances are used for each direction of the protocol. The nonce used for a message is composed of the 32-bit little endian encoding of the number of messages with the current key, followed by the 64-bit little endian encoding of the number of rekeyings performed. For rekeying, the first 32-bit integer is set to ''0xffffffff''. + +
+REKEY_INTERVAL = 224
+
+class FSChaCha20Poly1305:
+    """Rekeying wrapper AEAD around ChaCha20Poly1305."""
+
+    def __init__(self, initial_key):
+        self.key = initial_key
+        self.packet_counter = 0
+
+    def crypt(self, aad, text, is_decrypt):
+        nonce = ((self.packet_counter % REKEY_INTERVAL).to_bytes(4, 'little') +
+                 (self.packet_counter // REKEY_INTERVAL).to_bytes(8, 'little'))
+        if is_decrypt:
+            ret = aead_chacha20_poly1305_decrypt(self.key, nonce, aad, text)
+        else:
+            ret = aead_chacha20_poly1305_encrypt(self.key, nonce, aad, text)
+        if (self.packet_counter + 1) % REKEY_INTERVAL == 0:
+            rekey_nonce = b"\xFF\xFF\xFF\xFF" + nonce[4:]
+            self.key = aead_chacha20_poly1305_encrypt(self.key, rekey_nonce, b"", b"\x00" * 32)[:32]
+        self.packet_counter += 1
+        return ret
+
+    def decrypt(self, aad, ciphertext):
+        return self.crypt(aad, ciphertext, True)
+
+    def encrypt(self, aad, plaintext):
+        return self.crypt(aad, plaintext, False)
+
+ +The second is '''FSChaCha20''', a (single) stream cipher which is used for the lengths of all packets. Encryption and decryption are identical here, so a single function crypt is exposed. It XORs the input with bytes generated using the ChaCha20 block function, rekeying every 224 chunks using the next 32 bytes of the block function output as new key. A ''chunk'' refers here to a single invocation of crypt. As explained before, the same cipher is used for 224 consecutive chunks, to avoid wasting cipher output. The nonce used for these batches of 224 chunks is composed of 4 zero bytes followed by the 64-bit little endian encoding of the number of rekeyings performed. The block counter is reset to 0 after every rekeying. + +
+class FSChaCha20:
+    """Rekeying wrapper stream cipher around ChaCha20."""
+
+    def __init__(self, initial_key):
+        self.key = initial_key
+        self.block_counter = 0
+        self.chunk_counter = 0
+        self.keystream = b''
+
+    def get_keystream_bytes(self, nbytes):
+        while len(self.keystream) < nbytes:
+            nonce = ((0).to_bytes(4, 'little') +
+                     (self.chunk_counter // REKEY_INTERVAL).to_bytes(8, 'little'))
+            self.keystream += chacha20_block(self.key, nonce, self.block_counter)
+            self.block_counter += 1
+        ret = self.keystream[:nbytes]
+        self.keystream = self.keystream[nbytes:]
+        return ret
+
+    def crypt(self, chunk):
+        ks = self.get_keystream_bytes(len(chunk))
+        ret = bytes([ks[i] ^ chunk[i] for i in range(len(chunk))])
+        if ((self.chunk_counter + 1) % REKEY_INTERVAL) == 0:
+            self.key = self.get_keystream_bytes(32)
+            self.block_counter = 0
+        self.chunk_counter += 1
+        return ret
+
+ +===== Overall packet encryption and decryption pseudocode ===== + +Encryption and decryption of packets then follow by composing the ciphers from the previous section as building blocks. + +
+LENGTH_FIELD_LEN = 3
+HEADER_LEN = 1
+IGNORE_BIT_POS = 7
+
+def v2_enc_packet(peer, contents, aad=b'', ignore=False):
+    assert len(contents) <= 2**24 - 1
+    header = (ignore << IGNORE_BIT_POS).to_bytes(HEADER_LEN, 'little')
+    plaintext = header + contents
+    aead_ciphertext = peer.send_P.encrypt(aad, plaintext)
+    enc_contents_len = peer.send_L.encrypt(len(contents).to_bytes(LENGTH_FIELD_LEN, 'little'))
+    return enc_contents_len + aead_ciphertext
+
+ +
+CHACHA20POLY1305_EXPANSION = 16
+
+def v2_receive_packet(peer, aad=b'', skip_decoy=True):
+    while True:
+        enc_contents_len = receive(peer, LENGTH_FIELD_LEN)
+        contents_len = int.from_bytes(peer.recv_L.crypt(enc_contents_len), 'little')
+        aead_ciphertext = receive(peer, HEADER_LEN + contents_len + CHACHA20POLY1305_EXPANSION)
+        plaintext = peer.recv_P.decrypt(aead_ciphertext)
+        if plaintext is None:
+            disconnect(peer)
+            break
+        header = plaintext[:HEADER_LEN]
+        if not (skip_decoy and header[0] & (1 << IGNORE_BIT_POS)):
+            return plaintext[HEADER_LEN:]
+
+ +==== Performance ==== + +Each v1 P2P message uses a double-SHA256 checksum truncated to 4 bytes. Roughly the same amount of computation power is required for encrypting and authenticating a v2 P2P message as proposed. + +=== Application layer specification === +==== v2 Bitcoin P2P message structure ==== +v2 Bitcoin P2P transport layer packets use the encrypted message structure shown above. An unencrypted application layer '''contents''' is composed of: + +{|class="wikitable" +! Field !! Size in bytes !! Comments +|- +| message_type || ''1..13'' || either a one byte ID or an ASCII string prefixed with a length byte +|- +| message_payload || message_length || message payload +|} + +If the first byte of message_type is in the range ''1..12'', it is interpreted as the number of ASCII bytes that follow for the message type. If it is in the range ''13..255'', it is interpreted as a message type ID. This structure results in smaller messages than the v1 protocol as most messages sent/received will have a message type ID.'''How do the length between v1 and v2 compare?''' For messages that use the 1-byte short message type ID, v2 packets use 3 bytes less per message than v1. + +The following table lists currently defined message type IDs: + +{| class="wikitable" +|- +! +!0 +!1 +!2 +!3 +|- +!+0 +|(undefined)||(1 byte string)||(2 byte string)||(3 byte string) +|- +!+4 +|(4 byte string)||(5 byte string)||(6 byte string)||(7 byte string) +|- +!+8 +|(8 byte string)||(9 byte string)||(10 byte string)||(11 byte string) +|- +!+12 +|(12 byte string)||ADDR||BLOCK||BLOCKTXN +|- +!+16 +|CMPCTBLOCK||FEEFILTER||FILTERADD||FILTERCLEAR +|- +!+20 +|FILTERLOAD||GETADDR||GETBLOCKS||GETBLOCKTXN +|- +!+24 +|GETDATA||GETHEADERS||HEADERS||INV +|- +!+28 +|MEMPOOL||MERKLEBLOCK||NOTFOUND||PING +|- +!+32 +|PONG||SENDCMPCT||SENDHEADERS||TX +|- +!+36 +|VERACK||VERSION||GETCFILTERS||CFILTER +|- +!+40 +|GETCFHEADERS||CFHEADERS||GETCFCHECKPT||CFCHECKPT +|- +!+44 +|WTXIDRELAY||ADDRV2||SENDADDRV2||SENDTXRCNCL +|- +!+48 +|REQRECON||SKETCH||REQSKETCHEXT||RECONCILDIFF +|- +!≥52 +|| colspan="4" | (undefined) +|} + + +The message types may be updated separately after BIP finalization. + +=== Signaling specification === +==== Signaling v2 support ==== +Peers supporting the v2 transport protocol signal support by advertising the NODE_P2P_V2 = (1 << 11) service flag in addr relay. If met with immediate disconnection when establishing a v2 connection, clients implementing this proposal are encouraged to retry connecting using the v1 protocol.'''Why are v2 clients met with immediate disconnection encouraged to retry with a v1 connection?''' Service flags propagated through untrusted intermediaries using ADDR and ADDRV2 P2P messages and are OR'ed when received from multiple sources. An untrusted intermediary could falsely advertise a potential peer as supportive of v2 connections. Connection downgrades to v1 mitigate the risk of a network participant being blackholed via false advertising. + + +== Test Vectors == + +For development and testing purposes, we provide a collection of test vectors in CSV format, and a naive, highly inefficient, [[bip-0324/reference.py|reference implementation]] of the relevant algorithms. This code is for demonstration purposes only: +* [[bip-0324/xelligatorswift_test_vectors.csv|XElligatorSwift vectors]] give examples of ElligatorSwift-encoded public keys, and the X coordinate they map to. +* [[bip-0324/xswiftec_test_vectors.csv|XSwiftEC vectors]] give examples of ''(u, x)'' pairs, and the various ''t'' values that ''xswiftec_inv'' maps them to. +* [[bip-0324/packet_encoding_test_vectors.csv|Packet encoding vectors]] illustrate the lifecycle of the authenticated encryption scheme proposed in this document. + +== Rationale and References == + + +== Acknowledgements == +Thanks to everyone (last name order) that helped invent and develop the ideas in this proposal: + +* Matt Corallo +* Lloyd Fournier +* Gregory Maxwell diff --git a/bip-0324/garbage_terminator.png b/bip-0324/garbage_terminator.png new file mode 100644 index 0000000000000000000000000000000000000000..536763e4a9ccc8931aad8e76bc8c017e07282ee0 GIT binary patch literal 267163 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

j$ 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

{5v6dRw- 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 Z|2N>k3xpo~ZzBKz002ovPDHLkV1mszSQr2R literal 0 HcmV?d00001 diff --git a/bip-0324/packet_encoding_test_vectors.csv b/bip-0324/packet_encoding_test_vectors.csv new file mode 100644 index 00000000..519b77a9 --- /dev/null +++ b/bip-0324/packet_encoding_test_vectors.csv @@ -0,0 +1,8 @@ +in_idx,in_priv_ours,in_ellswift_ours,in_ellswift_theirs,in_initiating,in_content,in_multiply,in_aad,in_ignore,mid_x_ours,mid_x_shared,mid_shared_secret,mid_initiator_l,mid_initiator_p,mid_responder_l,mid_responder_p,mid_send_garbage_terminator,mid_recv_garbage_terminator,mid_session_id,out_ciphertext,out_ciphertext_endswith +1,e79f04ad4c684525ff3e3cf7c19f4cdb11193d387d7f3fe82a948a0c3165f5fe,4eff53ea1945e57b5d170565e760d771e5d496101c1005c302fd687af80d8b858c5a681c474fc4c0546ee464a1b95899ecb9d4f50c2c0854fe029fc054ae6777,824a1da0530fa695b95b375fee2a56ec96ce375ddd2fcf8367cc8ec1c0b751a3304bbef5dc96543acaac50c24be8cb39906ef8521727de0c6e96c2060a026bd7,1,1f,1,,0,b63341693587b4944b865485cffcc34707b3e0760a6ba8d1d402fc1c996c4e91,961fa6c9491bde887a6e67898c9335579d1931b435af16d969f3c9f12e58c698,05ac09c882b2cddd57fd4a1a14f93ae78d78a2ab2adb8cb6d67176cdb3101e15,c845747c92a2f0d83058ccceee69322cfd84cf3b086c30790f2a8789b303defc,3d0c55fa080de10236da830c7b092f63f6897c5243259adcedc4288a847ee9bc,f32949925481a88ad5246c408aeb8b9c0dc5dbc21fd6e5484331e1c0cd0ef6d6,5b94f3fce2b276e9d7ef5646657e61dbbc8ea27a9bf531ce23c553de1fdfd27d,38d7b65a6d58a08b2506e799caacd4f6,d6156094782d98fa27f37758dcd0677f,4418cf03c0d7cd5849022a7976014f234b4d4f5c18a6d3a6540c11e01a7180c1,d88ea86cdd6b61592e038741b474eeef0de0802412, +999,53a915e6d8f6c5bbb93e537081085e9e642dc525649acf05be74e3a825e20921,715d7b8357dd4d15a07b3f8c6764ebd9927140f75047fb50478c33ea8889d710511cdf39aa0fd6b1e94ea660d87f9d97bffc548646f9e2aaebc1468fe563fb97,cea7abc3112397b894bd3e89a615248af473f897bbdd30997c20e53e7ce499a295e55c4c5655cd3d21191e76c8af0aa1bbea10fd1b540a42d0fbed388dc59877,0,e4,1,,0,533bbaefc711f303be5e8271fdecfd31d03abd42128ff73479e2a427059e4a74,ed679745127d32714ff84bcce7651a14b9f275bf4b18bc8e880ff51cd7ac012b,08cbe6a86ff92a9757b2aeea92b8b2f4d78426786a2caec99c3cc73d7dda47ab,953a372f0d3933afef342fec533fa4fed644cc1cbc9252d31883e10fbca9b81a,e8c1759d865d59f37e5cf0404296fb0530f0fc601ad783853791e5459ca7f135,52925c95091e7dac8e580e9a0548e18915e01919a416c5aac22096b8bab17c31,ba778684047d705839590c466daef7c0ac53a3f8790b9744f154712e5644c647,0442c66254045c5018d828d42afaa69f,930c6d7cbf8c7c2006ed287c2ba6d941,9619dd4731d6160617da82da407c80732455a67b59ad7be07f86252aadb79440,0d5892533b0453c777d5ff3f217c94297e7927bb45, +0,dcf45714d450a32cdd05997b75acd34e8786969dfcff34295c287a13ba3225f0,feaa1ef8bb05296a8d5153855357868835fc5bc59d96dcbccb108e0e2dd671676c5683ad566ee4290ede5236ba6259ab47668e25853d64c0678641d27d5d0eed,c8067851ccc5df7331e9f137e66ebce1220306c4644266ff3e38436a1036ea36582dac8ce2c30de59a890f81611f866f659c1334bdd82cce1ea20ab0128b7f56,1,d3ed40688778a439928b38f1f67e04afb94843625ce1932590fe0606fcabffad25df7d2476214dc1d06aa368a4dc1e6d940a974307836e291c54f6948623ce,1,3c208efa88a545dbd29d71bbf41268fe3d123eac7e20e92be7f227b93166ee3cfd2f26639b27f20513ec5fe25c4e762096b3e49c29110a5b0d170eb9292e1ecdd3d3bab3660f9970811330d6a0f7112709666bb9d3443c9f35a84e7bde9bf2b5e29b903c64e86aca86bb5799fcf6a7416f48d98668749852c49e4cb2f3325c44d63995cea48af98bb42bcf4fbe03681bb552cf5d51b424bd53f1ffb6d6cb70af606debbe07124aeb14b28f2b26e63f3421c6ac512d5cdb7f97540f2ae64487d84dc57fb8c97f5785b60bcf12a22225988007c4dcc8895301a6e36c59f3a33ab5fa099945b1dd4d6e0a3822ffea087b01f9fb27b38c7711211c523b0e153422a5e06c8200ed45560ed4eb1317b7b730b5d31096bd3ac5cfc1e876a178851d297bec38b7a753013d7590533b5f6d654add3b38ca046d932d9739a5f0fbe6cda89cc97597a046d08b66fde7533fcb0528562960832f623dadbbe35d2d54ff15e1a9a260477169e2d8a95ec66e6ed8ccc2366f5ded2fddc2b351d6475c4b3831b6dd5c330917ea1b0b229ce719b5bd6d839861e5374f51a176b500e7546a2b4b1325be9615305d591605783279a73f28b9a281b17a45bb79029a30bf3c0b248945f4523979bbb57d69df4881d8030a4146080dbf13255b712919fb4fa016c66dd323d7a5c56b3ceeb57c4120fd554719a3851b9f3e810c4ad35b141ebff6b7c7038fdfa784681f20dcf99773721d4ec07e58a312d638fa7a90c1afbb282f30ea74d7002288441c93263eebb593f2b36cf795a8a0ee7cc119d28caa13332fdb6f2f5a6011e26e1f33941fa275d2d75af014c7739b9a999f018c7c96b854332225cb9104c016f94ff255191ab93df7c1ac29e566d672e8ccb1a4b1f53f201d583da6c410df98fc502f3b366d7624cd812cb9dedce92329b6e591366bb83c7b84c1fb30301f0199ee9ec727a33d3a9a0382af1fcf1f42e945a5acf1ea8db30a03856b8d4e0361c08028bcfc05c5204fd508e67b9924600526a1f297efd091e3a0bdc6de5a46229792069c08af9b7961ec890a3ecd6af6b08ae08f3892084a8224dd5ac50b99a7034ba48b6f599ab3e3f9fe30734229558694b8e3091161f8bd425cc2e63635c1ff82e6b6b6c89d3ea4a0dc4193b80e6014f87571bc8499107576a910f0aa50d471fb35fa07dfd0488a404ef9907ee767b1f3786415561c445e0487feed348da527bd5e8adad8de928159fb32cfac4430f51dcf710507baedf326597d8039cbecd07e9cde781d0e307d589d52b5ac262a69b366541efc78e9398dc69345f00004268c9c6ae079f09aa4e4afb830ae35715623451ee2520ef201cb5885030aec9a24d9968f8c6f25d234c69cb2f569ae2a91029b6401110fed798b2289de1e7e8621dcbe466a2fef44f09176e252dae6707ecc35695a156f6b97ab4cbaabd325fd8eb941248490824f2520f49aae6eaab95a1cf92c061c57c90910873f1866b8763b78f90b2b737020527ad16c33938ab438f0eb7845a034aec20253e71ab717c4243dbcc084f4b09a87ceeb8ef124755ac8802a66b02cf9396a700a661e16b418cf838ea1262935bb7bdeec1648f0cacb1c3236ec1856d93f172c5a9a938246606db326336425c27e2adfa428f347b9f7aa4cf1648dd4e7e66f5e8a858d499c95dc2092a0a9c8b80a05c93bd359ba5b1acc714be5a1c26be118abe8abafce45d0b9bb668a8204fccf166bb85ce17f70330c0c8ca8dc7394beee22a52624558b69b81e223c779447ee09d822dc44226432a0c86f9b25e7d85a98e187d879a4ddeeb2463d12bce3eb137e227d41e2a3df55dad1219cf18129dd23ad50930286b732037cbe7d474d06ae9f7d93f7285d2db44a8e72011460e3d34381bfe6d3221f49915312d00a5a2c7ef98ab829c995081abf9dc5551f472f34f9b39607b8e55bdb047e68582d27d2582afb9a07549c7a134a34f7d0e5a1a046cb2c3959feb98fe7a698291a2defa5fbb32473b9c9ed02d02284559325e12cda1bf0bc24ea9849fc4c87eaed71f2537242b8635fdc969872b1017d218943647fca47f9430af3b78ae2c39882118612c288d474b0298de3c3ec1efd23c65554f6d6813b4ccbf604250d295f795b679fe0ecceef5b4739eb6b418376d2fd47f95685a259cd2e2e7c00c18e93329a80a467a2a0aeb22e361732c943beb0c3dc7ca57699b690d26e6314d0b28082f8f26894c249d1587b8895dd1c5e8863bbe31cdebbce06b1d6aa17f64a125f4cbad47f2e02761259973ea164b22a580d74413d900023f03d2b2587bca60501f639050262b61a67bec83246d6ec7726f5a8a62d99c582a159db6a539ae88732f8d101d324550c9fa2dd9ba60c449d329cba823ec4b3d80d613d8df5256b3ce6ffec42ab23e5e27c001aec29d080fb519a6cce5b974f65375870c22577a2f6e76760870de047ff65dca90bfd6a303b4605b6f90631d57a8f66969ec7b96749c1f1a4ee70e8915396e114100fde651700416239d82ce7e32be5f20e5886510a37b3cd3eefe78c40ccb0425f03bcaab1aa9eeffa2f4681b7938a813f49f10a34c280de09345ffe00af340a451ebdae630ddade51a6510fdda44c3fcacfaf3f2f748d8bfe48ff71871eaec9b1790df27d4ae913d1ad16b0b33a04266540a49cb5acb8d2e16df7a35933bba7c5af1ac1f522419e76c58cddee219cf5d3229d5a27af4411ae890b4329ae5699820766b0d73841baddc11c24802684c7f7c738bf4843595dd508850b69dbd38671a385ea39188a04e7b489daabf860f4747a7172cb72a578b9903ce161e7b8a7f31ea7e8630f97571bae93f51186b94cf3c697839a6dcb2f53de9893e53a7bc2f94c9a33b2dd112cdae81f60019b7c20aa7c4921f72492329afb8841a4c80a42d1a12fcc09cf7094cadf6a48ffd6f200bd64ec17906cf4ceda6f10313bdc9ce23eba2d8d8bdba728fac90321b4893a0a61e443f611ce16486aa477ed59ccd27b58bf01a5d6d396ffa249c0728eaf87f1c41dd56c7cbc1491b369aec1a576e286fceb37746891aa37da87fa77db443bbc2df63c589f928532c6e8f4e6e3186441dca4c7118d1bfdd0a1e24087837d7dabff8d64f7df1d4cd1628eb312d6c631f092ac0172642de2f2c3c1a71573de41d2165b8f3164db59070593d8c16dd6c161303a6523a33da328fd88929e434da4d102c0ef7303eafeb6a0c3583f74bc277ae1fac36efe68b98af3340a766b0ddb61e268f3dfdc6d858a90aab491e00e010ef195bbe12435a6f225395a1c3d0ba05a094cb2c6610353fb5bdda198c6c6a1564ddf21ab51b2e13e735969d109acf4ff05ac0071d018e98b42b18692ff2dff6bb1fdc6aa630d2a978b652fa6944fbf693a251db943e10cdabfd7e26276ef16844024432286400d36d15c6acf43cb6247c6316b0729ad2a465ed215a97c937e9f9a405ae9f520d91a198cd18077e7d6134f268741b73c6ad16d1e2164102e8bd276237599ff5811837faa0b1b4ac6b61092c14da64ee83904d62c57d336b80f4476f5a9fa6f0ce6ba6b34454906bf5af60b5e42170bc358bb90927c20f753b8d69d80e5aff23daee4727bdf16e01cb549783816b9a066ade19c26bf2e30aad9f3faf35c5e17c81062f53fdb9f57c2608f6c638f0f2e8c071581107bba371eb0cfec67bd823c3d892d21d14e65b366343839bddb2b7da0d7af7e7b3b927c4d71441ecbf14f5276d0da11cf33723a10fbf1e5a97b1f95072de9872932d7bfc200080043cec2dbf2f0840be85933d8f0cb6862316d1dc18292b90b8a583df01464fe1d6a4720ea361ff2280398df7008023f364989692c86bd2ceb94e466febe2fae6bb2635c1cfcdde45c4d3b6ff55106a432a64e6827f52cc0a25f4581a058c962e99ee9b3ca2c10e32eb93729690b3066d9b9343be9863faaa0599b99daddb2e53704002cc3dc09d5df8f3bb783b37e3ef85f01b272d84073576352428720ee08b9bc527020413346c0bb7f7040fd9b149197bdc4988eebc4e012e73d75bc4f4d2d2a3cc30dae96836c590e5a5976f0392102e1c592da1fd373be252fc3b0d34a6dec22725dd697ac55d4d50e07ccba88f70a44b75abb5dfececacb1b5483760e5d40b84255455fdb93faecbc24ae3b30d73311d6afd5fbad5b6e61e64530e7645cc43adc3053a40d6fc0e63d6c664df163f197d2d3efbb5a5abcf4a7ad69d07bb866876fc22d9c7a2fe529260153283cdbe1fc5768d625ad09a9bdb60442a744d22a827264d2722baae4549097f745bcf0de7f21c80951cc5ed8a48e4099663dbf6ac1f995e7ab3d6c8fe2c3e817e13b26741f2a7f33bad56bb002ebf0c69282dc763e1e9cb44bc0a0814170116d2dc16fdf1e08158fc571c5a5285242ab6376f9c213953e3a0a315eff722831cc27e426b0fe299fb325933ba9631be00ffd51f7bb3d13d962f5b6a0a01ad0c60455993699b9ec594cb749c82c870dc443c7466db518e4a5ebc7c530539ae48bea63d77c0e175d673edff001511bbdbddf30f2c231cba0565f043aa52c584fc05069728a95e040893d4e9c6c8d3b7bae906be38b9e1480f8e4665f157f4b347be01d1c355c94576b32a335864f6cd341857a696fe5f8af10a4ae87246cd119d33205bb969009655e36db394f750382fd58648aee80179bb3f1df7f291b4de27edf056c3968aca546e0e81d131b3fb52ae8b3fdedf297289420c4aa1aa74560aae150f623e120b08592c0304dbf7ff2e432e737227ac1e7e9e65485b30d058b30f81807a18fba48822baaf2e7ec6c88a604495a000e62340273db9079c2a7123a8a197b63d9616e7e9ebef572ba3efec09fb038a57adceffeffcbbb6c4e0e9bd73c1d1e82d26d39bda2420a45fb2463218b2988b5fbd316b3f4e81e7b0728d700637333fe5448b395e384169c4bfc57ff6062c962ac4f13e66cd5b6166a7a049b6459291d2d2a632d749060d8070b9e2db3159db8047e8024bc12c92562c7b4ee953b426c551d1b9064551833c758683693a57e724bed8a5c05e55d8e5f27d22b4adc246116747f23cc8ec35b51148168cd27dfb8a466cb8f4b1980209735694e411184875da7254a2ff850a73377c1f9f0b87f808b76a9f0882231fcc4446ed01c9876edf92fc505040583d9ccd0fcaf3935f215dd45022a9464835a505022cdd54de634fe207b5e202f7bcad463e00312952d3d4b421cc77be0cac587426f0239b8d3d94c0c24141b10cc8ab33aa655388fa5a323016e7a1fe2470d4dad92cb19acf779ce1c48f64bf588c99a766010252b983edcd4725ff16c15683bd7be62323c39405358358fcff306182a3a147c025dc91801258f4d71e1888b0a19f4e52a8c5885cc99474e94448c0081d1ce2a7110e1a6c7e23184cd76a44c806b0f1ea3de321cfdf8569dd35221e9ab1ccbcf6dee81cc611d0731226228d71e98abf05a0db761bf6807d4c0400a39835f33b144f85ddcdee7945e63027d3cd25d44b7e9fdda2548284497af9b57dc72b3e026d49e86950b434fc9a9713f5be858500b54614d5d4c79186289d744fa0df3d655f9fb79ec60f49dc72eea538515b53f74c578f9d4ffc9e79063e19f3a38d9dde42f7c3910ac5ca16f60afefcccd4a49b1d93032b7e82189caebd2993991f7f4f1610d3b7cd4b8dbf895523b28d0a3e672232412145649b1a28570d9c114a851f10e6761f52ade202167d94fb69135f3d2932849a85267b998a23f6c6229697e0098097cb6a6dc4f84cff4c7da997d5631b694,0,d23f19ad26c7ab984c682c5b1475f5a7df0452a05dd29a164974d2027a6e488a,6f8420ebf786ee13dcf65855b11428db43061cb599e6fe9ed79e59d9f273dc44,33a1ef8464def100bf031dae882ae4b7837b481f6adbc63c44baa8ef61c102eb,8edefd89c5ddb77db6333981740b83fd4d9c246639e0dcfd1ea2a26d4a26f508,6b0aae6192e7a92c7a3b5de8ab1349d26637b17e500da162cf25df13c85d35df,87a8da66207605720c64d5267b5ce90becb01248a60808a921c5eff59013d59f,e9292dc44be3294db04cf689a3141bbe0d0dbaca2dd8d8fb606a45b8d7d8e089,57b8c1343aea943714ff848970b2a89b,ce7988ab7ce5c93b89328ff815ae803b,a306c86bea9e6befa7f72bd5cde761d5f4f86cfbc8749c1e844100c540a6cefc,a844ddeb465f302c4b408a6ab972d4ff4035109bc25fb8fe88d4892bccefc238cf93e5a61459f9c0cb4877cb03967d592c5d8dc6d4c4b5f489005a645b2f7a2ee368749f0b172b9ddbcaa76f20485a272b2347, +255,f360308206fb441c7713b1a24ba4096a2fa0d5401411198b7008f82ae85257fe,3d4aa6a71a8a734e014b4d9e6b62989f022c1e2238ae476b11465cb86fe8cf7243db6f9472e188590705cf9b35121e06e57cb106a6043ab147b7c73871da8222,f0ebc3c872339622fbf2ab1b8aa2117c4d752b64eac9203962c03a47497a89c0dd298348e5bb63d3433c48ed6da6bc2e2dbe78f7b91247dd29f1f51a858d464a,0,b766200432932708a77dd15337bf70ca58397907a1cd31ecd1b43fab27fa0de0e85d5c4dea99543e79a75b149d325044934efccf679a764f683b2fbcb7c6dc4baea9797554779aff937f5195c172892c38dc423bc809885e5a19d07733e7c5f5806ffb865074cf2c46fbb5be4f9b5833c6829b8217ccb301dad7cb49e4fbcad1,1,,1,29bf8fe2cbd12835d3e6652840b8b1a2acf99d7b44610e738aafd7fd207c9b25,8f088a98122e3ffae5fee255fbfdf653a1f830f85dfe595707a1f4a7f74dab76,07eff272cd331aeb14db342b82f6df98303b01471f4dbe71028b127577216d9b,74ee2a5f9221cb386e587ac9a0c724bc6f65ea04cf3b0686c10b3e39e66bca02,35d93b912c54f3d28f834ee96a787f76f84b543fc231a45242fa4953b89cfc9f,70c4abb811bb6c209c6f108be383f67c8a14cd2dd25815f6156e6c3edd7d1e3d,3a16c6f3ff6f2b735b89d2af77c94b9dd328f5330e1283627835d32c5c856446,e09f7df050a3f76bc8d5a21697fefb9b,b8951fd528743d2e8625de363d9ae0e7,b1d1e3ae7d9337f31a410986fe6e377726eb0f2334f24d66b38ec4d29529d1a5,98178b6e498f808c90b098c8ceb09c5630d50925323d051d379adb85be9e3b7d3e5a4c0eafa3fb69abcf60e631262278395c4ec017b1a2c8b4aa6a25e65afa99ea3e73038d152b392b2f754a655f3fd034fd633e7889072c3e1351bff97494a6737785a00016c294e0f62219eb6becfcd14e5f81841118275a460780178b050615ab02e56efc0c777844620ba3de42bb54674842, +512,073f53403256e2b699e32cd4cebadfab63d9076a7cd541d9656e27b1baff66bb,5c9c90c4e216f8a4c2642535d1f699364f9054ca01bca0239fa65bcaf0ec0278e5a36bc85eae96850feff889b66c9106c170fe655f973f533ee3557bd3cb6e64,e9221c9698cb69b63c5a4e224132389d346fd2f0f3262218301be51687b8de846c652ea8aa7425a5c08a7bd52078168d28ecf42196e33e155e215553ce6aee83,1,196391ebfe9af3a9186d82692a00e485d6653c8408050e2efbfd864642860022af68053ee4230f69ea565fee775778bc231307b5b534545878f864364bb2690acc9e8991fed5a777eb2850c3c54cca94a5bc2cb92729bcd4e27c57ebddbdf14974030115bc5a8a600b207a4884f568d6a9d3d9367977410577674601d1cc5f1f672f4e54d4944e1f7807416159eb5ece5b805c8a23e6735351a8cf8de654d87228ba21baf815190ef026b29612498121fe85480d9e0050d4781fa9f0e60cab5195,1,,0,0ce4860107efd6deb9e8fc71cfc2522b4a5a0dc171746fb995ce485570449ab5,d87966cc3cbdcc14ce06a1ef6c28125cec3136647a499d4b4465c925a5f85efd,88cf0eb49ee4b7b46cd39fb3f4126b285750d897fdcba72b08d9da351167e227,df6857d7fbb822069d3f284973cdc6677a539d81844247ca2ac174b818623550,4f1c0b4b834681298ef127067369747074e571c68fc69966f3ad20673f786b82,5b9aa4239daed582b04d316f0550fdf1efc5309544349b01d62ea4f045e3425f,0c1d30189bf24a5032a93add5335fcbf351b2071870fd1626b66e23be99e1df5,ece7e13c65def883efc1f0dac6d55974,efca4cefee7a95602ebab090875e4212,afde967955012c17bfa7bea218bff3aa1aef10a49139c66080e9e7c567706409,5400e5add3682ea8c5587dbaec8867c54b7dc97e07533db32b5f68ff9eeccf68db30c5013b276374e1b60dd417df516e375a995b45811817b326c6bfbaaec589d82415bc48bc8f1eee5b9ff430b486cc951752e943dccef384a66bc6d906c7f0e839772ffce47928bb73a8f828ac82dca6f8f4f8340f11f4ef849575fd16ed32e5d450249b89004164918fe739a83f2b5dae04f7a8ae32682779f65edaef9c80090f581c7d9000cef48bed0089b5eb8767cc963ee2bda2d00716a463ee5413036bd2a055c0f5e3f72791e0526ac5e35bd269b71117, +769,810159fc6708a85aa9d6c8e7c4f8c587056594910174c0309b2c323055efaa6a,2a875927b98fd441d8c469f6902c167eb440e52d3331a4b7406f21cad216e80917401ddb8795a9706fe42a7ddfca70fee7240b1e918b9f32414b8b26e611d571,758bcf0381c0a1c35a174503a43b08f79eb407aa61eb9e6579a62400d4a13f8d3cef884728c34cb79c7f088b4d4e735ce796361e71bd8b66d637f56326b49af3,0,0f492bc40bc635ca20a46c6fd97b7de536f8326e677e0dcf9ed91e4c7873ec903198010f7cf0ff1595,97561,,0,27cdbeb6c8ef5f97982a7af00018a16ba243176fe6bb5d5c30c8a466a0193a47,85bbb016a00056ffd3878b2a5cfac4352d581bfec5a0407f0733585513d4b463,17624a0ed455d13430bf27337e27a1d55402cb1c7ebb32a4a66b3ef2f9947f1d,aeb3befd6841f8ec867e154424b5c6d49ad3fc1f789e7d3048750302c5d89c09,80033fb9014f1a407e46d35cf36a7c4245e55e6a810abaaad88ec5d25f89443f,65b0f93ac2a34327a4aacf14c2c54d92210294b425c3b6bb4ced8c44dad80457,4893a9b0ec706fcc7a05c1fed011ced86afd7324c63537e49ec2974df481a83c,330b7aae0e4d13f5806bc1f696042155,d514d7861e65ced36c7ea6ad2a8f6938,2ad4f52fd2a9cd078c0664dc4ba33904095d4affb5227fbc779662ca6140376c,,c05bf91046901716cab14414ee73dbd7f17a6e4cf0bc3ba22e22d40198fbd1527726a99c006378ba3079e9da8dcc68ecd8a0a23a692eb775cf11d97e16847b3398e11ee1ddab092d6a994a7246802bb3140ecbd4d8495f36abb5aa3e0aa325f02b5be69e4ad546356c453003949ea9d2adfb169004fe37da65b247ffbf021e9109d6d090b224bd4f51b803955be2fd7fdd0e198f89d903deba9be904cd6d769bbd4f1b5b609be95a9b6db2c2a6fcff029899cea13196330a433277c96a069fa8b6590d921da84172adf1b23fb76eb6cec95f8bcd6b497777eb2b44dd15440f430d3f9ea8729ea5598df46b299cff81729d3fca241872e61b84945c70189189f5 +1024,f7c11ca3b55137fa6124c49b25dea0287815b887760e1b986497e976444eb5bb,5a2a0ce42feb17e70a96db1e55bc380e26a40a589dfc453d6c2e82bbc4c2b161716a05df9039ccffb6df45183480119deb69299e44d48e38de746ad084156edd,2c402d53332d914e4f5501c8db682bec6738ed53c7410655d9346db99bae37642beb6a1d48394502941965ea7140e1172ce591923235640f964c0d597caae304,1,bc5fdee9e87d05b9723871a35823f643cc53c400851686d69d87433028c19cc295ceea1513d8056021800c86d886f27f6018e4053121df4db5216bff17160f7b1bc4d3be67354f0551f55a353de5f15add353605e2a0761bb0c1b3bb8a37787e797e619ebf902a8ed4fcf1c741c897c8469cf54565b21c85e2b4fac5ef6e948f2c36df269f7189d1f293d2a95a08a1b9d00528521ff407ff992726712c8c9d6273a878d1700912ff2ef5b1b6899e9b88f6999bc628c8a390b37d9be99bd742e16a1eb83b0d1b8bfb6858e3fddb33ce2d9ef40afefd29833fd59dbc0aef25c35771b17d62595b5de9dc7426f1d976deea78,69615,,1,6d89eb9e87319fd088ee1e77fa5b36d2d2d9e66fae8d11ab7bd70407d4aaba29,0b6c87c76983e5c84428bd646d24c133d9321af5f7cb4624ca1524bcab828ffd,2a4d8d7ab2d2e92c429c8c4cb0d78f0f170a244410d588b92c7fd8baf7c27e59,001f5a1254d1734551f7895221f370aa5eb2ea382dfefd586941becac178d8a2,acf0ffecff0851e065af2a149f1c0a0db21c8a885613ebd1c445957b56c3d705,42b3699eec52f5f4648bdb40c25c956944f0a3e9986552917a3498078a8de907,a721aa5cf8d2b4ce9f46f20693438d94f75130585b6ab137894b273a436c90d4,a5e8c7130b7b8cb34e303bc3da911230,0169b4c927c5a809bd3b0981887e7e0b,462c77437e78cb8620e0572e5a401d151e6ae45aed57d7638d924f569eccd73e,,d3a1508bf5455510d63279ef808f8eb5979b2793e481990f489046adbf9eb4247384912949eb8a9800fee8a3b25c7f3771a426b60b5ce40a60df4e7399ca9069f5833addad5f62dfff9171a964211489855b5aaef2f227b63d75e3d07b4ea9fc068b35497f70a7b708f1af662f435282ededcc0e20e38003733cf52703343f40f390b2cc38d10a8ea82434f2126ec841f67f54660f6ece22ae874a3a2c880e78dc87fbfbbcafa4bff042e78668855584386a11349a64e2018e8ca3857439345d1368998e3bc4995ece49634a75786c6ec06914181d35153fa29af610dc8db16531e601d8bba061accbf2c49ac567769d5c1b0607d71ecb34642d75b51bdb6776 diff --git a/bip-0324/reference.py b/bip-0324/reference.py new file mode 100644 index 00000000..e07731b3 --- /dev/null +++ b/bip-0324/reference.py @@ -0,0 +1,575 @@ +import sys +import random +import hashlib +import hmac + +### BIP-340 tagged hash + +def TaggedHash(tag, data): + """Compute BIP-340 tagged hash with specified tag string of data.""" + ss = hashlib.sha256(tag.encode('utf-8')).digest() + ss += ss + ss += data + return hashlib.sha256(ss).digest() + +### HKDF-SHA256 + +def hmac_sha256(key, data): + """Compute HMAC-SHA256 from specified byte arrays key and data.""" + return hmac.new(key, data, hashlib.sha256).digest() + +def hkdf_sha256(length, ikm, salt, info): + """Derive a key using HKDF-SHA256.""" + if len(salt) == 0: + salt = bytes([0] * 32) + prk = hmac_sha256(salt, ikm) + t = b"" + okm = b"" + for i in range((length + 32 - 1) // 32): + t = hmac_sha256(prk, t + info + bytes([i + 1])) + okm += t + return okm[:length] + +### secp256k1 field/group elements + +def modinv(a, n): + """Compute the modular inverse of a modulo n using the extended Euclidean + Algorithm. See https://en.wikipedia.org/wiki/Extended_Euclidean_algorithm#Modular_integers. + """ + a = a % n + if a == 0: + return 0 + if sys.hexversion >= 0x3080000: + # More efficient version available in Python 3.8. + return pow(a, -1, n) + t1, t2 = 0, 1 + r1, r2 = n, a + while r2 != 0: + q = r1 // r2 + t1, t2 = t2, t1 - q * t2 + r1, r2 = r2, r1 - q * r2 + if r1 > 1: + return None + if t1 < 0: + t1 += n + return t1 + +class FE: + """Objects of this class represent elements of the field GF(2**256 - 2**32 - 977). + + They are represented internally in numerator / denominator form, in order to delay inversions. + """ + + SIZE = 2**256 - 2**32 - 977 + + def __init__(self, a=0, b=1): + """Initialize an FE as a/b; both a and b can be ints or field elements.""" + if isinstance(b, FE): + if isinstance(a, FE): + self.num = (a.num * b.den) % FE.SIZE + self.den = (a.den * b.num) % FE.SIZE + else: + self.num = (a * b.den) % FE.SIZE + self.den = a.num + else: + b = b % FE.SIZE + assert b != 0 + if isinstance(a, FE): + self.num = a.num + self.den = (a.den * b) % FE.SIZE + else: + self.num = a % FE.SIZE + self.den = b + + def __add__(self, a): + """Compute the sum of two field elements (second may be int).""" + if isinstance(a, FE): + return FE(self.num * a.den + self.den * a.num, self.den * a.den) + else: + return FE(self.num + self.den * a, self.den) + + def __radd__(self, a): + """Compute the sum of an integer and a field element.""" + return FE(self.num + self.den * a, self.den) + + def __sub__(self, a): + """Compute the difference of two field elements (second may be int).""" + if isinstance(a, FE): + return FE(self.num * a.den - self.den * a.num, self.den * a.den) + else: + return FE(self.num - self.den * a, self.den) + + def __rsub__(self, a): + """Compute the difference between an integer and a field element.""" + return FE(self.den * a - self.num, self.den) + + def __mul__(self, a): + """Compute the product of two field elements (second may be int).""" + if isinstance(a, FE): + return FE(self.num * a.num, self.den * a.den) + else: + return FE(self.num * a, self.den) + + def __rmul__(self, a): + """Compute the product of an integer with a field element.""" + return FE(self.num * a, self.den) + + def __truediv__(self, a): + """Compute the ratio of two field elements (second may be int).""" + return FE(self, a) + + def __rtruediv__(self, a): + """Compute the ratio of an integer and a field element.""" + return FE(a, self) + + def __pow__(self, a): + """Raise a field element to a (positive) integer power.""" + return FE(pow(self.num, a, FE.SIZE), pow(self.den, a, FE.SIZE)) + + def __neg__(self): + """Negate a field element.""" + return FE(-self.num, self.den) + + def __int__(self): + """Convert a field element to an integer. The result is cached.""" + if self.den != 1: + self.num = (self.num * modinv(self.den, FE.SIZE)) % FE.SIZE + self.den = 1 + return self.num + + def sqrt(self): + """Compute the square root of a field element. + + Due to the fact that our modulus is of the form (p % 4) == 3, the Tonelli-Shanks + algorithm (https://en.wikipedia.org/wiki/Tonelli-Shanks_algorithm) is simply + raising the argument to the power (p + 3) / 4.""" + v = int(self) + s = pow(v, (FE.SIZE + 1) // 4, FE.SIZE) + if s**2 % FE.SIZE == v: + return FE(s) + return None + + def is_square(self): + """Determine if this field element has a square root.""" + # Compute the Jacobi symbol of (self / p). Since our modulus is prime, this + # is the same as the Legendre symbol, which determines quadratic residuosity. + # See https://en.wikipedia.org/wiki/Jacobi_symbol for the algorithm. + n, k, t = (self.num * self.den) % FE.SIZE, FE.SIZE, 0 + if n == 0: + return True + while n != 0: + while n & 1 == 0: + n >>= 1 + r = k & 7 + t ^= (r == 3 or r == 5) + n, k = k, n + t ^= (n & k & 3 == 3) + n = n % k + assert k == 1 + return not t + + def __eq__(self, a): + """Check whether two field elements are equal (second may be an int).""" + if isinstance(a, FE): + return (self.num * a.den - self.den * a.num) % FE.SIZE == 0 + else: + return (self.num - self.den * a) % FE.SIZE == 0 + + def to_bytes(self): + """Convert a field element to 32-byte big endian encoding.""" + return int(self).to_bytes(32, 'big') + + @staticmethod + def from_bytes(b): + """Convert a 32-byte big endian encoding of a field element to an FE.""" + v = int.from_bytes(b, 'big') + if v >= FE.SIZE: + return None + return FE(v) + +class GE: + """Objects of this class represent points (group elements) on the secp256k1 curve. + + The point at infinity is represented as None.""" + + ORDER = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141 + ORDER_HALF = ORDER // 2 + + def __init__(self, x, y): + """Initialize a group element with specified x and y coordinates (must be on curve).""" + fx = FE(x) + fy = FE(y) + assert fy**2 == fx**3 + 7 + self.x = fx + self.y = fy + + def double(self): + """Compute the double of a point.""" + l = 3 * self.x**2 / (2 * self.y) + x3 = l**2 - 2 * self.x + y3 = l * (self.x - x3) - self.y + return GE(x3, y3) + + def __add__(self, a): + """Add two points, or a point and infinity, together.""" + if a is None: + # Adding point at infinity + return self + if self.x != a.x: + # Adding distinct x coordinates + l = (a.y - self.y) / (a.x - self.x) + x3 = l**2 - self.x - a.x + y3 = l * (self.x - x3) - self.y + return GE(x3, y3) + elif self.y == a.y: + # Adding point to itself + return self.double() + else: + # Adding point to its negation + return None + + def __radd__(self, a): + """Add infinity to a point.""" + assert a is None + return self + + def __mul__(self, a): + """Multiply a point with an integer (scalar multiplication).""" + r = None + for i in range(a.bit_length() - 1, -1, -1): + if r is not None: + r = r.double() + if (a >> i) & 1: + r += self + return r + + def __rmul__(self, a): + """Multiply an integer with a point (scalar multiplication).""" + return self * a + + @staticmethod + def lift_x(x): + """Take an FE, and return the point with that as X coordinate, and square Y.""" + y = (FE(x)**3 + 7).sqrt() + if y is None: + return None + return GE(x, y) + + @staticmethod + def is_valid_x(x): + """Determine whether the provided field element is a valid X coordinate.""" + return (FE(x)**3 + 7).is_square() + +SECP256K1_G = GE( + 0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798, + 0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8) + +### ElligatorSwift + +# Precomputed constant square root of -3 modulo p. +MINUS_3_SQRT = FE(-3).sqrt() + +def xswiftec(u, t): + """Decode field elements (u, t) to an X coordinate on the curve.""" + if u == 0: + u = FE(1) + if t == 0: + t = FE(1) + if u**3 + t**2 + 7 == 0: + t = 2 * t + X = (u**3 + 7 - t**2) / (2 * t) + Y = (X + t) / (MINUS_3_SQRT * u) + for x in (u + 4 * Y**2, (-X / Y - u) / 2, (X / Y - u) / 2): + if GE.is_valid_x(x): + return x + assert False + +def xswiftec_inv(x, u, case): + """Given x and u, find t such that xswiftec(u, t) = x, or return None. + + Case selects which of the up to 8 results to return.""" + + if case & 2 == 0: + if GE.is_valid_x(-x - u): + return None + v = x if case & 1 == 0 else -x - u + s = -(u**3 + 7) / (u**2 + u*v + v**2) + else: + s = x - u + if s == 0: + return None + r = (-s * (4 * (u**3 + 7) + 3 * s * u**2)).sqrt() + if r is None: + return None + if case & 1: + if r == 0: + return None + r = -r + v = (-u + r / s) / 2 + w = s.sqrt() + if w is None: + return None + if case & 4: + w = -w + return w * (u * (MINUS_3_SQRT - 1) / 2 - v) + +def xelligatorswift(x): + """Given a field element X on the curve, find (u, t) that encode them.""" + while True: + u = FE(random.randrange(1, GE.ORDER)) + case = random.randrange(0, 8) + t = xswiftec_inv(x, u, case) + if t is not None: + return u, t + +def ellswift_create(): + """Generate a (privkey, ellswift_pubkey) pair.""" + priv = random.randrange(1, GE.ORDER) + u, t = xelligatorswift((priv * SECP256K1_G).x) + return priv.to_bytes(32, 'big'), u.to_bytes() + t.to_bytes() + +def ellswift_ecdh_xonly(pubkey_theirs, privkey): + """Compute X coordinate of shared ECDH point between elswift pubkey and privkey.""" + u = FE(int.from_bytes(pubkey_theirs[:32], 'big')) + t = FE(int.from_bytes(pubkey_theirs[32:], 'big')) + d = int.from_bytes(privkey, 'big') + return (d * GE.lift_x(xswiftec(u, t))).x.to_bytes() + +### Poly1305 + +class Poly1305: + """Class representing a running poly1305 computation.""" + MODULUS = 2**130 - 5 + + def __init__(self, key): + self.r = int.from_bytes(key[:16], 'little') & 0xffffffc0ffffffc0ffffffc0fffffff + self.s = int.from_bytes(key[16:], 'little') + self.acc = 0 + + def add(self, msg, length=None, pad=False): + """Add a message of any length. Input so far must be a multiple of 16 bytes.""" + length = len(msg) if length is None else length + for i in range((length + 15) // 16): + chunk = msg[i * 16:i * 16 + min(16, length - i * 16)] + val = int.from_bytes(chunk, 'little') + 256**(16 if pad else len(chunk)) + self.acc = (self.r * (self.acc + val)) % Poly1305.MODULUS + return self + + def tag(self): + """Compute the poly1305 tag.""" + return ((self.acc + self.s) & 0xffffffffffffffffffffffffffffffff).to_bytes(16, 'little') + +### ChaCha20 + +CHACHA20_INDICES = ( + (0, 4, 8, 12), (1, 5, 9, 13), (2, 6, 10, 14), (3, 7, 11, 15), + (0, 5, 10, 15), (1, 6, 11, 12), (2, 7, 8, 13), (3, 4, 9, 14) +) + +CHACHA20_CONSTANTS = (0x61707865, 0x3320646e, 0x79622d32, 0x6b206574) + +def rotl32(v, bits): + """Rotate the 32-bit value v left by bits bits.""" + return ((v << bits) & 0xffffffff) | (v >> (32 - bits)) + +def chacha20_doubleround(s): + """Apply a ChaCha20 double round to 16-element state array s. + + See https://cr.yp.to/chacha/chacha-20080128.pdf and https://tools.ietf.org/html/rfc8439 + """ + for a, b, c, d in CHACHA20_INDICES: + s[a] = (s[a] + s[b]) & 0xffffffff + s[d] = rotl32(s[d] ^ s[a], 16) + s[c] = (s[c] + s[d]) & 0xffffffff + s[b] = rotl32(s[b] ^ s[c], 12) + s[a] = (s[a] + s[b]) & 0xffffffff + s[d] = rotl32(s[d] ^ s[a], 8) + s[c] = (s[c] + s[d]) & 0xffffffff + s[b] = rotl32(s[b] ^ s[c], 7) + +def chacha20_block(key, nonce, cnt): + """Compute the 64-byte output of the ChaCha20 block function. + + Takes as input a 32-byte key, 12-byte nonce, and 32-bit integer counter. + """ + # Initial state. + init = [0 for _ in range(16)] + for i in range(4): + init[i] = CHACHA20_CONSTANTS[i] + for i in range(8): + init[4 + i] = int.from_bytes(key[4 * i:4 * (i+1)], 'little') + init[12] = cnt + for i in range(3): + init[13 + i] = int.from_bytes(nonce[4 * i:4 * (i+1)], 'little') + # Perform 20 rounds. + state = [v for v in init] + for _ in range(10): + chacha20_doubleround(state) + # Add initial values back into state. + for i in range(16): + state[i] = (state[i] + init[i]) & 0xffffffff + # Produce byte output + return b''.join(state[i].to_bytes(4, 'little') for i in range(16)) + +### ChaCha20Poly1305 + +def aead_chacha20_poly1305_encrypt(key, nonce, aad, plaintext): + """Encrypt a plaintext using ChaCha20Poly1305.""" + ret = bytearray() + msg_len = len(plaintext) + for i in range((msg_len + 63) // 64): + now = min(64, msg_len - 64 * i) + keystream = chacha20_block(key, nonce, i + 1) + for j in range(now): + ret.append(plaintext[j + 64 * i] ^ keystream[j]) + poly1305 = Poly1305(chacha20_block(key, nonce, 0)[:32]) + poly1305.add(aad, pad=True).add(ret, pad=True) + poly1305.add(len(aad).to_bytes(8, 'little') + msg_len.to_bytes(8, 'little')) + ret += poly1305.tag() + return bytes(ret) + +def aead_chacha20_poly1305_decrypt(key, nonce, aad, ciphertext): + """Decrypt a ChaCha20Poly1305 ciphertext.""" + if len(ciphertext) < 16: + return None + msg_len = len(ciphertext) - 16 + poly1305 = Poly1305(chacha20_block(key, nonce, 0)[:32]) + poly1305.add(aad, pad=True) + poly1305.add(ciphertext, length=msg_len, pad=True) + poly1305.add(len(aad).to_bytes(8, 'little') + msg_len.to_bytes(8, 'little')) + if ciphertext[-16:] != poly1305.tag(): + return None + ret = bytearray() + for i in range((msg_len + 63) // 64): + now = min(64, msg_len - 64 * i) + keystream = chacha20_block(key, nonce, i + 1) + for j in range(now): + ret.append(ciphertext[j + 64 * i] ^ keystream[j]) + return bytes(ret) + +### FSChaCha20{,Poly1305} + +REKEY_INTERVAL = 224 # packets + +class FSChaCha20Poly1305: + """Rekeying wrapper AEAD around ChaCha20Poly1305.""" + + def __init__(self, initial_key): + self.key = initial_key + self.packet_counter = 0 + + def crypt(self, aad, text, is_decrypt): + nonce = ((self.packet_counter % REKEY_INTERVAL).to_bytes(4, 'little') + + (self.packet_counter // REKEY_INTERVAL).to_bytes(8, 'little')) + if is_decrypt: + ret = aead_chacha20_poly1305_decrypt(self.key, nonce, aad, text) + else: + ret = aead_chacha20_poly1305_encrypt(self.key, nonce, aad, text) + if (self.packet_counter + 1) % REKEY_INTERVAL == 0: + rekey_nonce = b"\xFF\xFF\xFF\xFF" + nonce[4:] + newkey1 = aead_chacha20_poly1305_encrypt(self.key, rekey_nonce, b"", b"\x00" * 32)[:32] + newkey2 = chacha20_block(self.key, rekey_nonce, 1)[:32] + assert newkey1 == newkey2 + self.key = newkey1 + self.packet_counter += 1 + return ret + + def decrypt(self, aad, ciphertext): + return self.crypt(aad, ciphertext, True) + + def encrypt(self, aad, plaintext): + return self.crypt(aad, plaintext, False) + + +class FSChaCha20: + """Rekeying wrapper stream cipher around ChaCha20.""" + + def __init__(self, initial_key): + self.key = initial_key + self.block_counter = 0 + self.chunk_counter = 0 + self.keystream = b'' + + def get_keystream_bytes(self, nbytes): + while len(self.keystream) < nbytes: + nonce = ((0).to_bytes(4, 'little') + + (self.chunk_counter // REKEY_INTERVAL).to_bytes(8, 'little')) + self.keystream += chacha20_block(self.key, nonce, self.block_counter) + self.block_counter += 1 + ret = self.keystream[:nbytes] + self.keystream = self.keystream[nbytes:] + return ret + + def crypt(self, chunk): + ks = self.get_keystream_bytes(len(chunk)) + ret = bytes([ks[i] ^ chunk[i] for i in range(len(chunk))]) + if ((self.chunk_counter + 1) % REKEY_INTERVAL) == 0: + self.key = self.get_keystream_bytes(32) + self.block_counter = 0 + self.chunk_counter += 1 + return ret + +### Shared secret computation + +def v2_ecdh(priv, ellswift_theirs, ellswift_ours, initiating): + """Compute BIP324 shared secret.""" + + ecdh_point_x32 = ellswift_ecdh_xonly(ellswift_theirs, priv) + if initiating: + # Initiating, place our public key encoding first. + return TaggedHash("bip324_ellswift_xonly_ecdh", + ellswift_ours + ellswift_theirs + ecdh_point_x32) + else: + # Responding, place their public key encoding first. + return TaggedHash("bip324_ellswift_xonly_ecdh", + ellswift_theirs + ellswift_ours + ecdh_point_x32) + +### Key derivation + +NETWORK_MAGIC = b'\xf9\xbe\xb4\xd9' + +def initialize_v2_transport(ecdh_secret, initiating): + """Return a peer object with various BIP324 derived keys and ciphers.""" + + peer = {} + salt = b'bitcoin_v2_shared_secret' + NETWORK_MAGIC + for name, length in ( + ('initiator_L', 32), ('initiator_P', 32), ('responder_L', 32), ('responder_P', 32), + ('garbage_terminators', 32), ('session_id', 32)): + peer[name] = hkdf_sha256( + salt=salt, ikm=ecdh_secret, info=name.encode('utf-8'), length=length) + peer['initiator_garbage_terminator'] = peer['garbage_terminators'][:16] + peer['responder_garbage_terminator'] = peer['garbage_terminators'][16:] + del peer['garbage_terminators'] + if initiating: + peer['send_L'] = FSChaCha20(peer['initiator_L']) + peer['send_P'] = FSChaCha20Poly1305(peer['initiator_P']) + peer['send_garbage_terminator'] = peer['initiator_garbage_terminator'] + peer['recv_L'] = FSChaCha20(peer['responder_L']) + peer['recv_P'] = FSChaCha20Poly1305(peer['responder_P']) + peer['recv_garbage_terminator'] = peer['responder_garbage_terminator'] + else: + peer['send_L'] = FSChaCha20(peer['responder_L']) + peer['send_P'] = FSChaCha20Poly1305(peer['responder_P']) + peer['send_garbage_terminator'] = peer['responder_garbage_terminator'] + peer['recv_L'] = FSChaCha20(peer['initiator_L']) + peer['recv_P'] = FSChaCha20Poly1305(peer['initiator_P']) + peer['recv_garbage_terminator'] = peer['initiator_garbage_terminator'] + + return peer + +### Packet encryption + +LENGTH_FIELD_LEN = 3 +HEADER_LEN = 1 +IGNORE_BIT_POS = 7 + +def v2_enc_packet(peer, contents, aad=b'', ignore=False): + """Encrypt a BIP324 packet.""" + + assert len(contents) <= 2**24 - 1 + header = (ignore << IGNORE_BIT_POS).to_bytes(HEADER_LEN, 'little') + plaintext = header + contents + aead_ciphertext = peer['send_P'].encrypt(aad, plaintext) + enc_plaintext_len = peer['send_L'].crypt(len(contents).to_bytes(LENGTH_FIELD_LEN, 'little')) + return enc_plaintext_len + aead_ciphertext diff --git a/bip-0324/run_test_vectors.py b/bip-0324/run_test_vectors.py new file mode 100644 index 00000000..ada7371a --- /dev/null +++ b/bip-0324/run_test_vectors.py @@ -0,0 +1,53 @@ +import csv +import os +import sys + +import reference + +with open(os.path.join(sys.path[0], 'packet_encoding_test_vectors.csv'), newline='') as csvfile: + reader = csv.reader(csvfile) + reader.__next__() + for row in reader: + in_idx, in_priv_ours, in_ellswift_ours, in_ellswift_theirs, in_initiating, in_content, in_multiply, in_aad, in_ignore, mid_x_ours, mid_x_shared, mid_shared_secret, mid_initiator_l, mid_initiator_p, mid_responder_l, mid_responder_p, mid_send_garbage_terminator, mid_recv_garbage_terminator, mid_session_id, out_ciphertext, out_ciphertext_endswith = row + + assert mid_x_ours == (int.from_bytes(bytes.fromhex(in_priv_ours), 'big') * reference.SECP256K1_G).x.to_bytes().hex() + assert mid_x_shared == reference.ellswift_ecdh_xonly(bytes.fromhex(in_ellswift_theirs), bytes.fromhex(in_priv_ours)).hex() + assert mid_shared_secret == reference.v2_ecdh(bytes.fromhex(in_priv_ours), bytes.fromhex(in_ellswift_theirs), bytes.fromhex(in_ellswift_ours), int(in_initiating)).hex() + + peer = reference.initialize_v2_transport(bytes.fromhex(mid_shared_secret), int(in_initiating)) + assert mid_initiator_l == peer['initiator_L'].hex() + assert mid_initiator_p == peer['initiator_P'].hex() + assert mid_responder_l == peer['responder_L'].hex() + assert mid_responder_p == peer['responder_P'].hex() + assert mid_send_garbage_terminator == peer['send_garbage_terminator'].hex() + assert mid_recv_garbage_terminator == peer['recv_garbage_terminator'].hex() + assert mid_session_id == peer['session_id'].hex() + for _ in range(int(in_idx)): + reference.v2_enc_packet(peer, b"") + ciphertext = reference.v2_enc_packet(peer, bytes.fromhex(in_content) * int(in_multiply), bytes.fromhex(in_aad), int(in_ignore)) + if len(out_ciphertext): + assert out_ciphertext == ciphertext.hex() + if len(out_ciphertext_endswith): + assert ciphertext.hex().endswith(out_ciphertext_endswith) + +with open(os.path.join(sys.path[0], 'xswiftec_test_vectors.csv'), newline='') as csvfile: + reader = csv.reader(csvfile) + reader.__next__() + for row in reader: + u = reference.FE.from_bytes(bytes.fromhex(row[0])) + x = reference.FE.from_bytes(bytes.fromhex(row[1])) + for case in range(8): + ret = reference.xswiftec_inv(x, u, case) + if ret is None: + assert row[2 + case] == "" + else: + assert row[2 + case] == ret.to_bytes().hex() + assert reference.xswiftec(u, ret) == x + +with open(os.path.join(sys.path[0], 'xelligatorswift_test_vectors.csv'), newline='') as csvfile: + reader = csv.reader(csvfile) + reader.__next__() + for row in reader: + ellswift = bytes.fromhex(row[0]) + x = bytes.fromhex(row[1]) + assert reference.ellswift_ecdh_xonly(ellswift, (1).to_bytes(32, 'big')) == x diff --git a/bip-0324/xelligatorswift_test_vectors.csv b/bip-0324/xelligatorswift_test_vectors.csv new file mode 100644 index 00000000..253a076d --- /dev/null +++ b/bip-0324/xelligatorswift_test_vectors.csv @@ -0,0 +1,17 @@ +ellswift,x +26b25d457597a7b0463f9620f666dd10aa2c4373a505967c7c8d70922a2d6eceffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2dabde1,240b740607e14d8cb767f53c9dacf5becde98abe73ffa36f096971215280dc58 +5a3e80a37915b1601c363acd1601df7ef257d5d32c664004a2ec0484a4f60628ffffffffffffffffffffffffffffffffffffffffffffffffffffffff15d5f3cd,4deaeb3cfbd2abbc9d57fdd83d825a05c45d773d96e247bda136e154769c1f8b +6641161dc1faf1293662e9d81dc994fed6a720d6e0e1ab5702c6a866254a9076ffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f44671f,32f5e32639066d09d5184e36cfca82b9f16076666edb2597bf6c8ca0f9423799 +bf5e8ffa51a9e748985800c1d3d7f1a2a6ae7435136593ca8d9637e3f87c699c76cc5805dab9b4eacefdb477f498020fd82bccdbc9c6a2d9ce10586ac85512b4,5579653da55ae6af8c92b0ab623bfede27756fdba141124c72aec43bc5b746e5 +df3f619804a92fdb4057192dc43dd748ea778adc52bc498ce80524c014b81119b40711a88c7039756fb8a73827eabe2c0fe5a0346ca7e0a104adc0fc764f528d,e838221abd40251a45646c40f62550e0acb8ab1ab292df7a9d4f28d72316bd3a +f0caf11f8aea622a396127c3e7e67a6a854dccb736fcdc1270fc071592083e6da839c820778a009421bb1d1eee17cdea622828bd0d065d5b4adb6c0033570a37,bfae8740fc4926b0387803a8db03fa8b9d8b53ec30713a8227bf421b23b11571 +f1473fa4fb09147ba9d07832c92ccc0bcd651b696ff463931964066a4c849d12ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7ac238b,de26c723c76ec977f4cf79b3ba3e27800041930000ee7a74337d0e64fe164937 +fd50cee538a3798d17dde484f9d935860a88fe8dd6cd2341254ab5d558b0b67f5c5ec4b2af7c601e0f4b8d3893192292759a5c3b0a760c0589e5337bfb4e8a2d,0969798ab212485d36a0f007f744a17bffbc4fa9c3e73afcb4e7a27fb3580de9 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff3d60a4a9252c0b6b080fa045acfcd1437f693f3be2be2ac8223ea525d492fa19ab028942,c163b493f047704ba83e241472ebb2a05f95ef47c6bf5feedd8da33504866d68 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f51ebdbafa7518106309c22d325df6d2663249d158d2f36f1976269d6d4104d9198a108,37d7c5665514f85fe6e4cca488e8abdfc6bc4b3e87ff01ac08eb2504180296e9 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff72a7e655ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1dd15ad9,34818ed876cbbb6710eb832627de9eb7c468846f26bfc336303601593bbb706d +ffffffffffffffffffffffffffffffffffffffffffffffffffffffff92e6fb5cf32ceb01b42ea21ecdacc88a0e59dfbf72692b68d76924ba59f0a81f373d2cee,438c40e9cc47e577f56932b9bea91433acc7be309c017ff8f45a46046ed5aa9f +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffba7d0816157655bf7c7eaf74e26c4fb12043675dcce7580ea49d60317a546c3df2e14f9f,11d52804cc52a73185697681ebb8713dfe4204864fb9989b28e5a3696907710c +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffd4b84378fffffffffffffffffffffffffffffffffffffffffffffffffffffffff69a56d1,523e0758ee088690c9b95c604ef4d143e4fd3f2d1ac9084e3086750a9686f9bc +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffdac35742ffffffffffffffffffffffffffffffffffffffffffffffffffffffff99d5d507,db7f9b113af6796d460dfc12bef75f947fa1e0102686cf58de6ad5c0af752f82 +ffffffffffffffffffffffffffffffffffffffffffffffffffffffffeeee1f01fffffffffffffffffffffffffffffffffffffffffffffffffffffffff43363e8,c0c123902ec734bde1c6410a93e5d0033e0540120d5be9f555476b842fd2d245 diff --git a/bip-0324/xswiftec_test_vectors.csv b/bip-0324/xswiftec_test_vectors.csv new file mode 100644 index 00000000..985235fb --- /dev/null +++ b/bip-0324/xswiftec_test_vectors.csv @@ -0,0 +1,33 @@ +u,x,case0_t,case1_t,case2_t,case3_t,case4_t,case5_t,case6_t,case7_t +08da7c45cb204377e7e42249cda5713fa865116ddbb4cb5a1949b2e5b438a6ab,e087b707dabf2796b03b2fb4f976c3f2f5abb36110d00ef656432117f2c93f0a,,,,,,,, +0a6361b3a802f55cd5ae06101c88a1e216320fe11cc0cfe1d791eed08a1200fd,a0223bc98997647daf4d520129bdb66e4937a00d1533af1fa29645fb96fb5bb5,60a3ed14bd9df0bfb89ada9372a7b5790b123a66bf130f5788237e8cd5225de4,9c4ee4629f10220fda49532d0c859a539dec5148eefc78bf48d93d2828027a9c,fc5e72f042fd1792cbf88728a374a2cc1e03e1f9ec8813fa3692e497cfa7d5e6,cb39fac005f26dc0a383ea64cb9b3b0b26767f20232cae4486f32904df4f04e3,9f5c12eb42620f404765256c8d584a86f4edc59940ecf0a877dc81722add9e4b,63b11b9d60efddf025b6acd2f37a65ac6213aeb711038740b726c2d6d7fd8193,03a18d0fbd02e86d340778d75c8b5d33e1fc1e061377ec05c96d1b6730582649,34c6053ffa0d923f5c7c159b3464c4f4d98980dfdcd351bb790cd6fa20b0f74c +102b51b9765a56a3e899f7cf0ee38e5251f9c503b357b330a49183eb7b155604,102b51b9765a56a3e899f7cf0ee38e5251f9c503b357b330a49183eb7b155604,bdb5bd58ca96eae36147a6c55bc2bef2cee55a757ee193cb619edc8d3590f90a,bda953c1da02059350e740b83f59149628e0be50c24ac8dc6908a2225931b4a0,,,424a42a73569151c9eb8593aa43d410d311aa58a811e6c349e612371ca6f0325,4256ac3e25fdfa6caf18bf47c0a6eb69d71f41af3db5372396f75ddca6ce478f,, +2921a11f25dadaa24aa79a548e4e81508c2e5e56af2d833d65e2bcce448ce2f5,3a70c472406b83d9f1c4398b8ecef786499bc44a3b30c34ac30f2d8a418bffa3,b9c76c21d3fabb948fa0326bf9e999068e9eed56ee4e76cb81558aa26969c56c,ef7dd84338732a0cac3a8995f3bacf9b2896582b8d3317ed508e5d9a5a3447af,,,463893de2c05446b705fcd94061666f9716112a911b189347eaa755c969636c3,108227bcc78cd5f353c5766a0c453064d769a7d472cce812af71a264a5cbb480,, +33b67cb5385ceddad93d0ee960679041613bed34b8b4a5e6362fe7539ba2d3ce,0105c74958a165e016502eeb87835195505d89714c95272b6fa88fe6c60b33ac,,,069e1b3b155c6da989b9b6a8735bba3c5c1049dcf01fe4474772244db89cf9ca,c77b10bca540e95ee66c1f57ab6297787849a89b2b883116e700593e3c0fe66d,,,f961e4c4eaa39256764649578ca445c3a3efb6230fe01bb8b88ddbb147630265,3884ef435abf16a11993e0a8549d688787b65764d477cee918ffa6c0c3f015c2 +3a898eecdae167231275338e9a79153cbe53f7bf99943eeb72ee64e57bb58699,41ffd7362aaa7b90fe03936deeebe9afafd9c18967122d8f972db2c050d4f07b,60abf7ed2a7ffd3d2ac242a782331ea663d55ca157af994e5e964e9c79a0db40,3c3c39dc37753ab9160dfbc2e0596c3a5114784690caa1836e12036814453da3,adcd3f100de60723f127278998c591fbf081af8e0a77f2a9090bed67d8aa2aa3,,9f540812d58002c2d53dbd587dcce1599c2aa35ea85066b1a169b162865f20ef,c3c3c623c88ac546e9f2043d1fa693c5aeeb87b96f355e7c91edfc96ebbabe8c,5232c0eff219f8dc0ed8d876673a6e040f7e5071f5880d56f6f412972755d18c, +46e04d129d7b45d054469ce34e24069a1426b3e34f1b68a3d1bff1e070aee192,c6ce9611bd908c16eba5c599e5219de2d18d82c96aafb0180b23ee315513618f,,,,,,,, +47dc540c94ceb704a23875c11273e16bb0b8a87aed84de911f2133568115f254,13964717dbc998964d7c19ec3d9981fe1d4a9a80845552a98fb9352898532844,,,,,,,, +4cab73ce2a7e6220975001c8a354143267a3c1ce8bf7692313e654481e616a93,9114cf2edd3b53dbb6581290a5cca532db38b4e9ceeacc9b0437a0e49bf97211,903b600ed648d4ddc48f0f628829c8992c88fab44b692413fb8b3d783854f9a2,2952afe39557606d08c311345788a5071413580917207c86ea7cb829cf2f2c6d,05f414320d0c4004cff10f798c3fda6c4fc335b5a2db940993b3d78147a25c18,48e2531c7e3ec99f807210d6c5330114b4f04d7345535ca5a6e6abf478bdb723,6fc49ff129b72b223b70f09d77d63766d377054bb496dbec0474c286c7ab028d,d6ad501c6aa89f92f73ceecba8775af8ebeca7f6e8df8379158347d530d0cfc2,fa0bebcdf2f3bffb300ef08673c02593b03cca4a5d246bf66c4c287db85da017,b71dace381c136607f8def293accfeeb4b0fb28cbaaca35a5919540a8742450c +5aeca385d8b781825b07bbec7c858b7170426c88088935850bc13dd6402368a5,a5135c7a27487e7da4f84413837a748e8fbd9377f776ca7af43ec228bfdc938a,8da4f71fb2700758f623d73c24ac91747da43f2302fce16c8d438a769c63495f,6b8f345fc0a25a76455541ddbf2791ff4b943c98b16db2b6eb6cea94a6b19afb,,,725b08e04d8ff8a709dc28c3db536e8b825bc0dcfd031e9372bc7588639cb2d0,9470cba03f5da589baaabe2240d86e00b46bc3674e924d491493156a594e6134,, +707bf0b938f307b5c222e670598b865d5e1f8a8003df82c7abbf7c9f8fa4d720,8f840f46c70cf84a3ddd198fa67479a2a1e0757ffc207d385440835f705b250f,,,eab90fb459bace62d3ce8fbd69c9f1039f0627d0e93e2f42bffd87889cb236a4,157c26578b226c66daf8edfa56f7560f1131f41d1685175e6d76cc95b4f89f10,,,1546f04ba645319d2c31704296360efc60f9d82f16c1d0bd40027876634dc58b,ea83d9a874dd939925071205a908a9f0eece0be2e97ae8a1928933694b075d1f +766caa663e1025b9accd7ededd24fbc8193180e028eedae2f41d6bb0b1d36468,22825ee826f8b76c27220e43c79c884a8518bc20f4978cc15f83f9c48346a314,,,8fe95c178da66d1dd249ea6a4dc614a6d46d79c83cbc4beafee518090263e48a,7b044cb756eb207226db302ba05e164781c2f5161dccd72607282cb9ad86a282,,,7016a3e8725992e22db61595b239eb592b928637c343b415011ae7f5fd9c17a5,84fbb348a914df8dd924cfd45fa1e9b87e3d0ae9e23328d9f8d7d345527959ad +78a23af8da46b1b37e8767921a2d3f528fdc8eca37cea8aea775fd2b283d3776,73d5f35d96f3ce1ef5802ead8edc10787700c593b5e0ddcc3bfb2720b9d36de3,8465ad20bd0f2b4a2d37106769af46288a109bc10b527c3b033c930c0e4b1025,1b7f03bd2c915bb736622aec85601bcabec89268c98945e19a0de4126ed62524,,,7b9a52df42f0d4b5d2c8ef989650b9d775ef643ef4ad83c4fcc36cf2f1b4ec0a,e480fc42d36ea448c99dd5137a9fe43541376d973676ba1e65f21bec9129d70b,, +78b4be1f9eeef9da65c393e4385f67edd142709b400ca7d900bd952e0c3cf727,089329e17a58a91e71ffe6ddd851e8a352e85a29fcc289b34a3bfdeaf958fe91,,,6008d703955b38da0166bd975ad3535af3b701b2efdf653fc5e7e6eb6afff0a3,,,,9ff728fc6aa4c725fe994268a52caca50c48fe4d10209ac03a18191395000b8c, +7a2a7c0a81d1bd595dff09b918f8ecb5b5e8493654a4f83496956ed8eb017674,85d583f57e2e42a6a200f646e707134a4a17b6c9ab5b07cb696a912614fe85bb,,,,,,,, +913da1f8df6f8fd47593840d533ba0458cc9873996bf310460abb495b34c232a,a7803f8e02b70718443a06db502c67925640e936b3fa46dd2ed6b8f7c80fa329,67d916ba2cc154464d87ff4e0cfe3bb816b22a961831c2daf62597a8b0681e87,a4b84520f8853e5482ee7689732ed7dd7da59945d26edeee0bf5f55d3507192f,,,9826e945d33eabb9b27800b1f301c447e94dd569e7ce3d2509da68564f97dda8,5b47badf077ac1ab7d1189768cd12822825a66ba2d912111f40a0aa1caf8e300,, +96a296d224f285c67bee93c30f8a309157f0daa35dc5b87e410b78630a09cfc7,7684ab3b1a43e20a97a7b5520e5b5347841a7d95984fd76b2478a2b710f1a2ce,,,,,,,, +99be5efb88ca2013bd8e4eb035fd42d5245468fe9afa70d8ba9c1c419a48c4e8,08ee83ae5c7af0c9b2341e595fe347537272d94f2fe9f10b9a8f913279fc6230,,,,,,,, +9b4fb24edd6d1d8830e272398263cdbf026b97392cc35387b991dc0248a628f9,80e81d40a50b53712a8dac5f468b0903c05219544a56af70aa152ebf17887701,,,6e94af5a32ac100c5230f1e119c538742b7051934b02f3850522cff26bd32d97,e9bd309fbf041342311be3d5bab0b9d16c9f80c6640eb47e311d3178c2adc75d,,,916b50a5cd53eff3adcf0e1ee63ac78bd48fae6cb4fd0c7afadd300c942cce98,1642cf6040fbecbdcee41c2a454f462e93607f399bf14b81cee2ce863d5234d2 +9def996cb1ea87e596b6cadccca3839a352e99d9ce07e635cdb239f38ca294f8,294850a665ab014a0e75eb4b52ee66dd8a8d2b5e453074e58afacb5e019ee90a,b1a29367b95e1996f7e393fb389e7ace812d4135f6ddcdcd77467fc000dfca8c,a340aabc95b4000e3043ba6139178c450046c985fbf09676c440bc6430ddaa5b,4c4cd400d0be335dd651370c5565c2b742a298016212a8605187b3c0751a811e,d90fa208bbb5f3f6e16c5a42b419188ec1951c1eb358f04741b7b48df9e55f79,4e5d6c9846a1e669081c6c04c76185317ed2beca0922323288b9803eff2031a3,5cbf55436a4bfff1cfbc459ec6e873baffb9367a040f69893bbf439acf2251d4,b3b32bff2f41cca229aec8f3aa9a3d48bd5d67fe9ded579fae784c3e8ae57b11,26f05df7444a0c091e93a5bd4be6e7713e6ae3e14ca70fb8be484b71061a9cb6 +a2c4aed1cf757cd9a509734a267ffc7b1166b55f4c8f9c3e3550c56e743328fc,a2c4aed1cf757cd9a509734a267ffc7b1166b55f4c8f9c3e3550c56e743328fc,,,,,,,, +a8e437abf9c0e74dc6d51eabf2d261a00e785c7e21efeac1f322b610273ba066,5a64cce4be767964e7dba23e78e30149326c539353b647e0d5d7cc361943b13b,,,6f73bdd6b748790b5f788935ca02aee3b9e560c4ba6caf47d716fbde1dd6e92c,b1ff705694188e672f58c6a05eeecc379dd1b60fd3cb9f19fcb02b1d9cab4bc5,,,908c422948b786f4a08776ca35fd511c461a9f3b459350b828e90420e2291303,4e008fa96be77198d0a7395fa11133c8622e49f02c3460e6034fd4e16354b06a +bf60e4349cace6bce0d552e8d783428db66d0d649bd9e430a3627e2ee14ac839,409f1bcb635319431f2aad17287cbd724992f29b64261bcf5c9d81d01eb533f6,,,,,,,, +c0ba8a33ac67f44abff5984dfbb6f56c46b880ac2b86e1f23e7fa9c402c53ae7,4767c4cab0d08133980a8e66c3f93a055c8ae62f89a92f8dcfa47607cee0bc57,4c21052f5ffccadb4f707aa1cba828ef384d7861af1690c59d638dfee9f368e7,dbcc8fe22896478161452d44688a6b138050a4d0964470c175a521dcecc5519a,,,b3defad0a0033524b08f855e3457d710c7b2879e50e96f3a629c7200160c9348,2433701dd769b87e9ebad2bb977594ec7faf5b2f69bb8f3e8a5ade22133aaa95,, +cbe2268747c9c8072c7f9926f2288f270637dc55bb9d14d3368361d5e47d25be,0e4e25736b614910c4984843e606b1e229def08bfd672ab61e2707cde8248c6d,,,c30567184201fac8e1cb9e776d921e17d28cdb7333223abd1c8f860a16393df1,,,,3cfa98e7bdfe05371e346188926de1e82d73248cccddc542e37079f4e9c6be3e, +ceb827ad3d3884fd4d50ae6099d6d50c09a21e72ebd309708e8b69d93df19e55,a6a0c8c94462f16f1b92502c3d5f9d1618f12ffa756227d5b19b01b9373cd940,,,,,,,, +d57e9d4f5842134f140032eaf38b5333638e8c4b145fcf86a23d48d3e9acc0f8,2a8162b0a7bdecb0ebffcd150c74accc9c7173b4eba030795dc2b72b16533b37,349a9a592d2c56e5378ae869d646043fc09ffb8fe5fd9debd83a11274da08892,9875f58028cc991cafab9fb1183b350bc1d8d5ce5723813cc2b8434ed1a2100f,,,cb6565a6d2d3a91ac875179629b9fbc03f6004701a02621427c5eed7b25f739d,678a0a7fd73366e35054604ee7c4caf43e272a31a8dc7ec33d47bcb02e5dec20,, +d94e7f1e9bb1f8a9b90996ba12c461b84956f0e7f230145cc594c2f80b067aa0,b4f4632803cff65c013a566748cd3386d58cd3a28f5b4721056cbe9d278a67a4,,,fad51eda7d418ee2785df9f3788ac9152576312177fc0fd83c65036750581620,749259382784be63f86cc927a5defa6aa8cecb98e38d68f6b7a7e958303c94ad,,,052ae12582be711d87a2060c877536eada89cede8803f027c39afc97afa7e60f,8b6da6c7d87b419c079336d85a210595573134671c729709485816a6cfc36782 +e545d395bb3fd971f91bf9a2b6722831df704efae6c1aa9da0989ed0970b77bb,760486143a1d512da5219d3e5febc7c5c9990d21ca7a501ed23f86c91ddee4cf,,,090892960a84c69967fe5a5d014d3ca19173e4cb72a908586fbce9d1e531a265,42a47f65d00ff2004faa98865ee8ed4f8a9a5ddc9f75042d728de335664bb546,,,f6f76d69f57b39669801a5a2feb2c35e6e8c1b348d56f7a79043162d1ace59ca,bd5b809a2ff00dffb0556779a11712b07565a223608afbd28d721cc999b446e9 +e9f86cefcfd61558fe75da7d4ea48a6c82d93191c6d49579aab49f99e543dcad,5db7371325a7bb83b030691b2d87cd9f199f43d91e302568391ac48181b7cea6,,,,,,,, +eec4121f2a07b61aba16414812aa9afc39ab0a136360a5ace2240dc19b0464eb,0b623c5296c13218a1eb24e79d00b04bf15788f6c2f7ec100a4a16f1473124a2,,,,,,,, +f566cc6fccc657365c0197accf3a7d6f80f85209ff666ff774f4dcbc524aa842,0a9933903339a8c9a3fe685330c582907f07adf6009990088b0b2342adb553ed,3ab8dc4ecbc0441c685436ac0d76f16393769c353be6092bd6ec4ce094106bd8,3bd189b4ef3d1baa5610f2b14cb4a2b377eb171511e6f36ef6a05a2c7c52e368,1594764c6296402aadd123675d81f3505d35f2a52c52881568eadb7b675b53f0,c64fbf71138e66de8ce0abdf3b6f51d151ca8e1037ab5b979e62b2faa15be81c,c54723b1343fbbe397abc953f2890e9c6c8963cac419f6d42913b31e6bef9057,c42e764b10c2e455a9ef0d4eb34b5d4c8814e8eaee190c91095fa5d283ad18c7,ea6b89b39d69bfd5522edc98a27e0cafa2ca0d5ad3ad77ea9715248398a4a83f,39b0408eec719921731f5420c490ae2eae3571efc854a468619d4d045ea41413