Skip to content

Commit c0fc5b3

Browse files
committed
Zeroize sensitive memory in TLS KDF
Implement the Drop trait for TLSKDFOperation to securely zero out the client random, server random, and session hash using zeromem. Additionally, explicitly zeroize the derived key material (dkm) buffer immediately after use. This prevents cryptographic secrets from lingering in memory, reducing the risk of data leakage. Signed-off-by: Simo Sorce <simo@redhat.com>
1 parent 04cc9f4 commit c0fc5b3

File tree

1 file changed

+11
-2
lines changed

1 file changed

+11
-2
lines changed

src/native/tlskdf.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ use crate::attribute::CkAttrs;
99
use crate::error::Result;
1010
use crate::hmac::{hash_to_hmac_mech, register_mechs_only};
1111
use crate::mechanism::*;
12-
use crate::misc::{bytes_to_slice, bytes_to_vec, CK_ULONG_SIZE};
12+
use crate::misc::{bytes_to_slice, bytes_to_vec, zeromem, CK_ULONG_SIZE};
1313
use crate::object::{Object, ObjectFactories};
1414
use crate::pkcs11::*;
1515
use std::fmt::Debug;
@@ -197,6 +197,14 @@ pub struct TLSKDFOperation {
197197
fips_approved: Option<bool>,
198198
}
199199

200+
impl Drop for TLSKDFOperation {
201+
fn drop(&mut self) {
202+
zeromem(self.client_random.as_mut_slice());
203+
zeromem(self.server_random.as_mut_slice());
204+
zeromem(self.session_hash.as_mut_slice());
205+
}
206+
}
207+
200208
unsafe impl Send for TLSKDFOperation {}
201209
unsafe impl Sync for TLSKDFOperation {}
202210

@@ -744,7 +752,7 @@ impl TLSKDFOperation {
744752
let seed = self.tls_prf_seed(false);
745753
let dkmlen = (2 * (self.maclen + self.keylen + self.ivlen)) as usize;
746754
let mut tlsprf = TLSPRF::init(key, mech, self.prf)?;
747-
let dkm = tlsprf.finish(&seed, dkmlen)?;
755+
let mut dkm = tlsprf.finish(&seed, dkmlen)?;
748756

749757
let mut keys = Vec::<Object>::with_capacity(4);
750758
let mut i = 0;
@@ -822,6 +830,7 @@ impl TLSKDFOperation {
822830
srviv.copy_from_slice(&dkm[i..(i + ivlen)]);
823831
}
824832

833+
zeromem(&mut dkm);
825834
Ok(keys)
826835
}
827836

0 commit comments

Comments
 (0)