Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zeroisation #67

Draft
wants to merge 13 commits into
base: master
Choose a base branch
from
Draft

Zeroisation #67

wants to merge 13 commits into from

Conversation

mberry
Copy link
Member

@mberry mberry commented Mar 14, 2023

This is an unfinished baseline for full zeroisation of secrets. Transient data like the secretkey polynomials are zeroed.

For now it just does the internals and requires Pin to ensure the same behaviour regardless of the copy on return semantics of platforms/compilers.

mberry added 13 commits January 29, 2023 17:51
Now uses deterministic buffers.
Was causing undesirable fluctuation in keypair and encapsulation benches
Fix: lint
Rename: redundant function postfixes
This uses Rustcrypto's fixslice AES256 implementation in
big-endian 32bit counter mode.
Better side-channel resistance, especially on embedded devices.
Recommend benchmarking before switching to measure any tradeoffs .
Ref: https://eprint.iacr.org/2020/1123.pdf
This is due to the AES dependency used in 90s-fixslice
Add: 90s-fixslice tests
Fix: spelling
 Basic implementation, doesn't account for move on return behaviour
 Can still leak on certain architectures due to how they manage RVO
 Compliers can also change the semantics of copy elision
 Zeroes out on x86_64 with GCC
 Needs `Pin` and/or `Box` version to ensure correctness across platforms
Zeroises intermediate/transient secrets and coins
* Modify: secret key visibility
* Add: `expose_secret()`, make secret usage explicit
* Modify: Keypair Debug impl to elide secret key
* Add: impl Hash for Keypair, omits secret key
* Add impl Eq/PartialEq for Keypair, omits secret key, non-constant time
* Add: `zeroize!()` macro for code brevity
Removes repeated `#[cfg(feature="zeroize")]` lines
Now imported from pqc_core
@mberry mberry changed the base branch from master to rustcrypto-aes256ctr March 14, 2023 04:13
@mberry mberry changed the base branch from rustcrypto-aes256ctr to master March 14, 2023 04:13
@mberry
Copy link
Member Author

mberry commented Mar 14, 2023

Due to a squash and merge policy never playing well with github this has a lot of already mainlined code.

The meaningful changes are in:

  • api
  • indcpa
  • poly
  • polyvec
  • symmetric (has been hammered by the diff)

zero is a helper macro to remove all the conditional compilation clutter that was building up:

macro_rules! zero {
  ($target: ident) => {
    #[cfg(feature = "zeroize")]
    $target.zeroize(); 
  };
}

@mberry mberry mentioned this pull request Mar 14, 2023
12 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant