with the help of @vegetables i finally got it working. i had two off-by-ones, and i was messing up the generation of the commitments. \o/ robust updatable threshold oprfs here i come! expect some code hitting the liboprf repo soon.

#ngi0 #crypto #oprf #multipartyComputation #liboprf

just prototyped this 3hashtdh from https://eprint.iacr.org/2024/1455 in python using pyoprf, and it is surprisingly simple and elegant. really looking forward to add it properly to liboprf. adding the t-opaque from the paper is a childs play, for each "target server" one additional hkdf call is all that is necessary besides using 3hashtdh...
https://github.com/stef/liboprf/blob/master/python/3hashtdh.py#L16-L21

#threshold #oprf #crypto #liboprf

Threshold PAKE with Security against Compromise of all Servers

We revisit the notion of threshold Password-Authenticated Key Exchange (tPAKE), and we extend it to augmented tPAKE (atPAKE), which protects password information even in the case all servers are compromised, except for allowing an (inevitable) offline dictionary attack. Compared to prior notions of tPAKE this is analogous to replacing symmetric PAKE, where the server stores the user's password, with an augmented (or asymmetric) PAKE, like OPAQUE [JKX18], where the server stores a password hash, which can be used only as a target in an offline dictionary search for the password. An atPAKE scheme also strictly improves on the security of an aPAKE, by secret-sharing the password hash among a set of servers. Indeed, our atPAKE protocol is a natural realization of threshold OPAQUE. We formalize atPAKE in the framework of Universal Composability (UC), and show practical ways to realize it. All our schemes are generic compositions which interface to any aPAKE used as a sub-protocol, making them easier to adopt. Our main scheme relies on threshold Oblivious Pseudorandom Function (tOPRF), and our independent contribution fixes a flaw in the UC tOPRF notion of [JKKX17] and upgrades the tOPRF scheme therein to achieve the fixed definition while preserving its minimal cost and round complexity. The technique we use enforces implicit agreement on arbitrary context information within threshold computation, and it is of general interest.

IACR Cryptology ePrint Archive

working on a distributed key generation (#dkg) protocol for #liboprf using a trusted party as the central hub (star topology). the test code is all in memory, no network involved. doing a key generation for 128 peers with a threshold of 127 takes a lot of time (all sequential of course, huge potential for parallelization):

./tp-dkg 126.83s user 0.03s system 99% cpu 2:06.86 total

[enh] added support for DKG in python wrapper and a test · stef/liboprf@a1703b8

library providing OPRF and Threshold OPRF based on libsodium - [enh] added support for DKG in python wrapper and a test · stef/liboprf@a1703b8

GitHub

wooohoo, just released python bindings for #liboprf: https://github.com/stef/liboprf/tree/master/python

#IRTF/#CFRG testvectors are compliant.

comes with threshold support!

DKG support todo.

liboprf/python at master · stef/liboprf

library providing OPRF and Threshold OPRF based on libsodium - stef/liboprf

GitHub