Design-level security
for the AI era.
An applied cryptography practice. We audit the layer above implementation: protocol architecture, primitive selection, threat modeling, formal verification. AI bug-finders do not work at that layer.
Security has to start at the design level.
Protocol architecture, primitive selection, threat modeling, formal verification: everything downstream is a consequence of those decisions. More than 250 engagements since 2017 have started from that premise.
Our practice areas
Audits
Protocol architecture, cryptographic review, threat modeling, formal verification.
Tools
Verifpal, Crucible, hpke-ng, Kyber-K2SO, PQ Migration Playbook.
Teaching
Applied Cryptography. Free for 50 Lebanese students this summer.
Lab
Post-Quantum Migration Playbook, advisories, papers, the audit floor.
From the audit floor
Recurring bug classes from our audit work, with client details removed.
Constant-time leak in ECC point doubling
AEAD nonce reuse under concurrent state
Incorrect rounding in lattice solver
Public key not validated to correct subgroup
Unchecked length field in TLV parser
Crucible.
Bug classes,
encoded as tests.
129 tests across 12 categories, each tagged with the bug class, the FIPS spec section, and the audit it came from. Wire any ML-KEM or ML-DSA implementation up over stdin/stdout and get a pass or fail in seconds.
From the lab
Verifpal 1.3: Who Alice Thinks She's Talking To
Verifpal 1.3 adds peer scenarios, which instantiate a principal's counterparty differently across concurrent runs. That is what finally lets Verifpal find Lowe's attack on Needham-Schroeder and tell that protocol apart from its fix. Alongside it, every passing query now prints the envelope it was reached under, --saturate raises the session count until verdicts stop moving, and --auto-queries generates a query set from the model.
Read →Verifpal Reaches 1.0: A Toy Becomes an Instrument
Verifpal 1.0 removes the beta warning the tool has printed with every analysis since 2020, on the strength of a new paper. The language now covers post-quantum key exchange, declared weakening assumptions, witness-based unlinkability, and two concurrent sessions of every principal; the engine behind it comes with a soundness theorem that holds however the solver behaves, unconditional termination, and attack traces measured for readability against ProVerif and Tamarin.
Read →Verifpal 0.80.0: Nuancing Weak Cryptography Modeling and Witness-Based Unlinkability
Verifpal 0.80.0 lets a model declare that a particular piece of cryptography is broken (weak, forgeable, and from a chosen phase onward) instead of approximating the break with a list of leaked values, and decides unlinkability queries by searching for a concrete link witness that it then reports back to you.
Read →