Re: [Cfrg] Curve25519 lacks private/public homomorphism?

Adam Langley <> Tue, 05 February 2019 00:25 UTC

Return-Path: <>
Received: from localhost (localhost []) by (Postfix) with ESMTP id 0440B129B88 for <>; Mon, 4 Feb 2019 16:25:52 -0800 (PST)
X-Virus-Scanned: amavisd-new at
X-Spam-Flag: NO
X-Spam-Score: -1.894
X-Spam-Status: No, score=-1.894 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, FREEMAIL_FORGED_FROMDOMAIN=0.001, FREEMAIL_FROM=0.001, HEADER_FROM_DIFFERENT_DOMAINS=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from ([]) by localhost ( []) (amavisd-new, port 10024) with ESMTP id bdUSG4mBg1m4 for <>; Mon, 4 Feb 2019 16:25:50 -0800 (PST)
Received: from ( []) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by (Postfix) with ESMTPS id BA5FA124408 for <>; Mon, 4 Feb 2019 16:25:49 -0800 (PST)
Received: by with SMTP id b8so2071115qtr.9 for <>; Mon, 04 Feb 2019 16:25:49 -0800 (PST)
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=YWZHw1n7ushjzXRra16Y6YIfpJyc1loRdTR/jK8cYa0=; b=n8hj1EdF1kASVGQBhoLcymIyHI1kJ87IJyYCQN8dWb2V4MNksKW2H2rTApiYcZiPlO 7TL4F3BWAyOh2Zv++MdTR5ErLbKEfDJagGpmfcQ5KD9xGi7lZZ7Q5nAb07OBz1QI+imL IvVn70o2qp4XtPWQFgluaozxSegkH9hqzPrkKzHxM07OUVXyr/UcicnzEW+WDpiJi/TJ kL46hdqkEpoTEwz557PFGWqRsDCwL/gtIHXa8ddaZSr13hGO4f30sf2hVvrCWAlVMQaW HAeXC12EqrzOPZoE0ttM2p3WEwWYLweHAWTfsbqiYVLgrJ1Hmn0VwPm6gElL1GJnZZcu +F5w==
X-Gm-Message-State: AHQUAubhzXY+fJlTMqi9AClu8D6OyxHYDPjX2zPwyfDkF/sexuOm0n7V C3fTHbImciPzJpEeKz+yicH+B99FDuDDdknF2ws=
X-Google-Smtp-Source: AHgI3IYGktiXWPw1sv2KWLG8t1YOdOp2I+Yee1XOs3P6LJqht2AnN+kTuTIMqtd7fE22hRRa7fZzVk5Kef2OF1Sj12g=
X-Received: by 2002:ac8:7201:: with SMTP id a1mr1560452qtp.291.1549326348444; Mon, 04 Feb 2019 16:25:48 -0800 (PST)
MIME-Version: 1.0
References: <>
In-Reply-To: <>
From: Adam Langley <>
Date: Mon, 04 Feb 2019 16:25:35 -0800
Message-ID: <>
To: Richard Barnes <>
Cc: CFRG <>
Content-Type: multipart/alternative; boundary="000000000000a3ea9205811aa6b5"
Archived-At: <>
Subject: Re: [Cfrg] Curve25519 lacks private/public homomorphism?
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Crypto Forum Research Group <>
List-Unsubscribe: <>, <>
List-Archive: <>
List-Post: <>
List-Help: <>
List-Subscribe: <>, <>
X-List-Received-Date: Tue, 05 Feb 2019 00:25:52 -0000

On Mon, Feb 4, 2019 at 2:21 PM Richard Barnes <> wrote:

> When you try to do this with Curve25519 (or Curve448), however, you run
> into a problem: `k_list[31] |= 64`.  The X25519 function in RFC 7748 [2]
> ensures that the second-most-significant bit of a scalar private key is
> always set, but this bit is not necessarily set in the product of two such
> scalars.  In other words, there are scalars `ab` such that you can arrive
> at `abG` as the result of a DH computation, but never abG will never be a
> public key (since `X25519(ab, 9) != abG`).  The mapping from private keys
> to public keys is not a homomorphism with regard to addition or
> multiplication.
> This means we're out of luck with regard to our delta scheme.  If the
> delta happens to result in a new private key with its penultimate bit
> unset, then it can't actually be used as a private key -- and there's no
> way for the delta-generating party to know this.

Setting the 255th bit is just done to avoid having to worry about infinity
in the Montgomery ladder, I believe. But if you handle infinity explicitly,
doesn't that solve the problem?

(p.s. I'm imagining that an answer would either be a) "no, we thought about
that and it doesn't work because ..." or b) "no idea, what does 'handle
infinity explicitly' mean?". If (b), then I can see about knocking up an
example tomorrow.)



Adam Langley