{
  "slug": "symbolic-protocols",
  "name": "Symbolic protocol analysis",
  "short": "protocol analysis",
  "title": "Symbolic protocol verification tools: Tamarin, ProVerif, Verifpal, DY* compared",
  "summary": "Automatic analyzers that model a protocol with perfect (Dolev-Yao) cryptography and search for attacks over unbounded sessions: authentication failures, key-compromise impersonation, downgrade, replay and unknown-key-share. Tamarin and ProVerif are the standard tools; Verifpal trades expressiveness for approachability; DY* embeds the analysis in F* for executable code.",
  "intro": [
    "Symbolic tools do not reason about probabilities or bit-level cryptography. They treat encryption, signatures and hashes as perfect and ask whether the protocol logic itself is broken. That abstraction makes them fast and largely automatic, and it is exactly the level at which most real protocol bugs live: a missing binding of the transcript, an identity that is never authenticated, a state machine that accepts an old message.",
    "For a ZK or cryptographic product, symbolic analysis is the right first pass for the protocol layer that sits around the proofs: session setup, key exchange, message ordering, and any hybrid post-quantum negotiation. It does not verify the proof system or the circuit."
  ],
  "choose": [
    "Stateful or complex protocols with many roles (TLS, 5G, Noise, EMV): **Tamarin**, which offers the most control and the best published track record.",
    "Fast automatic analysis with a large existing model base and unbounded sessions: **ProVerif**.",
    "A developer team writing its first model: **Verifpal**, then port to Tamarin or ProVerif when the model grows.",
    "Analysis that must stay attached to the implementation: DY* in F*, or hax's ProVerif backend from Rust."
  ],
  "tools": [
    {
      "name": "Tamarin",
      "page": "https://sorryfree.com/frameworks/tamarin/"
    },
    {
      "name": "ProVerif",
      "page": "https://sorryfree.com/frameworks/proverif/"
    },
    {
      "name": "Verifpal",
      "page": "https://sorryfree.com/frameworks/verifpal/"
    },
    {
      "name": "DY*",
      "page": "https://sorryfree.com/frameworks/dystar/"
    }
  ],
  "page": "https://sorryfree.com/categories/symbolic-protocols/",
  "updated": "2026-09-13"
}