diff --git a/Cargo.toml b/Cargo.toml
index cdf9c50..7d5d44a 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -86,7 +86,7 @@ version = "2.0"
 optional = true
 
 [dependencies.rand]
-version = "0.8"
+version = "0.10"
 optional = true
 
 [dependencies.sha2]
diff --git a/src/secure/key.rs b/src/secure/key.rs
index 8b62a93..0b5cd5e 100644
--- a/src/secure/key.rs
+++ b/src/secure/key.rs
@@ -137,9 +137,10 @@ impl Key {
     /// let key = Key::try_generate();
     /// ```
     pub fn try_generate() -> Option<Key> {
-        use crate::secure::rand::RngCore;
+        use crate::secure::rand::Rng;
+	use crate::secure::rand::TryRng;
 
-        let mut rng = crate::secure::rand::thread_rng();
+        let mut rng = crate::secure::rand::rng();
         let mut key = Key::zero();
         rng.try_fill_bytes(&mut key.0).ok()?;
         Some(key)
diff --git a/src/secure/private.rs b/src/secure/private.rs
index 8caf86e..0f6ccb6 100644
--- a/src/secure/private.rs
+++ b/src/secure/private.rs
@@ -8,7 +8,8 @@ use crate::{Cookie, CookieJar};
 
 use self::aes_gcm::aead::{generic_array::GenericArray, Aead, AeadInPlace, KeyInit, Payload};
 use self::aes_gcm::Aes256Gcm;
-use self::rand::RngCore;
+use self::rand::Rng;
+use self::rand::TryRng;
 
 // Keep these in sync, and keep the key len synced with the `private` docs as
 // well as the `KEYS_INFO` const in secure::Key.
@@ -50,7 +51,7 @@ impl<J> PrivateJar<J> {
         in_out.copy_from_slice(cookie_val);
 
         // Fill nonce piece with random data.
-        let mut rng = self::rand::thread_rng();
+        let mut rng = self::rand::rng();
         rng.try_fill_bytes(nonce).expect("couldn't random fill nonce");
         let nonce = GenericArray::clone_from_slice(nonce);
 
