Hello again!
Thanks so much for the interest so far from everyone who has emailed me. Just some quick updates:
- Accountability is now implemented! And we fixed a latent bug in the Haskell, which is exactly the sort of thing I hoped would come out of this project, so I'm quite happy with that.
- More usefully, I've added a `prove_and_reverify.sh` script, which
generates the proof using the Rust implementation and then checks it for
you with tamarin-prover. In many/most cases,
this is faster than generating the proof with the Haskell implementation
directly, and more importantly means you do not have to trust the Rust
implementation at all (and, again, you really should not!) [note 0]
Whether prove + reverify is actually faster for you will depend a lot on your theory. Some scattershot examples that seem to be towards the extremes: CCITT_X509_3.spthy is 91/93/96% faster to proof + reverify at 1/4/16 cores (for context, at 16 cores that's 140s to proof in Tamarin Haskell versus 5.7s combined to prove in Rust and then reverify in Haskell), but in contrast stateverif_left_right.spthy is ~11% faster at 1 core but slower by about ~30% at 16 (16s Haskell, vs 20s prove + reverify) [note 1]. Specifically, verification cost scales with the end proof size, while --prove cost scales with the search space, so this is very fast on things like exists-trace lemmas or finding attack traces but will be much less helpful in proofs that have a lot of cases across different levels.
Again, I want to stress, you should not trust this project on it's own, you should always reverify your final proofs by loading them in the real canonical tamarin-prover instead of the knockoff! But with that said, the Rust implementation does currently produce exactly
equivalent proofs across all applicable example files I have to test against (419 of them)[note 0 again], so you may find it useful for 'prototyping' proofs, or for working on smaller machines, and that would be a great way to test it. In the (hopefully small) chance you do find a mismatch that doesn't reverify, that would be hugely helpful for me, please report it on github or email me.
I've also tried my best to clarify the licensing situation to the best of my ability to divine, which is to say it is currently a mix of MIT and GPL 3.0 (and therefore very firmly GPL 3.0 for any and all practical purposes).
Hopefully this is useful, and please do continue getting in touch if you have any questions/suggestions. I'm not currently building binaries for this so you will have to have rust to build it yourself; if having prebuilt binaries would make a big difference for your usecase get in touch and I can prioritise getting some github workflows set up.
Cheers,
Kevin
[note 0] Within the repo I have a patch for the issues mentioned in the first email about reverification, and there's a little setup script for building a patched version of Tamarin if you want with `./setup.sh testing`. That said both of those issues with reverification only apply in certain limited scenarios, so you may or may not need it.
[note 1] Note this is the performance after several recent optimisations to the Haskell, so if you're comparing against the release version then prove+reverify is much more likely to be generally faster.