如何使用随机随机数解密文件

how to decrypt files with random nonce

我正在使用 chacha-poly1305 and using KDF for password. I can encrypt files but how do i decrypt with random nonce. The function says NEVER REUSE NONCE 加密多个文件,但我如何使用随机随机数进行解密。

如果我重复使用 nonce 进行文件加密,那么它有多安全。

有人问过类似的,但解决方案不好

例如代码

from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives.ciphers.aead import ChaCha20Poly1305

kdfpass = PBKDF2HMAC(
    algorithm=hashes.SHA256(),
    length=32,
    salt=salt,
    iterations=5
)

password = kdfpass.derive(b'Password@123')
salt = b'123456789520'
original = b'Hellow123'

chacha = ChaCha20Poly1305(password)

encrypted = chacha.encrypt(os.urandom(12), original, salt)
print(encrypted)

decrypted = chacha.decrypt(os.urandom(12), encrypted, salt)
print(decrypted)

有没有办法保存随机数并检索它以进行解密。

还想知道 chacha-poly1305 是否足够好。

在这种情况下,您使用不同的随机数进行加密和解密。在这种情况下,随机数的目的是允许在不损害安全性的情况下重复使用密钥。

使用相同的随机数来加密和解密消息是安全的,事实上,您必须这样做才能正常工作。但是,您不得为多条消息重复使用相同的 key/nonce 对。这将既允许篡改消息,也允许进行可以泄漏明文的 crib-dragging 攻击。

ChaCha20-Poly1305 被认为是强大而稳健的。但是,由于 nonce 大小较小,您不应将随机 nonce 与它一起使用,因为存在冲突的风险。相反,从 CSPRNG 为每条消息生成一个随机盐,从 KDF 中导出该消息的密钥和随机数,然后将盐而不是随机数添加到消息中。解密时,去掉盐分,重新推导出密钥和随机数,然后用它们来解密。或者,如果您有 XChaCha20-Poly1305(注意 X),则随机数大小(192 位)足以使用随机数。

另外请注意,PBKDF2 虽然仍然安全,但不再被视为最先进的基于密码的密钥派生函数,scrypt 或 Argon2id 是首选。此外,5 次迭代非常薄弱,您提出的代码容易受到暴力攻击,尤其是在具有这种强度的密码的情况下。