#jwt #security #token #quic #auth-token

bitwark

通过强大的二进制令牌管理和动态滚动密钥,增强数字交互的安全性

12个稳定版本

1.2.3 2024年8月4日
1.2.2 2024年3月8日
1.2.1 2024年1月2日
1.1.1 2023年11月25日
1.0.5 2023年10月17日

#226 in 加密学

Download history 80/week @ 2024-07-29 52/week @ 2024-08-05

132每月下载量

MIT OR BSD-3-Clause

65KB
988

Bitwark   构建状态 最新版本 bitwark: rustc 1.65+

通过紧凑的二进制令牌和自动化的加密防御,为Rust应用程序提供强大的安全保护。


🚀 简介

Bitwark实现了二进制JSON Web Tokens,作为标准JWT的高效带宽替代方案,同时集成自动化密钥轮换和加盐,以动态增强加密保护。

🔐 关键特性

  • 二进制签名负载:签名负载的紧凑二进制编码(类似于JWT)
  • 默认加密:Bitwark默认使用EdDSA进行签名和验证,使用SHA3-384(EdDSA_SHA3-384)。
  • 轮换:轻松轮换密钥和盐,确保您的应用程序能够适应动态的安全环境。
  • 加盐:注入随机数据以增加熵并减缓暴力攻击。
  • 轻量级:最小化开销,确保在高吞吐量场景中也能实现最佳性能。

🛠️ 入门指南

通过在Rust应用程序中利用以下功能,开始Bitwark的加密之旅

解码为二进制的签名负载(JWT的替代方案)

use bitwark::{
    exp::AutoExpiring,
    signed_exp::ExpiringSigned,
    salt::Salt64,
    keys::{ed::EdDsaKey},
};
use serde::{Serialize, Deserialize};
use chrono::Duration;

#[derive(Serialize, Deserialize)]
pub struct Claims {
    pub permissions: Vec<String>,
}

// Generate an EdDSA key pair and salt with a validity period
let exp_key = AutoExpiring::<EdDsaKey>::generate(
    Duration::minutes(10)
).unwrap();

let exp_salt = AutoExpiring::<Salt64>::generate(
    Duration::minutes(5)
).unwrap();

// Instantiate a token with specified claims.
let claims = Claims { 
    permissions: vec![
        "users:read".to_string(), 
        "users:write".to_string()
    ],
};

let token = ExpiringSigned::<Claims>::new(
    Duration::seconds(120), claims
).unwrap();

// Create a binary encoding of the token, signed with key and salt.
let signed_token_bytes = token.encode_and_sign_salted(
    &exp_salt, &*exp_key
).expect("Failed to sign token");

// Decode the token and verify its signature and validity.
let decoded_token = ExpiringSigned::<Claims>::decode_and_verify_salted(
    &signed_token_bytes, &exp_salt, &*exp_key
).expect("Failed to decode a token");

assert_eq!(
    2, 
    decoded_token.permissions.len(), 
    "Failed to find 2 permissions"
);

密钥轮换

use bitwark::{payload::SignedPayload, keys::ed::EdDsaKey, keys::CryptoKey, Generator};
use chrono::Duration;

// creating a key
let key = EdDsaKey::generate()?;

// Rotating key
let mut expiring_key = Expiring<EdDsaKey>::new(Duration::seconds(10), key);
if expiring_key.has_expired() {
    expiring_key.roll()?;
}

// Creating a payload
let payload = SignedPayload::<String>::new("A signed message".to_string());

// Encode the payload with signature based on the expiring key
let signed_payload_bytes = payload.encode_and_sign(&expiring_key)?;

// Decode the signed payload with verifying signature with payload's integrity
let decoded_payload = SignedPayload::<String>::decode_and_verify(&signed_payload_bytes, &expiring_key)?;
assert_eq!(*decoded_payload, *payload);

盐示例

use bitwark::{
    salt::Salt64, 
    exp::AutoExpiring, 
    key::ed::EdDsaKey, 
    Rotation, Generator
};
use bitwark::payload::SignedPayload;
use chrono::Duration;

// Make a new salt.
let salt = Salt64::generate().unwrap();

// Make a salt that lasts for 10 seconds.
let mut expiring_salt = AutoExpiring::<Salt64>::new(
    Duration::seconds(10), salt
).unwrap();

// Change the salt if it's too old.
if expiring_salt.has_expired() {
    expiring_salt
        .rotate()
        .expect("Salt rotation failed.");
}

// Make a key that lasts for 120 seconds.
let key = AutoExpiring::<EdDsaKey>::generate(
    Duration::seconds(120)
).unwrap();

// Make a payload for signing
let payload = SignedPayload::<String>::new(
    "Hello, world!".to_string()
);

// Combine message and signature into one piece.
let signature_bytes = payload.encode_and_sign_salted(
    &expiring_salt, &*key
).expect("Failed to encode");

// Separate message and signature, verifying validity.
let decoded_result = 
    SignedPayload::<String>::decode_and_verify_salted(
        &signature_bytes, &expiring_salt, &*key
    );

assert!(decoded_result.is_ok());

💡 动机

在数据安全至关重要的时代,Bitwark旨在为开发者提供工具箱,以在性能或易用性方面不妥协的情况下构建安全的数字交互。轻量级的二进制JWT令牌最小化带宽使用,而密钥轮换和盐功能增强了安全性,确保您的应用程序不仅安全,而且高效和可靠。

🌱 贡献

成为Bitwark旅程的一部分!

贡献者是开源项目的支柱,Bitwark热烈欢迎所有渴望为二进制安全领域做出贡献的人!

🎗️ 如何贡献

  • 🧠 提出想法:通过问题分享改进想法或报告错误。
  • 🛠️ 代码贡献:提交带有新功能、增强或错误修复的拉取请求。
  • 📚 改进文档:帮助我们使文档更全面、更易于使用。
  • 💬 社区互动:加入讨论并提供反馈,以帮助使Bitwark变得更好。

📜 许可证

Bitwark 是开源软件,在 MIT 许可证或 BSD-3-Clause 许可下免费提供。

依赖项

~10–19MB
~347K SLoC