RustCrypto / RustCrypto/crypto-bigint
vartime Safety - guardrails & static analysis by design
Nobody has claimed this yet.
- Dominant language
- Rust
- Stars
- 309
- Forks
- 95
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 3
Description
Some algorithms have vartime components on non-secret data requiring associated use of vartime functionality.
e.g. where the vartime use is associated with non-secret dependant data.
This could be treated similarly to Rust borrow checker and unsafe { .. }
Marking data as VarTime safe - e.g. hinting it's public could be done via a macro:
#[vartime(public)]
pub struct PublicData {
pub(crate) public_field: SomeOtherData,
}
Then in functions guard input to vartime functions via the generated wrapper VarTime<PublicData> type
/// VARTIME SAFETY: PublicData is not secret
#[vartime_guard]
pub fn some_vartime_thing(VarTime<PublicData>, SecretData) { .. }
This would enable borrow check type static analysis - ctgrind but in static - so that secret data does not end up in vartime.
I've also looked into doing static analysis off MIR for CI check but having type-level guardrails could help safety.
Also we can enable check to ensure no use of "vartime safety undocumented" vartime gets undocumented.
Relevant Cryptography
- #590 with RSA Even GCD where Even mod-1 is used
Prior art
- https://github.com/agl/ctgrind - Adam Langley ctgrind (dynamic analysis via valgrind)
- https://www.post-apocalyptic-crypto.org/timecop/ - TIMECOP as part of SUPERCOP adapting ctgrind for all nist entries
- https://github.com/rozbb/dudect-bencher - @rozbb port of dudect to Rust (dynamic statistical analysis)
- https://eprint.iacr.org/2016/1123.pdf - dudect paper
- https://docs.rs/pre/latest/pre/ - when type-level is not enough
Dudect requires carefully crafted datasets (I adapted rozbb's vec eq example to ct/vartime memcmp) to illustrate.
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reviewing the proposed vartime annotations and guards, then inspect the linked MIR investigation under side_channels and side_channels_dudect. Compare the design with the RSA Even GCD work in issue #590 and the listed ctgrind, dudect, and pre prior art. Done would require an agreed implementation for type-level vartime safety and a CI check for undocumented vartime use.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- cryptography, security, tooling
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100