LearnBitcoin

Bitcoin Dev Archive 2019

New BIP - v2 peer-to-peer message transport protocol

3 messages, 17 Jun 2019. Started by Elichai Turkel.

Elichai Turkel (2), Jonas Schnelli

Permalink Original thread on gnusha.org

Elichai Turkel permalink original

Hi everyone, About the nonce being 64bit. (rfc7539 changed it to 96bit, which djb later calls xchacha)

You suggest that we use the "message sequence number" as the nonce for Chacha20, Is this number randomly generate or is this a counter? And could it be reseted without rekeying?

If it is randomly generated then 64bit isn't secure enough. And we should either move to the chacha20 from RFC7539 which has 96bit nonce and 32bit counter or increment it manually every time.

If it's simply a counter then 64bit nonce should be fine :)

Thanks, Elichai.

Jonas Schnelli in reply to Elichai Turkel permalink original

Hi Elichai

Quoted text (4 lines)
> About the nonce being 64bit. (rfc7539 changed it to 96bit, which djb later calls xchacha)
>
> You suggest that we use the "message sequence number" as the nonce for Chacha20, Is this number randomly generate or is this a counter?
> And could it be reseted without rekeying?

The in BIP324 (v2 message transport protocol) proposed AEAD, ChaCha20Poly1305@Bitcoin [1], uses a „message sequence number“. There is no such thing as random nonce described in the BIP (hence the term „sequence number“). The message sequence number starts with 0 and the max traffic before a rekey must occur is 1GB. A nonce/key reuse is conceptually impossible (of course implementations could screw up at this point).

Using XChaCha20 with the possibility of a random nonce could be done, but I don’t see a reason to use it in our case since the usage of a sequence number as nonce seems perfectly save.

[1] https://gist.github.com/jonasschnelli/c530ea8421b8d0e80c51486325587c52#chacha20-poly1305bitcoin-cipher-suite
Elichai Turkel in reply to Jonas Schnelli permalink original

Thanks, I just couldn't find where is the message sequence number comes from. So if it's max 1GB and it's an incremental counter that cannot be reseted without a rekeying than it's perfectly fine :).

Thanks for the answer!

On Mon, Jun 17, 2019 at 12:20 PM Jonas Schnelli <dev@jonasschnelli•ch> wrote:

Quoted text (23 lines)
> Hi Elichai
>
> > About the nonce being 64bit. (rfc7539 changed it to 96bit, which djb
> later calls xchacha)
> >
> > You suggest that we use the "message sequence number" as the nonce for
> Chacha20, Is this number randomly generate or is this a counter?
> > And could it be reseted without rekeying?
>
> The in BIP324 (v2 message transport protocol) proposed AEAD,
> ChaCha20Poly1305@Bitcoin [1], uses a „message sequence number“. There is
> no such thing as random nonce described in the BIP (hence the term
> „sequence number“). The message sequence number starts with 0 and the max
> traffic before a rekey must occur is 1GB. A nonce/key reuse is conceptually
> impossible (of course implementations could screw up at this point).
>
> Using XChaCha20 with the possibility of a random nonce could be done, but
> I don’t see a reason to use it in our case since the usage of a sequence
> number as nonce seems perfectly save.
>
> [1]
> https://gist.github.com/jonasschnelli/c530ea8421b8d0e80c51486325587c52#chacha20-poly1305bitcoin-cipher-suite
>