Re: RFC: PROTOCOL.authrec, a structured authentication record from sshd

Avinash Duduskar <[email protected]>
Newsgroups gmane.network.openssh.devel
Message-ID <[email protected]>
On Fri, 7 Aug 2026, Damien Miller wrote:

> As well as a per-auth attempt gate that runs at the start of
> auth2.c:userauth_finish() that can reject an otherwise-successful
> authentication.

Both look inexpensive. A July probe showed AKC holds the satisfied
steps and keys; a userauth_finish gate should also see transport.

> IMO these could be nicer to implement complex authz logic than
> PAM modules.

Much nicer for the gates, which sshd feeds directly. $SSH_USER_AUTH
is user-owned since 7.6 and forgeable.
Happy to prototype a trusted channel; did you have a design in mind?

> I think you could state this more succinctly and idiomatically as:
>  	byte[8]   MAGIC_PREAMBLE
>  	uint32    FORMAT_VERSION
>  	string    contents

Adopted. It also removes the one field a producer had to compute by
hand; sshbuf_put_stringb() writes the bound itself.

> >    methods is an sshbuf carrying one entry per authentication step,
> >    in the order the steps were satisfied:
>
> Only for the authentication that succeeded, right?

Correct, successes and satisfied AuthenticationMethods steps only.
The spec will say so. Failed attempts stay deferred as in 4.1.

> Generally I avoid using counts for structured data and instead prefer
> using a self-delimiting format, e.g.

Adopted. This lets the per-step fields deferred in 4.1 be added
later without a version bump; the flat count grammar could not.

> IMO the credential and certificate blocks are redundant to the key_blob
> here and should be removed for simplicity.

Fair enough, both go.

> I think this should be a `uint32 kex_options` bitfield to make this
> trivially extensible.

Done, bit 0 = strict KEX; other bits zero and ignored if unknown.

One correction of my own: uid and gid are uint32 with no empty
encoding, so a producer without POSIX identities writes four bytes
that read as a real uid, and zero is root. sshd is never bitten.
If the record is OpenSSH-only this is a producer requirement and no
wire change; if it should stay emittable elsewhere it needs an
out-of-band value, and 0xFFFFFFFF has the chown and setreuid
precedent. I will assume OpenSSH-only unless you say otherwise.

> Anyway, it would be good to see a prototype of this.

I will revise the spec first, then send the marshaller and
ExposeAuthInfo=structured patch. The AKC record and the gate patches
follow separately.

Thanks,
Avi
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.