lambdaclass / lambdaworks

lambdaworks offers implementations for both SNARKs and STARKs provers, along with the flexibility to leverage their individual components for constructing customized SNARKs.
https://lambdaclass.github.io/lambdaworks/
Apache License 2.0
625 stars 140 forks source link

bug(field): FieldElement is not zeroized on drop #927

Open Trantorian1 opened 1 month ago

Trantorian1 commented 1 month ago

Bug Report

lambdaworks-math version: 021c3b6

Current behavior: FieldElement does not implement any zeroizing when it is dropped, opening the door for potential memory read attacks on sensitive information such as private keys.

Expected behavior:

FieldElement should implement #[derive(ZeroizeOnDrop)] or similar to allow memory zeroing when dropped. This could be feature-gated. Either a manual implementation using ptr::write_volatile and atomic::compiler_fence or using zeroize would fix this issue

Other information:

While there certainly are more common ways to leak sensitive cryptographic information like private keys, it seems like for something in our control such as in-memory representation we should at least provide this as an option.