Skip to content
Tacet

Detect timing side channels in cryptographic code with statistically rigorous methods.
Terminal window
cargo add tacet --dev
use tacet::{TimingOracle, AttackerModel, Outcome, helpers::InputPair};
let inputs = InputPair::new(
|| [0u8; 32], // Baseline: all zeros
|| rand::random::<[u8; 32]>() // Sample: random data
);
let outcome = TimingOracle::for_attacker(AttackerModel::AdjacentNetwork)
.test(inputs, |data| {
my_crypto_function(&data);
});
assert!(outcome.passed(), "Timing leak detected: {:?}", outcome);

Existing tools like DudeCT output t-statistics and p-values. Tacet gives you what you actually want: the probability your code has a timing leak, plus how exploitable it would be.

DudeCTTacet
Outputt-statistic + p-valueProbability of leak (0–100%)
False positivesUnboundedConverges to correct answer
Effect sizeNot providedEstimated in nanoseconds
ExploitabilityManual interpretationAutomatic classification
CI-friendlyFlaky without tuningWorks out of the box

While testing the library, I incidentally rediscovered CVE-2023-49092 (Marvin Attack) in the RustCrypto rsa crate—a ~500ns timing leak in RSA decryption. I wasn’t looking for it; the library just flagged it. See the full investigation.