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

waqas.nawaz@vision4d.ai Thu, 24 September 2026 14:30 UTC

Received: from skyblue.cherry.relay.mailchannels.net (skyblue.cherry.relay.mailchannels.net [23.83.223.167]) (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 7317631 for <seat@ietf.org>; Thu, 24 Sep 2026 14:30:08 +0000 (UTC)
Authentication-Results: mx.ietf.org; dkim=pass header.d=vision4d.ai header.s=hostingermail-a header.b=QRf7kQwu; dmarc=pass (policy=none) header.from=vision4d.ai; spf=pass (mx.ietf.org: domain of waqas.nawaz@vision4d.ai designates 23.83.223.167 as permitted sender) smtp.mailfrom=waqas.nawaz@vision4d.ai
X-Sender-Id: hostingeremail|x-authuser|waqas.nawaz@vision4d.ai
Received: from relay.mailchannels.net (localhost [127.0.0.1]) by relay.mailchannels.net (Postfix) with ESMTP id 3C4BC43640 for <seat@ietf.org>; Thu, 24 Sep 2026 14:24:26 +0000 (UTC)
Received: from fr-int-smtpout21.hostinger.io (trex-green-7.trex.outbound.svc.cluster.local [100.103.69.215]) (Authenticated sender: hostingeremail) by relay.mailchannels.net (Postfix) with ESMTPA id 9A45142248 for <seat@ietf.org>; Thu, 24 Sep 2026 14:24:25 +0000 (UTC)
X-Sender-Id: hostingeremail|x-authuser|waqas.nawaz@vision4d.ai
X-MC-Relay: Neutral
X-MailChannels-SenderId: hostingeremail|x-authuser|waqas.nawaz@vision4d.ai
X-MailChannels-Auth-Id: hostingeremail
X-Celery-Spill: 4067cb5768240dcf_1790259866157_3595541866
X-MC-Loop-Signature: 1790259866157:2033769627
X-MC-Ingress-Time: 1790259866157
Received: from fr-int-smtpout21.hostinger.io (fr-int-smtpout21.hostinger.io [148.222.54.33]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.103.69.215 (trex/8.0.2); Thu, 24 Sep 2026 14:24:26 +0000
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=vision4d.ai; s=hostingermail-a; t=1790259863; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Fof48RqfcMLuotVXR9zbPq23daLf2NBbe8jcsAT0r4s=; b=QRf7kQwuNd/mDaA2jCydkEq9gLWrzECyzwPJ/fVBtRz13OzPHXnOif5/bgd9nVY996Bg7F DcqnwTdSBNyiGKMyRJKcrKsTNVuHMznmkfKO9WFB0oAL38+37Xm1308trXCMSGPxtGqY6a /YtORhs68Q4g8CsGA8Z4pwVkk9T0uHWiket+yB2Sq+R+SQuvsi9Q8A0BvxRehDMLFIA5Qy hMiovLxImM1x5Orh/+hy5Nx9/PSmPr17NaG+3Jr3LCvlpXCCOy7RjwUKmeyUphBZEJwQbs wkAFpIvZqv6XE69ePbyyrfDUE4UPGosqJmc8Sqmh1U26dWjY8P3s6Kx63xBerw==
Received: from localhost (122.132.242.35.bc.googleusercontent.com [IPv6:2a02:8071:7031:24a0:b5c1:89d1:f3d1:e9fb]) (Authenticated sender: waqas.nawaz@vision4d.ai) by smtp.hostinger.com (smtp.hostinger.com) with ESMTPSA id 4hrGLH51Qpz1y5S for <seat@ietf.org>; Thu, 24 Sep 2026 14:24:23 +0000 (UTC)
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="utf-8"
From: waqas.nawaz@vision4d.ai
In-Reply-To: <CADj3X6u+wB0b7J6uNBSfyRU-uPqOiD==CbGDv4ruH+i6yxCt7g@mail.gmail.com>
Message-Id: <1790259854301135389.1790259854@vision4d.ai>
Mime-Version: 1.0
References: <1790248652400348935.1790248652@vision4d.ai> <CADj3X6u+wB0b7J6uNBSfyRU-uPqOiD==CbGDv4ruH+i6yxCt7g@mail.gmail.com>
To: nikolaichuk.s.f@gmail.com
Date: Thu, 24 Sep 2026 14:24:23 +0000
X-CM-Analysis: v=2.4 cv=V5Av0vni c=1 sm=1 tr=0 ts=6ab53297 a=+ybjH46IzhsC+hFG1oqGWQ==:617 a=xqWC_Br6kY4A:10 a=IkcTkHD0fZMA:10 a=pGLkceISAAAA:8 a=1XWaLZrsAAAA:8 a=NEAV23lmAAAA:8 a=Vde6m-NTAAAA:20 a=NoNz8V8ZTBIzAYfvNFcA:9 a=fy1v-yM_wQVnx0jM:21 a=lqcHg5cX4UMA:10 a=QEXdDO2ut3YA:10 a=QSwYuyRc7SQ49COVeiR-:22 a=bA3UWDv6hWIuX7UZL3qL:22
X-CM-Envelope: MS4xfJHZxZTvS9KuUWGAx99EvywpWLjtYf/UhXgErJxJ1ulrQYICCthWtU3uQi17wy994v+kGJYM73XP/bNDcpLc8irXu8ybSTawfpRMPRkTLCWB788u+jWC kXKFdxJrTwmWLGOY9lJimLyIrOJohqrr+wLHdjnC6dwWdHxO3DhcZyHEp4U962tmG3ezPJ2ts06nEtlBbSp/Ug5GTDmdnUxA5XEOOBoDvklOP9hwUuwo3doP Nih0N/Qr+qN9d6CzpNcx3w==
X-AuthUser: waqas.nawaz@vision4d.ai
X-Spamd-Bar: /
Message-ID-Hash: NBH45VBWG2C7SCTCRM6HQUADEYVIAB2L
X-Message-ID-Hash: NBH45VBWG2C7SCTCRM6HQUADEYVIAB2L
X-MailFrom: waqas.nawaz@vision4d.ai
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/Gg_a8xU71viOoFbdVFPAMGRySLQ>
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>

Serhii, inline with [WN]

On Thu, Sep 24, 2026 at 2:12 PM Serhii Nikolaichuk <nikolaichuk.s.f@gmail.com> wrote:
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).
[WN] I already implemented this draft. I matched label this week. What problem does your code solve? Why you change the labels?
Thanks,
Waqas

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-early-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.

#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.

#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.

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.

#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.

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:

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:

I will keep further detail on the issues rather than here.

Serhii Nikolaichuk
The Capital Index, Austin, Texas