Hooking up with Fiat-Shamir

A JavaScript framework for applying the Fiat-Shamir transformation to sigma protocols correctly, with proofs of knowledge of a discrete logarithm, of equality between logarithms, and of disjunctive equality as worked examples.

Abstract

A zero-knowledge proof convinces us of some claim's validity without revealing specifics. For example, you can prove possession of a private key without leaking any information about your key. Zero-knowledge proofs are typically derived by application of the Fiat-Shamir transformation to sigma protocols. Unfortunately, the transformation is commonly misapplied, introducing security vulnerabilities. Herein, I present a JavaScript framework for correct transformation.

$ curl -s https://publications.bensmyth.com/files/Smyth25-implementing-Fiat-Shamir.bib | cat
@unpublished{Smyth25-implementing-Fiat-Shamir,
  title = {{Hooking up with Fiat-Shamir}},
  year = {2025}, author = {Ben Smyth},
  url = {./},
  url-pdf = {./files/implementing-Fiat-Shamir.pdf},
  url-bib = {./files/implementing-Fiat-Shamir.bib},
  url-yaml = {./files/implementing-Fiat-Shamir.yml},
  url-md = {./files/implementing-Fiat-Shamir.md}
}