Encryption
使用相關的密鑰對打開/密封明文
我正在使用用 Rust 語言編寫的 crate 中的 curve25519xsalsa20poly1305/fn.seal,它是 c 庫的包裝器,並且該函式在庫中呼叫。
sodiumoxide``libsodium``crypto_box_curve25519xsalsa20poly1305``libsodium
rust 程式碼看起來像這樣:
let (pub_key, sec_key) = ::sodiumoxide::crypto::box_::gen_keypair(); let nonce = ::sodiumoxide::crypto::box_::gen_nonce(); let data = vec![0; 10]; // plain-text // Cipher-text let encrypted = ::sodiumoxide::crypto::box_::seal(&data, &nonce, &pub_key, &sec_key); println!("Encrypted: {:?}", encrypted); assert!(data != encrypted);
crypto_box_curve25519xsalsa20poly1305_keypair
如果我使用通過呼叫該函式生成的相關密鑰對(公共、秘密密鑰對),安全問題有多大?考慮到只有我打算對其進行加密和解密,這是否會被視為潛在的弱點?我知道在這種情況下使用對稱加密更好,但僅用於學習目的——安全風險是什麼?
您正在有效地使用對稱加密。
該
crypto_box
函式在 Curve25519 上使用橢圓曲線 Diffie-Hellman。使用給定的輸入私鑰和公鑰,它總是生成相同的對稱密鑰,然後將其用於經過身份驗證的加密。通過使用來自同一密鑰對的私鑰和公鑰,您正在生成該點 $ a^2G $ ,其中隨機 $ a $ 只是曲線上的一個隨機點。然後,該點用於派生對稱密鑰以進行身份驗證加密。當然,首先使用派生密鑰(或隨機密鑰)會更有效,但只要您對密鑰對保密,您所做的就是安全的。