#message #encryption #passphrase #mod #minecraft #key #generate

ncr-crypto

Minecraft No-Chat-Reports Mod 中使用的加密库

3 个不稳定版本

0.2.0 2023年1月11日
0.1.1 2022年11月7日
0.1.0 2022年10月20日

#1268 in 加密学

每月 22 次下载

MIT 许可证

16KB
85

无聊天报告 (NCR) 加密

用于生成密码和加密消息的加密方式,与 Minecraft No-Chat-Reports Mod 中的方式完全相同。

示例

use ncr_encryption::{decrypt_with_passphrase, decode_and_verify};

let passphrase = b"secret";  // Setting in NCR
// "Hello, world!" sent as a message in chat:
let ciphertext = base64::decode("q2JCS/M3yMnz+MtXDn4dd6xyqN94Dao=").unwrap();

let decrypted = decrypt_with_passphrase(&ciphertext, passphrase);
let decoded = decode_and_verify(&decrypted);

assert_eq!(decoded, Ok("#%Hello, world!"))

工作原理

通过在 Github 上阅读源代码,可以清楚地了解 Mod 如何进行加密

  1. 您在 UI 中设置一个口令,如 "secret"
  2. Mod 使用 PBKDF2WithHmacSHA1 和硬编码的盐以及 65536 次迭代,将您的口令转换成 16 字节的哈希值。这个过程花费的时间最长
  3. 从随机 nonce 值生成一个初始化向量 (IV),并在后续的加密中使用
  4. 新的哈希值成为用于加密您发送的任何消息的密钥,使用 AES-CFB8 加密
  5. 从这种加密产生的密文附加到生成的 nonce 上,并通过聊天以 Base64 编码发送最终消息(注意:在加密前,将 "#%" 添加到消息前作为前缀)

解密过程非常相似,只是相反

  1. 将消息从 Base64 解码为原始字节
  2. 从消息中获取 nonce 并使用它再次生成 IV
  3. 再次从秘密口令生成哈希,并使用它作为 AES 加密的密钥
  4. 如果解密的消息以 "#%" 开头,则在聊天中打印其余部分为解密内容

Windows 性能

默认情况下,fastpbkdf2 不会为 Windows 编译,请参见此处
此 crate 在 Windows 上默认使用 ring,这比 fastpbkdf2 慢,请参见此处
如果您关心性能,建议使用 Windows Subsystem for Linux。

依赖项

~0.8–4MB
~95K SLoC