[Seat] Re: A continuity-and-revocation layer above attested TLS, with running code

Serhii Nikolaichuk <nikolaichuk.s.f@gmail.com> Thu, 24 September 2026 12:12 UTC

Received: from mail-wm2-x10.google.com (mail-wm2-x10.google.com [IPv6:2a00:1450:4864:31::10]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by mx.ietf.org (Postfix) with ESMTPS id BCECE31 for <seat@ietf.org>; Thu, 24 Sep 2026 12:12:46 +0000 (UTC)
Authentication-Results: mx.ietf.org; dkim=pass header.d=gmail.com header.s=20251104 header.b=CEBgs+OE; arc=pass ("google.com:s=arc-20260327:i=1"); dmarc=pass (policy=none) header.from=gmail.com; spf=pass (mx.ietf.org: domain of nikolaichuk.s.f@gmail.com designates 2a00:1450:4864:31::10 as permitted sender) smtp.mailfrom=nikolaichuk.s.f@gmail.com
Received: by mail-wm2-x10.google.com with SMTP id 5b1f17b1804b1-49ccff31419so17036705e9.3 for <seat@ietf.org>; Thu, 24 Sep 2026 05:12:46 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1790251966; cv=none; d=google.com; s=arc-20260327; b=opEKftpqwD7du6yzKbj1QkrkOTjTUMmQrU83bLVZBAmlHRUOn6jtWwJhUzMHw/27HT MnoHgUNPm/H2RXOwLhxFiYStt9XdkRsj14AmGrg2mPvVXBsvFHPP1jtsHLUrOsyIrz61 C6GBC2cy4+Nd8USCgF0dpPbmERNt/cwLo9VplzLmrHkrv7/n+rVrkpZ00P4Dl0OF9/Go hscsPDgvLM17HQ1E1mxahXy4V0289T0epIgEiI7HURqYfx0eZpA2wtvtdhmk+gRNpeBZ tbJhAo1X1L+rqyIkbX/Y8Jxt6k0z2tqdMsbfqg9Nn+mmWDETlfn31EWJkPz9Pt2IXxIn gOfQ==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:dkim-signature; bh=fu0PWI9tjDgBJZ17pJMuL33iT0/QRan3OSYSjkd7Uq0=; fh=vKTLdhMp6kUFB/sPkBFyJEMGIaYOa8lKtXBFTicKHmM=; b=pewezagbqxNEwoXaAs5YC6L97hDZvaKNTr256+VWwoB1G2ZYTILkGUPjxqbKkN0JUu qoOOoiik1NkB+Qe68yk1RLlVzFvJWoD+VmS3J5vVeZzMtyGVibIGBMV3/zVGFrA6wPOU mN1tKYMdepA7mov00FeEiRGbrGRKbzyQikIJi1AzJybt6CQ8Lxy3hp3WRlmjAQAOcCMh xZ/iKIlSnu4816JsQW8e9lSJXO+SGhqpO+nXf8ATqfsWLEOKtVRAyE0BqCAKoO8lJrGz pvWBp8Cb7gKkSxtGjzvycQjcQv0ZHuYNrl5XCu4+5H50PaHsAT6rLrNOienKF7/e1f4z nQIw==; darn=ietf.org
ARC-Authentication-Results: i=1; mx.google.com; arc=none
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1790251965; x=1790856765; darn=ietf.org; h=content-type:cc:to:subject:message-id:date:mime-version:references :in-reply-to:from:from:to:cc:subject:date:message-id:reply-to :content-type; bh=fu0PWI9tjDgBJZ17pJMuL33iT0/QRan3OSYSjkd7Uq0=; b=CEBgs+OESZXx99I1FNZrKLmA3cT1l4hcFy1M9+znyto48lIq0MQST+NJXjdUDpDHCx Bvjq4fSBxQyC/MAonPWXGkts4YsicEy0DphSOjPk2BNxyS3o+QNqHD1DENfPWJ2jrGfW bTEvW3d91IoyBNiQa33BsqblNjB6Ux1ITQygx+P4TdWE0f0PFenvWrjoKdJ6iFfaepq6 CjUhkPA6T9dTD4YVrLoJvaAyQfuGgfPoh2OjG9fcgXpwwYzAuboeCFpSrZr7cVYnuO06 G3B4I3zJ71wtfkvXFme/KU3eQi2gv6DaFTD90pLugzv1HVs/hALF0OHu3ysD15ZNAwtB PsAg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20260707; t=1790251965; x=1790856765; h=content-type:cc:to:subject:message-id:date:mime-version:references :in-reply-to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=fu0PWI9tjDgBJZ17pJMuL33iT0/QRan3OSYSjkd7Uq0=; b=rha/8MhWXDnBcskzh92jlgZCNybFcqQMzDtpNlZdJP5rAtug1ybSoCQpYBW/YjD9KG YwftmxpBjIIOCGa1xX2xMsfQ/GRGvtD9uvC3rJnbMXVVSQ/zbVvGvv0reA5kUNw97DI+ k1kcEesOg1TeXI1u8KeFY55yzxW4BOrb9TBwii+7FgojBp52akwemCgtG5PcjhP90kgw nP4AbmcH8P6BB+56LX0a6ShQDOGRYsk+lOqXIynlbMy7QUoAmmjonWRpYE4sHSppQitG Qx4Db1PMfqqV62xiHpJQWRvVUeX6JNb7sqCp7jKGNPLQODu6yM1HhNYHQQX8zX08+tD3 jdHA==
X-Forwarded-Encrypted: i=1; AKwUvBwJStUuKED/5/AutYZsCTnFELgb/Qt1aF6sWCmOAj13vigADdg575sNeHTINZ4o1QZYMJXp@ietf.org
X-Gm-Message-State: AFuF++n/pjf0hYPEKRFkpxjBXLxW6fYtcxfogWFs6EZhSbiTkIIRR8Pz hS4SwEJcRB4WK3PNRez03sYPfz9kZGIYqYD98xZ/FE0wGvVe6VqZ6kDQhxW8wa9ZaxteYva8def Yx5RhNnoBBV8U/CmwkdCVJNs47V3tNA==
X-Gm-Gg: AYBFou3+pOTwVB0K3JshBRql0f4p8ho/rPUygTi33fIoFPNgbJX/BS8WcZ6o5fVh1QC WY4C8mRPec8aRAL5jcQFQqyTzhwFNzRClcPnlfp7aXGSU0qb4+tSZmk1EmEp1uivUYf5r9k7//l thkhsC/hgw3amdQ7PoO6Fu60rJ3KFEZN3Kb/TFGKnITktbOkPb5w4CJwMhKV5P4CsbnBc1ArhYU LOFA9jBmVTVKdWC29zt5FbDtPk0JEktlkvRvWi2rdrYPU/fSczYiU23c4Cv89LbnuH/Aap/n0KS sYz8NjCrMTWaP9QBAdldQbZrf6X2NAme3N96+Rvb6aq7FJDjb3Rw7qAgLKvMdQYxcB+vfMJeHSc RgwxnZUOMKr8Bc0ujsW+s2pudQQckFJy7M6INnIdj9CT+tDcANMy1uaaGN4eQu/aoTz1NXIbyg7 YAFK9fKC/bFy2uUYthKKZ6
X-Received: by 2002:a05:600c:4e4c:b0:49c:edfa:15a with SMTP id 5b1f17b1804b1-49fe7b6f02bmr31484875e9.13.1790251964403; Thu, 24 Sep 2026 05:12:44 -0700 (PDT)
Received: from 101988054943 named unknown by gmailapi.google.com with HTTPREST; Thu, 24 Sep 2026 05:12:43 -0700
Received: from 101988054943 named unknown by gmailapi.google.com with HTTPREST; Thu, 24 Sep 2026 05:12:43 -0700
From: Serhii Nikolaichuk <nikolaichuk.s.f@gmail.com>
In-Reply-To: <1790248652400348935.1790248652@vision4d.ai>
References: <1790248652400348935.1790248652@vision4d.ai>
MIME-Version: 1.0
Date: Thu, 24 Sep 2026 05:12:43 -0700
X-Gm-Features: AclHuK9Qg6zhsCA1VfVBWg0PTC26B6eLemTMZuqf2-k-srnBXb0QhsYknW_tIx4
Message-ID: <CADj3X6u+wB0b7J6uNBSfyRU-uPqOiD==CbGDv4ruH+i6yxCt7g@mail.gmail.com>
To: waqas.nawaz@vision4d.ai
Content-Type: multipart/alternative; boundary="000000000000659645065c398444"
X-Spamd-Bar: /
Message-ID-Hash: 3TIWEER2OYAISCXNATHRVQMLT76D6TM4
X-Message-ID-Hash: 3TIWEER2OYAISCXNATHRVQMLT76D6TM4
X-MailFrom: nikolaichuk.s.f@gmail.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-seat.ietf.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: rats@ietf.org, seat@ietf.org
X-Mailman-Version: 3.3.10
Precedence: list
Subject: [Seat] Re: A continuity-and-revocation layer above attested TLS, with running code
List-Id: "Secure Evidence and Attestation Transport (SEAT) WG" <seat.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/seat/oMcAt8fK8SSKa8L_81jvISkixck>
List-Archive: <https://mailarchive.ietf.org/arch/browse/seat>
List-Help: <mailto:seat-request@ietf.org?subject=help>
List-Owner: <mailto:seat-owner@ietf.org>
List-Post: <mailto:seat@ietf.org>
List-Subscribe: <mailto:seat-join@ietf.org>
List-Unsubscribe: <mailto:seat-leave@ietf.org>

Waqas,

VCEK on the runs in the release: the GCP guests sign with the chip's VCEK,
fetched from AMD's KDS by CHIP_ID and path-validated to the ARK. The
verifier also takes VLEK-signed reports (the AWS captures in the
repository), chaining through the VLEK certificate the guest reads from the
host's certificate table, and refuses a VLEK report that arrives without
that leaf. Nothing in the continuity anchor rests on which key signed: the
instance is REPORT_ID, and the VLEK case is the reason -- one key per
region, CHIP_ID zeroed.

Yes, exporters: RFC 8446 Section 7.5, through the stack's standard call
(SSL_export_keying_material in OpenSSL; Go, rustls and BoringSSL have the
same), under two labels of our own, EXPERIMENTAL-hatls-continuity-exporter
for the chain and EXPERIMENTAL-hatls-session-context for the first link;
the working group's own post-handshake document binds the same way
(draft-fossati-seat-expat, EXPORTER-cmw-attestation). Each endpoint derives
both from its own key schedule; nothing that binds is sent on the wire. The
v0.1 client read the exporter off the wire instead -- that is the relay
defect recorded in docs/AUDIT.md and closed before v0.3.0. The limit that
comes with exporters: the endpoint that holds the TEE must also hold the
TLS session, so behind a TLS-terminating proxy there is nothing to bind.
That is a property of channel binding, not of this layer.

The review is welcome. Start with the test suite (PYTHONPATH=. python3 -m
pytest tests/ -q, no hardware needed) and docs/AUDIT.md, which lists every
defect I found in my own code first.

Serhii

On Thu, Sep 24, 2026 06:17 AM, waqas.nawaz@vision4d.ai wrote:

> Serhii,
> You say SEV-SNP. Do you use VLEK or VCEK?
> Don't you require exporters? How do you do that? I will review your code
> next week.
>
> Thanks,
> Waqas
>
> @IETF Admin: I get three separate copies of Serhii's email. Is this my
> configuration problem or is it normal? Is it fixable?
>
>
>
> On Thu, Sep 24, 2026 at 2:55 AM Serhii Nikolaichuk <
> nikolaichuk.s.f@gmail.com> wrote:
>
> Waqas,
>
> Nothing in HATLS adds early attestation. The layer starts where the
> handshake ends: every value it binds comes out of the completed TLS 1.3 key
> schedule, it runs over plain TLS 1.3 with no attestation extension
> underneath, and its README says so in as many words.
>
> What it adds is what the use-cases document asks for and leaves
> unspecified (3.8.1, 4.8): continuity across a connection's lifetime -- a
> re-attestation that cannot be answered with an earlier report, and a stolen
> identity key re-hosted on another chip refused on its first message --
> proved in ProVerif and measured on live SEV-SNP, reproducible from a clone
> of the tagged release.
>
> I signed the abstract you quote, and my numbers say what it says: with the
> 5.1.1 binder an earlier report is accepted at a later reattestation, which
> 8.4 concedes in prose and #60 shows with two AMD-signed reports carrying
> byte-identical REPORT_DATA; a TDX quote in the first flight costs an extra
> round trip against a long certificate chain and a post-quantum key share,
> while post-handshake conveyance leaves the first flight untouched. #74 and
> #75 are two more defects in the same document. I file measurements where
> the working group keeps its issues, whatever I think of the document; that
> is what a tracker is for.
>
> If you find a line in the release where the chain depends on early
> attestation, show me the line.
>
> Serhii
>
> On Wed, Sep 23, 2026 03:44 PM, waqas.nawaz@vision4d.ai wrote:
>
>> As you say in abstract of your draft and cite MITRE document, key point
>> separately from attacks is need for continuous attestation. Then why add
>> the complexity and attacks of early attestation at all?
>>
>> Cheers,
>> Waqas
>>
>>
>> On Tue, Sep 22, 2026 at 6:17 PM Serhii Nikolaichuk <
>> nikolaichuk.s.f@gmail.com> wrote:
>>
>> Following up on my two notes of the 21st. The parts of this that belong
>> to the working
>> group's documents are now in their trackers rather than on the list, and
>> everything else
>> is in one tagged release with the raw hardware reports. Pointers, so the
>> list has them:
>>
>> On draft-fossati-seat-early-attestation (yaronf/draft-fossati-seat-ear
>> ly-attestation):
>>
>> #74 With a HelloRetryRequest, "Hash(ClientHello...ServerHello)" in 5.1.1
>> has four
>> defensible readings, and they give four different binders in 200 of 200
>> handshakes;
>> Appendix C steers toward the wrong ones and 5.1.2 makes the disagreement
>> a fatal
>> attestation_failed. A one-sentence fix is proposed.
>> https://www.google.com/url?q=https://github.com/yaronf/draft
>> -fossati-seat-early-attestation/issues/74&source=gmail&ust=
>> 1790180231627000&sa=E
>>
>> #75 A resumed TLS 1.3 handshake carries no Certificate message, so the
>> extension of
>> 4.1 has no carrier there; the only MUST about resumption is in the
>> document history
>> while 8.6 says a resumed connection inherits the appraisal.
>> https://www.google.com/url?q=https://github.com/yaronf/draft
>> -fossati-seat-early-attestation/issues/75&source=gmail&ust=
>> 1790180231627000&sa=E
>>
>> #60 Section 8.4 reproduced on a live SEV-SNP guest with the 5.1.1 binder
>> computed as
>> written from the real transcript: two genuine reports in one connection
>> carry
>> byte-identical REPORT_DATA and the stale one is accepted at
>> reattestation. ProVerif
>> finds that trace with a constant binder and proves order with a chained
>> one. Of the
>> 5.4 options, Extended Key Update would give order for free;
>> post-handshake auth and
>> CertificateUpdate would not.
>> https://www.google.com/url?q=https://github.com/yaronf/draft
>> -fossati-seat-early-attestation/issues/60%23issuecomment-
>> 5779862051&source=gmail&ust=1790180231627000&sa=E
>>
>> On draft-ietf-seat-use-cases (ietf-wg-seat/draft-ietf-seat-use-cases):
>>
>> #8 What "the identifier provided to the machine" actually is, read at the
>> ABI offsets
>> across 87 SEV-SNP reports from two clouds and two TDX guests: VCEK names
>> the chip,
>> VLEK the region, REPORT_ID the instance; CHIP_ID is all-zero on AWS while
>> the
>> report's MASK_CHIP_KEY flag reads 0; on TDX only the host-supplied
>> MROWNER differs,
>> unless the guest extends an RTMR, which I measured on two TDs.
>> https://www.google.com/url?q=https://github.com/ietf-wg-seat
>> /draft-ietf-seat-use-cases/issues/8%23issuecomment-577986
>> 3014&source=gmail&ust=1790180231627000&sa=E
>>
>> #60 On key migration between trusted environments: the firmware ABI marks
>> ReportID as
>> migrating with the guest, and an owner-authorised transfer, honoured only
>> toward an
>> instance the relying party has itself seen attest, measured on live
>> SEV-SNP.
>> https://www.google.com/url?q=https://github.com/ietf-wg-seat
>> /draft-ietf-seat-use-cases/issues/60%23issuecomment-
>> 5779864103&source=gmail&ust=1790180231627000&sa=E
>>
>> Section 4 of the use-cases draft asks proposals to state which of its
>> goals they meet and
>> how. That statement, goal by goal, with three goals not met and said so,
>> is here:
>> https://www.google.com/url?q=https://github.com/nikolaichuk7
>> /hatls/blob/v0.3.0/docs/SEAT-GOALS.md&source=gmail&ust=
>> 1790180231627000&sa=E
>>
>> Two corrections of my own from the same pass: the guest probe in my
>> repository had been
>> unable to answer a connection since v0.2.0 (recorded results predate the
>> defect; the
>> "clone it and run it" invitation did not), and a "7.96 ms beacon" I had
>> quoted as a rate
>> was one report's latency while my own file held a 10 s maximum: the host
>> throttles a
>> guest to about ten SEV-SNP reports per ten seconds. Both are fixed and
>> written up.
>>
>> Release, with every measurement reproducible from a clone:
>> https://www.google.com/url?q=https://github.com/nikolaichuk7
>> /hatls/releases/tag/v0.3.0&source=gmail&ust=1790180231627000&sa=E
>>
>> I will keep further detail on the issues rather than here.
>>
>> Serhii Nikolaichuk
>> The Capital Index, Austin, Texas
>>
>>
>