Re: [CFRG] On the properties of sid in CPace

Filippo Valsorda <filippo@ml.filippo.io> Thu, 15 April 2021 12:00 UTC

Return-Path: <filippo@ml.filippo.io>
X-Original-To: cfrg@ietfa.amsl.com
Delivered-To: cfrg@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id F40E73A1D10 for <cfrg@ietfa.amsl.com>; Thu, 15 Apr 2021 05:00:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.719
X-Spam-Level:
X-Spam-Status: No, score=-2.719 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_EF=-0.1, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=-0.01, RCVD_IN_MSPIKE_WL=-0.01, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=filippo.io header.b=gu+Iej9G; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=aAAR532z
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id sVjn_0URVQhP for <cfrg@ietfa.amsl.com>; Thu, 15 Apr 2021 05:00:05 -0700 (PDT)
Received: from out2-smtp.messagingengine.com (out2-smtp.messagingengine.com [66.111.4.26]) (using TLSv1.2 with cipher ADH-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 44AB43A1D0B for <cfrg@irtf.org>; Thu, 15 Apr 2021 05:00:05 -0700 (PDT)
Received: from compute3.internal (compute3.nyi.internal [10.202.2.43]) by mailout.nyi.internal (Postfix) with ESMTP id 82B055C0176 for <cfrg@irtf.org>; Thu, 15 Apr 2021 08:00:01 -0400 (EDT)
Received: from imap1 ([10.202.2.51]) by compute3.internal (MEProxy); Thu, 15 Apr 2021 08:00:01 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=filippo.io; h= mime-version:message-id:in-reply-to:references:date:from:to :subject:content-type; s=fm3; bh=l93qf9wy/z19FSj9jnFKTaPLD9wFPFf RApSdHjkzOg8=; b=gu+Iej9G+SgVtZcwEyGY4lWUt3TyL4TF91Zh9/4zntlSUVY yjzgdftCYqZvWOfolZGjx8CAQfPvx9IWRmpym18A71ssfTa0gmp3wj0zuOo/OeZg OU3y9YYyusWTyz6lodpWw0a+XkWLTGf4iSiYQDsOkyZl0rGmE0+XEudpw/W0u6jH x+pquPFa7nN/oENsDGodA1eyrUeYHrzrppJjxyS1TNsWfaw8GWAHQixxzKxtSNgG KInFRGDd1ulkpRuOJNmwMjEdr82BZ31PW42ERVNhDQHyAP5aiiM3bLtsolCAR1pb Z20rjYVaoLiGFkeWoIud9cNEPrQAhXJjbHWfAhA==
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-proxy :x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm2; bh=l93qf9 wy/z19FSj9jnFKTaPLD9wFPFfRApSdHjkzOg8=; b=aAAR532zieR6hIZc14wMNr VWGX/zZh5oWvV8eTqxkNDqZz0TFbNtP6QTpthiB8/yZ03pQAV/l5syiPnI9AbPxF 25XYU74TyMQSxsAh+211VueghaANK6tqYJFyYti5Us3Jr4PRmHHfpU/k+pIJqBbO aYfM6PzlUKnxSR3lycduUJXsWmOfwd4uB9YpNI2WX2Kv7cgZtD6nQVMb+PZs91PH dbQUiHV4kfsIRuzDyiFCQ62GxeMdrNoG/XlTlqC+oltNLM4Is0CfWyjrk4gsK/Bm r9tJo+IDHoGhKpz+9ohKMRw1Sivfq+rAsOr8LMQDeZ1pKgp95HxUbVJYgJIEoyCQ ==
X-ME-Sender: <xms:wCp4YKMBQX2XuD5tkMdBpuW9gCfJiS3ZOR_OQgri6qGnN-PbUP0wpA> <xme:wCp4YI9AYOBFlSG_iBC_JSfIsUkHuVSeM_SfIOaBNappUQz6p9jMNzQrgc0QmhCsw a1uanhhXi4VaM4NSQ>
X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeduledrudelfedghedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpefofgggkfgjfhffhffvufgtsegrtd erreerredtnecuhfhrohhmpedfhfhilhhiphhpohcugggrlhhsohhruggrfdcuoehfihhl ihhpphhosehmlhdrfhhilhhiphhpohdrihhoqeenucggtffrrghtthgvrhhnpeehudffud efkeeugfeifefgtdevteeikeffvedvudegieejteefgffgfeekgeevteenucffohhmrghi nhepihgvthhfrdhorhhgpdhirhhtfhdrohhrghenucevlhhushhtvghrufhiiigvpedtne curfgrrhgrmhepmhgrihhlfhhrohhmpehfihhlihhpphhosehmlhdrfhhilhhiphhpohdr ihho
X-ME-Proxy: <xmx:wCp4YBRPMIDW3p5MAt4276L7awX7sbJj7dyMHfTeUL_8eODHC7TLUw> <xmx:wCp4YKsP8X72CNSr3X-GBq7_j0Y5kkJnrPCXMTZ4hlCs2ozQh-u-9w> <xmx:wCp4YCcSn5hngvNrhF5FNINM4X_Nf9_5ITWkl3TmzVWP8ybE9qrT6A> <xmx:wSp4YMrdRItqHIDK25m5yAIGdflhVJkPbkBMLBFm2NDdXHyZs0JJPA>
Received: by mailuser.nyi.internal (Postfix, from userid 501) id AAC581300069; Thu, 15 Apr 2021 08:00:00 -0400 (EDT)
X-Mailer: MessagingEngine.com Webmail Interface
User-Agent: Cyrus-JMAP/3.5.0-alpha0-273-g8500d2492d-fm-20210323.002-g8500d249
Mime-Version: 1.0
Message-Id: <258984cb-5c7b-48a6-b657-1f5c82862814@www.fastmail.com>
In-Reply-To: <34180d3d-0f7a-b567-d689-5654e4e3fad5@gmail.com>
References: <03a81355-32e2-465e-b08a-e33d02112ab8@www.fastmail.com> <28627528-517a-368f-3482-ab8f768bdf75@gmail.com> <a8f60406-4b3e-4d69-823d-b27bd2130011@www.fastmail.com> <3374a131-8e54-411d-8d00-50f5acbaadf5@gmail.com> <e7182544-658c-42ce-9018-9c1948c54abf@www.fastmail.com> <34180d3d-0f7a-b567-d689-5654e4e3fad5@gmail.com>
Date: Thu, 15 Apr 2021 13:59:39 +0200
From: Filippo Valsorda <filippo@ml.filippo.io>
To: cfrg@irtf.org
Content-Type: multipart/alternative; boundary="21b301ea4fb04b08ade7f1369282d328"
Archived-At: <https://mailarchive.ietf.org/arch/msg/cfrg/Jkvn7gRePIaI5TEEHq87Py_r2y0>
Subject: Re: [CFRG] On the properties of sid in CPace
X-BeenThere: cfrg@irtf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Crypto Forum Research Group <cfrg.irtf.org>
List-Unsubscribe: <https://www.irtf.org/mailman/options/cfrg>, <mailto:cfrg-request@irtf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/cfrg/>
List-Post: <mailto:cfrg@irtf.org>
List-Help: <mailto:cfrg-request@irtf.org?subject=help>
List-Subscribe: <https://www.irtf.org/mailman/listinfo/cfrg>, <mailto:cfrg-request@irtf.org?subject=subscribe>
X-List-Received-Date: Thu, 15 Apr 2021 12:00:11 -0000

2021-04-15 07:46 GMT+02:00 Julia Hesse <juliahesse2@gmail.com <mailto:juliahesse2%40gmail.com>>:
> Hi Filippo,
> 
> 
>> When you say a "one-time protocol", does that mean executing it only
>> once per password?
>> 
> it depends on whether the protocol uses the isolated sid or not. E.g., 
> in case it always uses sid,P,P' (where P,P' are identifiers of the two 
> participants), the current security analysis seems to hold for one 
> execution per pair of identifiers. That means you and I could exchange 
> at most one key. Of course, we do not want such restrictions for the 
> draft. All I'm saying in this thread is that the current security 
> analysis does not support more executions if sids are initiator-chosen.

Hi Julia,

Oh, so if I understand correctly one execution means one per identities
pair, which makes sense, thank you.

Looking forward to hearing if you can get past that restriction, and
thank you for walking me through it.

> Related note: the UC model, and therefore all security analyses of 
> CPace, assume that these party identifiers are known on both sides. 
> However, this might be impractical for some applications. Let's say we 
> recommend in the draft to choose identifiers as strings IP:PORT. 
> Consider a setting where my computer runs two processes, one called AUTH 
> handling authentication requests, and one called MAIN handling 
> everything else, for example network communication. While I would assume 
> that implementors can adapt the AUTH process to work with CPace, they 
> may not be able to touch the MAIN process. If MAIN internally rewrites 
> IP:PORT pairs to another identifier PID1, then we are suddenly in a 
> situation where both ends of CPace do not have any joint understanding 
> of how they call themselves.
> To summarize: you are very right in being worried about loading 
> implementors with instantiating the various CPace parameters. As I said, 
> we are working on simplifications. For example, we are currently looking 
> into completely removing party identifiers from hashes in the security 
> analysis, such that we can change some parameters in the draft to be 
> optional.

Indeed, this is why I opened this thread in the first place: I was
trying to get a better sense of how to map protocols (where we rarely
have access to stable, shared, and unique identities) to CPace
parameters. I am glad to hear you are working on it!

>> 
>> Oh, I am not suggesting using Ya and Yb as nonces, like in the original
>> thread. I am firmly on the engineering side, so if you folks are not
>> comfortable with it I am not going to mess with it :) I think my
>> suggestion is the same from a theoretical point of view, and if it isn't
>> I am failing to understand or explain something.
>> 
>> What I'm saying is that currently any implementer or higher level
>> protocol designer needs to figure out the difference between sid,
>> identities, and additional data, and match them with parts of their
>> protocol. My suggestion doesn't remove or repurpose anything, it just
>> rewords everything in terms of a protocol transcript and what it must
>> include.
>> 
>> Instead of hashing sid and CI into G, and maybe the transcript into CI,
>> it says to hash the whole transcript, and that it must include unique
>> values from both sides, which means it includes the sid. Then instead
>> of hashing sid, Yas, and Ybs into ISK, it says to again hash the whole
>> transcript, which at this point will include the sid values from before
>> CPace was run, and Yas and Ybs. Yas and Ybs are in transcript2 because
>> they are already in the draft, not to replace sid.
> 
> Ah, sorry for my misunderstanding. What you propose would clearly 
> simplify, but I don't feel able to discuss this without knowing the 
> exact requirements for all the parameters in the draft,e.g., how they 
> map to the parameters used in the security analysis. Let me get back to 
> you when we are at that point.
> 
> Best,
> Julia
> 
> 
> 
> 
> 
> 
>> 
>>>> 
>>>> (This implies sending Yas and Ybs on the wire, which raises the question
>>>> of why the current draft sends Ya and Yb instead. Sending something
>>>> different from what's hashed in the transcript seems like asking for
>>>> trouble. Of course none of this would matter for a proper prime order
>>>> group such as ristretto255...)
>>> 
>>>> 
>>>> Besides being IMHO clearer about how to integrate in a protocol, this
>>>> variant has two other advantages: it encourages the use of transcripts
>>>> even further, and it eliminates the difference between CI and sid, which
>>>> is still not clear to me.
>>>> 
>>> Quick question: what is the difference between Ya and Yas here?
>> 
>> Yas = strip_sign_information(Ya)
>> 
>> It's the x or u coordinate without the sign bit for the other coordinate.
>> 
>>> Thanks for the proposal! We are currently in the process of reviewing the contents of the draft, including revisiting the roles of DSI,CI,sid,party identifiers etc., and we will take your proposal into account. 
>>> 
>>> Best,
>>> Julia
>>> 
>>> 
>>>> What do you think?
>>>> 
>>>> Cheers,
>>>> Filippo
>>>> 
>>>> 2021-04-12 21:51 GMT+02:00 Julia Hesse <juliahesse2@gmail.com <mailto:juliahesse2%40gmail.com>>:
>>>>> Dear Filippo,
>>>>> 
>>>>> thank you for opening this topic, which certainly needs discussion. I 
>>>>> planned to write about sid establishment in general for a while, so I'm 
>>>>> happy you are finally forcing me :) First, let me try to 
>>>>> complement/structure some prior information given on this list about 
>>>>> session identifiers in UC.
>>>>> 
>>>>> From the side of UC, there are 2 requirements on the sid of a protocol 
>>>>> (for the purpose of this email, it's okay to think of a 2-party key 
>>>>> exchange protocol):
>>>>>  (1) uniqueness
>>>>>  (2) known in advance
>>>>> Both properties are assumptions made by the UC framework, which is why 
>>>>> protocols formulated in UC terminology never check uniqueness of the sid 
>>>>> given to them. It is simply an assumption, meaning that it is not 
>>>>> possible to model protocol executions with session identifiers are not 
>>>>> unique or not known in advance. As Ran explained here 
>>>>> [https://mailarchive.ietf.org/arch/msg/cfrg/fgwMYLfaa1ZbF_UgKcurse211KE/], 
>>>>> he chose these mechanisms for the proper modeling of interactive 
>>>>> processes in dynamic systems.
>>>>> 
>>>>> Okay. But who choses sid's, and how?
>>>>> 
>>>>> Combining both properties, for a two-party protocol our options are 
>>>>> essentially as follows:
>>>>> (1) sid is given as input to initiator, the responder obtains the sid 
>>>>> with the initiator's first message and outputs it to the application.
>>>>> (2) sid is given as input to both parties.
>>>>> In both cases, the application needs to ensure uniqueness of the sid for 
>>>>> proven UC guarantees to hold even if the protocol is executed multiple 
>>>>> times. For (2), one could let both parties contribute their own 
>>>>> randomness in an interactive protocol that is run *as part of the 
>>>>> application*. A non-interactive way is to let both parties' application 
>>>>> processes derive a unique sid from the application's session's values, 
>>>>> e.g. sid=(IP-A,IP-B,application-transcript). There might be ways to 
>>>>> nicely integrate such sid establishment into application protocols 
>>>>> (e.g., TLS or HTTPS) by piggybacking messages etc., but they all exploit 
>>>>> properties of the specific application protocol. What I want to say is 
>>>>> that, imo, there is no way of telling what the best sid establishment 
>>>>> methods for CPace or OPAQUE are without considering the concrete 
>>>>> application protocols.
>>>>> 
>>>>> If we want to provide and analyze an application-independent method for 
>>>>> session identifier establishment, we need to switch to a multi-session 
>>>>> version of, e.g., key exchange (as hinted by Ran in his post already). A 
>>>>> practical example of such a multi-session protocol is the DH key 
>>>>> exchanges within TLS1.3 (essentially, all of them, seen as one single 
>>>>> protocol execution that runs since the deployment of TLS1.3). Since this 
>>>>> protocol is started only once and runs during the lifetime of TLS1.3, we 
>>>>> can simply set sid=DHKE_TLS1.3. In this protocol, it is up to the 
>>>>> parties to keep track of and distinguish their different attempts to 
>>>>> exchange keys. Thus, any multi-session key exchange protocol will have 
>>>>> to incorporate a mechanism to establish unique joint identifiers 
>>>>> (``sub-session identifiers'') whenever two parties want to exchange a key.
>>>>> 
>>>>> What does this mean for CPace, which is analyzed and drafted as a 
>>>>> single-session key exchange? Let me try to answer some of your questions:
>>>>> 
>>>>> >
>>>>> > First, how does the security of CPace degrade upon sid reuse? If it 
>>>>> > were to
>>>>> > happen due to birthday bounds, how catastrophic would it be?
>>>>> >
>>>>> > What happens if the sid can be attacker-controlled between two 
>>>>> > otherwise honest
>>>>> > peers which both know the password?
>>>>> >
>>>>> No need to invoke the birthday bound, as it happens already when the 
>>>>> responder accepts any sid proposed by a malicious initiator (who can of 
>>>>> course also play man-in-the-middle with same sid on both sides). Note 
>>>>> that we are now kind of outside the UC model for single-session CPace, 
>>>>> since in UC sid re-use "merges" CPace instances, while in reality we can 
>>>>> have different CPace executions with same sids.
>>>>> 
>>>>> To answer your question formally, one would need to consider CPace as 
>>>>> multi-session protocol. If this protocol has a built-in mechanism to 
>>>>> keep parties from running different key exchanges with matching sids, I 
>>>>> would bet that we can just use the same simulation strategy as in 
>>>>> single-session CPace, to simulate each subsession. If such mechanism is 
>>>>> missing, it seems the current proof strategy cannot be lifted to 
>>>>> multiple sessions: it breaks down upon re-use of sid for a pair of 
>>>>> parties P,P' exchanging two keys from same passwords. The individual 
>>>>> simulation strategies for those exchanges would attempt to program the 
>>>>> password hash function at the same point (sid,P,P',pw) to different 
>>>>> values, and thus fail.
>>>>> 
>>>>> This of course does not imply that there is a meaningful attack on the 
>>>>> multi-session protocol level (a protocol that has not even been 
>>>>> specified yet), nor that the conducted single-session proof is flawed. 
>>>>> It does however suggest that method (1), which is also used in the 
>>>>> current version of the draft, is not the best choice for single-session 
>>>>> CPace.
>>>>> 
>>>>> > Is uniqueness its only requirement, or does it also have to be 
>>>>> > unpredictable?
>>>>> >
>>>>> The proof of CPace does not rely on unpredictability. Of course, 
>>>>> unpredictability could help ensuring uniqueness in a setting where 
>>>>> multiple single-session CPace executions are spread in a distributed 
>>>>> system that does not have any other mean for ensuring uniqueness.
>>>>> 
>>>>> Best
>>>>> Julia
>>>>> 
>>>>> _______________________________________________
>>>>> CFRG mailing list
>>>>> CFRG@irtf.org <mailto:CFRG%40irtf.org>
>>>>> https://www.irtf.org/mailman/listinfo/cfrg
>>>>> 
>>>> 
>>>> 
>>>> _______________________________________________
CFRG mailing list
>>>> CFRG@irtf.org
>>>> https://www.irtf.org/mailman/listinfo/cfrg

>>>> 
>>> 
>>> _______________________________________________
>>> CFRG mailing list
>>> CFRG@irtf.org <mailto:CFRG%40irtf.org>
>>> https://www.irtf.org/mailman/listinfo/cfrg
>>> 
>> 
>> 
>> _______________________________________________
CFRG mailing list
>> CFRG@irtf.org
>> https://www.irtf.org/mailman/listinfo/cfrg
>> 
> 
> _______________________________________________
> CFRG mailing list
> CFRG@irtf.org <mailto:CFRG%40irtf.org>
> https://www.irtf.org/mailman/listinfo/cfrg
>