几个开源 RUST 安全算法库

news2024/10/2 7:46:31

这段时间把 RUST 语法过了一遍,写一些简单的 Demo 程序没啥问题了,但离掌握这门语言还差的远,需要项目实战才行。我决定从之前研究过的国密算法入手,使用 RUST 实现国密算法。

从头编写算法不太现实,上网搜了一下,还好已经有一些 开源 RUST 安全算法库,基于现有的开源代码实现更加可行。下面就介绍一下 RUST 加解密库,并选择一个项目作为基础,实现国密算法。

Sodiumoxide

项目地址:https://github.com/sodiumoxide/sodiumoxide

目前项目标记为 [DEPRECATED] , 不再维护。Sodiumoxide 并不是纯 RUST 编写,而是 C 密码库 libsodium 的 Rust 封装,而 libsodium 又是 fork C 密码库NaCl 而来,因此 Sodiumoxide 的大多数文档来源于 NaCl 。

Sodiumoxide 实现的算法有:

  • 对称加密算法

    • 验证加密:aes256gcm, chacha20poly1305

    • 密钥生成:blake2b

    • 密钥交换:x25519blake2b

  • 非对称加密算法

    • curve25519xsalsa20poly1305

  • HMAC:hmacsha256/512

  • HASH:SipHasher13,SHA256/512

Ring

项目地址:https://github.com/briansmith/ring

Ring 采用混合语言编写,包括 Rust、C和汇编语言。Ring 采用轻量设计,小巧但功能全面,特别适用于小型设备、微控制器和IoT应用。

Ring实现的算法有:

  • 对称加密算法

    • 验证加密:aes128/256gcm, chacha20poly1305

    • 密钥生成:HKDF_SHA256/384/512,PBKDF2_HMAC_SHA1,PBKDF2_HMAC_SHA256/384/512

  • 非对称加密算法

    • 数字签名:ECDSA(P-256 Curve)+ SHA256/384,ED25519,RSA_PKCS1_SHA1/256/384/512,RSA_PSS_SHA256/384/512

  • HMAC:HMACSHA256/384/512

  • HASH:SHA1, SHA256/384/512

Dalek

项目地址:https://github.com/dalek-cryptography

Dalek 使用 RUST 语言编写,实际上是一个在 github 上的 RUST 库集合。

aa9e17eb5e0f487bbb10e788a09b155b.png

Dalek 专注于椭圆曲线相关的算法 RUST 实现, 实现的椭圆曲线相关算法有:

  • X25519

  • Curve25519

  • ED25519

rust-crypto

项目地址:https://github.com/RustCrypto

rust-crypto是一个大集合体,整合了大部分密码学需要使用的模块。

rust-crypto涉及到的算法有:

  • 对称加密算法

    • 模式:CFB,CTR, OFB

    • 算法:chacha20, rabbit, salsa20, hc256

    • 验证加密:aesgcm, aessiv, ccm, chacha20poly1305, xsalsa20poly1305, deoxys, eax, mgm

    • 密钥生成:Argon2, bcrypt, PBKDF2, scrypt, SHA-crypt

    • 加解密:

  • 非对称加密算法

    • 数字签名:ECDSA,ED25519

    • 椭圆曲线:BP256/384, k256, P-256/384

  • HMAC:HMACSHA256/384/512

  • HASH:SHA1, SHA256/384/512, blake2, FSB, MD系列, gost94, groestl, k12, ripemd160/256/320, shabal, SM3

Rustls

项目地址:https://github.com/rustls/rustls

Rustls 是一个 Rust TLS 库,底层使用 ring ,目标是为 TLS 1.2 或更高版本提供安全功能和组件,号称效率比 OpenSSL 更高。

Rustls支持的算法和协议有:

  • TLS1.2 和 TLS1.3。

  • 客户端发起的 ECDSA、Ed25519 或 RSA 服务器端身份验证。

  • 服务器发起的 ECDSA、Ed25519 或 RSA 服务器端身份验证。

  • 使用 curve25519、nistp256 或 nistp384 曲线的 ECDHE 前向保密。

  • 使用安全随机数的 AES128-GCM 和 AES256-GCM 批量加密。

  • ChaCha20-Poly1305 批量加密 (RFC7905)。

  • ALPN 支持。

  • SNI 支持。

  • 可调片段大小,使 TLS 消息匹配底层传输的大小。

  • 可选地使用矢量 IO 来最小化系统调用。

  • TLS1.2 会话恢复。

  • 通过票证 (RFC5077) 恢复 TLS1.2。

  • TLS1.3 通过票据或会话存储恢复。

  • 客户端的 TLS1.3 0-RTT 数据。

  • 服务器的 TLS1.3 0-RTT 数据。

  • 由客户端进行客户端身份验证。

  • 服务器端进行客户端身份验证。

  • 扩展的主密钥支持 (RFC7627)。

  • 导出器 (RFC5705)。

  • 服务器端装订 OCSP。

  • 服务器端 SCT 装订。

  • 客户端的 SCT 验证。

rust-openssl

项目地址:https://github.com/sfackler/rust-openssl

这个项目为流行的 OpenSSL 加密库提供了一个安全的接口。支持 OpenSSL 版本 1.0.1 到 3.x.x,此外还支持 LibreSSL 版本 2.5 到 3.4.1。

该项目被指出代码质量不好,并且缺少文档。


上述库中,Sodiumoxide、Rustls、rust-openssl 只是其他库的封装,要增加国密支持,只能修改所封装的库,不予考虑。ring 则存在大量的汇编代码和 C 代码 ,不便于后期维护和开发,不太合适在上面进行开发。Dalek 实现的算法太少,很多常见加解密算法都没实现,放弃。rust-crypto 由纯 RUST 实现,加解密算法完善,基于 rust-crypto 实现国密算法比较合适。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/374410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pandas数据分析36——快速独热和反独热处理

做数据预处理的时候,很多文本分类变量需要变为数值型。 下面提供一些方法,就以最经典的泰但尼克号数据集作为例子。 先导包读取数据 import numpy as np import pandas as pd datapd.read_csv(train.csv) datadata.drop(columns[Name,Ticket,Cabin],…

jmeter报错: java.io.EOFException: Unexpected end of ZLIB input stream

一、背景: 1.1 报错信息 java.io.EOFException: Unexpected end of ZLIB input stream at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240) at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158) at java.util.zip…

分割线-----

各位好,之前的文章就不再回复和更新了,都是大学的时候随便玩玩的。真的不能算学术研究。致敬过去的自己。努力真的可以幸福!虽然还是一样在搬砖!

Allegro如何快速锁定整板测试点操作指导

Allegro如何快速锁定整板测试点操作指导 在做PCB设计的时候,会需要给整板添加测试点,用于飞针测试,如下图 在测试点添加好之后,文件输出之前需要把测试点全部锁定,避免因为测试点模具开好,测试点被移动的情况出现 如果逐个锁定Via,容易遗漏 Allegro支持快速锁定整板测…

计算机网络高频知识点(一)

目录 一、http状态码 二、浏览器怎么数据缓存 三、强缓存与协商缓存 1、强缓存 2、协商缓存 四、简单请求与复杂请求 五、PUT 请求类型 六、GET请求类型 七、GET 和 POST 的区别 八、跨域 1、什么时候会跨域 2、解决方式 九、计算机网络的七层协议与五层协议分别指…

华纬科技冲刺A股上市:毛利率下降幅度较大,金雷为实控人

近日,华纬科技股份有限公司(下称“华纬科技”)递交招股书,准备在深圳证券交易所主板上市。本次冲刺上市,华纬科技计划募资4.34亿元,将用于新增年产8000万只各类高性能弹簧及表面处理技改项目、高精度新能源…

经验之谈——指标异常了怎么办?

本文参考了数据万花筒的文章,结合我自己工作经验。希望给大家一些帮助。 指标异常排查,是数据分析师的工作重点之一,是各行各业数据分析师都绕不开的话题。 本文试图回答: 1、指标波动的影响因素有哪些? 2、如何快速…

Verilog 数据类型和数组简介

在这篇文章将讨论 verilog 中最常用的数据类型,包括对数据表示,线网类型、变量类型,向量类型和数组的讨论。尽管 verilog 被认为是一种弱类型语言(loosely typed),但设计者仍必须在 Verilog 设计中为每个端…

处理器管理

处理器状态处理器管理是操作系统中重要组成部分,负责管理、调度和分配计算机系统的重要资源——处理器,并控制程序执行由于处理器管理是操作系统最核心的部分,无论是应用程序还是系统程序,最终都要在处理器上执行以实现其功能&…

5.OCR文本识别CRNN算法

文章目录1.基础介绍2.CRNN模型结构2.1 特征提取2.2 双向循环神经网络层2.3 转录层(Transcription Layers)参考资料欢迎访问个人网络日志🌹🌹知行空间🌹🌹 title: 2.OCR文本识别Convolution Recurrent Neural Network toc: true ca…

记一次冲突的产生与解决

冲突的概念 git在使用中,如果遵循了它的使用的步骤,比如,在上班之前先去拉取,下班的时候,先提交,如果遵循这个步骤,一般在用的时候没有错误会产生的,但是,因为在开发的时…

Unity 之 实现读取代码写进Word文档功能实现 -- 软著脚本生成工具

Unity 之 实现读取代码写进Word文档功能前言一,实现步骤1.1 逻辑梳理1.2 用到工具二,实现读写文件2.1 读取目录相关2.2 读写文件三,编辑器拓展3.1 编辑器拓展介绍3.2 实现界面可视化四,源码分享4.1 工具目录4.2 完整代码前言 之所…

【SPSS】两独立样本T检验分析详细操作教程(附案例实战)

🤵‍♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞&#x1f4…

消除“马路黑洞”,计讯物联智能井盖综合管理系统平台有绝招

窨井盖作为市政公用设施的重要组成部分,一旦出现松动、损坏等问题时,不仅会影响市容市貌,还会给道路上的车辆、行人带来安全隐患,对社会安定与安全造成极大负面影响。 痛点分析 01 由于地下管线错综复杂、窨井盖分布广泛,加之信…

Linux 进程:父子进程

目录一、了解子进程二、创建子进程1.创建子进程2.区分父子进程三、理解子进程四、创建子进程的意义进程就是运行中的应用程序,如果一个程序较为庞大,我们可以给这个程序创建多个进程,每个进程负责一部分代码的运行。 A进程如果创建了B进程&am…

【华为OD机试模拟题】用 C++ 实现 - GPU 调度(2023.Q1)

最近更新的博客 【华为OD机试模拟题】用 C++ 实现 - 去重求和(2023.Q1) 文章目录 最近更新的博客使用说明GPU 调度题目输入输出示例一输入输出说明示例二输入输出说明Code使用说明 参加华为od机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。

动态规划:完全背包基础、518.零钱兑换II、377.组合总和IV

leetcode 518.零钱兑换IIleetcode 377.组合总和IV完全背包基础有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i],得到的价值是value[i] 。每件物品都有无限个(也就是可以放入背包多次),求解将哪些物品装入背包里…

CleanMyMac4.20最新版新增功能及电脑清理垃圾使用教程

CleanMyMac4.20作为知名的Mac清理工具,仅需一键即可快速而安全地清理系统垃圾,释放磁盘空间,因此一直深受Mac用户的喜爱。在不断更新的版本中,CleanMyMac已经不仅仅满足于只做简单的Mac清理工具,而是为Mac用户提供更多…

借助Intune无感知开启Bitlocker

希望使用 Intune 部署 BitLocker,但不知道从哪里开始?这是人们最开始使用 Intune 时最常见的问题之一。在本博客中,你将了解有关使用 Intune 管理 BitLocker 的所有信息,包括建议的设置、BitLocker CSP 在客户端上的工作方式&…

彻底搞懂React-hook链表构建原理

写在前面的小结 每一个 hook 函数都有对应的 hook 对象保存状态信息useContext是唯一一个不需要添加到 hook 链表的 hook 函数只有 useEffect、useLayoutEffect 以及 useImperativeHandle 这三个 hook 具有副作用,在 render 阶段需要给函数组件 fiber 添加对应的副…