From 61f3ab7b52dd74eb452eb3a2f0899226eb75cd39 Mon Sep 17 00:00:00 2001 From: jonesmarvin8 <83104039+jonesmarvin8@users.noreply.github.com> Date: Thu, 11 Jun 2026 15:20:46 -0400 Subject: [PATCH] feat!(key_protocol): update public account keys to be PQ resilient. (#362) * initialize pq-keys branch * minor update * fixed lint and unit test * clippy fixes * fmt * Update private_key.rs * fixed tests * addressed comments * fix expect message * change key labels for better naming * clippy and fmt fixes * Rebased --- .../key_management/key_tree/keys_public.rs | 197 +++++++----------- .../src/key_management/key_tree/mod.rs | 4 +- .../src/signature/private_key.rs | 54 +++++ .../keycard_applets/LEE_keycard.cap | Bin 102136 -> 104464 bytes lez/keycard_wallet/src/lib.rs | 11 +- 5 files changed, 134 insertions(+), 132 deletions(-) diff --git a/lee/key_protocol/src/key_management/key_tree/keys_public.rs b/lee/key_protocol/src/key_management/key_tree/keys_public.rs index a8f97070..947fb83c 100644 --- a/lee/key_protocol/src/key_management/key_tree/keys_public.rs +++ b/lee/key_protocol/src/key_management/key_tree/keys_public.rs @@ -1,4 +1,4 @@ -use k256::elliptic_curve::{PrimeField as _, sec1::ToEncodedPoint as _}; +use k256::elliptic_curve::PrimeField as _; use serde::{Deserialize, Serialize}; use crate::key_management::key_tree::traits::KeyTreeNode; @@ -6,9 +6,13 @@ use crate::key_management::key_tree::traits::KeyTreeNode; #[derive(Debug, Serialize, Deserialize, Clone)] #[cfg_attr(any(test, feature = "test_utils"), derive(PartialEq, Eq))] pub struct ChildKeysPublic { - pub csk: lee::PrivateKey, - pub cpk: lee::PublicKey, - pub ccc: [u8; 32], + /// Secret key for public account. + pub sk: lee::PrivateKey, + /// Schnorr secret key. + pub ssk: lee::PrivateKey, + /// Schnorr public key. + pub pk: lee::PublicKey, + pub cc: [u8; 32], /// Can be [`None`] if root. pub cci: Option, } @@ -18,19 +22,24 @@ impl ChildKeysPublic { pub fn root(seed: [u8; 64]) -> Self { let hash_value = hmac_sha512::HMAC::mac(seed, "LEE_master_pub"); - let csk = lee::PrivateKey::try_new( + let sk = lee::PrivateKey::try_new( *hash_value .first_chunk::<32>() .expect("hash_value is 64 bytes, must be safe to get first 32"), ) .expect("Expect a valid Private Key"); - let ccc = *hash_value.last_chunk::<32>().unwrap(); - let cpk = lee::PublicKey::new_from_private_key(&csk); + let ssk = lee::PrivateKey::tweak(sk.value()).expect("`key_protocol::key_management::keys_public::root()`: Invalid private key produced from `tweak`"); + + let cc = *hash_value + .last_chunk::<32>() + .expect("hash_value is 64 bytes, must be safe to get last 32"); + let pk = lee::PublicKey::new_from_private_key(&ssk); Self { - csk, - cpk, - ccc, + sk, + ssk, + pk, + cc, cci: None, } } @@ -39,61 +48,53 @@ impl ChildKeysPublic { pub fn nth_child(&self, cci: u32) -> Self { let hash_value = self.compute_hash_value(cci); - let csk = lee::PrivateKey::try_new({ - let hash_value = hash_value + let lhs = k256::Scalar::from_repr( + (*hash_value .first_chunk::<32>() - .expect("hash_value is 64 bytes, must be safe to get first 32"); + .expect("hash_value is 64 bytes, must be safe to get first 32")) + .into(), + ) + .expect("Expect a valid k256 scalar"); + let rhs = + k256::Scalar::from_repr((*self.sk.value()).into()).expect("Expect a valid k256 scalar"); - let value_1 = - k256::Scalar::from_repr((*hash_value).into()).expect("Expect a valid k256 scalar"); - let value_2 = k256::Scalar::from_repr((*self.csk.value()).into()) - .expect("Expect a valid k256 scalar"); + let sk = lee::PrivateKey::try_new(lhs.add(&rhs).to_bytes().into()) + .expect("Expect a valid private key"); - let sum = value_1.add(&value_2); - sum.to_bytes().into() - }) - .expect("Expect a valid private key"); + let ssk = lee::PrivateKey::tweak(sk.value()).expect("`key_protocol::key_management::keys_public::nth_child()`: Invalid private key produced from `tweak`"); - let ccc = *hash_value + let cc = *hash_value .last_chunk::<32>() .expect("hash_value is 64 bytes, must be safe to get last 32"); - let cpk = lee::PublicKey::new_from_private_key(&csk); + let pk = lee::PublicKey::new_from_private_key(&ssk); Self { - csk, - cpk, - ccc, + sk, + ssk, + pk, + cc, cci: Some(cci), } } #[must_use] pub fn account_id(&self) -> lee::AccountId { - lee::AccountId::from(&self.cpk) + lee::AccountId::from(&self.pk) } fn compute_hash_value(&self, cci: u32) -> [u8; 64] { let mut hash_input = vec![]; - - if ((2_u32).pow(31)).cmp(&cci) == std::cmp::Ordering::Greater { - // Non-harden. - // BIP-032 compatibility requires 1-byte header from the public_key; - // Not stored in `self.cpk.value()`. - let sk = k256::SecretKey::from_bytes(self.csk.value().into()) - .expect("32 bytes, within curve order"); - let pk = sk.public_key(); - hash_input.extend_from_slice(pk.to_encoded_point(true).as_bytes()); - } else { - // Harden. - hash_input.extend_from_slice(&[0_u8]); - hash_input.extend_from_slice(self.csk.value()); - } + // Simplified key logic by only supporting harden keys. + // Non-harden keys would require access to untweaked public keys associated to `sk`s. + // Thus, not PQ secure. + hash_input.extend_from_slice(&[0_u8]); + hash_input.extend_from_slice(self.sk.value()); #[expect(clippy::big_endian_bytes, reason = "BIP-032 uses big endian")] hash_input.extend_from_slice(&cci.to_be_bytes()); - hmac_sha512::HMAC::mac(hash_input, self.ccc) + hmac_sha512::HMAC::mac(hash_input, self.cc) } } @@ -103,7 +104,7 @@ impl ChildKeysPublic { )] impl<'a> From<&'a ChildKeysPublic> for &'a lee::PrivateKey { fn from(value: &'a ChildKeysPublic) -> Self { - &value.csk + &value.ssk } } @@ -137,30 +138,37 @@ mod tests { ]; let keys = ChildKeysPublic::root(seed); - let expected_ccc = [ + let expected_cc = [ 238, 94, 84, 154, 56, 224, 80, 218, 133, 249, 179, 222, 9, 24, 17, 252, 120, 127, 222, 13, 146, 126, 232, 239, 113, 9, 194, 219, 190, 48, 187, 155, ]; - let expected_csk: PrivateKey = PrivateKey::try_new([ + let expected_sk: PrivateKey = PrivateKey::try_new([ 40, 35, 239, 19, 53, 178, 250, 55, 115, 12, 34, 3, 153, 153, 72, 170, 190, 36, 172, 36, 202, 148, 181, 228, 35, 222, 58, 84, 156, 24, 146, 86, ]) .unwrap(); - let expected_cpk: PublicKey = PublicKey::try_new([ - 219, 141, 130, 105, 11, 203, 187, 124, 112, 75, 223, 22, 11, 164, 153, 127, 59, 247, - 244, 166, 75, 66, 242, 224, 35, 156, 161, 75, 41, 51, 76, 245, + let expected_ssk: PrivateKey = PrivateKey::try_new([ + 207, 4, 246, 223, 104, 72, 19, 85, 14, 122, 194, 82, 32, 163, 60, 57, 8, 25, 209, 91, + 254, 107, 76, 238, 31, 68, 236, 192, 154, 78, 105, 118, ]) .unwrap(); - assert!(expected_ccc == keys.ccc); - assert!(expected_csk == keys.csk); - assert!(expected_cpk == keys.cpk); + let expected_pk: PublicKey = PublicKey::try_new([ + 188, 163, 203, 45, 151, 154, 230, 254, 123, 114, 158, 130, 19, 182, 164, 143, 150, 131, + 176, 7, 27, 58, 204, 116, 5, 247, 0, 255, 111, 160, 52, 201, + ]) + .unwrap(); + + assert!(expected_cc == keys.cc); + assert!(expected_ssk == keys.ssk); + assert!(expected_sk == keys.sk); + assert!(expected_pk == keys.pk); } #[test] - fn harden_child_keys_generation() { + fn child_keys_generation() { let seed = [ 88, 189, 37, 237, 199, 125, 151, 226, 69, 153, 165, 113, 191, 69, 188, 221, 9, 34, 173, 134, 61, 109, 34, 103, 121, 39, 237, 14, 107, 194, 24, 194, 191, 14, 237, 185, 12, 87, @@ -171,93 +179,32 @@ mod tests { let cci = (2_u32).pow(31) + 13; let child_keys = ChildKeysPublic::nth_child(&root_keys, cci); - let expected_ccc = [ + let expected_cc = [ 149, 226, 13, 4, 194, 12, 69, 29, 9, 234, 209, 119, 98, 4, 128, 91, 37, 103, 192, 31, 130, 126, 123, 20, 90, 34, 173, 209, 101, 248, 155, 36, ]; - let expected_csk: PrivateKey = PrivateKey::try_new([ + let expected_sk: PrivateKey = PrivateKey::try_new([ 9, 65, 33, 228, 25, 82, 219, 117, 91, 217, 11, 223, 144, 85, 246, 26, 123, 216, 107, 213, 33, 52, 188, 22, 198, 246, 71, 46, 245, 174, 16, 47, ]) .unwrap(); - let expected_cpk: PublicKey = PublicKey::try_new([ - 142, 143, 238, 159, 105, 165, 224, 252, 108, 62, 53, 209, 176, 219, 249, 38, 90, 241, - 201, 81, 194, 146, 236, 5, 83, 152, 238, 243, 138, 16, 229, 15, + let expected_ssk: PrivateKey = PrivateKey::try_new([ + 100, 37, 212, 81, 40, 233, 72, 156, 177, 139, 50, 114, 136, 157, 202, 132, 203, 246, + 252, 242, 13, 81, 42, 100, 159, 240, 187, 252, 202, 108, 25, 105, ]) .unwrap(); - assert!(expected_ccc == child_keys.ccc); - assert!(expected_csk == child_keys.csk); - assert!(expected_cpk == child_keys.cpk); - } - - #[test] - fn nonharden_child_keys_generation() { - let seed = [ - 88, 189, 37, 237, 199, 125, 151, 226, 69, 153, 165, 113, 191, 69, 188, 221, 9, 34, 173, - 134, 61, 109, 34, 103, 121, 39, 237, 14, 107, 194, 24, 194, 191, 14, 237, 185, 12, 87, - 22, 227, 38, 71, 17, 144, 251, 118, 217, 115, 33, 222, 201, 61, 203, 246, 121, 214, 6, - 187, 148, 92, 44, 253, 210, 37, - ]; - let root_keys = ChildKeysPublic::root(seed); - let cci = 13; - let child_keys = ChildKeysPublic::nth_child(&root_keys, cci); - - let expected_ccc = [ - 79, 228, 242, 119, 211, 203, 198, 175, 95, 36, 4, 234, 139, 45, 137, 138, 54, 211, 187, - 16, 28, 79, 80, 232, 216, 101, 145, 19, 101, 220, 217, 141, - ]; - - let expected_csk: PrivateKey = PrivateKey::try_new([ - 185, 147, 32, 242, 145, 91, 123, 77, 42, 33, 134, 84, 12, 165, 117, 70, 158, 201, 95, - 153, 14, 12, 92, 235, 128, 156, 194, 169, 68, 35, 165, 127, + let expected_pk: PublicKey = PublicKey::try_new([ + 210, 59, 119, 137, 21, 153, 82, 22, 195, 82, 12, 16, 80, 156, 125, 199, 19, 173, 46, + 224, 213, 144, 165, 126, 70, 129, 171, 141, 77, 212, 108, 233, ]) .unwrap(); - let expected_cpk: PublicKey = PublicKey::try_new([ - 119, 16, 145, 121, 97, 244, 186, 35, 136, 34, 140, 171, 206, 139, 11, 208, 207, 121, - 158, 45, 28, 22, 140, 98, 161, 179, 212, 173, 238, 220, 2, 34, - ]) - .unwrap(); - - assert!(expected_ccc == child_keys.ccc); - assert!(expected_csk == child_keys.csk); - assert!(expected_cpk == child_keys.cpk); - } - - #[test] - fn edge_case_child_keys_generation_2_power_31() { - let seed = [ - 88, 189, 37, 237, 199, 125, 151, 226, 69, 153, 165, 113, 191, 69, 188, 221, 9, 34, 173, - 134, 61, 109, 34, 103, 121, 39, 237, 14, 107, 194, 24, 194, 191, 14, 237, 185, 12, 87, - 22, 227, 38, 71, 17, 144, 251, 118, 217, 115, 33, 222, 201, 61, 203, 246, 121, 214, 6, - 187, 148, 92, 44, 253, 210, 37, - ]; - let root_keys = ChildKeysPublic::root(seed); - let cci = (2_u32).pow(31); //equivant to 0, thus non-harden. - let child_keys = ChildKeysPublic::nth_child(&root_keys, cci); - - let expected_ccc = [ - 221, 208, 47, 189, 174, 152, 33, 25, 151, 114, 233, 191, 57, 15, 40, 140, 46, 87, 126, - 58, 215, 40, 246, 111, 166, 113, 183, 145, 173, 11, 27, 182, - ]; - - let expected_csk: PrivateKey = PrivateKey::try_new([ - 223, 29, 87, 189, 126, 24, 117, 225, 190, 57, 0, 143, 207, 168, 231, 139, 170, 192, 81, - 254, 126, 10, 115, 42, 141, 157, 70, 171, 199, 231, 198, 132, - ]) - .unwrap(); - - let expected_cpk: PublicKey = PublicKey::try_new([ - 96, 123, 245, 51, 214, 216, 215, 205, 70, 145, 105, 221, 166, 169, 122, 27, 94, 112, - 228, 110, 249, 177, 85, 173, 180, 248, 185, 199, 112, 246, 83, 33, - ]) - .unwrap(); - - assert!(expected_ccc == child_keys.ccc); - assert!(expected_csk == child_keys.csk); - assert!(expected_cpk == child_keys.cpk); + assert!(expected_cc == child_keys.cc); + assert!(expected_ssk == child_keys.ssk); + assert!(expected_sk == child_keys.sk); + assert!(expected_pk == child_keys.pk); } } diff --git a/lee/key_protocol/src/key_management/key_tree/mod.rs b/lee/key_protocol/src/key_management/key_tree/mod.rs index 3d93427b..c15c09a5 100644 --- a/lee/key_protocol/src/key_management/key_tree/mod.rs +++ b/lee/key_protocol/src/key_management/key_tree/mod.rs @@ -347,8 +347,8 @@ mod tests { assert!(tree.key_map.contains_key(&ChainIndex::root())); assert!(tree.account_id_map.contains_key(&AccountId::new([ - 172, 82, 222, 249, 164, 16, 148, 184, 219, 56, 92, 145, 203, 220, 251, 89, 214, 178, - 38, 30, 108, 202, 251, 241, 148, 200, 125, 185, 93, 227, 189, 247 + 10, 231, 159, 65, 236, 46, 205, 5, 172, 89, 250, 29, 123, 195, 212, 137, 155, 111, 40, + 120, 53, 28, 124, 54, 224, 170, 119, 208, 2, 72, 75, 50 ]))); } diff --git a/lee/state_machine/src/signature/private_key.rs b/lee/state_machine/src/signature/private_key.rs index 29f3cd3c..c13be154 100644 --- a/lee/state_machine/src/signature/private_key.rs +++ b/lee/state_machine/src/signature/private_key.rs @@ -1,7 +1,9 @@ use std::str::FromStr; +use k256::elliptic_curve::{PrimeField as _, sec1::ToEncodedPoint as _}; use rand::{Rng as _, rngs::OsRng}; use serde_with::{DeserializeFromStr, SerializeDisplay}; +use sha2::{Digest as _, Sha256}; use crate::error::LeeError; @@ -60,6 +62,29 @@ impl PrivateKey { pub const fn value(&self) -> &[u8; 32] { &self.0 } + + /// `tweak` produces the "tweaked secret key" (`sk`) given a public account's `ssk`. + /// We use "tweaked keys" to shield the public accounts' `ssk` against quantum threats. + /// The "tweaked keys" are used for Schnorr Signatures (BIP-340). + /// The usage of these keys will be greatly reduced once LEE is upgraded to use a PQ signatures. + pub fn tweak(value: &[u8; 32]) -> Result { + if !Self::is_valid_key(*value) { + return Err(LeeError::InvalidPrivateKey); + } + + let sk = k256::SecretKey::from_slice(value).map_err(|_e| LeeError::InvalidPrivateKey)?; + + let hashed: [u8; 32] = + Sha256::digest(sk.public_key().to_encoded_point(true).as_bytes()).into(); + + let sk = sk.to_nonzero_scalar(); + + let scalar = k256::Scalar::from_repr(hashed.into()) + .into_option() + .ok_or(LeeError::InvalidPrivateKey)?; + + Self::try_new(sk.add(&scalar).to_bytes().into()) + } } #[cfg(test)] @@ -75,4 +100,33 @@ mod tests { fn produce_key() { let _key = PrivateKey::new_os_random(); } + + #[test] + fn tweak_rejects_zero_key() { + assert!(matches!( + PrivateKey::tweak(&[0_u8; 32]), + Err(LeeError::InvalidPrivateKey) + )); + } + + // tweak: 0xFF…FF exceeds the secp256k1 curve order + #[test] + fn tweak_rejects_out_of_range_key() { + assert!(matches!( + PrivateKey::tweak(&[0xFF; 32]), + Err(LeeError::InvalidPrivateKey) + )); + } + + #[test] + fn tweak_deterministic() { + let tweaked = PrivateKey::tweak(&[1_u8; 32]).unwrap(); + assert_eq!( + tweaked.value(), + &[ + 242, 210, 33, 19, 65, 108, 136, 176, 179, 128, 110, 210, 107, 193, 168, 112, 206, + 171, 86, 238, 131, 10, 39, 36, 44, 39, 246, 20, 46, 193, 204, 66 + ] + ); + } } diff --git a/lez/keycard_wallet/keycard_applets/LEE_keycard.cap b/lez/keycard_wallet/keycard_applets/LEE_keycard.cap index b44835c455a351bbd8b8a2888ec5d4c9f444f38b..b2e71d565454eb9debe51a0bbba7473cb7f1f9fa 100644 GIT binary patch delta 45228 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 e&F`l5rJQd;~Y;f^8WzFP*Lyz delta 42798 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, Zeroizing<[u8; 32]>); +/// NSK (32 bytes) and VSK (64 bytes, the ML-KEM-768 seed `d || z`) as fixed-length zeroizing byte +/// arrays. +type PrivateKeyPair = (Zeroizing<[u8; 32]>, Zeroizing<[u8; 64]>); // TODO: encrypt at rest alongside broader wallet storage encryption work. #[derive(Serialize, Deserialize)] @@ -239,13 +240,13 @@ impl KeycardWallet { }; let vsk = { - if raw_vsk.len() != 32 { + if raw_vsk.len() != 64 { return Err(PyErr::new::(format!( - "expected 32-byte VSK from keycard, got {} bytes", + "expected 64-byte VSK from keycard, got {} bytes", raw_vsk.len() ))); } - let mut arr = Zeroizing::new([0_u8; 32]); + let mut arr = Zeroizing::new([0_u8; 64]); arr.copy_from_slice(&raw_vsk); arr };