Skip to content

Add DKLS23 presignatures #255

Description

@toufic0710

Context

bron-crypto already implements DKLS23 signing with two backends:

  • signing_softspoken
  • signing_bbot

In both flows, the message is only used in the last local signing step.

So part of the signing work can be done before the message is known.

Problem

Today the repo only exposes the full signing flow.

It does not expose a way to:

  • precompute message-independent signing material ahead of time
  • keep the result of that work
  • finish the signature later once the message is known

So users who want presigning do not have a clear flow in the library. They have to use the full signing protocol even though the protocol already separates:

  • work that does not depend on the message
  • work that depends on the message

Suggested solution

Add a presigning flow next to the current signing flow.

This follows the direction described by Groth and Shoup for presignatures:
https://eprint.iacr.org/2021/1330.pdf

At a high level:

  • each DKLS23 backend should expose a way to run all rounds that do not need the message yet
  • that step should return a presignature
  • the presignature should keep the secret values needed for the last step
  • later, once the message is known, the caller should pass the presignature, the message, and a public randomizer to a finalize step. The finalize step should hash the message itself. It should not accept a pre-hashed digest. The finalize step should also rerandomize the presignature before producing the partial signature. The randomizer should be public and unpredictable at the time of finalization.
  • that finalize step should return a normal DKLS23 partial signature, and delete the used presignature, so it can only be used once.
  • Aggregate should stay unchanged

Feedback

Please let me know if this looks like the right scope and direction for the presignature work.
Please also let me know which branch or commit would be the best starting point for this work.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions