Re: [regext] Idea about AuthCodeSEC: use Public Key Cryptography for AuthCode

Victor Zhou <zzn@namefi.io> Tue, 19 March 2024 01:11 UTC

Return-Path: <zzn@d3serve.xyz>
X-Original-To: regext@ietfa.amsl.com
Delivered-To: regext@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id CAC6BC14F614 for <regext@ietfa.amsl.com>; Mon, 18 Mar 2024 18:11:57 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -6.557
X-Spam-Level:
X-Spam-Status: No, score=-6.557 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.249, HTML_MESSAGE=0.001, HTTPS_HTTP_MISMATCH=0.1, RCVD_IN_DNSWL_HI=-5, RCVD_IN_ZEN_BLOCKED_OPENDNS=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01, URIBL_DBL_BLOCKED_OPENDNS=0.001, URIBL_ZEN_BLOCKED_OPENDNS=0.001] autolearn=ham autolearn_force=no
Authentication-Results: ietfa.amsl.com (amavisd-new); dkim=pass (2048-bit key) header.d=d3serve-xyz.20230601.gappssmtp.com
Received: from mail.ietf.org ([50.223.129.194]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id bVM-mCul-G6u for <regext@ietfa.amsl.com>; Mon, 18 Mar 2024 18:11:54 -0700 (PDT)
Received: from mail-wr1-x430.google.com (mail-wr1-x430.google.com [IPv6:2a00:1450:4864:20::430]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 0DFFCC14F690 for <regext@ietf.org>; Mon, 18 Mar 2024 18:11:53 -0700 (PDT)
Received: by mail-wr1-x430.google.com with SMTP id ffacd0b85a97d-34005b5927eso1581206f8f.1 for <regext@ietf.org>; Mon, 18 Mar 2024 18:11:53 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=d3serve-xyz.20230601.gappssmtp.com; s=20230601; t=1710810711; x=1711415511; darn=ietf.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=kMTgTfdez8L/v6+X6Vvg5KaYnX+1WE2XJDBQr6Z11zE=; b=pf9HThC3dRI1OyhUi5S0SbKLR8U5xxxM+HQclVZHboJfw13Glt/JO0kgt/SLobc4SF EbRY0bBcy1qWQBoUJ8uwsVasLSDE5MJKDo46+a6mRj8HWx39fBOenCtYuTzRA5Onm7r2 WolC4Ain2H43CEJIIHTQLLxDOfca68GVrTaurgkUWY6V3DOrCp0eE0joFdrVFv1zH8pb yPwPFTrGE7fOeqdcHK6d6f+Qk5+3f0JmvpmPZiBBbE85MS7Y0FRRHGhC/E4NdczRZSMw 2EF7FZSBfT9cQcnbzsCFFAuTqe69TT8EgpzbN6+i3VyVHX98mVmO7gq5nTJ0TxrUHWbW GnhA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710810711; x=1711415511; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=kMTgTfdez8L/v6+X6Vvg5KaYnX+1WE2XJDBQr6Z11zE=; b=qKnzg3a2gDasZn3PwQyxed3OHioFzl5OiDOslg7zE2cO/TyI5GsYvr2guDR4k6xx51 oQ9WSevEC2kjs8SSdqAA1GziNcCQGYUMhLR/3qFejhQsQs7XC2rBf8PtqE6IdT8x2+lp EJTc6qteuIGe2t7Z2s55os3oZRtD4UOwW3q4q/ye2fujYVHk2bQJaHNjOPIfOVBNBZ8k TK8jF1X47MCc1XnWm5lOCuo1+FQN4mcetF05VJ3ikmTuleSS95DYdrGdiRtaEqor2MIA fO34PWjT5/Vef6LamBEggwl/xwITQxPvq9/Us0jQKhpRW4fpffiHwaMkx8VRg+qdOTmv 6KgQ==
X-Gm-Message-State: AOJu0Yw0FBYcoeX3+pW315SRiGu1UklaI+0h6XftVvZUSDFx94R/Fe76 AvOJ7QDLzD+RFoOa+h/Hay25EwOt6C7MzoXd+3P27eJNf6rm6cX3dAqpS1s80fF/K3xoOQl9Zp4 6XbeK8/1r/dzPwfd5EcoALhEnxkrXpEwLsvZeeg==
X-Google-Smtp-Source: AGHT+IHLV21IvBsIgSgZSJAT1+raKCTQP5uepXZpHigoaschB0J7NEEVzZmUzedfPsxWa9YndaKARUYBIxf8rTNTUco=
X-Received: by 2002:adf:f884:0:b0:33e:c0c5:1799 with SMTP id u4-20020adff884000000b0033ec0c51799mr10007298wrp.45.1710810711166; Mon, 18 Mar 2024 18:11:51 -0700 (PDT)
MIME-Version: 1.0
References: <CAD9-GmtGw4a9EXecFtVmu23u-NritYeWOo=JwHJT7xU6V2jkzQ@mail.gmail.com> <1a5e885389cd4039aead528423f907e6@verisign.com>
In-Reply-To: <1a5e885389cd4039aead528423f907e6@verisign.com>
From: Victor Zhou <zzn@namefi.io>
Date: Mon, 18 Mar 2024 18:11:40 -0700
Message-ID: <CAD9-GmttBRU_Obi3Nbe4_eb9O1j34UZ3-2Y8FnLzub2_BgbC2A@mail.gmail.com>
To: "Hollenbeck, Scott" <shollenbeck@verisign.com>
Cc: regext@ietf.org, 周载南 <zzn@zzn.im>, Paul Hoffman <paul.hoffman@icann.org>, wjhns1@hardakers.net
Content-Type: multipart/alternative; boundary="000000000000b7a8370613f92873"
Archived-At: <https://mailarchive.ietf.org/arch/msg/regext/pRSTKwvDRM4WM_s-nme2PRig4Z4>
X-Mailman-Approved-At: Sun, 31 Mar 2024 10:57:33 -0700
Subject: Re: [regext] Idea about AuthCodeSEC: use Public Key Cryptography for AuthCode
X-BeenThere: regext@ietf.org
X-Mailman-Version: 2.1.39
Precedence: list
List-Id: Registration Protocols Extensions <regext.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/regext>, <mailto:regext-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/regext/>
List-Post: <mailto:regext@ietf.org>
List-Help: <mailto:regext-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/regext>, <mailto:regext-request@ietf.org?subject=subscribe>
X-List-Received-Date: Thu, 21 Mar 2024 14:25:32 -0000

Scott, that's very helpful, thank you! Yes I notice that EPP (RFC 5730) was
intentionally extendable. It's very helpful that you point to me that
Section 4.2 lays the schema that defines authorization information.
I will look into how to leverage existing pwAuthInfoType and
extAuthInfoType. Let me send this email to REGEXT  -- Victor

------------

Hi dear REGEXT wg,

TL;DR: are there existing efforts to bring public key authentication to EPP
that leverage RFC 5730's extendability?
Is this working group the best place to start the conversation about
existing effort?

The closest related effort in IETF I could found was
- EPPEXT working group that was concluded in 2016
https://datatracker.ietf.org/wg/eppext/about/
- RFC 9154 Extensible Provisioning Protocol (EPP) Secure Authorization
Information for Transfer https://datatracker.ietf.org/doc/rfc9154/  which
uses a short lived cryptographic hash

If there are existing standards, I love to learn more and put that into our
implementation.
If there were no existing effort, here is an early draft
https://github.com/xinbenlv/rfc-draft-authcodesec/blob/main/README.md
<https://secure-web.cisco.com/1c4kGADnaAssbpJjX636xmm3ye_X_zd1TnA94M3YM94OTCNk6NPOw_NbQWbKSx0qaTeauV0Th34kXvu8sQhjV_Fnkyp085fdbaDiwLG2IVaR-xJY6srk4dUGcmtdIEOpdjrUVydgMCIKiyDh1w0-jQIMtpEXc7V29R9aWtCo-CO0aiE94MeTepkvMd-nH81xF0hGHLT3C_2QZ82gdIJ62392-fXa38wA8XEMrU9b2w8VS5gP5eZ4Aj2hnCn87UTQclWoyv1zoOCRFkYFdVZtL4QjLxLNC1oDuLWu-S47Yu3xfJH1sQpHzN0cYdjg-PAJi/https%3A%2F%2Fgithub.com%2Fxinbenlv%2Frfc-draft-authcodesec%2Fblob%2Fmain%2FREADME.md>
and
I would love to see if anyone is interested in participate in future
discussion of a possible RFC and maybe co-author?

Victor Zhou
zzn@namefi.io (work) / zzn@zzn.im (personal)

On Sun, Mar 17, 2024 at 3:58 PM Hollenbeck, Scott <shollenbeck@verisign.com>
wrote:

> Thank for the note, Victor. I’m not aware of anyone who has extended EPP’s
> authorization information data structures, though the ability to do so has
> always been available. Note this text from Section 2.9.3.4 of RFC 5730:
>
>
>
> “The type of authorization information required is object-specific;
> passwords or more complex mechanisms based on public key cryptography are
> typical.”
>
>
>
> We defined a password-based authorization information approach for domain
> objects because it was felt to be sufficient and secure as long as other
> protocols were used to protect the data while in transit. EPP requires TLS,
> for example, so the authorization information is never exchanged without
> encryption protection. In practice, passwords are NOT received from
> end-users/registrants and stored; they’re more commonly generated on-demand
> as a result of a domain transfer request. They’re short-lived and the risk
> of exposure is actually quite low. I haven’t heard of any issues associated
> with compromised authorization information being used to request a
> fraudulent transfer. If you’re aware of any documented “AuthCode stealing
> or disputes” I’d be interested in hearing about them. I’m not confident
> that the domain industry would be interested in implementing and operating
> a PKI-based approach given that the password approach has been working
> reliably for more than 20 years. There would need to be a significant value
> proposition for registries and registrars to switch.
>
>
>
> Having said that, I designed EPP in a way that allows for specification of
> other approaches. Section 4.2 of RFC 5730 includes the schema that defines
> authorization information. Note the “pwAuthInfoType” and the
> "extAuthInfoType" type definitions. "extAuthInfoType" can be used as a
> “hook” to define a new type. Given that the capability exists, I’d suggest
> that you send a note to the IETF REGEXT working group mailing list asking
> if anyone is interested in the possibility of defining an extension for a
> new PKI-based authorization information type. You’d be better of measuring
> people’s interest in the topic before you invest a lot of time working on a
> proposal.
>
>
>
> I hope this helps,
>
> Scott
>
>
>
> *From:* Victor Zhou <zzn@namefi.io>
> *Sent:* Friday, March 15, 2024 6:42 PM
> *To:* Hollenbeck, Scott <shollenbeck@verisign.com>
> *Subject:* [EXTERNAL] Idea about AuthCodeSEC: use Public Key Cryptography
> for AuthCode
>
>
>
> *Caution:* This email originated from outside the organization. Do not
> click links or open attachments unless you recognize the sender and know
> the content is safe.
>
> Hi Mr. Hollenbeck,
>
>
>
> My name is Victor and I found you as the main author of EPP including RFC
> 5730 and many RFCs. Really appreciate your contribution!
>
>
> (I may have run into you in the last IETF 117 event in San Francisco happy
> hour but unsure)
>
> I like to ask you a question regarding AuthCode: in the EPP RFC 5730 you
> wrote
>
> Objects eligible for transfer MUST have associated authorization
>
> information that MUST be provided to complete a <transfer> command.
>
> The type of authorization information required is object-specific;
>
> passwords or more complex mechanisms based on public key cryptography
>
> are typical.
>
>
>
> In my personal experience, most of AuthCode was a plaintext secret. I have
> not seen any public key cryptography. Are you aware of any one who uses
> public key cryptography and if there is a standard?
>
> I ask because if there is no effort in this direction, I like to start the
> conversation with you and the proper IETF working group about proposing an
> RFC that standardize a publickey cryptography transfer that allows
> independent validation and backward compatibility (to current AuthCode) and
> future compatibility (for smart contact validation).
>
>
>
> Here is a early early draft
> https://github.com/xinbenlv/rfc-draft-authcodesec/blob/main/README.md
> <https://secure-web.cisco.com/1c4kGADnaAssbpJjX636xmm3ye_X_zd1TnA94M3YM94OTCNk6NPOw_NbQWbKSx0qaTeauV0Th34kXvu8sQhjV_Fnkyp085fdbaDiwLG2IVaR-xJY6srk4dUGcmtdIEOpdjrUVydgMCIKiyDh1w0-jQIMtpEXc7V29R9aWtCo-CO0aiE94MeTepkvMd-nH81xF0hGHLT3C_2QZ82gdIJ62392-fXa38wA8XEMrU9b2w8VS5gP5eZ4Aj2hnCn87UTQclWoyv1zoOCRFkYFdVZtL4QjLxLNC1oDuLWu-S47Yu3xfJH1sQpHzN0cYdjg-PAJi/https%3A%2F%2Fgithub.com%2Fxinbenlv%2Frfc-draft-authcodesec%2Fblob%2Fmain%2FREADME.md>
>
>
>
> Or to save you a click: here is the full text snapshot
>
>
>
> ---------------------------
>
>
>
> # RFC-draft-AuthCodeSEC
> ## Summary
>
> Today, the main way domain names transfer between users or registrars
> is using a mechanism called "AuthCode". This RFC proposes an upgrade to
> the current AuthCode, leveraging public key cryptography, including
> a schema of payload signing designed to be fully backward compatible
> with the existing AuthCode in EPP (RFC 5730) while leaving room for future
> extensions. This RFC also explores a 4-phased incremental approach to
> replace AuthCode.
>
> ## Background
>
> AuthCode was introduced in EPP (RFC 5730), in which it says:
>
> ```
> Objects eligible for transfer MUST have associated authorization
> information that MUST be provided to complete a <transfer> command.
> The type of authorization information required is object-specific;
> passwords or more complex mechanisms based on public key cryptography
> are typical.
> ```
>
> In practice, public key cryptography is rarely used in today's EPP
> practices. Instead, a plaintext secret string is being used.
>
> For example, one of the most used EPP software is provided by
> CentralNic, called "RSP". It uses a plaintext string as the AuthCode. The
> AuthCode is stored in the database of the registrar, and when a user
> wants to transfer a domain, the user logs in to the registrar's website
> to get the AuthCode, and then gives it to the gaining registrar. The
> gaining registrar then sends the AuthCode to the TLD registry, and the
> TLD registry then sends the AuthCode to the losing registrar (via
> message queue, poll, or other ways). The losing registrar then
> validates the AuthCode and then releases the domain to the gaining
> registrar.
>
> TODO: add workflow diagram
>
> Here is a common use case: a registrant wants to hand over a domain
> to another registrant. For the sake of discussion, let's call the
> losing registrant Larry and the gaining registrant George, and Larry
> uses a registrar called "Lovely Registrar", and the registrar George
> uses is called "Great Registrar".
>
> The problem with this process is that the AuthCode is a plaintext string:
> - Its validation is only via Lovely Registrar matching the string
>   with its own knowledge; no one other than Lovely Registrar could
>   validate it. Not any party of the transaction, Larry or George, Great
>   Registrar or TLD Registry, nor anyone else.
> - It assumes the whole transmission of AuthCode, across multiple
>   parties, is without leaking or eavesdropping.
> - In many cases today, such AuthCodes are not being updated for a long
>   time or never expire, leaving the system even more vulnerable to
>   leaks or eavesdropping. Neither RFC 5730 nor any follow-up RFC
>   specified a way to force reset AuthCode.
>
> Due to these issues, the internet domain name system suffers from
> AuthCode stealing or disputes.
>
> ## Specification
>
> ### Overview
>
> We hereby propose the following mechanism:
>
> - Use public key cryptography to use an authentication signature as
>   AuthCode.
> - We suggest the default algorithm as `secp256r1`, but it can support
>   other signing algorithms or accept multiple signatures or aggregate
>   signatures.
> - We suggest the schema to be signed as the payload being the `EPP object`
>   in the EPP communication, and a normalization scheme.
> - We suggest including expiration time and nonce. We suggest a deny-
>   list approach for early rejection.
>
> ### Details
>
> TODO: add schema of payload to sign
>
> TODO: add a way to establish or update public keys, such as depend on
> DNSSEC.
>
> TODO: add how the payload is represented in EPP object
>
> TODO: add how to validate the signature using the public key
>
> ## Discussion
>
> ### Backward Compatibility
>
> The main design goal is to allow the upgrade to be done incrementally
> at each registrar without breaking the existing workflow.
>
> For example, assuming in a transaction of a transfer of domain, the
> losing registrar has already upgraded to the new mechanism, instead
> of storing the AuthCode in the database and comparing it, it can validate
> the AuthCode directly itself. And if the gaining registrar has not been
> upgraded to be aware of this new spec, they won't be able to validate
> the AuthCode on the spot, but as long as they collect the AuthCode,
> they can still process the AuthCode in the same manner.
>
> ### Forward Compatibility
>
> The main forward design compatibility is in the event a distributed
> public ledger is involved, such as a smart contract is being used. They
> can be configured to validate the signature of this transfer and update
> the holdings of the account automatically without trusting a third party to
> vouch for the transfer.
>
> TODO: add sample code to validate the signature in the Solidity language
>
> ## Naming
>
> The way to introduce AuthCode is similar to how DNSSEC was rolled out
> without
> breaking DNS, hence we call it AuthCodeSEC.
>
> ### Roadmap
>
> Inspired by how banks' payment networks rolled out chips, we imagine there
> can be a 4-phase rollout to support this proposal, such as each phase
> to be 3-5 years:
> - Phase 1: Registrars who implement the AuthCode can provide
>   benefits of instant validation and validation by anyone without
>   connection.
> - Phase 2: When the losing registrar implements it, it reduces the cost
>   to pay for insurance or dispute to half. The other side shares half
>   of the dispute cost.
> - Phase 3: When the losing registrar implemented it, it is excused from
>   paying for the dispute, the gaining side pays, and users are getting
>   a warning.
> - Phase 4: Without implementing AuthCodeSEC jeopardizes breaking
>   the workflow or user experience of its users.
>
>