New proposal 161
This commit is contained in:
307
i2p2www/spec/proposals/161-ri-dest-padding.rst
Normal file
307
i2p2www/spec/proposals/161-ri-dest-padding.rst
Normal file
@ -0,0 +1,307 @@
|
||||
========================================
|
||||
RI and Destination Padding
|
||||
========================================
|
||||
.. meta::
|
||||
:author: zzz
|
||||
:created: 2022-09-28
|
||||
:thread: http://zzz.i2p/topics/3279
|
||||
:lastupdated: 2022-09-28
|
||||
:status: Open
|
||||
:target: 0.9.57
|
||||
|
||||
.. contents::
|
||||
|
||||
|
||||
|
||||
Overview
|
||||
========
|
||||
|
||||
|
||||
Summary
|
||||
-------
|
||||
|
||||
The ElGamal public key in Destinations has been unused since release 0.6 (2005).
|
||||
While our specifications do say that it is unused, they do NOT say that implementations can avoid
|
||||
generating an ElGamal key pair and simply fill the field with random data.
|
||||
|
||||
We propose changing the specifications to say that
|
||||
the field is ignored and that implementations MAY fill the field with random data.
|
||||
This change is backward-compatible. There is no known implementation that validates
|
||||
the ElGamal public key.
|
||||
|
||||
Additionally, this proposal offers guidance to implementers on how to generate the
|
||||
random data for Destination AND Router Identity padding so that it is compressible while
|
||||
still being secure, and without having Base 64 representations appear to be corrupt or insecure.
|
||||
This provides most of the benefits of removing the padding fields without any
|
||||
disruptive protocol changes.
|
||||
Compressible Destinations reduces streaming SYN and repliable datagram size;
|
||||
compressible Router Identities reduce Database Store Messages, SSU2 Session Confirmed messages,
|
||||
and reseed su3 files.
|
||||
|
||||
Finally, the proposal discusses possibilities for new Destination and Router Identity formats
|
||||
that would eliminate the padding altogether. There is also a brief discussion of post-quantum
|
||||
crypto and how that may affect future planning.
|
||||
|
||||
|
||||
|
||||
Goals
|
||||
-----
|
||||
|
||||
- Eliminate requirement to generate ElGamal keypair for Destinations
|
||||
- Recommend best practices so Destinations and Router Identities are highly compressible,
|
||||
yet do not display obvious patterns in Base 64 representations.
|
||||
- Encourage adoption of best practices by all implementations so
|
||||
the fields are not distinguishable
|
||||
- Reduce streaming SYN size
|
||||
- Reduce repliable datagram size
|
||||
- Reduce SSU2 RI block size
|
||||
- Reduce SSU2 Session Confirmed size and fragmentation frequency
|
||||
- Reduce Database Store Message (with RI) size
|
||||
- Reduce reseed file size
|
||||
- Maintain compatibility in all protocols and APIs
|
||||
- Update specifications
|
||||
- Discuss alternatives for new Destination and Router Identity formats
|
||||
|
||||
By eliminating the requirement to generate ElGamal keys, implementations may
|
||||
be able to completely remove ElGamal code, subject to backward-compatibility considerations
|
||||
in other protocols.
|
||||
|
||||
|
||||
|
||||
Design
|
||||
======
|
||||
|
||||
Strictly speaking, the 32-byte signing public key alone (in both Destinations and Router Identities)
|
||||
and the 32-byte encryption public key (in Router Identities only) is a random number
|
||||
that provides all the entropy necessary for the SHA-256 hashes of these structures
|
||||
to be cryptographically strong and randomly distributed in the network database DHT.
|
||||
|
||||
However, out of an abundance of caution, we recommend a minimum of 32 bytes of random data
|
||||
be used in the ElG public key field and padding. Additionally, if the fields were all zeros,
|
||||
Base 64 destinations would contain long runs of AAAA characters, which may cause alarm
|
||||
or confusion to users.
|
||||
|
||||
For Ed25519 signature type and X25519 encryption type:
|
||||
Destinations will contain 11 copies (352 bytes) of the random data.
|
||||
Router Identities will contain 10 copies (320 bytes) of the random data.
|
||||
|
||||
|
||||
|
||||
Estimated Savings
|
||||
---------------------
|
||||
|
||||
Destinations are included in every streaming SYN [Streaming]_
|
||||
and repliable datagram [Datagram]_.
|
||||
Router Infos (containing Router Identities) are included in Database Store Messages [I2NP]_
|
||||
and in the Session Confirmed messages in [NTCP2]_ and [SSU2]_.
|
||||
|
||||
NTCP2 does not compress the Router Info.
|
||||
RIs in Database Store Messages and SSU2 Session Confirmed messages are gzipped.
|
||||
Router Infos are zipped in reseed SU3 files.
|
||||
|
||||
Destinations in Database Store Messages are not compressed.
|
||||
Streaming SYN messages are gzipped at the I2CP layer.
|
||||
|
||||
For Ed25519 signature type and X25519 encryption type,
|
||||
estimated savings:
|
||||
|
||||
=============== =========== ============= ==================== ================== =========== =============
|
||||
Data Type Total Size Keys and Cert Uncompressed Padding Compressed Padding Size Savings
|
||||
=============== =========== ============= ==================== ================== =========== =============
|
||||
Destination 391 39 352 32 71 320 bytes (82%)
|
||||
Router Identity 391 71 320 32 103 288 bytes (74%)
|
||||
Router Info 1000 typ. 71 320 32 722 typ. 288 bytes (29%)
|
||||
=============== =========== ============= ==================== ================== =========== =============
|
||||
|
||||
Notes: Assumes 7-byte certificate is not compressible, zero additional gzip overhead.
|
||||
Neither is true, but effects will be small.
|
||||
Ignores other compressible parts of the Router Info.
|
||||
|
||||
|
||||
|
||||
Specification
|
||||
=============
|
||||
|
||||
Proposed changes to our current specifications are documented below.
|
||||
|
||||
|
||||
Common Structures
|
||||
------------------
|
||||
Change the common structures specification [COMMON]_
|
||||
to specify that the 256-byte Destination public key field is ignored and may
|
||||
contain random data.
|
||||
|
||||
Add a section to the common structures specification [COMMON]_
|
||||
recommending best practice for the Destination public key field and the
|
||||
padding fields in the Destination and Router Identity, as follows:
|
||||
|
||||
Generate 32 bytes of random data using a strong cryptographic pseudo-random number generator (PRNG)
|
||||
and repeat those 32 bytes as necessary to fill the public key field (for Destinations)
|
||||
and the padding field (for Destinations and Router Identities).
|
||||
|
||||
Private Key File
|
||||
--------------------
|
||||
The private key file (eepPriv.dat) format is not an official part of our specifications
|
||||
but it is documented in the Java I2P javadocs [PKF]_
|
||||
and other implementations do support it.
|
||||
This enables portability of private keys to different implementations.
|
||||
Add a note to that javadoc that the encryption public key may be random padding
|
||||
and the encryption private key may be all zeros or random data.
|
||||
|
||||
SAM
|
||||
------
|
||||
Note in [SAM]_ that the encryption private key is unused and may be ignored.
|
||||
Any random data may be returned by the client.
|
||||
The SAM Bridge may send random data on creation (with DEST GENERATE or SESSION CREATE DESTINATION=TRANSIENT)
|
||||
rather than all zeros, so the Base 64 representation does not have a string of AAAA characters
|
||||
and look broken.
|
||||
|
||||
|
||||
I2CP
|
||||
------
|
||||
No changes required to [I2CP]_. The private key for the encryption public key in the Destination
|
||||
is not sent to the router.
|
||||
|
||||
|
||||
Future Planning
|
||||
==================
|
||||
|
||||
|
||||
Protocol Changes
|
||||
------------------
|
||||
|
||||
At a cost of protocol changes and a lack of backward compatibility, we could
|
||||
change our protocols and specifications to eliminate the padding field in
|
||||
the Destination, Router Identity, or both.
|
||||
|
||||
This proposal bears some similarity to the "b33" encrypted leaseset format,
|
||||
containing only a key and a type field.
|
||||
|
||||
To maintain some compatibility, certain protocol layers could "expand" the padding field
|
||||
with all zeros to present to other protocol layers.
|
||||
|
||||
For Destinations, we could also remove the encryption type field in the key certificate,
|
||||
at a savings of two bytes.
|
||||
Alternatively, Destinations could get a new encryption type in the key certificate,
|
||||
indicating a zero public key (and padding).
|
||||
|
||||
If compatibility conversion between old and new formats is not included at some protocol layer,
|
||||
the following specifications, APIs, protocols, and applications would be affected:
|
||||
|
||||
- Common structures spec
|
||||
- I2NP
|
||||
- I2CP
|
||||
- NTCP2
|
||||
- SSU2
|
||||
- Ratchet
|
||||
- Streaming
|
||||
- SAM
|
||||
- Bittorrent
|
||||
- Reseeding
|
||||
- Private Key File
|
||||
- Java core and router API
|
||||
- i2pd API
|
||||
- Third-party SAM libraries
|
||||
- Bundled and third-party tools
|
||||
- Several Java plugins
|
||||
- User interfaces
|
||||
- P2P applications e.g. MuWire, bitcoin, monero
|
||||
- hosts.txt, addressbook, and subscriptions
|
||||
|
||||
If conversion is specified at some layer, the list would be reduced.
|
||||
|
||||
The costs and benefits of these changes are not clear.
|
||||
|
||||
Specific proposals TBD:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
PQ Keys
|
||||
------------------
|
||||
|
||||
Post-Quantum (PQ) encryption public keys, for any anticipated algorithm,
|
||||
are larger than 256 bytes. This would eliminate any padding and any savings from proposed
|
||||
changes above, for Router Identities.
|
||||
|
||||
In a "hybrid" PQ approach, like what SSL is doing, the PQ keys would be ephemeral only,
|
||||
and would not appear in the Router Identity.
|
||||
|
||||
PQ signing keys are not viable,
|
||||
and Destinations do not contain encryption public keys.
|
||||
Static keys for ratchet are in the Lease Set, not the Destination.
|
||||
so we may eliminate Destinations from the following discussion.
|
||||
|
||||
So PQ only affects Router Infos, and only for PQ static (not ephemeral) keys, not for PQ hybrid.
|
||||
This would be for a new encryption type and would affect NTCP2, SSU2, and
|
||||
encrypted Database Lookup Messages and replies.
|
||||
Estimated time frame for design, development, and rollout of that would be ????????
|
||||
But would be after hybrid or ratchet ????????????
|
||||
|
||||
For further discussion see [PQ]_.
|
||||
|
||||
|
||||
|
||||
|
||||
Issues
|
||||
======
|
||||
|
||||
It may be desirable to rekey the network at a slow rate, to provide cover for new routers.
|
||||
"Rekeying" could mean simply changing the padding, not really changing the keys.
|
||||
|
||||
It is not possible to rekey existing Destinations.
|
||||
|
||||
Should Router Identities with padding in the public key field be identified with a different
|
||||
encryption type in the key certificate? This would cause compatibility issues.
|
||||
|
||||
|
||||
|
||||
|
||||
Migration
|
||||
=========
|
||||
|
||||
No backward compatibility issues for replacing the ElGamal key with padding.
|
||||
|
||||
Rekeying, if implemented, would be similar to that done
|
||||
in three previous router identity transitions:
|
||||
From DSA-SHA1 to ECDSA signatures, then to
|
||||
EdDSA signatures, then to X25519 encryption.
|
||||
|
||||
Subject to backward compatibility issues, and after disabling SSU,
|
||||
implementations may remove ElGamal code completely.
|
||||
Approximately 14% of routers in the network are ElGamal encryption type, including many floodfills.
|
||||
|
||||
|
||||
References
|
||||
==========
|
||||
|
||||
.. [Common]
|
||||
{{ spec_url('common-structures') }}
|
||||
|
||||
.. [Datagram]
|
||||
{{ spec_url('datagrams') }}
|
||||
|
||||
.. [I2CP]
|
||||
{{ spec_url('i2cp') }}
|
||||
|
||||
.. [I2NP]
|
||||
{{ spec_url('i2np') }}
|
||||
|
||||
.. [NTCP2]
|
||||
{{ spec_url('ntcp2') }}
|
||||
|
||||
.. [PKF]
|
||||
http://{{ i2pconv('idk.i2p/javadoc-i2p') }}/net/i2p/data/PrivateKeyFile.html
|
||||
|
||||
.. [PQ]
|
||||
http://zzz.i2p/topics/3294
|
||||
|
||||
.. [SAM]
|
||||
{{ site_url('docs/api/samv3') }}
|
||||
|
||||
.. [SSU2]
|
||||
{{ spec_url('ssu2') }}
|
||||
|
||||
.. [Streaming]
|
||||
{{ spec_url('streaming') }}
|
Reference in New Issue
Block a user