#算法 #同步 # gost # #mac #34 #alg-ofb

kuznechik

同步加密算法 "库兹涅茨基"(GOST R 34.12-2015,GOST R 34.13-2015)

5 个版本 (3 个重大更改)

0.4.0 2023年11月29日
0.3.0 2021年5月10日
0.2.0 2021年4月20日
0.1.1 2021年1月20日
0.1.0 2021年1月9日

#783 in 密码学

每月 26 次下载

LGPL-2.1-or-later

59KB
1K SLoC

同步加密算法 "库兹涅茨基"(GOST R 34.12-2015,GOST R 34.13-2015)

Rust 语言实现 "库兹涅茨基" 块同步加密算法。

加密模式

结构体 标题 缩减
AlgEcb 电子密码本 ЕСВ
AlgCtr 计数器 CTR
AlgOfb 输出反馈 OFB
AlgCbc 密文块链接 СВС
AlgCfb 密文反馈 CFB
AlgMac 消息认证码 MAC

使用 (AlgOfb)

以下示例使用 OFB 方法加密和解密一个 64 字节的数据块 data。使用其他方法加密类似,有些不需要 gamma(更多详情见 tests.rs)。

extern crate kuznechik;

use self::kuznechik::{KeyStore, Kuznechik, AlgOfb};

fn main() {
    // Initialization
    let password = "Kuznechik";
    let data = Vec::from("Hello, World!");

    let gamma = vec![
        0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xce, 0xf0, 0xa1, 0xb2, 0xc3, 0xd4, 0xe5, 0xf0, 0x01, 0x12,
        0x23, 0x34, 0x45, 0x56, 0x67, 0x78, 0x89, 0x90, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
    ];

    let kuz = KeyStore::with_password(password);
    let mut cipher = AlgOfb::new(&kuz).gamma(gamma.clone());

    // Encryption
    let enc_data = cipher.encrypt(data.clone());

    // Decryption
    // Setting gamma again because OFB algorithm modify it during performing
    cipher.set_gamma(gamma);
    let dec_data = cipher.decrypt(enc_data);

    // Assert
    assert_eq!(data, dec_data);
}

依赖项

~1MB