[Keytrans] Re: Keytrans@IETF 126 : Call for agenda topics

Brendan McMillion <brendanmcmillion@gmail.com> Sat, 01 August 2026 04:08 UTC

Return-Path: <brendanmcmillion@gmail.com>
X-Original-To: keytrans@mail2.ietf.org
Delivered-To: keytrans@mail2.ietf.org
Received: from localhost (localhost [127.0.0.1]) by mail2.ietf.org (Postfix) with ESMTP id 68952121F4E60 for <keytrans@mail2.ietf.org>; Fri, 31 Jul 2026 21:08:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ietf.org; s=ietf1; t=1785557280; bh=K0dRU10PwIiHm6pRHmEePcBv5fO4Gl8yz05uXW1E2Sc=; h=References:In-Reply-To:From:Date:Subject:To:Cc; b=Tuhija0hHtEBjYwYa1CpaRr/32b1eqR8Vv93QA+uP82tdeMvybBnsCPPouvPPR0BF cYFuVXYfKcJRiy/Mhng0ld+RIxBwkKvbESc9C1E0dXaNtYOcVKlPbbXQY/jw9nVLlz +wd8X5/dYlPIlXTGqv2lDVTbxP/SREGKKP0/S5DM=
X-Virus-Scanned: amavisd-new at ietf.org
X-Spam-Flag: NO
X-Spam-Score: -2.088
X-Spam-Level:
X-Spam-Status: No, score=-2.088 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_KAM_HTML_FONT_INVALID=0.01] autolearn=ham autolearn_force=no
Authentication-Results: mail2.ietf.org (amavisd-new); dkim=pass (2048-bit key) header.d=gmail.com
Received: from mail2.ietf.org ([166.84.6.31]) by localhost (mail2.ietf.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id eNkq1JL55NFP for <keytrans@mail2.ietf.org>; Fri, 31 Jul 2026 21:07:59 -0700 (PDT)
Received: from mail-wr1-x432.google.com (mail-wr1-x432.google.com [IPv6:2a00:1450:4864:20::432]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature ECDSA (P-256) server-digest SHA256) (No client certificate requested) by mail2.ietf.org (Postfix) with ESMTPS id 41CA7121F4E56 for <keytrans@ietf.org>; Fri, 31 Jul 2026 21:07:59 -0700 (PDT)
Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-472326ca506so1270788f8f.2 for <keytrans@ietf.org>; Fri, 31 Jul 2026 21:07:59 -0700 (PDT)
ARC-Seal: i=1; a=rsa-sha256; t=1785557278; cv=none; d=google.com; s=arc-20260327; b=hTlfLXoZQsxFG/ekqoCi2shSM4ltsC9nFwqQmWp2XDwaHLb4HMLLuSL0pbjHFoLCxj lz5e2jPp/wwtjgjqIGJz+67y5GsJ3Kg+RWo/VS3k1Z5+s8nTivB4tV1MLLDPuv7Ti7fi Og6Z71OYBql1Opu1sVxytB0jXUy4YYDMufRjH3QUnKiWN8R0/pFehsIxLKYzJR+WqE+L 2ADA2s1bpj5p5GAowjAiBVoJqFjKTssP2rmhfpBFQJlTCmAV5tL6Q1UMhAA6iCRNmLiy uwEY8aDPvjm/ig4UoH4YrCASvJxV68W0K06xxYdkiikaNGvMpzdvAHMrjghxIlUEZcWG fUCw==
ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=oCforbc4jLiYoZyr4Fos6fJHIBVn8+zG4yCBUOJj/4w=; fh=2JBGcSVTvcbL/+TnnwMWYN3F3xq6l8JY6RvYo3IzGD4=; b=RAXGf3GR/8awQszusG29QXBQgcHF5Tl9gL4t3QazDL+/LO9ewTaPoMhjEA5WyFi3rH NJ4kEP/Fn7MFtJkIW0oON+xOjAT8p5X9HFQ/sRGxQKo4z8TCkroe5lpYG8LiCWf/F3OS sjnte83WK+SHzXWualOt4QbL8BQq3ETNiHUc6KOAop6HzeSMvkcivEH0yRZT4O40hytM KMzEwZdSJb+x5I6kOtkvKxHJNjwMVB4chrg0SUdVOsrOmhbsXARQrzOyzf6F6aN1LHhj JB24gZ5kVDTQvmt+hJKvyCrwJEwJysrt2v1ggDK1p0zLoCNK+Td+e7mc5rGVJDD3lTLT WfIA==; 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=1785557278; x=1786162078; darn=ietf.org; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:from:to:cc:subject:date:message-id:reply-to :content-type; bh=oCforbc4jLiYoZyr4Fos6fJHIBVn8+zG4yCBUOJj/4w=; b=ra73BXZMclp+AJOCuTYREiFkU09eUID4BmBmmy/8ycqB/J5CoEW/eU3JdHyg2usQVB 4t+z8oqmQfIl1x4Nk11tDWvnAO/AEfGVWot6rBUd3jl9ZMyHn57wW904DH4htfQBWzzC OXrsWePcX4O9SIM315hdmPfpsk657HU3k6RduL7OQQN/2IxK7Y2shmTPWjP7MXedfLgE vhxq3o7tVEwLzMVF4CRRUXGet/sMfxnY2l5IA749nbGjHPLv5iOfmH5NSLz8mbP/1em/ FKk+XQJQIPg2+EcFrAcZ9CnYJytYlPH/xIU4w1G8FLkJYTZwq1dVcQSA9bHL+v8jmFlu mwJw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785557278; x=1786162078; h=content-type:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to:content-type; bh=oCforbc4jLiYoZyr4Fos6fJHIBVn8+zG4yCBUOJj/4w=; b=RI+uYjOzYWTxDJwc79Reoqh1sbxBirvBjb7PAoCch+v1Ul5IF3XkhtYy507eI/luaO SGpePBRByvKiXF6jZJssQkPVuHZqVUBkOZV6gkLUTgcReNRESfI3hmJTKnv8lIWOH+4r UCQj3naXKMXU0CqRCAfUyDWKnsNeBOh+efgRdrvokXbF8x7+z+3Io3OagW8EaYz2wD5Y 5BHj9YtVoQA5+HjmobzOQP3mSU2+Iu45fQYenxlZWws3qeadJ5qE1ymNcevpq1slbYPC oK1SwBpbHgz/6ghDnaSqeHGh/2CSSxplXkkMR7KHFC0MV7EAeHSc8hlEj5cPVFscQGdv pwzA==
X-Gm-Message-State: AOJu0Yz4nzA8RfkU2nULa5rLgDyuWdvfsHduvdhqyc/qtMfmY6SM0MSC Tr7x3H35wWSXjtpkoNo31Y96ssC6Hs9dAO2N4q7VA3P6RFJo+qtNzzKhrB7y2Rf1Tly+IOi9Mg5 CNmod5rP1gGE7aNv276Lt3SlU6etTJLPiXveNUI0=
X-Gm-Gg: AR+sD11WIn0+LD47jRRB5ZMxnPYF2dKWBFD/wNiLmeyDquNgk3LbyGhr/v/ktuV5cKu Uzb9e3mkhIC0whWR4ueCJlnTkkKzcK8cDEnLVPGy+lF+T4UQC13jpZB3PhAfMB8x4HVdl35qSRh 4qwdRnxnUrX6LjgdKQ2kicIaFzvEHftpWgkCAYbLGdd92ppc2bja2tPSW5X5uspDboE62gV6941 aGlLKu2tKdCG4GsLsBNfm5635qoA/vGDpU2BmA6TG2aWGbJOeX2rQljFnfDxG264pi8ZN4lKMHA sMQx60nm1pMagc3gKcK9fesW9s7yRPZahc6wiecmR2rWpDPOgzRShRoEADeD2bbmjJ7aCvKga4A r1jQj+O9OlLCeFUDX77DBVEUjju5243x75w==
X-Received: by 2002:a05:6000:460b:b0:47f:96e6:70a with SMTP id ffacd0b85a97d-47fd72625a6mr3670927f8f.0.1785557278047; Fri, 31 Jul 2026 21:07:58 -0700 (PDT)
MIME-Version: 1.0
References: <CAA1-vB0H9ytS8Af-E7rL3-2XjDFKKiP5AgXL=NVJSvCzc+5VQQ@mail.gmail.com> <CAPeSryro49=BNuocgU+ULDh0W++4VuHpywivxicdu5GQFAyHjQ@mail.gmail.com> <CAPeSrypab7TR1=CwAfGiJVWH3Sy+D6d=93vmq69BQVyoa1-evg@mail.gmail.com> <CAJTd26+K_UQ9pb4LMrMx9ro-q7d6aayMfrDWM7Ku1k=AMsMOQA@mail.gmail.com>
In-Reply-To: <CAJTd26+K_UQ9pb4LMrMx9ro-q7d6aayMfrDWM7Ku1k=AMsMOQA@mail.gmail.com>
From: Brendan McMillion <brendanmcmillion@gmail.com>
Date: Fri, 31 Jul 2026 21:07:45 -0700
X-Gm-Features: AUfX_mz-MK-SYcInLpS8QTI8aSKWO1ly8S2D_JKU-S7c3k5kgTBRAGirgTC4Jyc
Message-ID: <CAJTd26J1yvPD6s3SyGoT0ZKt_Tu=H__xonj+xuFZQSD+4s8qtQ@mail.gmail.com>
To: Felix Linker <linkerfelix@gmail.com>
Content-Type: multipart/alternative; boundary="00000000000048c07a0657f473c9"
Message-ID-Hash: O53GJIIJBLL3M25OCPZMGNY7DPI5XU7G
X-Message-ID-Hash: O53GJIIJBLL3M25OCPZMGNY7DPI5XU7G
X-MailFrom: brendanmcmillion@gmail.com
X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header
CC: keytrans@ietf.org
X-Mailman-Version: 3.3.9rc6
Precedence: list
Subject: [Keytrans] Re: Keytrans@IETF 126 : Call for agenda topics
List-Id: Key Transparency <keytrans.ietf.org>
Archived-At: <https://mailarchive.ietf.org/arch/msg/keytrans/XCGLyKxdPpcSpr11_aZxwdu9cjs>
List-Archive: <https://mailarchive.ietf.org/arch/browse/keytrans>
List-Help: <mailto:keytrans-request@ietf.org?subject=help>
List-Owner: <mailto:keytrans-owner@ietf.org>
List-Post: <mailto:keytrans@ietf.org>
List-Subscribe: <mailto:keytrans-join@ietf.org>
List-Unsubscribe: <mailto:keytrans-leave@ietf.org>

Hi again

I opened this PR, which recommends that implementations output, or be able
to output, their messages in TLS format:
https://github.com/ietf-wg-keytrans/draft-protocol/pull/52 -- The "or be
able to output" clause here is somewhat load-bearing. While I don't think
that TLS is going to be the right wire format for most applications, I
think it's a small ask that implementations include serializers for TLS
format if it allows more thorough interop testing.

Also, I rewatched the meeting recording and I think I misunderstood your
comments on the CombinedTreeProof. You said at the time that the wire
format of the CombinedTreeProof is fine, but that the text in the draft is
lacking. There's a series of subsections of section 13.2 that explain what
exactly goes into the CombinedTreeProof for each algorithm. Does this text
address your concern / is it in the right direction but needs further
development?

On Fri, Jul 31, 2026 at 2:31 PM Brendan McMillion <
brendanmcmillion@gmail.com> wrote:

> Hi Felix
>
> We should make one wire format mandatory. Currently, the draft allows
>> implementers to freely choose the wire format. I would make TLS mandatory.
>> If people want to use a different wire format, they of course still can,
>> but fixing TLS allows us to at least hope that different implementations
>> interoperate.
>
>
> To give my own thoughts and to recap the discussion on the list a bit, the
> pros of not having a fixed wire format are:
>
> - Given the nature of this protocol, we can expect that most applications
> are going to want to customize their use / implementation of it to some
> degree. As an easy example, an application might be very prescriptive about
> what labels can be searched for / updated / monitored, to the point where
> allowing these fields to even be set in a request would be pointless. A
> flexible wire format makes these customizations easier to accomplish.
> - Inspecting the contents of requests is necessary for access control.
> Allowing flexibility, at least in the encoding of requests, also makes this
> easier to accomplish.
> - TLS cedes a lot of ground as far as extensibility, compressibility, and
> human intelligibility.
>
> The only con that I've seen discussed of not having a fixed wire format is
> that it makes interop testing harder. But the counterpoint here is that,
> since the wire format isn't fixed, we shouldn't be interop testing it. We
> should be interop testing un-encoded structures. So I wouldn't give you a
> byte string corresponding to an encoded SearchRequest, I'd give you
> SearchRequest{last: 1234, label: "brendan", ...} and see how your
> implementation processes it.
>
> I suggest simplifying the PrefixProof structure as follows: Represent
>> prefix trees as a list of leafs with their depth. Either store the node's
>> hash value (can be omitted for an empty leaf) or store the VRF output and
>> the commitment. The reconstruction algorithm can then simply do a DFS
>> search over the prefix tree and initialize it along the way. With the
>> current wire format, one must merge prefix trees first with the binary
>> ladder, then initiate leafs from the prefix search results, then fill in
>> node values.
>
>
> I don't understand how this is a simplification. You say that currently,
> you have to write code to compute each leaf's hash from the VRF output and
> commitment before you can evaluate the proof. And your claim is that you
> can simplify your implementation if each leaf's hash is directly in the
> proof. The issue with putting the leaf hashes directly into the proof,
> though, is that now you have to verify they're correct. So your proposal
> swaps code that does "compute each leaf's hash from the VRF output and
> commitment and insert it into the PrefixProof calculations" for "compute
> each leaf's hash from the VRF output and commitment and check that it
> matches what's in the PrefixProof." This doesn't seem any simpler to
> implement and requires more bytes on the wire. Am I missing something here?
>
> Such language makes the draft hard to implement because one now needs to
>> consider the entire document to understand how to parse the data structure.
>> I think this one will be quite hard to address. I cannot come up with the
>> right language right now, because I'm not sure what actually holds about,
>> e.g., the combined tree proof in all cases. But maybe that's a sign that
>> such text is needed.
>
>
> It's extremely simple to parse this data structure though, it's 4 arrays
> of simple data types. That's all that should be done at the parsing phase. Evaluating
> the proofs is also meant to be fairly easy: you implement the algorithms as
> they're specified, and when one of the algorithms needs a timestamp or a
> prefix proof, you pop the next one off of the `timestamps` or
> `prefix_proofs` field, respectively. So you essentially have two queues.
> This implementation strategy is discussed somewhat briefly in Appendix C.
>
> But note what this means: explicitly associating each timestamp or prefix
> proof with its log entry doesn't actually simplify implementation. Each
> algorithm already wants a specific set of timestamps in a specific order
> (which timestamps? evaluate the algorithm!). But now you need to parse this
> more complex wire format and do extra verification, such as: ensuring that
> the same position isn't listed multiple times, enforcing an order on the
> encoded map entries, and so on. Let me know if I'm missing something about
> this proposal, or if maybe adding more text to Appendix C would be helpful
>
> On Tue, Jul 28, 2026 at 4:31 AM Felix Linker <linkerfelix@gmail.com>
> wrote:
>
>> Hi everyone,
>>
>> As there was little time for discussion at the end of the meeting, I
>> wanted to raise my three suggestions for the protocol document on list and
>> here what other people say. Here they are:
>>
>>    - We should make one wire format mandatory. Currently, the draft
>>    allows implementers to freely choose the wire format. I would make TLS
>>    mandatory. If people want to use a different wire format, they of course
>>    still can, but fixing TLS allows us to at least hope that different
>>    implementations interoperate.
>>    - I suggest simplifying the PrefixProof structure as follows:
>>    Represent prefix trees as a list of leafs with their depth. Either store
>>    the node's hash value (can be omitted for an empty leaf) or store the VRF
>>    output and the commitment. The reconstruction algorithm can then simply do
>>    a DFS search over the prefix tree and initialize it along the way. With the
>>    current wire format, one must merge prefix trees first with the binary
>>    ladder, then initiate leafs from the prefix search results, then fill in
>>    node values.
>>       - I implemented this new wire format for testing purposes, and my
>>       code for constructing prefix trees indeed becomes much simpler:
>>       https://github.com/felixlinker/keytrans-verification/blob/ca4157ae8aaaae0b0e5b4b4e0e9d6d08524786a1/pkg/trees/prefix/prefix.go#L471
>>       - Previously, this was the code to first merge binary ladder
>>       results into the prefix tree:
>>       https://github.com/felixlinker/keytrans-verification/blob/3c4bb83d7dbcf47a4091d54653a5b6a2dcc84a8f/pkg/proofs/proofs.go#L102
>>       and this is the code to construct the prefix tree:
>>       https://github.com/felixlinker/keytrans-verification/blob/3c4bb83d7dbcf47a4091d54653a5b6a2dcc84a8f/pkg/trees/prefix/prefix.go#L536
>>    - I suggest describing the wire format more explicitly. For example,
>>    Section 12.3, specifying the combined tree proof, only says: "The
>>    timestamps field contains the timestamps of specific log entries [...].
>>    There is no explicit indication as to which log entry the elements
>>    correspond to, as they are provided in the order that the algorithm the
>>    user is executing would request them." Such language makes the draft hard
>>    to implement because one now needs to consider the entire document to
>>    understand how to parse the data structure. I think this one will be quite
>>    hard to address. I cannot come up with the right language right now,
>>    because I'm not sure what actually holds about, e.g., the combined tree
>>    proof in all cases. But maybe that's a sign that such text is needed.
>>
>>
>> Curious to hear what the rest thinks!
>>
>> Best,
>> Felix
>>
>> Am Do., 16. Juli 2026 um 10:14 Uhr schrieb Felix Linker <
>> linkerfelix@gmail.com>:
>>
>>> Hi Prachi and fellow keytrans enthusiasts,
>>>
>>> We made progress implementing a client. The client is still very much
>>> WIP, but I believe (with an asterisk) that it should be able to verify
>>> greatest version queries.
>>>
>>> The code for that can be found here:
>>> https://github.com/felixlinker/keytrans-verification/blob/felixlinker/client-state/pkg/client/client.go#L98
>>> Development currently happens on that branch.
>>>
>>> I could not test whether the client works yet because I'm not aware of a
>>> server implementation that generates search responses for search requests.
>>> Maybe my understanding here is wrong, I asked both Guy and Brendan for
>>> this. Would be great to have test vectors. My implementation of a prefix
>>> and log tree is tested, but only "against itself," i.e., I check that my
>>> implementation satisfies certain invariants.
>>>
>>> We also prove that our go implementation is memory safe. We haven't gone
>>> much further than that in our mechanized proofs because I would first like
>>> to test whether the client implementation actually works. It is much
>>> cheaper to test than to prove, so I want to do that first.
>>>
>>> The asterisk that I mentioned above is that I took the liberty to change
>>> the server response format slightly so that proofs are easier to parse. I
>>> could, at the meeting, present my experience implementing the client. My
>>> life would be much simpler if the change in wire format were part of the
>>> draft, and I find there are certain parts of the draft which are hard to
>>> implement and get right.
>>>
>>> Best,
>>> Felix
>>>
>>>
>>> Am Di., 14. Juli 2026 um 16:50 Uhr schrieb Prachi Jain <
>>> prachi.jain1288@gmail.com>:
>>>
>>>> Hello KEYTRANS enthusiasts,
>>>>
>>>> Please share any topics, discussion items, or anything else you'd like
>>>> to cover during our time at IETF 126. We have an hour allocated to us.
>>>>
>>>>
>>>> -Chairs
>>>> --
>>>> Keytrans mailing list -- keytrans@ietf.org
>>>> To unsubscribe send an email to keytrans-leave@ietf.org
>>>>
>>> --
>> Keytrans mailing list -- keytrans@ietf.org
>> To unsubscribe send an email to keytrans-leave@ietf.org
>>
>