Encryption

使用相關的密鑰對打開/密封明文

  • September 23, 2015

我正在使用用 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 $ 只是曲線上的一個隨機點。然後,該點用於派生對稱密鑰以進行身份驗證加密。

當然,首先使用派生密鑰(或隨機密鑰)會更有效,但只要您對密鑰對保密,您所做的就是安全的。

引用自:https://crypto.stackexchange.com/questions/29314