Re: [MLS] *re*joining a group with the same identity key

"Katriel Cohn-Gordon" <me@katriel.co.uk> Fri, 27 July 2018 10:35 UTC

Return-Path: <me@katriel.co.uk>
X-Original-To: mls@ietfa.amsl.com
Delivered-To: mls@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 7D9D2130F09 for <mls@ietfa.amsl.com>; Fri, 27 Jul 2018 03:35:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -2.72
X-Spam-Level:
X-Spam-Status: No, score=-2.72 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-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] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (1024-bit key) header.d=katriel.co.uk header.b=PjD4nB12; dkim=pass (2048-bit key) header.d=messagingengine.com header.b=gv3Oapp2
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 YWatAQaaJTAh for <mls@ietfa.amsl.com>; Fri, 27 Jul 2018 03:35:06 -0700 (PDT)
Received: from out1-smtp.messagingengine.com (out1-smtp.messagingengine.com [66.111.4.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id D3010130F1F for <mls@ietf.org>; Fri, 27 Jul 2018 03:35:05 -0700 (PDT)
Received: from compute6.internal (compute6.nyi.internal [10.202.2.46]) by mailout.nyi.internal (Postfix) with ESMTP id 482A021EC1 for <mls@ietf.org>; Fri, 27 Jul 2018 06:35:05 -0400 (EDT)
Received: from web4 ([10.202.2.214]) by compute6.internal (MEProxy); Fri, 27 Jul 2018 06:35:05 -0400
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=katriel.co.uk; h=content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to:x-me-sender :x-me-sender:x-sasl-enc; s=mesmtp; bh=KKJUhi9xBSvKvr44G+0cG2bo9B AZxmWjQ0X6M8x/NzM=; b=PjD4nB12XkcWlL+uVxf5Wu6k2LW8s2aJETG2/5AVPB /867oEikE33Sl0Ull7SnGmu+mbVjgHCCLzCu/YX14n2AH+jjnEhVIttLIXo2Gg83 1fdj8j89ZxJOmKvYHzVOt74PSb58dpBOGhCK6katJcnvIDWfOAfPEnw14OXc+8mi I=
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-transfer-encoding:content-type :date:from:in-reply-to:message-id:mime-version:references :subject:to:x-me-sender:x-me-sender:x-sasl-enc; s=fm3; bh=KKJUhi 9xBSvKvr44G+0cG2bo9BAZxmWjQ0X6M8x/NzM=; b=gv3Oapp2uPTAruYMWW6ji9 0sZEOwa1UA9yAyeSnYL4Z7M6oW4aNT0PMwVmI8EoMyMuRDwSTfMq+4maivHx4NQY BUsZO5a/ru6n7GM/x5HXSiEFDENxCRmDZ4xqfEn8K8XBNnn/w+VGOCGbBdD7WRAZ ZyQAWjQYjoF/BH946ffVBCplbmOHR/qioNPlR/Eo8bYvRQzGBCzrf1P2zo2fGVqp PS25BUPrU3tLNVSz5+aNFISeKW1tJ4lw1SQjxN8Znj9tYAILrwkYpFlee2TF/qqu Fc/0X48gSt7sgN/Ls5X35WUb3cz/0+52t7B5Jxgr1nMx/uOtOoLrV+ZxT2bVKObA ==
X-ME-Proxy: <xmx:WPVaW_6_gnMqkG8DYBRkdqFgXxYwCXPhNMjnz_QvwonSPnteL1NwSg> <xmx:WPVaW91wGNPer3UwVsF7ri3Uws3TXlok24JRnF6XTCZCNFNGbvvKfQ> <xmx:WPVaW4aHIiYiKVfACM5Tz6VpGxfWEZgWWSsIuAhAcwj0OBeK0TmqCg> <xmx:WPVaW9DKkkH9Al42W6rnfT7fFnrGkiq8EHmR6WEp2XFVz577TFidzQ> <xmx:WPVaWy8ySdc5ti9bP29BVHIRzeFFbNSCQW4aLNaA060Q1gBK8JctMg> <xmx:WfVaW4HbDv9fWLMGx3FlrL0gAHDm_ztBEeL7Dym_sXGgmDEKZiqdLQ>
X-ME-Sender: <xms:WPVaW_S142w1SaaNLckb_TJfS0iayydKm0sj3F6KmsosycuXNWShQw>
Received: by mailuser.nyi.internal (Postfix, from userid 99) id C0A2EBA50C; Fri, 27 Jul 2018 06:35:04 -0400 (EDT)
Message-Id: <1532687704.3670264.1454705888.2DC75109@webmail.messagingengine.com>
From: Katriel Cohn-Gordon <me@katriel.co.uk>
To: mls@ietf.org
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: multipart/alternative; boundary="_----------=_153268770436702640"
X-Mailer: MessagingEngine.com Webmail Interface - ajax-0843ff3e
Date: Fri, 27 Jul 2018 11:35:04 +0100
References: <1532516469.3570686.1452294728.424CDA78@webmail.messagingengine.com> <2046EE4E-2F25-4E89-8844-0EDAAABA2A38@fb.com> <20180725125830.6af30662@T-200> <CAL02cgRG4gXr2BfQjoUSymMk9qGQxNCV0+FQWBZjuuAcj9g+hw@mail.gmail.com> <CA+9kkMAdNLVCC4q_8xfKBrNcBnwWFxZ1pPVByq3xJsm6b3wEwQ@mail.gmail.com>
In-Reply-To: <CA+9kkMAdNLVCC4q_8xfKBrNcBnwWFxZ1pPVByq3xJsm6b3wEwQ@mail.gmail.com>
Archived-At: <https://mailarchive.ietf.org/arch/msg/mls/PoEC9OkOqLZUF4nJLq4g1nYBet8>
Subject: Re: [MLS] *re*joining a group with the same identity key
X-BeenThere: mls@ietf.org
X-Mailman-Version: 2.1.27
Precedence: list
List-Id: Messaging Layer Security <mls.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/mls>, <mailto:mls-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/mls/>
List-Post: <mailto:mls@ietf.org>
List-Help: <mailto:mls-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/mls>, <mailto:mls-request@ietf.org?subject=subscribe>
X-List-Received-Date: Fri, 27 Jul 2018 10:35:11 -0000

One thing to be clear about: all of these "rejoin"-style operations
break post-compromise security in some way, because they allow an actor
who knows long-term keys but not the current state to become a full-
fledged group member.
That's not to say we shouldn't support them, of course (it's no good
building a secure protocol that doesn't work), just that we should be
careful about when they can happen. I think it's also important to make
sure they're clearly differentiated from normal operations, so that
applications can disallow them or show warnings.
k

On Thu, 26 Jul 2018, at 5:43 PM, Ted Hardie wrote:
> On Thu, Jul 26, 2018 at 8:42 AM, Richard Barnes <rlb@ipv.sx> wrote:
>> I actually expect this to be a not-uncommon case.  Two use cases
>> immediately come to mind:>> 
>> 1. New devices in an application where identity keys are sync'ed
>>    among devices>> 2. Participants who have lost state and need to re-sync.
>> 
>> On account of (1), I had been thinking that the mapping between
>> members / leaves in the tree and identity keys would not be one-to-
>> one, but many-to-one.  Are folks thinking that there would be
>> technical problems / ambiguities in such a case?  None are coming to
>> my mind.>> 
> 
> I think there is an ambiguity, but it is fairly easy to resolve.
> There are cases where a participant attempting to add themselves with
> the same identity to an existing group is implicitly replacing their
> previous connection.  Katriel called that out as:  "Perhaps the
> simplest is to allow the device to double-join but require it to
> immediately delete the old copy of itself."  There are others where
> this is a true add-a new device that should also receive
> communication.  I think the fix here is to replace "require it to
> immediately delete" with "allow it to immediately delete"; that seems
> to support both use cases and make the decision about which is in use
> explicit and in the user's control.> 
> Ted
> 
>  
>> 
>> It does seem worth thinking about the re-sync case (2), i.e., the
>> case where a participant has most of his state.  If he's forgotten
>> everything besides his identity private key (or including the
>> identity private key), I don't think there's much you can do but
>> treat him like a new participant.  If he remembers his position in
>> the tree, it seems like you could do a "re-sync" transaction that's
>> like an add, but for that position in the tree -- it's the same logic
>> as an add, except instead of the frontier, you send the copath for
>> that position; for other nodes, it just looks like an Update at that
>> position.>> 
>> (Aside: This reinforces that we really only have 1.2 operations here:
>> Update + handle-update-at-edge + encrypt-leaf-secret)>> 
>> It also seems like if we can solve the "re-sync a member with lost
>> state" problem, then we can probably also solve the "heal a network
>> partition" problem that Dennis raises.  Assuming we can choose a
>> winning partition and appoint someone to do the merge, the person
>> doing the merge can just re-initialize the losing members to their
>> point in the tree, as if they had lost their state.>> 
>> --Richard
>> 
>> 
>> On Wed, Jul 25, 2018 at 7:59 AM Dennis Jackson
>> <dennis.jackson@cs.ox.ac.uk> wrote:>>> me@katriel.co.uk<mailto:me@katriel.co.uk> wrote:
>>> 
>>>  > The simple answer is to forbid such joins, but this might happen
>>>  > if a>>>  > device forgets its group state but remembers its identity key.
>>> 
>>>  Depending on how MLS specifies update operations, this could also
>>>  happen if there was a network partition and some group members
>>>  see a>>>  different order of key updates. Even if we assume the
>>>  existence of a>>>  delivery service which can provide a linear order for key update
>>>  messages, the attacker will be allowed to compromise the server and>>>  violate this property. Consequently, some participants will have
>>>  differing views of the group key and need to converge.
>>> 
>>>  In both cases we have a long term key, already in the group,
>>>  with bad>>>  local state. I think we need a recovery mechanism for this
>>>  other than>>>  just starting a new group or allowing a rejoin since that would
>>>  allow>>>  an attacker with only knowledge of a long term key to join a
>>>  previously>>>  secure group. 
>>> 
>>>  We could mitigate this by proving knowledge of some recent state: a>>>  device which knew the group key five minutes ago is more
>>>  trustworthy>>>  than one which doesn’t know any group state. It’s an application-
>>>  layer>>>  decision to actually figure out what to do in this case, but we
>>>  could>>>  expose a way to prove state knowledge (e.g. by deriving a
>>>  “recovery”>>>  key after every update).
>>> 
>>>  Best,
>>>  Dennis
>>> 
>>>  On Wed, 25 Jul 2018 11:05:09 +0000
>>>  Jon Millican <jmillican@fb.com> wrote:
>>> 
>>>  > One potential option that comes to mind is for the server to
>>>  > help it>>>  > reinsert itself in the correct place. This would essentially
>>>  > amount>>>  > to a join, but serving its own copath instead of the group’s
>>>  > frontier. We could then reject somebody double-joining their own>>>  > identity key; under the assumption that this could only happen
>>>  > with a>>>  > malicious server anyway.
>>>  > 
>>>  > I don’t have strong feelings about this vs your proposed solution>>>  > though. The main benefit would probably be just in terms of
>>>  > keeping>>>  > the tree cleaner and minimising remove operations that need to be>>>  > done.
>>>  > 
>>>  > Jon
>>>  > 
>>>  > On 25/07/2018, 12:01, "MLS on behalf of Katriel Cohn-Gordon"
>>>  > <mls-bounces@ietf.org<mailto:mls-bounces@ietf.org> on behalf of
>>>  > me@katriel.co.uk<mailto:me@katriel.co.uk>> wrote:
>>>  > 
>>>  > Hi all,
>>>  > 
>>>  > Here'a s case we might want to think about: what should happen
>>>  > if a>>>  > current member of a group asks to join, with the same long-term
>>>  > key>>>  > that they're already joined with?
>>>  > 
>>>  > The simple answer is to forbid such joins, but this might happen
>>>  > if a>>>  > device forgets its group state but remembers its identity key.
>>>  > (Perhaps it writes the group state to a local database and the
>>>  > write>>>  > got corrupted.)
>>>  > 
>>>  > Alternatively I see a handful of different ways we could support>>>  > these joins, if we wanted to. Perhaps the simplest is to allow
>>>  > the>>>  > device to double-join but require it to immediately delete the
>>>  > old>>>  > copy of itself.
>>>  > 
>>>  > best,
>>>  > k
>>>  > 
>>> 
>>> 
>>> 
>>>  -- 
>>>  PGP Fingerprint: 5B93 F0B9 D6A8 9BC1 546B C98C 6105 A775 8CD2 46AC>>> _______________________________________________
>>>  MLS mailing list
>>> MLS@ietf.org
>>> https://www.ietf.org/mailman/listinfo/mls
>> 
>> _______________________________________________
>>  MLS mailing list
>> MLS@ietf.org
>> https://www.ietf.org/mailman/listinfo/mls
>> 
> _________________________________________________
> MLS mailing list
> MLS@ietf.org
> https://www.ietf.org/mailman/listinfo/mls