[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[lsd0003] branch master updated: generate files do not belong into git
From: |
gnunet |
Subject: |
[lsd0003] branch master updated: generate files do not belong into git |
Date: |
Sat, 12 Jun 2021 16:12:05 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository lsd0003.
The following commit(s) were added to refs/heads/master by this push:
new aab0ce1 generate files do not belong into git
aab0ce1 is described below
commit aab0ce19452466c8290c700f1f6fddefa1c12ec2
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Sat Jun 12 16:09:21 2021 +0200
generate files do not belong into git
---
draft-summermatter-set-union.txt | 2856 --------------------------------------
1 file changed, 2856 deletions(-)
diff --git a/draft-summermatter-set-union.txt b/draft-summermatter-set-union.txt
deleted file mode 100644
index eba95b8..0000000
--- a/draft-summermatter-set-union.txt
+++ /dev/null
@@ -1,2856 +0,0 @@
-
-
-
-
-Independent Stream E. Summermatter
-Internet-Draft Seccom GmbH
-Intended status: Informational C. Grothoff
-Expires: 16 September 2021 Berner Fachhochschule
- 15 March 2021
-
-
- Byzantine Fault Tolerant Set Reconciliation
- draft-schanzen-gns-01
-
-Abstract
-
- This document contains a protocol specification for Byzantine fault-
- tolerant Set Reconciliation.
-
-Status of This Memo
-
- This Internet-Draft is submitted in full conformance with the
- provisions of BCP 78 and BCP 79.
-
- Internet-Drafts are working documents of the Internet Engineering
- Task Force (IETF). Note that other groups may also distribute
- working documents as Internet-Drafts. The list of current Internet-
- Drafts is at https://datatracker.ietf.org/drafts/current/.
-
- Internet-Drafts are draft documents valid for a maximum of six months
- and may be updated, replaced, or obsoleted by other documents at any
- time. It is inappropriate to use Internet-Drafts as reference
- material or to cite them other than as "work in progress."
-
- This Internet-Draft will expire on 16 September 2021.
-
-Copyright Notice
-
- Copyright (c) 2021 IETF Trust and the persons identified as the
- document authors. All rights reserved.
-
- This document is subject to BCP 78 and the IETF Trust's Legal
- Provisions Relating to IETF Documents (https://trustee.ietf.org/
- license-info) in effect on the date of publication of this document.
- Please review these documents carefully, as they describe your rights
- and restrictions with respect to this document. Code Components
- extracted from this document must include Simplified BSD License text
- as described in Section 4.e of the Trust Legal Provisions and are
- provided without warranty as described in the Simplified BSD License.
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 1]
-
-Internet-Draft Set Union March 2021
-
-
-Table of Contents
-
- 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3
- 2. Background . . . . . . . . . . . . . . . . . . . . . . . . . 5
- 2.1. Bloom Filters . . . . . . . . . . . . . . . . . . . . . . 5
- 2.2. Counting Bloom Filter . . . . . . . . . . . . . . . . . . 7
- 3. Invertible Bloom Filter . . . . . . . . . . . . . . . . . . . 8
- 3.1. Structure . . . . . . . . . . . . . . . . . . . . . . . . 8
- 3.2. Operations . . . . . . . . . . . . . . . . . . . . . . . 9
- 3.2.1. Insert Element . . . . . . . . . . . . . . . . . . . 9
- 3.2.2. Remove Element . . . . . . . . . . . . . . . . . . . 10
- 3.2.3. Decode IBF . . . . . . . . . . . . . . . . . . . . . 11
- 3.2.4. Set Difference . . . . . . . . . . . . . . . . . . . 13
- 3.3. Wire format . . . . . . . . . . . . . . . . . . . . . . . 15
- 3.3.1. ID Calculation . . . . . . . . . . . . . . . . . . . 15
- 3.3.2. Mapping Function . . . . . . . . . . . . . . . . . . 16
- 3.3.3. HASH calculation . . . . . . . . . . . . . . . . . . 17
- 4. Strata Estimator . . . . . . . . . . . . . . . . . . . . . . 18
- 4.1. Description . . . . . . . . . . . . . . . . . . . . . . . 18
- 5. Mode of operation . . . . . . . . . . . . . . . . . . . . . . 18
- 5.1. Full Synchronisation Mode . . . . . . . . . . . . . . . . 19
- 5.2. Delta Synchronisation Mode . . . . . . . . . . . . . . . 20
- 5.3. Combined Mode . . . . . . . . . . . . . . . . . . . . . . 23
- 6. Messages . . . . . . . . . . . . . . . . . . . . . . . . . . 23
- 6.1. Operation Request . . . . . . . . . . . . . . . . . . . . 23
- 6.1.1. Description . . . . . . . . . . . . . . . . . . . . . 24
- 6.1.2. Structure . . . . . . . . . . . . . . . . . . . . . . 24
- 6.2. IBF . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
- 6.2.1. Description . . . . . . . . . . . . . . . . . . . . . 24
- 6.2.2. Structure . . . . . . . . . . . . . . . . . . . . . . 25
- 6.3. IBF . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
- 6.3.1. Description . . . . . . . . . . . . . . . . . . . . . 26
- 6.4. Elements . . . . . . . . . . . . . . . . . . . . . . . . 26
- 6.4.1. Description . . . . . . . . . . . . . . . . . . . . . 27
- 6.4.2. Structure . . . . . . . . . . . . . . . . . . . . . . 27
- 6.5. Offer . . . . . . . . . . . . . . . . . . . . . . . . . . 28
- 6.5.1. Description . . . . . . . . . . . . . . . . . . . . . 28
- 6.5.2. Structure . . . . . . . . . . . . . . . . . . . . . . 28
- 6.6. Inquiry . . . . . . . . . . . . . . . . . . . . . . . . . 28
- 6.6.1. Description . . . . . . . . . . . . . . . . . . . . . 28
- 6.6.2. Structure . . . . . . . . . . . . . . . . . . . . . . 29
- 6.7. Demand . . . . . . . . . . . . . . . . . . . . . . . . . 29
- 6.7.1. Description . . . . . . . . . . . . . . . . . . . . . 29
- 6.7.2. Structure . . . . . . . . . . . . . . . . . . . . . . 29
- 6.8. Done . . . . . . . . . . . . . . . . . . . . . . . . . . 30
- 6.8.1. Description . . . . . . . . . . . . . . . . . . . . . 30
- 6.8.2. Structure . . . . . . . . . . . . . . . . . . . . . . 30
- 6.9. Full Done . . . . . . . . . . . . . . . . . . . . . . . . 30
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 2]
-
-Internet-Draft Set Union March 2021
-
-
- 6.9.1. Description . . . . . . . . . . . . . . . . . . . . . 31
- 6.9.2. Structure . . . . . . . . . . . . . . . . . . . . . . 31
- 6.10. Request Full . . . . . . . . . . . . . . . . . . . . . . 31
- 6.10.1. Description . . . . . . . . . . . . . . . . . . . . 31
- 6.10.2. Structure . . . . . . . . . . . . . . . . . . . . . 32
- 6.11. Strata Estimator . . . . . . . . . . . . . . . . . . . . 32
- 6.11.1. Description . . . . . . . . . . . . . . . . . . . . 32
- 6.11.2. Structure . . . . . . . . . . . . . . . . . . . . . 32
- 6.12. Strata Estimator Compressed . . . . . . . . . . . . . . . 33
- 6.12.1. Description . . . . . . . . . . . . . . . . . . . . 33
- 6.13. Full Element . . . . . . . . . . . . . . . . . . . . . . 33
- 6.13.1. Description . . . . . . . . . . . . . . . . . . . . 33
- 6.13.2. Structure . . . . . . . . . . . . . . . . . . . . . 33
- 7. Performance Considerations . . . . . . . . . . . . . . . . . 34
- 7.1. Formulas . . . . . . . . . . . . . . . . . . . . . . . . 34
- 7.1.1. Operation Mode . . . . . . . . . . . . . . . . . . . 34
- 7.1.2. Full Synchronisation: Decision witch peer sends
- elements first . . . . . . . . . . . . . . . . . . . 35
- 7.1.3. IBF Parameters . . . . . . . . . . . . . . . . . . . 36
- 8. Security Considerations . . . . . . . . . . . . . . . . . . . 36
- 8.1. Generic functions . . . . . . . . . . . . . . . . . . . . 37
- 8.1.1. Duplicated or Missing Message detection . . . . . . . 37
- 8.1.2. Store Remote Peers Element Number . . . . . . . . . . 38
- 8.2. States . . . . . . . . . . . . . . . . . . . . . . . . . 38
- 8.2.1. Expecting IBF . . . . . . . . . . . . . . . . . . . . 38
- 8.2.2. Full Sending . . . . . . . . . . . . . . . . . . . . 42
- 8.2.3. Expecting IBF Last . . . . . . . . . . . . . . . . . 43
- 8.2.4. Active Decoding . . . . . . . . . . . . . . . . . . . 43
- 8.2.5. Finish Closing . . . . . . . . . . . . . . . . . . . 44
- 8.2.6. Finished . . . . . . . . . . . . . . . . . . . . . . 44
- 8.2.7. Expect SE . . . . . . . . . . . . . . . . . . . . . . 44
- 8.2.8. Full Receiving . . . . . . . . . . . . . . . . . . . 45
- 8.2.9. Passive Decoding . . . . . . . . . . . . . . . . . . 45
- 8.2.10. Finish Waiting . . . . . . . . . . . . . . . . . . . 46
- 9. GANA Considerations . . . . . . . . . . . . . . . . . . . . . 46
- 10. Contributors . . . . . . . . . . . . . . . . . . . . . . . . 47
- 11. Normative References . . . . . . . . . . . . . . . . . . . . 47
- Appendix A. Test Vectors . . . . . . . . . . . . . . . . . . . . 50
- A.1. Map Function . . . . . . . . . . . . . . . . . . . . . . 50
- A.2. ID Calculation Function . . . . . . . . . . . . . . . . . 50
- Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 50
-
-1. Introduction
-
- This document describes a Byzantine fault-tolerant set reconciliation
- protocol used to efficient and securely synchronize two sets of
- elements between two peers.
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 3]
-
-Internet-Draft Set Union March 2021
-
-
- This Byzantine fault-tolerant set reconciliation protocol can be used
- in a variety of applications. Our primary envisioned application
- domain is the distribution of revocation messages in the GNU Name
- System (GNS) [GNUNET]. In GNS, key revocation messages are usually
- flooded across the peer-to-peer overlay network to all connected
- peers whenever a key is revoked. However, as peers may be offline or
- the network might have been partitioned, there is a need to reconcile
- revocation lists whenever network partitions are healed or peers go
- online. The GNU Name System uses the protocol described in this
- specification to efficiently distribute revocation messages whenever
- network partitions are healed. Another application domain for the
- protocol described in this specification are Byzantine fault-tolerant
- bulletin boards, like those required in some secure multiparty
- computations. A well-known example for secure multiparty
- computations are various E-voting protocols
- [CryptographicallySecureVoting] which use a bulletin board to share
- the votes and intermediate computational results. We note that for
- such systems, the set reconciliation protocol is merely a component
- of a multiparty consensus protocol, such as the one described in
- (FIXME-CITE: DOLD MS Thesis! Which paper is his MS thesis on
- fdold.eu).
-
- The protocol described in this report is generic and suitable for a
- wide range of applicaitons. As a result, the internal structure of
- the elements in the sets must be defined and verified by the
- application using the protocol. This document thus does not cover
- the element structure, except for imposing a limit on the maximum
- size of an element.
-
- The protocol faces an inherent trade-off between minimizing the
- number of network round-trips and the number of bytes sent over the
- network. Thus, for the protocol to choose the right parameters for a
- given situation, applications using the protocol must provide a
- parameter that specifies the cost-ratio of round-trips vs. bandwidth
- usage. Given this trade-off factor, the protocol will then choose
- parameters that minimize the total execution cost. In particular,
- there is one major choice to be made, which is between sending the
- full set of elements, or just sending the elements that differ. In
- the latter case, our design is basically a concrete implementation of
- a proposal by Eppstein.[Eppstein]
-
- We say that our set reconciliation protocol is Byzantine fault-
- tolerant because it provides cryptographic and probabilistic methods
- to discover if the other peer is dishonest or misbehaving.
-
- The objective here is to limit resources wasted on malicious actors.
- Malicious actors could send malformed messages, including malformed
- set elements, claim to have much larger numbers of valid set elements
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 4]
-
-Internet-Draft Set Union March 2021
-
-
- than the actually hold, or request the retransmission of elements
- that they have already received in previous interactions. Bounding
- resources consumed by malicous actors is important to ensure that
- higher-level protocols can use set reconciliation and still meet
- their resource targets. This can be particularly critical in multi-
- round synchronous consensus protocols where peers that cannot answer
- in a timely fashion would have to be treated as failed or malicious.
-
- To defend against some of these attacks, applications need to
- remember the number of elements previously shared with a peer, and
- offer a means to check that elements are well-formed. Applications
- may also be able to provide an upper bound on the total number of
- valid elements that may exist. For example, in E-voting, the number
- of eligible voters could be used to provide such an upper bound.
-
- This document defines the normative wire format of resource records,
- resolution processes, cryptographic routines and security
- considerations for use by implementors. SETU requires a
- bidirectional secure communication channel between the two parties.
- Specification of the communication channel is out of scope of this
- document.
-
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
- "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this
- document are to be interpreted as described in[RFC2119].
-
-2. Background
-
-2.1. Bloom Filters
-
- A Bloom filter (BF) is a space-efficient datastructure to test if am
- element is part of a set of elements. Elements are identified by an
- element ID. Since a BF is a probabilistic datastructure, it is
- possible to have false-positives: when asked if an element is in the
- set, the answer from a BF is either "no" or "maybe".
-
- A BF consists of L buckets. Every bucket is a binary value that can
- be either 0 or 1. All buckets are initialized to 0. A mapping
- function M is used to map each the ID of each element from the set to
- a subset of k buckets. M is non-injective and can thus map the same
- element multiple times to the same bucket. The type of the mapping
- function can thus be described by the following mathematical
- notation:
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 5]
-
-Internet-Draft Set Union March 2021
-
-
- ------------------------------------
- # M: E->B^k
- ------------------------------------
- # L = Number of buckets
- # B = 0,1,2,3,4,...L-1 (the buckets)
- # k = Number of buckets per element
- # E = Set of elements
- ------------------------------------
- Example: L=256, k=3
- M('element-data') = {4,6,255}
-
-
- Figure 1
-
- A typical mapping function is constructed by hashing the element, for
- example using the well-known Section 2 of HKDF construction
- [RFC5869].
-
- To add an element to the BF, the corresponding buckets under the map
- M are set to 1. To check if an element may be in the set, one tests
- if all buckets under the map M are set to 1.
-
- Further in this document a bitstream outputted by the mapping
- function is represented by a set of numeric values for example (0101)
- = (2,4). In the BF the buckets are set to 1 if the corresponding bit
- in the bitstream is 1. If there is a collision and a bucket is
- already set to 1, the bucket stays 1.
-
- In the following example the element M(element) = (1,3) has been
- added:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- | 0 | 1 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
-
- Figure 2
-
- Is easy to see that the M(element) = (0,3) could be in the BF bellow
- and M(element) = (0,2) can't be in the BF bellow:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- | 1 | 0 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
-
- Figure 3
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 6]
-
-Internet-Draft Set Union March 2021
-
-
- The parameters L and k depend on the set size and must be chosen
- carefully to ensure that the BF does not return too many false-
- positives.
-
- It is not possible to remove an element from the BF because buckets
- can only be set to 1 or 0. Hence it is impossible to differentiate
- between buckets containing one or more elements. To remove elements
- from the BF a Counting Bloom Filter is required.
-
-2.2. Counting Bloom Filter
-
- A Counting Bloom Filter (CBF) is an extension of the Bloom Filters.
- In the CBF, buckets are unsigned numbers instead of binary values.
- This allows the removal of an elements from the CBF.
-
- Adding an element to the CBF is similar to the adding operation of
- the BF. However, instead of setting the bucket on hit to 1 the
- numeric value stored in the bucket is increased by 1. For example if
- two colliding elements M(element1) = (1,3) and M(element2) = (0,3)
- are added to the CBF, bucket 0 and 1 are set to 1 and bucket 3 (the
- colliding bucket) is set to 2:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- | 1 | 1 | 0 | 2 |
- +-------------+-------------+-------------+-------------+
-
- Figure 4
-
- The counter stored in the bucket is also called the order of the
- bucket.
-
- To remove an element form the CBF the counters of all buckets the
- element is mapped to are decreased by 1.
-
- Removing M(element2) = (1,3) from the CBF above:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- | 1 | 0 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
-
- Figure 5
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 7]
-
-Internet-Draft Set Union March 2021
-
-
- In practice, the number of bits available for the counters is usually
- finite. For example, given a 4-bit counter, a CBF bucket would
- overflow once 16 elements are mapped to the same bucket. To
- efficiently handle this case, the maximum value (15 in our example)
- is considered to represent "infinity". Once the order of a bucket
- reaches "infinity", it is no longer incremented or decremented.
-
- The parameters L and k and the number of bits allocated to the
- counters should depend on the set size. An IBF will degenerate when
- subjected to insert and remove iterations of different elements, and
- eventually all buckets will reach "infinity". The speed of the
- degradation will depend on the choice of L and k in relation to the
- number of elements stored in the IBF.
-
-3. Invertible Bloom Filter
-
- An Invertible Bloom Filter (IBF) is a further extension of the
- Counting Bloom Filter. An IBF extends the Counting Bloom Filter with
- two more operations: decode and set difference. This two extra
- operations are useful to efficiently extract small differences
- between large sets.
-
-3.1. Structure
-
- An IBF consists of a mapping function M and L buckets that each store
- a signed counter and an XHASH. An XHASH is the XOR of various hash
- values. As before, the values used for k, L and the number of bits
- used for the signed counter and the XHASH depend on the set size and
- various other trade-offs, including the CPU architecture.
-
- If the IBF size is to small or the mapping function does not spread
- out the elements uniformly, the signed counter can overflow or
- underflow. As with the CBF, the "maximum" value is thus used to
- represent "infinite". As there is no need to distinguish between
- overflow and underflow, the most canonical representation of
- "infinite" would be the minimum value of the counter in the canonical
- 2-complement interpretation. For example, given a 4-bit counter a
- value of -8 would be used to represent "infinity".
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+-------
- count | COUNTER | COUNTER | COUNTER | COUNTER | C...
- +-------------+-------------+-------------+-------------+------
- idSum | IDSUM | IDSUM | IDSUM | IDSUM | I...
- +-------------+-------------+-------------+-------------+------
- hashSum | HASHSUM | HASHSUM | HASHSUM | HASHSUM | H..
- +-------------+-------------+-------------+-------------+-------
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 8]
-
-Internet-Draft Set Union March 2021
-
-
- Figure 6
-
-3.2. Operations
-
- When an IBF is created, all counters and IDSUM and HASHSUM values of
- all buckets are initialized to zero.
-
-3.2.1. Insert Element
-
- To add an element to a IBF, the element is mapped to a subset of k
- buckets using the mapping function M as described in the Bloom
- Filters section introducing BFs. For the buckets selected by the
- mapping function, the counter is increased by one and the IDSUM field
- is set to the XOR of the element ID and the previously stored IDSUM.
- Furthermore, the HASHSUM is set to the XOR of the hash of the element
- ID and the previously stored HASHSUM.
-
- In the following example, the insert operation is illustrated using
- an element with the ID 0x0102 and a hash of 0x4242, and a second
- element with the ID 0x0304 and a hash of 0x0101.
-
- Empty IBF:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 0 | 0 | 0 | 0 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0000 | 0x0000 | 0x0000 | 0x0000 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0000 | 0x0000 | 0x0000 | 0x0000 |
- +-------------+-------------+-------------+-------------+
-
- Figure 7
-
- Insert first element: [0101] with ID 0x0102 and hash 0x4242:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 0 | 1 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0000 | 0x0102 | 0x0000 | 0x0102 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0000 | 0x4242 | 0x0000 | 0x4242 |
- +-------------+-------------+-------------+-------------+
-
- Figure 8
-
- Insert second element: [1100] with ID 0x0304 and hash 0101:
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 9]
-
-Internet-Draft Set Union March 2021
-
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 1 | 2 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0304 | 0x0206 | 0x0000 | 0x0102 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0101 | 0x4343 | 0x0000 | 0x4242 |
- +-------------+-------------+-------------+-------------+
-
- Figure 9
-
-3.2.2. Remove Element
-
- To remove an element from the IBF the element is again mapped to a
- subset of the buckets using M. Then all the counters of the buckets
- selected by M are reduced by one, the IDSUM is replaced by the XOR of
- the old IDSUM and the ID of the element being removed, and the
- HASHSUM is similarly replaced with the XOR of the old HASHSUM and the
- hash of the ID.
-
- In the following example the remove operation for the element [1100]
- with the hash 0x0101 is demonstrated.
-
- IBF with encoded elements:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 1 | 2 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0304 | 0x0206 | 0x0000 | 0x0102 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0101 | 0x4343 | 0x0000 | 0x4242 |
- +-------------+-------------+-------------+-------------+
-
- Figure 10
-
- Remove element [1100] with ID 0x0304 and hash 0x0101 from the IBF:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 0 | 1 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0000 | 0x0102 | 0x0000 | 0x0102 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0000 | 0x4242 | 0x0000 | 0x4242 |
- +-------------+-------------+-------------+-------------+
-
- Figure 11
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 10]
-
-Internet-Draft Set Union March 2021
-
-
- Note that it is possible to "remove" elements from an IBF that were
- never present in the IBF in the first place. A negative counter
- value is thus indicative of elements that were removed without having
- been added. Note that an IBF bucket counter of zero no longer
- warrants that an element mapped to that bucket is not present in the
- set: a bucket with a counter of zero can be the result of one element
- being added and a different element (mapped to the same bucket) being
- removed. To check that an element is not present requires a counter
- of zero and an IDSUM and HASHSUM of zero --- and some assurance that
- there was no collision due to the limited number of bits in IDSUM and
- HASHSUM. Thus, IBFs are not suitable to replace BFs or IBFs.
-
- Buckets in an IBF with a counter of 1 or -1 are crucial for decoding
- an IBF, as they might represent only a single element, with the IDSUM
- being the ID of that element. Following Eppstein (CITE), we will
- call buckets that only represent a single element pure buckets. Note
- that due to the possibility of multiple insertion and removal
- operations affecting the same bucket, not all buckets with a counter
- of 1 or -1 are actually pure buckets. Sometimes a counter can be 1
- or -1 because N elements mapped to that bucket were added while N-1
- or N+1 different elements also mapped to that bucket were removed.
-
-3.2.3. Decode IBF
-
- Decoding an IBF yields the HASH of an element from the IBF, or
- failure.
-
- A decode operation requires a pure bucket, that is a bucket to which
- M only mapped a single element, to succeed. Thus, if there is no
- bucket with a counter of 1 or -1, decoding fails. However, as a
- counter of 1 or -1 is not a guarantee that the bucket is pure, there
- is also a chance that the decoder returns an IDSUM value that is
- actually the XOR of several IDSUMs. This is primarily detected by
- checking that the HASHSUM is the hash of the IDSUM. Only if the
- HASHSUM also matches, the bucket could be pure. Additionally, one
- should check that the IDSUM value actually would be mapped by M to
- the respective bucket. If not, there was a hash collision.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 11]
-
-Internet-Draft Set Union March 2021
-
-
- The very rare case that after all these checks a bucket is still
- falsely identified as pure must be detected (say by determining that
- extracted element IDs do not match any actual elements), and
- addressed at a higher level in the protocol. As these failures are
- probabilistic and depend on element IDs and the IBF construction,
- they can typically be avoided by retrying with different parameters,
- such as a different way to assign element IDs to elements, using a
- larger value for L, or a different mapping function M. A more common
- scenario (especially if L was too small) is that IBF decoding fails
- because there is no pure bucket. In this case, the higher-level
- protocol also should retry using different parameters.
-
- Suppose the IBF contains a pure bucket. In this case, the IDSUM in
- the bucket identifies a single element. Furthermore, it is then
- possible to remove that element from the IBF (by inserting it if the
- counter was negative, and by removing it if the counter was
- positive). This is likely to cause other buckets to become pure,
- allowing further elements to be decoded. Eventually, decoding should
- succeed with all counters and IDSUM and HASHSUM values reaching zero.
- However, it is also possible that an IBF only partly decodes and then
- decoding fails after yielding some elements.
-
- In the following example the successful decoding of an IBF containing
- the two elements previously added in our running example.
-
- IBF with the two encoded elements:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 1 | 2 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0304 | 0x0206 | 0x0000 | 0x0102 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0101 | 0x4343 | 0x0000 | 0x4242 |
- +-------------+-------------+-------------+-------------+
-
- Figure 12
-
- In the IBF are two pure buckets to decode (bit-1 and bit-4) we choose
- to start with decoding bucket 1, we decode the element with the hash
- 1010 and we see that there is a new pure bucket created (bit-2)
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 12]
-
-Internet-Draft Set Union March 2021
-
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 0 | 1 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0000 | 0x0102 | 0x0000 | 0x0102 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0000 | 0x4242 | 0x0000 | 0x4242 |
- +-------------+-------------+-------------+-------------+
-
- Figure 13
-
- In the IBF only pure buckets are left, we choose to continue decoding
- bucket 2 and decode element with the hash 0x4242. Now the IBF is
- empty (all buckets have count 0) that means the IBF has successfully
- decoded.
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 0 | 0 | 0 | 0 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0000 | 0x0000 | 0x0000 | 0x0000 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0000 | 0x0000 | 0x0000 | 0x0000 |
- +-------------+-------------+-------------+-------------+
-
- Figure 14
-
-3.2.4. Set Difference
-
- Given addition and removal as defined above, it is possible to define
- an operation on IBFs that computes an IBF representing the set
- difference. Suppose IBF1 represents set A, and IBF2 represents set
- B. Then this set difference operation will compute IBF3 which
- represents the set A - B --- without needing elements from set A or
- B. To calculate the IBF representing this set difference, both IBFs
- must have the same length L, the same number of buckets per element k
- and use the same map M. Given this, one can compute the IBF
- representing the set difference by taking the XOR of the IDSUM and
- HASHSUM values of the respective buckets and subtracting the
- respective counters. Care should be taken to handle overflows and
- underflows by setting the counter to "infinity" as necessary. The
- result is a new IBF with the same number of buckets representing the
- set difference.
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 13]
-
-Internet-Draft Set Union March 2021
-
-
- This new IBF can be decoded as described in section 3.2.3. The new
- IBF can have two types of pure buckets with counter set to 1 or -1.
- If the counter is set to 1 the element is missing in the secondary
- set, and if the counter is set to -1 the element is missing in the
- primary set.
-
- To demonstrate the set difference operation we compare IBF-A with
- IBF-B and generate as described IBF-AB
-
- IBF-A containing elements with hashes 0x0101 and 0x4242:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 1 | 2 | 0 | 1 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0304 | 0x0206 | 0x0000 | 0x0102 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0101 | 0x4343 | 0x0000 | 0x4242 |
- +-------------+-------------+-------------+-------------+
-
- Figure 15
-
- IBF-B containing elements with hashes 0x4242 and 0x5050
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 0 | 1 | 1 | 1 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0000 | 0x0102 | 0x1345 | 0x0102 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0000 | 0x4242 | 0x5050 | 0x4242 |
- +-------------+-------------+-------------+-------------+
-
- Figure 16
-
- IBF-AB XOR value and subtract count:
-
- bucket-0 bucket-1 bucket-2 bucket-3
- +-------------+-------------+-------------+-------------+
- count | 1 | 1 | -1 | 0 |
- +-------------+-------------+-------------+-------------+
- idSum | 0x0304 | 0x0304 | 0x1345 | 0x0000 |
- +-------------+-------------+-------------+-------------+
- hashSum | 0x0101 | 0x0101 | 0x5050 | 0x0000 |
- +-------------+-------------+-------------+-------------+
-
- Figure 17
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 14]
-
-Internet-Draft Set Union March 2021
-
-
- After calculating and decoding the IBF-AB its clear that in IBF-A the
- element with the hash 0x5050 is missing (-1 in bit-3) while in IBF-B
- the element with the hash 0101 is missing (1 in bit-1 and bit-2).
- The element with hash 0x4242 is present in IBF-A and IBF-B and is
- removed by the set difference operation (bit-4).
-
-3.3. Wire format
-
- To facilitate a reasonably CPU-efficient implementation, this
- specification requires the IBF counter to always use 8 bits. Fewer
- bits would result in a paritcularly inefficient implementation, while
- more bits are rarely useful as sets with so many elements should
- likely be represented using a larger number of buckets. This means
- the counter of this design can reach a minimum of -127 and a maximum
- of 127 before the counter reaches "infinity" (-128).
-
- For the "IDSUM", we always use a 64-bit representation. The IDSUM
- value must have sufficient entropy for the mapping function M to
- yield reasonably random buckets even for very large values of L.
- With a 32 bit value the chance that multiple elements may be mapped
- to the same ID would be quite high, even for moderately large sets.
- Using more than 64 bits would at best make sense for very large sets,
- but then it is likely always better to simply afford additional round
- trips to handle the occasional collision. 64 bits are also a
- reasonable size for many CPU architectures.
-
- For the "HASHSUM", we always use a 32-bit representation. Here, it
- is mostly important to avoid collisions, where different elements are
- mapped to the same hash. However, we note that by design only a few
- elements (certainly less than 127) should ever be mapped to the same
- bucket, so a small number of bits should suffice. Furthermore, our
- protocol is designed to handle occasional collisions, so while with
- 32-bits there remains a chance of accidental collisions, at 32 bit
- the chance is generally believed to be sufficiently small enough for
- the protocol to handle those cases efficiently for a wide range of
- use-cases. Smaller hash values would safe bandwidth, but also
- drastically increase the chance of collisions. 32 bits are also again
- a reasonable size for many CPU architectures.
-
-3.3.1. ID Calculation
-
- The ID is generated as 64-bit output from a Section 2 of HKDF
- construction [RFC5869] with HMAC-SHA512 as XTR and HMAC-SHA256 as PRF
- and salt is set to the unsigned 64-bit equivalent of 0. The output
- is then truncated to 64-bit. Its important that the elements can be
- redistributed over the buckets in case the IBF does not decode,
- that's why the ID is salted with a random salt given in the SALT
- field of this message. Salting is done by calculation the a random
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 15]
-
-Internet-Draft Set Union March 2021
-
-
- salt modulo 64 (using only the lowest 6-bits of the salt) and do a
- bitwise right rotation of output of KDF by the 6-bit salts numeric
- representation.
-
- Representation in pseudocode:
-
- # INPUTS:
- # key: Pre calculated and truncated key from id_calculation function
- # ibf_salt: Salt of the IBF
- # OUTPUT:
- # value: salted key
- FUNCTION salt_key(key,ibf_salt):
- s = ibf_salt % 64;
- k = key
-
- /* rotate ibf key */
- k = (k >> s) | (k << (64 - k))
- return key
-
-
- # INPUTS:
- # element: Element to calculated id from.
- # salt: Salt of the IBF
- # OUTPUT:
- # value: the ID of the element
-
- FUNCTION id_calculation (element,ibf_salt):
- salt = 0
- XTR=HMAC-SHA256
- PRF=HMAC-SHA256
- key = HKDF(XTR, PRF, salt, element)
- key = key modulo 2^64 // Truncate
- return salt_key(key,ibf_salt)
-
-
-
- Figure 18
-
-3.3.2. Mapping Function
-
- The mapping function M as described above in the figure Figure 1
- decides in which buckets the ID and HASH have to be binary XORed to.
- In practice there the following algorithm is used:
-
- The first index is simply the HASH modulo the IBF size. The second
- index is calculated by creating a new 64-bit value by shifting the
- 32-bit value left and setting the lower 32-bit to the number of
- indexes already processed. From the resulting 64-bit value a CRC32
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 16]
-
-Internet-Draft Set Union March 2021
-
-
- checksum is created the second index is now the modulo of the CRC32
- output this is repeated until the predefined amount indexes is
- generated. In the case a index is hit twice, which would mean this
- bucket could not get pure again, the second hit is just skipped and
- the next iteration is used as.
-
- # INPUTS:
- # key: Is the ID of the element calculated in the id_calculation function
above.
- # number_of_buckets_per_element: Pre-defined count of buckets elements are
inserted into
- # ibf_size: the size of the ibf (count of buckets)
- # OUTPUT:
- # dst: Array with bucket IDs to insert ID and HASH
-
- FUNCTION get_bucket_id (key, number_of_buckets_per_element, ibf_size)
- bucket = CRC32(key)
-
- i = 0
- filled = 0
- WHILE filled < number_of_buckets_per_element
-
- element_already_in_bucket = false
- j = 0
- WHILE j < filled
- IF dst[j] == bucket modulo ibf_size THEN
- element_already_in_bucket = true
- ENDIF
- j++
- ENDWHILE
-
- IF !element_already_in_bucket THEN
- dst[filled++] = bucket modulo ibf_size
- ENDIF
-
- x = (bucket << 32) | i
- bucket = CRC32(x)
-
- i++
- ENDWHILE
- return dst
-
- Figure 19
-
-3.3.3. HASH calculation
-
- The HASH is calculated by calculating the CRC32 checksum of the
- 64-bit ID value which returns a 32-bit value.
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 17]
-
-Internet-Draft Set Union March 2021
-
-
-4. Strata Estimator
-
-4.1. Description
-
- Strata Estimators help estimate the size of the set difference
- between two set of elements. This is necessary to efficiently
- determinate the tuning parameters for an IBF, in particular a good
- value for L.
-
- Basically a Strata Estimator (SE) is a series of IBFs (with a rather
- small value of L) in which increasingly large subsets of the full set
- of elements are added to each IBF. For the n-th IBF, the function
- selecting the subset of elements should sample to select
- (probabilistically) 1/(2^n) of all elements. This can be done by
- counting the number of trailing bits set to "1" in an element ID, and
- then inserting the element into the IBF identified by that counter.
- As a result, all elements will be mapped to one IBF, with the n-th
- IBF being statistically expected to contain 1/(2^n) elements.
-
- Given two SEs, the set size difference can be estimated by trying to
- decode all of the IBFs. Given that L was set to a rather small
- value, IBFs containing large strata will likely fail to decode. For
- those IBFs that failed to decode, one simply extrapolates the number
- of elements by scaling the numbers obtained from the other IBFs that
- did decode. If none of the IBFs of the SE decoded (which given a
- reasonable choice of L should be highly unlikely), one can retry
- using a different mapping function M.
-
-5. Mode of operation
-
- The set union protocol uses IBFs and SEs as primitives. Depending on
- the state of the two sets there are different strategies or operation
- modes how to efficiently determinate missing elements between the two
- sets.
-
- The simplest mode is the "full" synchronization mode. The idea is
- that if the difference between the sets of the two peers exceeds a
- certain threshold, the overhead to determine which elements are
- different outweighs the overhead of sending the complete set. In
- this case, the most efficient method can be to just exchange the full
- sets.
-
- Link to statemachine diagram
- (https://git.gnunet.org/lsd0003.git/plain/statemaschine/
- full_state_maschine.jpg)
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 18]
-
-Internet-Draft Set Union March 2021
-
-
- The second possibility is that the difference of the sets is small
- compared to the set size. Here, an efficient "delta" synchronization
- mode is more efficient. Given these two possibilities, the first
- steps of the protocol are used to determine which mode should be
- used.
-
- Thus, the set synchronization protocol always begins with the
- following operation mode independent steps.
-
- The initiating peer begins in the *Initiating Connection* state and
- the receiving peer in the *Expecting Connection* state. The first
- step for the initiating peer in the protocol is to send an _Operation
- Request_ to the receiving peer and transition into the *Expect SE*
- state. After receiving the _Operation Request_ the receiving peer
- transitions to the *Expecting IBF* state and answers with the _Strata
- Estimator_ message. When the initiating peer receives the _Strata
- Estimator_ message, it decides with some heuristics which operation
- mode is likely more suitable for the estimated set difference and the
- application-provided latency-bandwidth tradeoff. The detailed
- tradeoff between the Full Synchronisation Mode and the Delta
- Synchronisation Mode is explained in the section Combined Mode.
-
-5.1. Full Synchronisation Mode
-
- When the initiating peer decides to use the full synchronisation mode
- and the set of the initiating peer is bigger than the set of the
- receiving peer, the initiating peer sends a _Request Full_ message,
- and transitions from *Expecting SE* to the *Full Receiving* state.
- If the set of the initiating peer is smaller, it sends all set
- elements to the other peer followed by the _Full Done_ message, and
- transitions into the *Full Sending* state.
-
- Link to statemachine diagram
- (https://git.gnunet.org/lsd0003.git/plain/statemaschine/
- full_state_maschine.jpg)
-
- *The behavior of the participants the different state is described
- below:*
-
- *Expecting IBF:* If a peer in the *Expecting IBF* state receives a
- _Request Full_ message from the other peer, the peer sends all the
- elements of its set followed by a _Full Done_ message to the other
- peer, and transitions to the *Full Sending* state. If the peer
- receives an _Full Element_ message, it processes the element and
- transitions to the *Full Receiving* state.
-
- *Full Sending:* While a peer is in *Full Sending* state the peer
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 19]
-
-Internet-Draft Set Union March 2021
-
-
- expects to continuously receive elements from the other peer. As
- soon as a the _Full Done_ message is received, the peer
- transitions into the *Finished* state.
-
- *Full Receiving (In code: Expecting IBF):* While a peer is in the
- *Full Receiving* state, it expects to continuously receive
- elements from the other peer. As soon as a the _Full Done_
- message is received, it sends the remaining elements (those it did
- not receive) from its set to the other peer, followed by a _Full
- Done_. After sending the last message, the peer transitions into
- the *Finished* state.
-
-5.2. Delta Synchronisation Mode
-
- When the initiating peer in the *Expected SE* state decides to use
- the delta synchronisation mode, it sends a _IBF_ to the receiving
- peer and transitions into the *Passive Decoding* state.
-
- The receiving peer in the *Expecting IBF* state receives the _IBF_
- message from the initiating peer and transitions into the *Expecting
- IBF Last* state when there are multiple _IBF_ messages to sent, when
- there is just a single _IBF_ message the reviving peer transitions
- directly to the *Active Decoding* state.
-
- The peer that is in the *Active Decoding*, *Finish Closing* or in the
- *Expecting IBF Last* state is called the active peer and the peer
- that is in either the *Passive Decoding* or the *Finish Waiting*
- state is called the passive peer.
-
- Link to statemachine diagram
- (https://git.gnunet.org/lsd0003.git/plain/statemaschine/
- full_state_maschine.jpg)
-
- *The behavior of the participants the different states is described
- below:*
-
- *Passive Decoding:* In the *Passive Decoding* state the passive peer
- reacts to requests from the active peer. The action the passive
- peer executes depends on the message the passive peer receives in
- the *Passive Decoding* state from the active peer and is described
- below on a per message basis.
-
- _Inquiry_ message: The _Inquiry_ message is received if the
- active peer requests the SHA-512 hash of one or more elements
- (by sending the 64 bit element ID) that are missing from the
- active peer's set. In this case the passive peer answers with
- _Offer_ messages which contain the SHA-512 hash of the
- requested element. If the passive peer does not have an
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 20]
-
-Internet-Draft Set Union March 2021
-
-
- element with a matching element ID, it MUST ignore the inquiry.
- If multiple elements match the 64 bit element ID, the passive
- peer MUST send offers for all of the matching elements.
-
- _Demand_ message: The _Demand_ message is received if the active
- peer requests a complete element that is missing in the active
- peers set. If the requested element is valid the passive peer
- answers with an _Elements_ message which contains the full,
- application-dependent data of the requested element. If the
- passive peer receives a demand for a SHA-512 hash for which it
- has no element, a protocol violation is detected and the
- protocol MUST be aborted. Implementations MAY strengthen this
- and forbid demands without previous matching offers.
-
- _Offer_ message: The _Offer_ message is received if the active
- peer has decoded an element that is present in the active peers
- set and may be missing in the set of the passive peer. If the
- SHA-512 hash of the offer is indeed not a hash of any of the
- elements from the set of the passive peer, the passive peer
- MUST answer with a _Demand_ message for that SHA-512 hash and
- remember that it issued this demand. The send demand need to
- be added to a list with unsatisfied demands.
-
- _Elements_ message: When a new element message has been received
- the peer checks if a corresponding _Demand_ for the element has
- been sent and the demand is still unsatisfied. If the element
- has been demanded the peer checks the element for validity,
- removed it from the list of pending demands and then then saves
- the element to the the set otherwise the peer rejects the
- element.
-
- _IBF_ message: If an _IBF_ message is received, this indicates
- that decoding of the IBF on the active site has failed and
- roles should be swapped. The receiving passive peer
- transitions into the *Expecting IBF Last* state, and waits for
- more _IBF_ messages or the final _IBF_ message to be received.
-
- _IBF_ message: If an _IBF_ message is received this indicates
- that the there is just one IBF slice and a direct state and
- role transition from *Passive Decoding* to *Active Decoding* is
- initiated.
-
- _Done_ message: Receiving the _Done_ message signals the passive
- peer that all demands of the active peer have been satisfied.
- Alas, the active peer will continue to process demands from the
- passive peer. Upon receiving this message, the passive peer
- transitions into the *Finish Waiting* state.
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 21]
-
-Internet-Draft Set Union March 2021
-
-
- *Active Decoding:* In the *Active Decoding* state the active peer
- decodes the IBFs and evaluates the set difference between the
- active and passive peer. Whenever an element ID is obtained by
- decoding the IBF, the active peer sends either an offer or an
- inquiry to the passive peer, depending on which site the decoded
- element is missing.
-
- If the IBF decodes a positive (1) pure bucket, the element is
- missing on the passive peers site. Thus the active peer sends an
- _Offer_ to the passive peer. A negative (-1) pure bucket
- indicates that a element is missing in the active peers set, so
- the active peer sends a _Inquiry_ to the passive peer.
-
- In case the IBF does not successfully decode anymore, the active
- peer sends a new IBF to the passive client and changes into
- *Passive Decoding* state. This initiates a role swap. To reduce
- overhead and prevent double transmission of offers and elements
- the new IBF is created on the new complete set after all demands
- and inquiries have been satisfied.
-
- As soon as the active peer successfully finished decoding the IBF,
- the active peer sends a _Done_ message to the passive peer.
-
- All other actions taken by the active peer depend on the message
- the active peer receives from the passive peer. The actions are
- described below on a per message basis:
-
- _Offer_ message: The _Offer_ message indicates that the passive
- peer received a _Inquiry_ message from the active peer. If a
- Inquiry has been sent and the offered element is missing in the
- active peers set, the active peer sends a _Demand_ message to
- the passive peer. The send demand need to be added to a list
- with unsatisfied demands. In the case the received offer is
- for an element that is already in the set of the peer the offer
- is ignored.
-
- _Demand_ message: The _Demand_ message indicates that the passive
- peer received a _Offer_ from the active peer. The active peer
- satisfies the demand of the passive peer by sending _Elements_
- message if a offer request for the element has been sent. In
- the case the demanded element does not exist in the set there
- was probably a bucket decoded that was not really pure so
- potentially all _Offer_ and _Demand_ messages sent after are
- invalid in this case a role change active -> passive with a new
- IBF is easiest. If a demand for the same element is received
- multiple times the demands should be discarded.
-
- _Elements_ message: A element that is received is marked in the
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 22]
-
-Internet-Draft Set Union March 2021
-
-
- list of demanded elements as satisfied, validated and saved and
- not further action is taken. Elements that are not demanded or
- already known are discarded.
-
- _Done_ message: Receiving the message _Done_ indicates that all
- demands of the passive peer have been satisfied. The active
- peer then changes into the state *Finish Closing* state. If
- the IBF is not finished decoding and the _Done_ is received the
- other peer is not in compliance with the protocol and the set
- reconciliation MUST be aborted.
-
- *Expecing IBF Last* In the *Expecing IBF Last* state the active peer
- continuously receives _IBF_ messages from the passive peer. When
- the last _IBF_ message is received the active peer changes into
- *Active Decoding* state.
-
- *Finish Closing* / *Finish Waiting* In this states the peers are
- waiting for all demands to be satisfied and for the
- synchronisation to be completed. When all demands are satisfied
- the peer changes into state *Finished*.
-
-5.3. Combined Mode
-
- In the combined mode the Full Synchronisation Mode and the Delta
- Synchronisation Mode are combined to minimize resource consumption.
-
- The Delta Synchronisation Mode is only efficient on small set
- differences or if the byte-size of the elements is large. Is the set
- difference is estimated to be large the Full Synchronisation Mode is
- more efficient. The exact heuristics and parameters on which the
- protocol decides which mode should be used are described in the
- Performance Considerations section of this document.
-
- There are two main cases when a Full Synchronisation Mode is always
- used. The first case is when one of the peers announces having an
- empty set. This is announced by setting the SETSIZE field in the
- _Strata Estimator_ to 0. The second case is if the application
- requested full synchronization explicitly. This is useful for
- testing and should not be used in production.
-
-6. Messages
-
-6.1. Operation Request
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 23]
-
-Internet-Draft Set Union March 2021
-
-
-6.1.1. Description
-
- This message is the first message of the protocol and it is sent to
- signal to the receiving peer that the initiating peer wants to
- initialize a new connection.
-
- This message is sent in the transition between the *Initiating
- Connection* state and the *Expect SE* state.
-
- If a peer receives this message and is willing to run the protocol,
- it answers by sending back a _Strata Estimator_ message. Otherwise
- it simply closes the connection.
-
-6.1.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | ELEMENT COUNT |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | APX
- +-----+-----+-----+-----+-----+-----+-----+-----+
/
- / /
- / /
-
- Figure 20
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_OPERATION_REQUEST as registered in
- GANA Considerations, in network byte order.
-
- ELEMENT COUNT is the number of the elements the requesting party has
- in its set, as a 32-bit unsigned integer in network byte order.
-
- APX is a SHA-512 hash that identifies the application.
-
-6.2. IBF
-
-6.2.1. Description
-
- The IBF message contains a slice of the IBF.
-
- The _IBF_ message is sent at the start of the protocol from the
- initiating peer in the transaction between *Expect SE* -> *Expecting
- IBF Last* or when the IBF does not decode and there is a role change
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 24]
-
-Internet-Draft Set Union March 2021
-
-
- in the transition between *Active Decoding* -> *Expecting IBF Last*.
- This message is only sent if there are more than one IBF slice to
- sent, in the case there is just one slice the IBF message is sent.
-
-6.2.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE |ORDER| PAD |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | OFFSET | SALT |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | IBF-SLICE
- + /
- / /
- / /
-
- Figure 21
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_REQUEST_IBF as registered in GANA
- Considerations in network byte order.
-
- ORDER is a 8-bit unsigned integer which signals the order of the
- IBF. The order of the IBF is defined as the logarithm of the
- number of buckets of the IBF.
-
- PAD is 24-bit always set to zero
-
- OFFSET is a 32-bit unsigned integer which signals the offset to the
- following ibf slices in the original.
-
- SALT is a 32-bit unsigned integer that contains the salt which was
- used to create the IBF.
-
- IBF-SLICE are variable count of slices in an array. A single slice
- contains out multiple 64-bit IDSUMS, 32-bit HASHSUMS and 8-bit
- COUNTERS. In the network order the array of IDSUMS is first,
- followed by an array of HASHSUMS and ended with an array of
- COUNTERS. Length of the array is defined by MIN( 2^ORDER -
- OFFSET, MAX_BUCKETS_PER_MESSAGE). MAX_BUCKETS_PER_MESSAGE is
- defined as 32768 divided by the BUCKET_SIZE which is 13-byte
- (104-bit).
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 25]
-
-Internet-Draft Set Union March 2021
-
-
- To get the IDSUM field, all IDs who hit a bucket are added up with
- a binary XOR operation. See ID Calculation for details about ID
- generation.
-
- The calculation of the HASHSUM field is done accordingly to the
- calculation of the IDSUM field: all HASHes are added up with a
- binary XOR operation. The HASH value is calculated as described
- in detail in section HASH calculation.
-
- The algorithm to find the correct bucket in which the ID and the
- HASH have to be added is described in detail in section Mapping
- Function.
-
- IBF-SLICE
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | IDSUMS |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | IDSUMS |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | HASHSUMS | HASHSUMS |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | COUNTERS | COUNTERS |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- / /
- / /
-
- Figure 22
-
-6.3. IBF
-
-6.3.1. Description
-
- This message indicates to the remote peer that all slices of the
- bloom filter have been sent. The binary structure is exactly the
- same as the Structure of the message IBF with a different "MSG TYPE"
- which is defined in GANA Considerations "SETU_P2P_IBF_LAST".
-
- Receiving this message initiates the state transmissions *Expecting
- IBF Last* -> *Active Decoding*, *Expecting IBF* -> *Active Decoding*
- and *Passive Decoding* -> *Active Decoding*. This message can
- initiate a peer the roll change from *Active Decoding* to *Passive
- Decoding*.
-
-6.4. Elements
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 26]
-
-Internet-Draft Set Union March 2021
-
-
-6.4.1. Description
-
- The Element message contains an element that is synchronized in the
- Delta Synchronisation Mode and transmits a full element between the
- peers.
-
- This message is sent in the state *Active Decoding* and *Passive
- Decoding* as answer to a _Demand_ message from the remote peer. The
- Element message can also be received in the *Finish Closing* or
- *Finish Waiting* state after receiving a _Done_ message from the
- remote peer, in this case the client changes to the *Finished* state
- as soon as all demands for elements have been satisfied.
-
- This message is exclusively sent in the Delta Synchronisation Mode.
-
-6.4.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | E TYPE | PADDING |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | E SIZE | AE TYPE | DATA
- +-----+-----+-----+-----+ /
- / /
- / /
-
- Figure 23
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_ELEMENTS as registered in GANA
- Considerations in network byte order.
-
- E TYPE element type is a 16-bit unsigned integer witch defines the
- element type for the application.
-
- PADDING is 16-bit always set to zero
-
- E SIZE element size is 16-bit unsigned integer that signals the size
- of the elements data part.
-
- AE TYPE application specific element type is a 16-bit unsigned
- integer that is needed to identify the type of element that is in
- the data field
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 27]
-
-Internet-Draft Set Union March 2021
-
-
- DATA is a field with variable length that contains the data of the
- element.
-
-6.5. Offer
-
-6.5.1. Description
-
- The offer message is an answer to an _Inquiry_ message and transmits
- the full hash of an element that has been requested by the other
- peer. This full hash enables the other peer to check if the element
- is really missing in its set and eventually sends a _Demand_ message
- for that a element.
-
- The offer is sent and received only in the *Active Decoding* and in
- the *Passive Decoding* state.
-
- This message is exclusively sent in the Delta Synchronisation Mode.
-
-6.5.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | HASH
- +-----+-----+-----+-----+
- / /
- / /
-
- Figure 24
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_OFFER as registered in GANA
- Considerations in network byte order.
-
- HASH is a SHA 512-bit hash of the element that is requested with a
- inquiry message.
-
-6.6. Inquiry
-
-6.6.1. Description
-
- The Inquiry message is exclusively sent by the active peer in *Active
- Decoding* state to request the full hash of an element that is
- missing in the active peers set. This is normally answered by the
- passive peer with _Offer_ message.
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 28]
-
-Internet-Draft Set Union March 2021
-
-
- This message is exclusively sent in the Delta Synchronisation Mode.
-
- NOTE: HERE IS AN IMPLEMENTATION BUG UNNECESSARY 32-BIT PADDING!
-
-6.6.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | SALT |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | IBF KEY |
- +-----+-----+-----+-----+-----+-----+-----+-----+
-
- Figure 25
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_INQUIRY as registered in GANA
- Considerations in network byte order.
-
- IBF KEY is a 64-bit unsigned integer that contains the key for which
- the inquiry is sent.
-
-6.7. Demand
-
-6.7.1. Description
-
- The demand message is sent in the *Active Decoding* and in the
- *Passive Decoding* state. It is a answer to a received _Offer_
- message and is sent if the element described in the _Offer_ message
- is missing in the peers set. In the normal workflow the answer to
- the demand message is an _Elements_ message.
-
- This message is exclusively sent in the Delta Synchronisation Mode.
-
-6.7.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | HASH
- +-----+-----+-----+-----+
- / /
- / /
-
- Figure 26
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 29]
-
-Internet-Draft Set Union March 2021
-
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_DEMAND as registered in GANA
- Considerations in network byte order.
-
- HASH is a 512-bit Hash of the element that is demanded.
-
-6.8. Done
-
-6.8.1. Description
-
- The done message is sent when all _Demand_ messages have been
- successfully satisfied and the set is complete synchronized. A final
- checksum (XOR SHA-512 hash) over all elements of the set is added to
- the message to allow the other peer to make sure that the sets are
- equal.
-
- This message is exclusively sent in the Delta Synchronisation Mode.
-
-6.8.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | HASH
- +-----+-----+-----+-----+
- / /
- / /
-
- Figure 27
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_DONE as registered in GANA
- Considerations in network byte order.
-
- HASH is a 512-bit hash of the set to allow a final equality check.
-
-6.9. Full Done
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 30]
-
-Internet-Draft Set Union March 2021
-
-
-6.9.1. Description
-
- The full done message is sent in the Full Synchronisation Mode to
- signal that all remaining elements of the set have been sent. The
- message is received and sent in in the *Full Sending* and in the
- *Full Receiving* state. When the full done message is received in
- *Full Sending* state the peer changes directly into *Finished* state.
- In *Full Receiving* state receiving a full done message initiates the
- sending of the remaining elements that are missing in the set of the
- other peer.
-
-6.9.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | HASH
- +-----+-----+-----+-----+
- / /
- / /
-
- Figure 28
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_FULL_DONE as registered in GANA
- Considerations in network byte order.
-
- HASH is a 512-bit hash of the set to allow a final equality check.
-
-6.10. Request Full
-
-6.10.1. Description
-
- The request full message is sent by the initiating peer in *Expect
- SE* state to the receiving peer if the operation mode "Full
- Synchronisation Mode" is determined as the better Mode of operation
- and the set size of the initiating peer is smaller than the set size
- of the receiving peer. The initiating peer changes after sending the
- request full message into *Full Receiving* state.
-
- The receiving peer receives the Request Full message in the
- *Expecting IBF*, afterwards the receiving peer starts sending its
- complete set in Full Element messages to the initiating peer.
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 31]
-
-Internet-Draft Set Union March 2021
-
-
-6.10.2. Structure
-
- 0 8 16 24 32
- +-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE |
- +-----+-----+-----+-----+
-
- Figure 29
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_REQUEST_FULL as registered in GANA
- Considerations in network byte order.
-
-6.11. Strata Estimator
-
-6.11.1. Description
-
- The strata estimator is sent by the receiving peer at the start of
- the protocol right after the Operation Request message has been
- received.
-
- The strata estimator is used to estimate the difference between the
- two sets as described in section 4.
-
- When the initiating peer receives the strata estimator the peer
- decides which Mode of operation to use for the synchronization.
- Depending on the size of the set difference and the Mode of operation
- the initiating peer changes into *Full Sending*, *Full Receiving* or
- *Passive Decoding* state.
-
-6.11.2. Structure
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | SETSIZE
- +-----+-----+-----+-----+-----+-----+-----+-----+
- SETSIZE | SE-SLICES
- +-----+-----+-----+-----+
- / /
- / /
-
- Figure 30
-
- where:
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 32]
-
-Internet-Draft Set Union March 2021
-
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_SE as registered in GANA
- Considerations in network byte order.
-
- SETSIZE is a 64-bit unsigned integer that is defined by the size of
- the set the SE is
-
- SE-SLICES is variable in size and contains the same structure as the
- IBF-SLICES field in the IBF message.
-
-6.12. Strata Estimator Compressed
-
-6.12.1. Description
-
- The Strata estimator can be compressed with gzip to improve
- performance. For details see section Performance Considerations.
-
- Since the content of the message is the same as the uncompressed
- Strata Estimator, the details aren't repeated here for details see
- section 6.11.
-
-6.13. Full Element
-
-6.13.1. Description
-
- The full element message is the equivalent of the Elements message in
- the Full Synchronisation Mode. It contains a complete element that
- is missing in the set of the peer that receives this message.
-
- The full element message is exclusively sent in the transitions
- *Expecting IBF* -> *Full Receiving* and *Full Receiving* ->
- *Finished*. The message is only received in the *Full Sending* and
- *Full Receiving* state.
-
- After the last full element messages has been sent the Full Done
- message is sent to conclude the full synchronisation of the element
- sending peer.
-
-6.13.2. Structure
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 33]
-
-Internet-Draft Set Union March 2021
-
-
- 0 8 16 24 32 40 48 56
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | MSG SIZE | MSG TYPE | E TYPE | PADDING |
- +-----+-----+-----+-----+-----+-----+-----+-----+
- | SIZE | AE TYPE | DATA
- +-----+-----+-----+-----+
- / /
- / /
-
- Figure 31
-
- where:
-
- MSG SIZE is 16-bit unsigned integer in network byte order witch
- describes the message size in bytes and the header is included.
-
- MSG TYPE the type of SETU_P2P_REQUEST_FULL_ELEMENT as registered in
- GANA Considerations in network byte order.
-
- E TYPE element type is a 16-bit unsigned integer witch defines the
- element type for the application.
-
- PADDING is 16-bit always set to zero
-
- E SIZE element size is 16-bit unsigned integer that signals the size
- of the elements data part.
-
- AE TYPE application specific element type is a 16-bit unsigned
- integer that is needed to identify the type of element that is in
- the data field
-
- DATA is a field with variable length that contains the data of the
- element.
-
-7. Performance Considerations
-
-7.1. Formulas
-
-7.1.1. Operation Mode
-
- The decision which mode of operations is used is described by the
- following code:
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 34]
-
-Internet-Draft Set Union March 2021
-
-
- The function takes as input the initial the local setsize, the remote
- setsize, the by the strata estimator calculated difference, a static
- boolean that enforces full synchronisation mode of operation and the
- bandwith/roundtrips tradeoff. As output the function returns "FULL"
- if the full synchronisation mode should be used and "DIFFERENTIAL" if
- the differential mode should be used.
-
- # INPUTS:
- # initial_local_setsize: The initial local setsize
- # remote_setsize: The remote setsize
- # set_diff: the set difference calculated by the strata estimator
- # force_full: boolean to enforce FULL
- # ba_rtt_tradeoff: the tradeoff between round trips and bandwidth defined
by the use case
- # OUTPUTS:
- # returns: the decision (FULL or DIFFERENTIAL)
-
- FUNCTION decide_operation_mode(initial_local_setsize, remote_setsize,
set_diff, force_full, ba_rtt_tradeoff)
- IF set_diff > 200
- set_diff = set_diff * 3 / 2
- ENDIF
- IF force_full || ( set_diff > initial_local_setsize / 4 ) ||
remote_setsize = 0
- return "FULL"
- ENDIF
- return "DIFFERENTIAL"
-
-
- Figure 32
-
-7.1.2. Full Synchronisation: Decision witch peer sends elements first
-
- The following function determinate which peer starts sending its full
- set in full synchronisation mode of operation.
-
- The function takes as input the initial local setsize (set size of
- the first iteration) and the remote setsize and returns as output the
- decision "REMOTE" or "LOCAL" to determinate if the remote or the
- local peer starts sending the full set.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 35]
-
-Internet-Draft Set Union March 2021
-
-
- # INPUTS:
- # initial_local_setsize: The initial local setsize
- # remote_setsize: The remote setsize
- # OUTPUTS:
- # returns: the decision (LOCAL or REMOTE)
-
- FUNCTION decide_full_sending(initial_local_size, remote_setsize)
- IF ( initial_local_size <= remote_setsize ) || ( remote_setsize = 0 )
- return LOCAL
- ELIF
- return REMOTE
-
-
- Figure 33
-
-7.1.3. IBF Parameters
-
- The following function calculate the required parameter to create an
- optimal sized IBF. These parameter are the number of buckets and the
- number of buckets a single element is mapped to.
-
- The function takes as input the setsize and returns a array with two
- numbers the total number of buckets and the number of buckets a
- single element is mapped to.
-
- FUNCTION (setsize):
- number_of_bucket_per_element = 4
- total_number_of_buckets = setsize
- return [ total_number_of_buckets, number_of_bucket_per_element ]
-
-
- Figure 34
-
-8. Security Considerations
-
- The security considerations in this document focus mainly on the
- security goal of availability, the primary goal of the protocol is
- prevent an attacker from wasting cpu and network resources of the
- attacked peer.
-
- To prevent denial of service attacks its vital to check that peers
- can only reconcile a set once in a pre defined time span. This is a
- predefined values and need to be adapted on per use basis. To
- enhance reliability and to allow failures in the protocol its
- possible to introduce a threshold for max failed reconciliation ties.
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 36]
-
-Internet-Draft Set Union March 2021
-
-
- The formal format of all messages needs to be properly validated,
- this is important to prevent many attacks on the code. The
- application data should be validated by the application using the
- protocol not by the implementation of the protocol. In case the
- format validation fails the set operation MUST be terminated.
-
- To prevent an attacker from sending a peer into a endless loop
- between active and passive decoding a limitation for active/passive
- roll switches in required. This can be implemented by a simple
- counter which terminates the operation after a predefined count of
- switches. The count of switches needs to be defined as such that its
- very undroppable that more switches are required an the malicious
- intend of the other peer can be assumed.
-
- Its important to close and purge connections after a given timeout to
- prevent draining attacks.
-
-8.1. Generic functions
-
- Some functions are used in most of the messages described in the
- State section.
-
-8.1.1. Duplicated or Missing Message detection
-
- Most of the messages received need to be checked that they are not
- received multiple times this is solved with a global store (message)
- and the following code
-
- # Initially creates message store
- FUNCTION createStore()
- store = {}
- return store
-
- # Returns adds a message to the store
- FUNCTION addMessageToStore(store, message)
- key = hash(sha512, message)
- IF store.get(key) != NULL
- return FALSE
- store.set(key) = 1
- return TRUE
-
- # Returns the count of message received
- FUNCTION getNumberOfMessage(store)
- return store.size()
-
- Figure 35
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 37]
-
-Internet-Draft Set Union March 2021
-
-
-8.1.2. Store Remote Peers Element Number
-
- To prevent an other peer from requesting the same set multiple times
- its important to memorize the number of elements a peer had in
- previous reconciliation sessions.
-
- FUNCTION number_elements_last_sync(client_id)
- IF number_store.get(clientID)
- return number_store.get(client_id)
- ENDIF
- return 0
-
- FUNCTION saveNumberOfElementsLastSync(client_id, remote_setsize)
- number_store.update(clientID, remote_setsize)
-
- Figure 36
-
-8.2. States
-
- In this section the security considerations for each valid message in
- all states is described, if any other message is received the peer
- MUST terminate the operation.
-
-8.2.1. Expecting IBF
-
- Security considerations for received messages:
-
- Request Full It needs to be checked that the full synchronisation is
- plausible according to the formula deciding which operation mode
- is applicable this is achieved by calculating the upper and lower
- boundaries of the number of elements in the other peers set. The
- lower boundary of number of elements can be easily memorized as
- result from the last synchronisation and the upper boundary can be
- estimated with prior knowledge of the maximal plausible increase
- of element since the last reconciliation and the maximal plausible
- number of elements.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 38]
-
-Internet-Draft Set Union March 2021
-
-
- # INPUTS:
- # client_id: The initial local setsize
- # remote_setsize: The remote setsize
- # local_setsize: The local setsize
- # initial_local_size: The initial local setsize
- # set_diff: the set difference calculated by the strata estimator
- # OUTPUTS:
- # returns: the decision
-
- FUNCTION validate_messages_request_full(client_id, remote_setsize,
local_setsize, initial_local_size, set_diff)
-
- last_setsize = getNumberOfElementsLastSync(clientId)
- IF remote_setsize > last_setsize
- return FALSE
- ENDIF
-
- # Update number of elements in store
- saveNumberOfElementsLastSync(client_id, remote_setsize)
-
- # Check for max plausible set size as defined on use case basis (can
be infinite)
- plausible_setsize = getMaxPlausibleSetSize()
- IF remote_setsize > plausible_setsize
- return FALSE
- ENDIF
-
- # Check for correct operation mode operation_mode function is
described in performance section
- IF decide_operation_mode(initial_local_size, remote_setsize,
set_diff) != "FULL"
- return FALSE
- ENDIF
-
- # Check that the other peer is honest and we should send our set
- IF decide_full_sending(local_size, initial_remote_setsize ) !=
"LOCAL"
- return FALSE
- ENDIF
-
- return TRUE
-
- Figure 37
-
- IBF Its important do define a threshold to limit the maximal number
- of IBFs that are expected from the other peer. This maximal
- plausible size can be calculated with the known inputs: number of
- elements in my set and the pre defined applications upper limit as
- described in the performance section. That the other peer chooses
- the correct mode of operation MUST be checked as described in the
- section above.
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 39]
-
-Internet-Draft Set Union March 2021
-
-
- FUNCTION validate_messages_ibf(remote_setsize, local_setsize,
initial_local_size, set_diff, ibf_msg)
- IF is_undefined(number_buckets_left)
- number_buckets_left = get_bucket_number(remote_setsize,
local_setsize, initial_local_size, set_diff, ibf_msg)
- ENDIF
- number_buckets_left --
- IF number_buckets_left < 0
- return FALSE
- return TRUE
-
-
- # Security check executed when first ibf message is received
- FUNCTION get_bucket_number(remote_setsize, local_setsize,
initial_local_size, set_diff, ibf_msg)
-
- # Check for max plausible set size as defined on use case basis (can
be infinite)
- max_plausible_setsize = getMaxPlausibleSetSize()
- IF remote_setsize > max_plausible_setsize
- return 0
- ENDIF
-
- # Check for correct operation mode operation_mode function is
described in performance section
- IF decide_operation_mode(initial_local_size, remote_setsize,
set_diff) != "DIFFERENTIAL"
- return 0
- ENDIF
-
- ibf_params = calculate_optimal_IBF_params(local_setsize)
- total_number_of_buckets = ibf_params[0]
- number_of_bucket_per_element = ibf_params[0]
- IF ( 2^(ibf.order) != total_number_of_buckets ) ||
- (ibf.number_of_bucket_per_element !=
number_of_bucket_per_element)
- return 0
-
- return total_number_of_buckets
-
- Figure 38
-
- Full Element If a full element is received the set of the other peer
- is smaller than the set of the peer in the *Expecting IBF* state
- and the set difference is smaller than threshold for full
- synchronisation as described in the performance section. This can
- be verified by calculating the plausible upper and lower
- boundaries of the number of elements in the other peers set as
- described in the first section.
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 40]
-
-Internet-Draft Set Union March 2021
-
-
- FUNCTION validate_messages_full_element(client_id, remote_setsize,
local_setsize, initial_local_size, set_diff, message)
-
- # On first run create store and make initial checks
- IF is_undefined(store)
- full_element_msg_store = createStore()
- IF ! validate_messages_full_element_init(client_id,
remote_setsize, local_setsize, initial_local_size, set_diff)
- return FALSE
- ENDIF
-
- # Prevent duplication of received message
- IF ! addMessageToStore(full_element_msg_store, message)
- return FALSE
- ENDIF
-
- # Prevent to receive more elements than the remote peer has
- number_received_messages = getNumberOfMessage(full_element_msg_store)
- IF ( number_received_messages > remote_setsize )
- return FALSE
-
- return TRUE
-
-
- # INPUTS:
- # client_id: The initial local setsize
- # remote_setsize: The remote setsize
- # local_setsize: The local setsize
- # initial_local_size: The initial local setsize
- # set_diff: the set difference calculated by the strata estimator
- # OUTPUTS:
- # returns: the decision
-
- FUNCTION validate_messages_full_element_init(client_id, remote_setsize,
local_setsize, initial_local_size, set_diff)
-
- last_setsize = getNumberOfElementsLastSync(clientId)
- IF remote_setsize < last_setsize
- return FALSE
- ENDIF
-
- # Update number of elements in store
- saveNumberOfElementsLastSync(client_id, remote_setsize)
-
- # Check for max plausible set size as defined on use case basis (can
be infinite)
- plausible_setsize = getMaxPlausibleSetSize()
- IF remote_setsize > plausible_setsize
- return FALSE
- ENDIF
-
- # Check for correct operation mode operation_mode function is
described in performance section
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 41]
-
-Internet-Draft Set Union March 2021
-
-
- IF decide_operation_mode(initial_local_size, remote_setsize,
set_diff) != "FULL"
- return FALSE
- ENDIF
-
- # Check that the other peer is honest and he should send us his set
- IF decide_full_sending(local_size, initial_remote_setsize ) !=
"REMOTE"
- return FALSE
- ENDIF
-
- return TRUE
-
-
- Figure 39
-
-8.2.2. Full Sending
-
- Security considerations for received messages:
-
- Full Element When receiving full elements there needs to be checked
- that every element is a valid element, no element is resized more
- than once and not more or less elements are received as the other
- peer has committed to in the beginning of the operation. Detail
- pseudocode implementation can be found in Expecting IBF
-
- Full Done When receiving the full done message its important to
- check that not less elements are received as the other peer has
- committed to send. The 512-bit hash of the complete reconciled
- set contained in the full done message is required to ensures that
- both sets are truly identical. If the sets differ a
- resynchronisation is required. The count of possible
- resynchronisation MUST be limited to prevent resource exhaustion
- attacks.
-
- FUNCTION validate_messages_full_done(full_done_message,
full_element_msg_store, remote_setsize, local_set)
-
- # Check that correct number of elements has been received
- number_received_messages = getNumberOfMessage(full_element_msg_store)
- IF ( number_received_messages != remote_setsize )
- return FALSE
- IF local_set.getFullHash() != full_done_message.fullSetHash
- return FALSE
- return TRUE
-
-
- Figure 40
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 42]
-
-Internet-Draft Set Union March 2021
-
-
-8.2.3. Expecting IBF Last
-
- Security considerations for received messages:
-
- IBF When receiving multiple IBFs its important to check that the
- other peer can only send as many IBFs as expected. The number of
- expected IBFs can be calculated with the knowledge of the set
- difference as described in the performance section.
-
- Use pseudocode of the function "validate_messages_ibf" as
- described in Expecting IBF section.
-
-8.2.4. Active Decoding
-
- In the Active Decoding state its important to prevent an attacker
- from generating and passing unlimited amount of IBF that do not
- decode or even worse generate an IBF that is constructed to sends the
- peers in an endless loop. To prevent an endless loop in decoding a
- loop detection should be implemented the simplest solution would be
- to prevent decoding of more than a given amount of elements, a more
- robust solution is to implement a algorithm that detects a loop by
- analyzing past partially decoded IBFs to detect cycles. This can be
- archived by saving the hash of all prior partly decoded IBFs hashes
- in a hashmap and check for every inserted hash if it is already in
- the hashmap.
-
- If the IBF decodes more or less elements than are plausible the
- operation MUST be terminated. The upper and lower threshold for the
- decoded elements can be calculated with the peers set size and the
- other peer committed set sizes from the *Expecting IBF* State.
-
- Security considerations for received messages:
-
- Offer If an offer for an element that never has been requested by an
- inquiry or if an offer is received twice the operation MUST be
- terminated. This requirement can be fulfilled by saving lists
- that keeps track of the state of all send inquiries and offers.
- When answering offers these lists MUST be checked.
-
- (Artwork only available as : No external link available, see
- draft-schanzen-gns-01.html for artwork.)
-
- Figure 41
-
- Elements If an element that never has been requested by a demand or
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 43]
-
-Internet-Draft Set Union March 2021
-
-
- is received double the operation MUST be terminated. This
- requirement can be fulfilled by a simple table that keeps track of
- the state of all send demands. If an invalid element is received
- the operation has failed and the MUST be terminated.
-
- Demand For every received demand a offer has to be send in advance.
- If an demand for an element is received that never has been
- offered or the offer already has been answered with a demand the
- operation MUST be terminated. Its required to implement a list
- which keeps track of the state of all send offers and received
- demands.
-
- Done The done message is only received if the IBF has been finished
- decoding and all offers have been sent. If the done message is
- received before the decoding of the IBF is finished or all open
- offers and demands have been answered the operation MUST be
- terminated. The 512-bit hash of the complete reconciled set
- contained in the done message is required to ensures that both
- sets are truly identical. If the sets differ a resynchronisation
- is required. The count of possible resynchronisation MUST be
- limited to prevent resource exhaustion attacks.
-
-8.2.5. Finish Closing
-
- In case not all sent demands or inquiries have ben answered in time a
- pre defined timeout the operation has failed and MUST be terminated.
-
- Security considerations for received messages:
-
- Elements Checked as described in section Active Decoding.
-
-8.2.6. Finished
-
- In this state the connection is terminated, so no security
- considerations are needed.
-
-8.2.7. Expect SE
-
- Security considerations for received messages:
-
- Strata Estimator In case the Strata Estimator does not decode the
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 44]
-
-Internet-Draft Set Union March 2021
-
-
- operation MUST be terminated to prevent to get to a unresolvable
- state. The set difference calculated from the strata estimator
- needs to be plausible, to ensure this multiple factors need to be
- considered: The absolute plausible maximum of elements in a set
- which has to be predefined according to the use case and the
- maximal plausible element increase since the last successful set
- reconciliation which should be either predefined or can be
- calculated with the gaussian distribution function over all passed
- set reconciliations.
-
- In case of compressed strata estimators the decompression
- algorithm has to be protected against decompression memory
- corruption (memory overflow).
-
-8.2.8. Full Receiving
-
- Security considerations for received messages:
-
- Full Element The peer in *Full Receiving* state needs to check that
- exactly the number of elements is received from the remote peer as
- he initially committed too. If the remote peer transmits less or
- more elements the operation MUST be terminated.
-
- Full Done When the full done message is received from the remote
- peer all elements that the remote peer has committed to needs to
- be received otherwise the operation MUST be terminated. After
- receiving the full done message no future elements should be
- accepted. The 512-bit hash of the complete reconciled set
- contained in the full done message is required to ensures that
- both sets are truly identical. If the sets differ a
- resynchronisation is required. The count of possible
- resynchronisation MUST be limited to prevent resource exhaustion
- attacks.
-
-8.2.9. Passive Decoding
-
- Security considerations for received messages:
-
- IBF In case an IBF message is received by the peer a active/passive
- role switch is initiated by the active decoding remote peer. In
- this instance the peer should wait for all open offers and demands
- to be fulfilled to prevent retransmission before switching into
- active decoding operation mode. A switch into active decoding
- mode should only be permitted for a predefined number of times as
- described in the top section of the security section.
-
- Inquiry A check needs to be in place that prevents receiving a
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 45]
-
-Internet-Draft Set Union March 2021
-
-
- inquiry for an element multiple times or more inquiries than are
- plausible. The amount of inquiries that is plausible can be
- estimated by considering known values as the remote set size, the
- local set size, the predefined absolute maximum of elements in the
- set which is defined by real world limitations. To implement this
- restrictions a list with all received inquiries should be stored
- and new inquiries should be checked against.
-
- Demand Same action as described for demand message in section Active
- Decoding.
-
- Offer Same action as described for offer message in section Active
- Decoding.
-
- Done Same action as described for done message in section Active
- Decoding.
-
- Elements Same action as described for element message in section
- Active Decoding.
-
-8.2.10. Finish Waiting
-
- In case not all sent demands or inquiries have ben answered in time
- the operation has failed and MUST be terminated.
-
- Security considerations for received messages:
-
- Elements Checked as described in section Active Decoding.
-
-9. GANA Considerations
-
- GANA is requested to amend the "GNUnet Message Type" registry as
- follows:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 46]
-
-Internet-Draft Set Union March 2021
-
-
- Type | Name | References | Description
-
--------+----------------------------+------------+--------------------------
- 559 | SETU_P2P_REQUEST_FULL | [This.I-D] | Request the full set of
the other peer
- 560 | SETU_P2P_DEMAND | [This.I-D] | Demand the whole
element from the other peer, given only the hash code.
- 561 | SETU_P2P_INQUIRY | [This.I-D] | Tell the other peer to
send us a list of hashes that match an IBF key.
- 562 | SETU_P2P_OFFER | [This.I-D] | Tell the other peer
which hashes match a given IBF key.
- 563 | SETU_P2P_OPERATION_REQUEST | [This.I-D] | Request a set union
operation from a remote peer.
- 564 | SETU_P2P_SE | [This.I-D] | Strata Estimator
uncompressed
- 565 | SETU_P2P_IBF | [This.I-D] | Invertible Bloom Filter
Slice.
- 566 | SETU_P2P_ELEMENTS | [This.I-D] | Actual set elements.
- 567 | SETU_P2P_IBF_LAST | [This.I-D] | Invertible Bloom Filter
Last Slice.
- 568 | SETU_P2P_DONE | [This.I-D] | Set operation is done.
- 569 | SETU_P2P_SEC | [This.I-D] | Strata Estimator
compressed
- 570 | SETU_P2P_FULL_DONE | [This.I-D] | All elements in full
synchronization mode have been send is done.
- 571 | SETU_P2P_FULL_ELEMENT | [This.I-D] | Send an actual element
in full synchronization mode.
-
-
- Figure 42
-
-10. Contributors
-
- The original GNUnet implementation of the Byzantine Fault Tolerant
- Set Reconciliation protocol has mainly been written by Florian Dold
- and Christian Grothoff.
-
-11. Normative References
-
- [RFC5869] Krawczyk, H. and P. Eronen, "HMAC-based Extract-and-Expand
- Key Derivation Function (HKDF)", RFC 5869,
- DOI 10.17487/RFC5869, May 2010,
- <https://www.rfc-editor.org/info/rfc5869>.
-
- [RFC1034] Mockapetris, P., "Domain names - concepts and facilities",
- STD 13, RFC 1034, DOI 10.17487/RFC1034, November 1987,
- <https://www.rfc-editor.org/info/rfc1034>.
-
- [RFC1035] Mockapetris, P., "Domain names - implementation and
- specification", STD 13, RFC 1035, DOI 10.17487/RFC1035,
- November 1987, <https://www.rfc-editor.org/info/rfc1035>.
-
- [RFC2782] Gulbrandsen, A., Vixie, P., and L. Esibov, "A DNS RR for
- specifying the location of services (DNS SRV)", RFC 2782,
- DOI 10.17487/RFC2782, February 2000,
- <https://www.rfc-editor.org/info/rfc2782>.
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 47]
-
-Internet-Draft Set Union March 2021
-
-
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
- Requirement Levels", BCP 14, RFC 2119,
- DOI 10.17487/RFC2119, March 1997,
- <https://www.rfc-editor.org/info/rfc2119>.
-
- [RFC3629] Yergeau, F., "UTF-8, a transformation format of ISO
- 10646", STD 63, RFC 3629, DOI 10.17487/RFC3629, November
- 2003, <https://www.rfc-editor.org/info/rfc3629>.
-
- [RFC3686] Housley, R., "Using Advanced Encryption Standard (AES)
- Counter Mode With IPsec Encapsulating Security Payload
- (ESP)", RFC 3686, DOI 10.17487/RFC3686, January 2004,
- <https://www.rfc-editor.org/info/rfc3686>.
-
- [RFC3826] Blumenthal, U., Maino, F., and K. McCloghrie, "The
- Advanced Encryption Standard (AES) Cipher Algorithm in the
- SNMP User-based Security Model", RFC 3826,
- DOI 10.17487/RFC3826, June 2004,
- <https://www.rfc-editor.org/info/rfc3826>.
-
- [RFC3912] Daigle, L., "WHOIS Protocol Specification", RFC 3912,
- DOI 10.17487/RFC3912, September 2004,
- <https://www.rfc-editor.org/info/rfc3912>.
-
- [RFC5890] Klensin, J., "Internationalized Domain Names for
- Applications (IDNA): Definitions and Document Framework",
- RFC 5890, DOI 10.17487/RFC5890, August 2010,
- <https://www.rfc-editor.org/info/rfc5890>.
-
- [RFC5891] Klensin, J., "Internationalized Domain Names in
- Applications (IDNA): Protocol", RFC 5891,
- DOI 10.17487/RFC5891, August 2010,
- <https://www.rfc-editor.org/info/rfc5891>.
-
- [RFC6781] Kolkman, O., Mekking, W., and R. Gieben, "DNSSEC
- Operational Practices, Version 2", RFC 6781,
- DOI 10.17487/RFC6781, December 2012,
- <https://www.rfc-editor.org/info/rfc6781>.
-
- [RFC6895] Eastlake 3rd, D., "Domain Name System (DNS) IANA
- Considerations", BCP 42, RFC 6895, DOI 10.17487/RFC6895,
- April 2013, <https://www.rfc-editor.org/info/rfc6895>.
-
- [RFC6979] Pornin, T., "Deterministic Usage of the Digital Signature
- Algorithm (DSA) and Elliptic Curve Digital Signature
- Algorithm (ECDSA)", RFC 6979, DOI 10.17487/RFC6979, August
- 2013, <https://www.rfc-editor.org/info/rfc6979>.
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 48]
-
-Internet-Draft Set Union March 2021
-
-
- [RFC7748] Langley, A., Hamburg, M., and S. Turner, "Elliptic Curves
- for Security", RFC 7748, DOI 10.17487/RFC7748, January
- 2016, <https://www.rfc-editor.org/info/rfc7748>.
-
- [RFC8032] Josefsson, S. and I. Liusvaara, "Edwards-Curve Digital
- Signature Algorithm (EdDSA)", RFC 8032,
- DOI 10.17487/RFC8032, January 2017,
- <https://www.rfc-editor.org/info/rfc8032>.
-
- [RFC8126] Cotton, M., Leiba, B., and T. Narten, "Guidelines for
- Writing an IANA Considerations Section in RFCs", BCP 26,
- RFC 8126, DOI 10.17487/RFC8126, June 2017,
- <https://www.rfc-editor.org/info/rfc8126>.
-
- [GANA] GNUnet e.V., "GNUnet Assigned Numbers Authority (GANA)",
- April 2020, <https://gana.gnunet.org/>.
-
- [CryptographicallySecureVoting]
- Dold, F., "Cryptographically Secure, DistributedElectronic
- Voting",
- <https://git.gnunet.org/bibliography.git/plain/docs/
- ba_dold_voting_24aug2014.pdf>.
-
- [GNUNET] Wachs, M., Schanzenbach, M., and C. Grothoff, "A
- Censorship-Resistant, Privacy-Enhancing andFully
- Decentralized Name System",
- <https://git.gnunet.org/bibliography.git/plain/docs/
- gns2014wachs.pdf>.
-
- [Eppstein] Eppstein, D., Goodrich, M., Uyeda, F., and G. Varghese,
- "What's the Difference? Efficient Set Reconciliation
- without Prior Context",
- <https://doi.org/10.1145/2018436.2018462>.
-
- [GNS] Wachs, M., Schanzenbach, M., and C. Grothoff, "A
- Censorship-Resistant, Privacy-Enhancing and Fully
- Decentralized Name System", 2014,
- <https://doi.org/10.1007/978-3-319-12280-9_9>.
-
- [R5N] Evans, N. S. and C. Grothoff, "R5N: Randomized recursive
- routing for restricted-route networks", 2011,
- <https://doi.org/10.1109/ICNSS.2011.6060022>.
-
- [Argon2] Biryukov, A., Dinu, D., Khovratovich, D., and S.
- Josefsson, "The memory-hard Argon2 password hash and
- proof-of-work function", March 2020,
- <https://datatracker.ietf.org/doc/draft-irtf-cfrg-
- argon2/>.
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 49]
-
-Internet-Draft Set Union March 2021
-
-
- [MODES] Dworkin, M., "Recommendation for Block Cipher Modes of
- Operation: Methods and Techniques", December 2001,
- <https://doi.org/10.6028/NIST.SP.800-38A>.
-
- [ed25519] Bernstein, D., Duif, N., Lange, T., Schwabe, P., and B.
- Yang, "High-Speed High-Security Signatures", 2011,
- <http://link.springer.com/
- chapter/10.1007/978-3-642-23951-9_9>.
-
-Appendix A. Test Vectors
-
-A.1. Map Function
-
- INPUTS:
-
- key: 0xFFFFFFFFFFFFFFFF (64-bit) number_of_buckets_per_element: 3
- ibf_size: 300
-
- OUTPUT:
-
- ["222","32","10"]
-
-A.2. ID Calculation Function
-
- INPUTS:
-
- element: 0xadadadadadadadad ibf_salt 0x3F (6-bit)
-
- OUTPUT:
-
- 0xFFFFFFFFFFFFFFFF
-
-Authors' Addresses
-
- Elias Summermatter
- Seccom GmbH
- Brunnmattstrasse 44
- CH-3007 Bern
- Switzerland
-
- Email: elias.summermatter@seccom.ch
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 50]
-
-Internet-Draft Set Union March 2021
-
-
- Christian Grothoff
- Berner Fachhochschule
- Hoeheweg 80
- CH-2501 Biel/Bienne
- Switzerland
-
- Email: grothoff@gnunet.org
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-Summermatter & Grothoff Expires 16 September 2021 [Page 51]
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [lsd0003] branch master updated: generate files do not belong into git,
gnunet <=