<feed xmlns='http://www.w3.org/2005/Atom'>
<title>sof-auth, branch master</title>
<subtitle>Reference materials for the auth used at SoF</subtitle>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/sof-auth/'/>
<entry>
<title>Revert "Model points at infinity as malicious public keys"</title>
<updated>2026-06-18T12:34:11+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-06-18T12:34:11+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/sof-auth/commit/?id=4d860b03abced10c1b3a5ae71c53cc75e306b5ab'/>
<id>4d860b03abced10c1b3a5ae71c53cc75e306b5ab</id>
<content type='text'>
This reverts commit c48736a18976a8d1c62fec3dbfa5c8c4dce38bc6.

The authentication indeed breaks down if an identity element is provided
as a public key, but this is merely a specific variant of a more
general algebraic issue.

What actually matters is rejecting points at infinity when they appear
*as the result of the secret derivation* (the exponentiation), not
as the client public keys. This might happen whenever an element from
any non-prime subgroup is used in secret derivation.

All-zero shared secrets must be rejected. This is correct, robust, and
doesn't rely on enumeration of all possible "bad" curve points.

This is tricky to model because Tamarin's Diffie-Hellman primitives
assume prime-order group, but implementations usually aren't. In
particular, X25519 has a cofactor and thus small-order points that end
up as an identity element after multiplying them by a clamped scalar.

One such point is:
e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800

Checks remain implicit in the model, but must be explicitly done in
real implementations.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit c48736a18976a8d1c62fec3dbfa5c8c4dce38bc6.

The authentication indeed breaks down if an identity element is provided
as a public key, but this is merely a specific variant of a more
general algebraic issue.

What actually matters is rejecting points at infinity when they appear
*as the result of the secret derivation* (the exponentiation), not
as the client public keys. This might happen whenever an element from
any non-prime subgroup is used in secret derivation.

All-zero shared secrets must be rejected. This is correct, robust, and
doesn't rely on enumeration of all possible "bad" curve points.

This is tricky to model because Tamarin's Diffie-Hellman primitives
assume prime-order group, but implementations usually aren't. In
particular, X25519 has a cofactor and thus small-order points that end
up as an identity element after multiplying them by a clamped scalar.

One such point is:
e0eb7a7c3b41b8ae1656e3faf19fc46ada098deb9c32b1fd866205165f49b800

Checks remain implicit in the model, but must be explicitly done in
real implementations.
</pre>
</div>
</content>
</entry>
<entry>
<title>Add the specification</title>
<updated>2026-06-18T04:25:21+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-06-18T04:25:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/sof-auth/commit/?id=4bb60d0ccd288defb848dd28beac344295dfa602'/>
<id>4bb60d0ccd288defb848dd28beac344295dfa602</id>
<content type='text'>
While the symbolic model is useful to demonstrate security properties, a
concrete, self-contained specification that said model proves and can
be referenced is essential.

This repository shall hold everything related to the protocol.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
While the symbolic model is useful to demonstrate security properties, a
concrete, self-contained specification that said model proves and can
be referenced is essential.

This repository shall hold everything related to the protocol.
</pre>
</div>
</content>
</entry>
<entry>
<title>Model points at infinity as malicious public keys</title>
<updated>2026-03-25T14:16:09+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-25T14:16:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/sof-auth/commit/?id=c48736a18976a8d1c62fec3dbfa5c8c4dce38bc6'/>
<id>c48736a18976a8d1c62fec3dbfa5c8c4dce38bc6</id>
<content type='text'>
If the server doesn't check that the user's public key is an identity
element O (point at infinity), authentication breaks down.

Because O^x = O, no matter the verification secret, the final result
will be: h(&lt;O, challenge, O, username&gt;). Username is assumed to be
public information in the model, and the challenge is openly sent into
the network. What's supposed to prove authenticity of the client via its
secret key and identity, now becomes a trivial universal backdoor with
the server challenge acting as a direct invitiation.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the server doesn't check that the user's public key is an identity
element O (point at infinity), authentication breaks down.

Because O^x = O, no matter the verification secret, the final result
will be: h(&lt;O, challenge, O, username&gt;). Username is assumed to be
public information in the model, and the challenge is openly sent into
the network. What's supposed to prove authenticity of the client via its
secret key and identity, now becomes a trivial universal backdoor with
the server challenge acting as a direct invitiation.
</pre>
</div>
</content>
</entry>
<entry>
<title>Initialize</title>
<updated>2026-03-13T15:50:28+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-13T15:50:28+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/sof-auth/commit/?id=cd4acb94133f7e6d42f0a04085cd11433b9eb611'/>
<id>cd4acb94133f7e6d42f0a04085cd11433b9eb611</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
