Re: [Lurk] Issue with draft-mglt-lurk-tls12-01

Daniel Migault <> Tue, 23 July 2019 02:31 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 3C58F120047 for <>; Mon, 22 Jul 2019 19:31:10 -0700 (PDT)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.558
X-Spam-Status: No, score=-1.558 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.091, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.249, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=no autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id ZP9GQZHBBNkM for <>; Mon, 22 Jul 2019 19:31:07 -0700 (PDT)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id A1109120091 for <>; Mon, 22 Jul 2019 19:31:07 -0700 (PDT)
Received: by with SMTP id j2so16292540uaq.5 for <>; Mon, 22 Jul 2019 19:31:07 -0700 (PDT)
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=OFFi7pjBrELl3NJdnM9YmdmXsepJIFjHHGIPLFxwcpk=; b=MUSJ/ZCcqTvA54g55FKGrda6Ni5KKBEW4FC4oTb+dxRnWKE7+N842x4ZWNQupexJ9h 6IyshEs9U2WOQCWEv0q0B4uSRlW1Jc0kGhiidDWqLEWymgUfdAgViGHp6V/wvfa4b8yn yq0on8lSREL9mCIdMTFsdmJwJIfpmvIApu06SAuyPn7K1SupgiWoYJPBaCdqibfzkluo UIi4tzNL+x4LUX57HNkM5LuMVU5PRStohmTflYTmlXGv9MwKWYWZurVILvDhW/smV+c7 9PhdbPuW915FyiNN+WeaQPDZyrbNnN1+qXA0MOrnG51qyB07hTo8g1tLcCLFUzGPYwql A9qA==
X-Gm-Message-State: APjAAAUxbmFp2KmxMy2m56AFJ1k/eucIGqzenb/9/Mzp72rAvyCISlnn RKiwFhzvb8WaefThfovlZxezJekELen4+vZV5No=
X-Google-Smtp-Source: APXvYqzXYYJDaPduvg+pNBvANMUCjvxwBCClUNiHJ1nete+IrM9lceAOYLg5OxeBeieeWJ6FzPW15B3vzpQ9aUbZBag=
X-Received: by 2002:a9f:2e0e:: with SMTP id t14mr28684713uaj.119.1563849066731; Mon, 22 Jul 2019 19:31:06 -0700 (PDT)
MIME-Version: 1.0
References: <>
In-Reply-To: <>
From: Daniel Migault <>
Date: Mon, 22 Jul 2019 22:30:55 -0400
Message-ID: <>
To: "Scott Fluhrer (sfluhrer)" <>
Cc: "" <>
Content-Type: multipart/alternative; boundary="0000000000001adbe1058e4ffcd9"
Archived-At: <>
Subject: Re: [Lurk] Issue with draft-mglt-lurk-tls12-01
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Limited Use of Remote Keys <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 23 Jul 2019 02:31:10 -0000

Thanks Scott for the feed back, that is very well appreciated.

I agree that having a proof that is actually a proof is definitively
better, especially when that seems feasible. We could however argue that bG
is an ephemeral secret and at that time is only know to the client and
server, but let's do not take that path.

The previous scheme was derived from a scheme where c is chosen by the
server. In our scheme, c was not derived by the server but simply out of
the control of the client for a given exchange (base). In fact, c is
derived from base that includes the TLS randoms, and so this was believed
to prevent the generation of a proof for bG that woudl not be a public key
for a given TLS exchange. In the scheme you propose, everything is derived
r which is completely under the control of the client. I just want to check
that this does not provide some facilities to the client to generate a
proof for bG that may not be a key. I am happy to change the proof scheme
to what you propose.

A second question I would have is how do we perform the check with X25519
* do we need to check bH(R)G + R as well as  bH(R)G - R and consider it
correct if one matches.
* I suppose that r is clamed, but I am wondering if that is sufficient.


On Mon, Jul 22, 2019 at 11:43 AM Scott Fluhrer (sfluhrer) <> wrote:

> It would appear that the Proof of Ownership listed in section 6.1 of the
> draft doesn’t work, in the sense that someone without knowledge of the
> value b can still generate a valid proof.
> Here is how he would do that:
>    - We assume that the putative client knows the value bG (the public
>    key), base and ecdhe_params; we assume that he does not know b.
>    - The client computes c = poo_prf ( base + ecdhe_params + "tls12 poo")
>    - The client picks an arbitrary elliptic curve point R, and computes
>    the point T = c(bG) + R.
>    - The client places R (as his supposed rG value) and T (as his
>    supposed tG value) in poo_params, and bG in the ecdhe_params.
> Then, the server computes c(bG) + rG; that is, c(bG) + R (for the
> client-provided R).  He then compares that to tG (that is, the
> client-provided T).  Of course, this will pass (the client picked T to make
> this happen), and so the server will believe that the prover knows b, when
> he doesn’t.
> Now, I don’t know lurk, and so I have no idea what sort of vulnerability
> this would allow.  However, if you have a ‘proof of possession’, it should
> be an actual proof…
> One way to fix this is to use a more normal Schnorr proof of knowledge:
>    - We assume a hash function h( X + base + ecdhe_params + “tls12 poo”
>    ), where X is an elliptic curve point and returns a value between 1 and
>    q-1, where q is the order of the curve; below, I’ll summarize this as h(X)
>    - The client selects a random value 1 (between 1 and q-1 – it must be
>    chosen uniformly), and computes:
>       - R = rG
>       - t = bh(R) + r mod q
> The client sends the point R and the value t in the poo_parameters, and
> the value bG in the ecdhe_params.
>    - The server computes the points tG and bH(R)G + R; and compares them
>    – it accepts the proof of ownership if they are the same point.
> _______________________________________________
> Lurk mailing list