Skip to content
Lurk Lab

Functional Commitments

Historical demonstration. The steps below display recorded values from an earlier implementation.

One interesting potential use-case for Lurk is programming functional commitments. A functional commitment is a cryptographic primitive that allows a committer (or prover) to commit to a secret function in a way that hides the function from clients and binds the committer to correctly applying the function to any input without changing the function. In a functional commitment scheme, there are three primary actors:

  1. Prover / committer.
  2. Client
  3. Verifier

The prover, or committer, commits to the function. The client offers an input to the commitment and asks the prover to "open" the commitment in a way that gives an output without revealing any information about the function as a whole. This results in both an output and a proof that the output is correct. The verifier, which could be the client or another party, confirms that the proof is correct, thus confirming that the function was correctly applied to the input.

The basic steps of a functional commitment workflow are demoed below. For a scholarly treatment of Functional Commitments, see Boneh 2021: https://eprint.iacr.org/2021/1342.pdf

1. Commit

A prover commits to a function, producing a commitment in the form of a hash. This binds the prover to applying this function to any inputs without the prover being able to change the function in any way. The commitment is public. The function is not.

Prover · Secret functionRead only
(lambda (a) (* a a))
Prover → Client / Verifier · Commitment

2. Provide input

A client provides an input for the commitment to the prover.

Prover · Commitment
Client → Prover · Input
17

3. Open

The prover opens the commitment for that input and returns an output as well as a proof that the output is correct. This is done without revealing any information about the function other than that it was applied correctly.

Prover · Commitment
80c4e9edb43fbaaef0e3b1c0da248bd60981ba79f6425fd48a18bd2afdd7e26e
Prover · Input
17
Client / Verifier · Output
Recorded proof
Recorded proof

4. Verify

The verifier verifies that the proof is correct. This confirms that the prover correctly applied the function to the client’s input.

Client / Verifier · Recorded proof
Proof to verify
Verification results