Re: [Last-Call] Secdir last call review of draft-ietf-sfc-proof-of-transit-08

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Christian,

Thanks a lot for the detailed follow-up. Please see inline.

> -----Original Message-----
> From: Christian Huitema <huitema@xxxxxxxxxxx>
> Sent: Thursday, 23 September 2021 22:13
> To: Frank Brockners (fbrockne) <fbrockne@xxxxxxxxx>; secdir@xxxxxxxx
> Cc: shwetha.bhandari@xxxxxxxxx; last-call@xxxxxxxx; Youell, Stephen
> <stephen.youell@xxxxxxxxxxxx>; sfc@xxxxxxxx; draft-ietf-sfc-proof-of-
> transit.all@xxxxxxxx
> Subject: Re: [Last-Call] Secdir last call review of draft-ietf-sfc-proof-of-transit-
> 08
> 
> 
> On 9/23/2021 12:31 PM, Frank Brockners (fbrockne) wrote:
> > Hi Christian,
> >
> > Thanks a lot for your detailed review. Please see inline.
> >
> >> -----Original Message-----
> >> From: Christian Huitema via Datatracker <noreply@xxxxxxxx>
> >> Sent: Monday, 20 September 2021 05:48
> >> To: secdir@xxxxxxxx
> >> Cc: draft-ietf-sfc-proof-of-transit.all@xxxxxxxx; last-call@xxxxxxxx;
> >> sfc@xxxxxxxx
> >> Subject: Secdir last call review of
> >> draft-ietf-sfc-proof-of-transit-08
> >>
> >> Reviewer: Christian Huitema
> >> Review result: Serious Issues
> >>
> >> I have reviewed this document as part of the security directorate's
> >> ongoing effort to review all IETF documents being processed by the
> >> IESG.  These comments were written primarily for the benefit of the security
> area directors.
> >> Document editors and WG chairs should treat these comments just like
> >> any other last call comments.
> >>
> >> This document proposes a security mechanism to prove that traffic
> >> transited through all specified nodes in a path. The mechanism works
> >> by adding a short option to each packet for which transit shall be
> >> verified. The option consists of a random number set by the
> >> originator of the packet, and a sum field to which each transit node
> >> adds a value depending on public parameters, on the random number and
> >> on secrets held by the node. The destination has access to all the
> >> secrets held by the nodes on the path, and can verify whether or not
> >> the final sum corresponds to the sum of expected values. The proposed size
> of the random number and the sum field is 64 bits.
> >>
> >> In the paragraph above, I described the mechanism without mentioning
> >> the algorithm used to compute these 64 bit numbers. The 64 bit size
> >> is obviously a
> >> concern: for cryptographic applications, 64 bits is not a large
> >> number, and that might be a weakness whatever the proposed algorithm.
> >> The actual algorithm appears to be a bespoke derivation of Shamir's
> >> Secret Sharing algorithm (SSS). In other word, it is a case of "inventing your
> own crypto".
> > ...FB: SSS is a well know algorithm and draft-ietf-sfc-proof-of-transit does not
> modify it.
> > All draft-ietf-sfc-proof-of-transit does is to operationalize the SSS algorithm
> for the proof of transit use case.
> >
> > Also note that the draft does not require the use of 64 bit numbers.
> > Nor does draft require a minimum time between changing the secrets.
> > What particular attack are you concerned about where 64 bit numbers are a
> concern?
> >
> >> SSS relies on the representation of polynomials as a sum of Lagrange
> >> Basis Polynomials. Each of the participating nodes holds a share of
> >> the secret represented by a point on the polynomial curve. A
> >> polynomial of degree K on the field of integers modulo a prime number
> >> N can only be revealed if at list K+1 participants reveal the value
> >> of their point. The safety of the algorithm relies on the size of the
> >> number N and on the fact that the secret shall be revealed only once.
> >> But the algorithm does not use SSS directly, so it deserves its own security
> analysis instead of relying simply on Shamir's work.
> >>
> >> The proposed algorithm uses two polynomials of degree K for a path
> >> containing
> >> K+1 nodes, on a field defined by a prime number N of 64 bits. One of
> >> K+the
> >> polynomial, POLY-1, is secret, and only fully known by the verifying node.
> >> The other, POLY-2 is public, with the constant coefficient set at a
> >> random value RND for each packet.
> >>
> >> For each packet, the goal is compute the value of POLY-1 plus POLY-2
> >> at the point 0 -- that is, the constant coefficient of POLY-3 = POLY-1 + POLY-
> 2.
> >>
> >> Without going in too much details, one can observe that the constant
> >> coefficient of POLY-3 is equal to the sum of the constant
> >> coefficients of POLY-1 and POLY-2, and that the constant coefficient
> >> of POLY-2 is the value RND present in each packet. In the example
> >> given in section 3.3.2, the numbers are computed modulo 53, the
> >> constant coefficient of POLY-1 is 10, and the value RND is 45. The
> >> final sum  CML is indeed
> >> 10 + 45 = 2 mod 53.
> >>
> >> To me, this appears as a serious weakness in the algorithm. If an
> >> adversary can observe the value RND and CML for a first packet, it
> >> can retrieve the constant coefficient of POLY-1, and thus can predict
> >> the value of CML for any other packet. That does not seem very secure.
> > ...FB: There seems to be a bit of confusion or misreading of how the method
> works. In the above statement you seem to assume that the verifier would not
> be part of the proof-chain, so that the final CML value would be somehow
> exposed to an external entity along with RND. This is not the case. The verifier is
> the last node (k+1) in the proof-chain.
> >
> > At concept level, the method reconstructs the polynomial hop by hop, picking
> up a point on the curve at every hop. Only final node in the proof-chain, which is
> also the verifier, acts on the information of all the k+1 points and as such is able
> to reconstruct the polynomial.
> >
> > In section 3.2.1, the draft explicitly states that the verifier *is* part of the
> proof-chain: "Each of the k+1 nodes (including verifier) are assigned a point on
> the polynomial i.e., shares of the SECRET." The fact that the verifier, i.e., the last
> node in the proof-chain ("k+1"),  can retrieve the secret, is desired and
> intentional, because the verifier needs to compare the result of the iterative
> construction of the secret with the secret value it received from the controller.
> This is how the system is designed, and the calculation of (10+45) mod 53 = 2 is
> part of the verification.
> 
> OK. That's slightly less bad. But it is still very bad crypto, because you are
> effectively doing a linear combination.
> 
> You are evaluating POLY-3 = POLY-1 + POLY-2
> 
> POLY-2 can be written as POLY-2 = RND + POLY-2-NC, in which POLY2-NC only
> contains the non constant terms -- that is, POLY-2-NC(0) = 0
> 
> Then for any point X, we get POLY-3(X) = POLY-1(X) + POLY2-NC(X) + RND For a
> given value Xj of X, this means we can express : POLY-3(Xj) = Vj + RND In which Vj
> is a constant term = POLY-1(Xj) + POLY2-NC(Xj)
> 
> Each node will increment the cumul by the value LPCj * POLY-3(Xj) = LPCj
> * (Vj + RND)
> 
> Suppose that an adversary can observe the value of CML before and after being
> incremented by node Xj. Suppose that it could do that twice. Then it has the
> values:
> 
> CML1-before-j = C1b
> CML1-after-j = C1a
> D1 = C1a - C1b = LPCj * (Vj + RND1)
> 
> CML1-before-j = C2b
> CML1-after-j = C2a
> D2 = C2a - C2b = LPCj * (Vj + RND2)
> 
> D2-D1 = LPCj*(RND2-RND1)
> 
> LPCj = (RND2-RND1)/(D2-D1)
> Vj = D2/LPCj - RND2
> 
> The inverse of numbers modulo a prime P is easily computed -- see Fermat's
> little theorem.
> 
> Once the input and output of a node have been observed twice, it becomes easy
> to update the cumulative sum CML while bypassing these nodes.

...FB: This is great. Thanks for spelling out the details.  You raise a good point: For the solution to make sense, we need to ensure that an attacker cannot observe the input and output of a node. 
To ensure this does not happen, we must require the communication to/from the node to be encrypted, e.g., through link layer encryption of at least the proof-of-transit data fields. 
We'll add this requirement to the draft - and also detail the threat you describe above in detail in the security considerations section.

Thanks again, Frank


> 
> The scheme described in the draft is definitely not equivalent to SSS.
> It boils down to linear combinations of coefficients, and it is not secure.
> 
> -- Christian Huitema
> 
> 
> 
> 
> 

-- 
last-call mailing list
last-call@xxxxxxxx
https://www.ietf.org/mailman/listinfo/last-call



[Index of Archives]     [IETF Annoucements]     [IETF]     [IP Storage]     [Yosemite News]     [Linux SCTP]     [Linux Newbies]     [Mhonarc]     [Fedora Users]

  Powered by Linux