Wycheproof:一款针对加密代码库的安全强度测试工具

2024-09-06 16:36

本文主要是介绍Wycheproof:一款针对加密代码库的安全强度测试工具,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

关于Wycheproof

Wycheproof是一款功能强大的加密代码库安全强度检测工具,广大研究人员可以使用Wycheproof来测试加密库的安全健壮度。

工具背景

在密码学中,微小的错误往往会带来灾难性的后果。我们发现,许多加密库频繁陷入这些实施陷阱,且问题常常持续很长时间。然而,获得可靠的实施指南非常困难,因为安全地实现密码学需要深入理解几十年的学术研究。我们意识到,软件工程师经常通过单元测试来修复和预防错误,而加密漏洞也可以用类似的方式解决。

基于这些观察,我们开发了 Wycheproof 项目。这是一个由单元测试组成的测试框架,专门用于检测已知的安全弱点,或者验证某些加密算法的正确行为。Wycheproof 提供了对多种常用加密算法的测试支持,包括 RSA、椭圆曲线加密和认证加密。我们的密码学家团队系统地调查了相关文献,并实现了大多数已知的攻击。项目中包含 80 多个测试用例,已发现 40 多个安全漏洞。举例来说,我们成功恢复了广泛使用的 DSA 和 ECDHC 实现中的私钥。

尽管我们努力涵盖尽可能多的攻击类型,Wycheproof 项目并不意味着它可以确保加密库完全安全,只能说明它通过了 Wycheproof 的测试。密码学领域不断有新的攻击被发现。然而,借助 Wycheproof 项目,开发者和用户无需花费多年时间阅读学术论文或成为密码学专家,就可以检测他们的库是否易受大量已知攻击的威胁。

覆盖率

当前版本的Wycheproof支持测试目前绝大多数的加密算法,其中包括:

AES-EAX

AES-GCM

ChaCha20-Poly1305

DH

DHIES

DSA

ECDH

ECDSA

EdDSA

ECIES

HKDF

HMAC

RSA

X25519, X448

这些测试可以帮助我们确定一个加密代码库是否会受到以下威胁的影响:

1、无效曲线攻击

2、数字签名方案中的有偏随机数

3、Bleichenbacher相关的所有攻击

4、...

工具要求

Bazel

Java JCE

工具安装

广大研究人员可以直接使用下列命令将该项目源码克隆至本地:

git clone https://github.com/google/wycheproof.git

工具使用

要测试 Bouncy Castle 的最新稳定版本:

bazel test BouncyCastleAllTests

测试其他版本,例如 v1.52:

bazel test BouncyCastleAllTests_1_52

测试所有已知版本(警告,将花费很长时间):

bazel test BouncyCastleAllTests_*

要测试本地 jar,请设置WYCHEPROOF_BOUNCYCASTLE_JAR环境变量:

$ WYCHEPROOF_BOUNCYCASTLE_JAR=/path/to/bouncycastle$ bazel test BouncyCastleTestLocal$ bazel test BouncyCastleAllTestsLocal

注意:Bazel 目前不会因环境变化而使构建无效。如果您更改了WYCHEPROOF_BOUNCYCASTLE_JAR环境变量,请运行bazel clean以强制重建:

$ WYCHEPROOF_BOUNCYCASTLE_JAR=/path/to/bouncycastle$ bazel test BouncyCastleTestLocal$ WYCHEPROOF_BOUNCYCASTLE_JAR=/path/to/other/jar$ bazel clean$ bazel test BouncyCastleTestLocal

如需测试Spongy Castle,请将BouncyCastle替换为SpongyCastle:

bazel test SpongyCastleAllTests

测试Amazon Corretto Crypto Provider:

bazel test AccpAllTests

要测试 Amazon Corretto Crypto Provider 的本地 jar,请设置 WYCHEPROOF_ACCP_JAR环境变量:

$ WYCHEPROOF_ACCP_JAR=/path/to/accp$ bazel test AccpTestLocal$ bazel test AccpAllTestsLocal

许可证协议

本项目的开发与发布遵循Apache-2.0开源许可协议。

项目地址

Wycheproof:【GitHub传送门】

参考资料

Bouncy Castle open-source cryptographic APIs

Spongy Castle by rtyley

GitHub - corretto/amazon-corretto-crypto-provider: The Amazon Corretto Crypto Provider is a collection of high-performance cryptographic implementations exposed via standard JCA/JCE interfaces.

OpenJDK

https://bazel.build/

Java Security: Illegal key size or default parameters? - Stack Overflow

这篇关于Wycheproof:一款针对加密代码库的安全强度测试工具的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142544

相关文章

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

MySQL数据库函数之JSON_EXTRACT示例代码

《MySQL数据库函数之JSON_EXTRACT示例代码》:本文主要介绍MySQL数据库函数之JSON_EXTRACT的相关资料,JSON_EXTRACT()函数用于从JSON文档中提取值,支持对... 目录前言基本语法路径表达式示例示例 1: 提取简单值示例 2: 提取嵌套值示例 3: 提取数组中的值注意

CSS3中使用flex和grid实现等高元素布局的示例代码

《CSS3中使用flex和grid实现等高元素布局的示例代码》:本文主要介绍了使用CSS3中的Flexbox和Grid布局实现等高元素布局的方法,通过简单的两列实现、每行放置3列以及全部代码的展示,展示了这两种布局方式的实现细节和效果,详细内容请阅读本文,希望能对你有所帮助... 过往的实现方法是使用浮动加

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

Java实现状态模式的示例代码

《Java实现状态模式的示例代码》状态模式是一种行为型设计模式,允许对象根据其内部状态改变行为,本文主要介绍了Java实现状态模式的示例代码,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来... 目录一、简介1、定义2、状态模式的结构二、Java实现案例1、电灯开关状态案例2、番茄工作法状态案例

nginx-rtmp-module模块实现视频点播的示例代码

《nginx-rtmp-module模块实现视频点播的示例代码》本文主要介绍了nginx-rtmp-module模块实现视频点播,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习... 目录预置条件Nginx点播基本配置点播远程文件指定多个播放位置参考预置条件配置点播服务器 192.

CSS自定义浏览器滚动条样式完整代码

《CSS自定义浏览器滚动条样式完整代码》:本文主要介绍了如何使用CSS自定义浏览器滚动条的样式,包括隐藏滚动条的角落、设置滚动条的基本样式、轨道样式和滑块样式,并提供了完整的CSS代码示例,通过这些技巧,你可以为你的网站添加个性化的滚动条样式,从而提升用户体验,详细内容请阅读本文,希望能对你有所帮助...

深入解析Spring TransactionTemplate 高级用法(示例代码)

《深入解析SpringTransactionTemplate高级用法(示例代码)》TransactionTemplate是Spring框架中一个强大的工具,它允许开发者以编程方式控制事务,通过... 目录1. TransactionTemplate 的核心概念2. 核心接口和类3. TransactionT

Java实现Elasticsearch查询当前索引全部数据的完整代码

《Java实现Elasticsearch查询当前索引全部数据的完整代码》:本文主要介绍如何在Java中实现查询Elasticsearch索引中指定条件下的全部数据,通过设置滚动查询参数(scrol... 目录需求背景通常情况Java 实现查询 Elasticsearch 全部数据写在最后需求背景通常情况下

Git提交代码详细流程及问题总结

《Git提交代码详细流程及问题总结》:本文主要介绍Git的三大分区,分别是工作区、暂存区和版本库,并详细描述了提交、推送、拉取代码和合并分支的流程,文中通过代码介绍的非常详解,需要的朋友可以参考下... 目录1.git 三大分区2.Git提交、推送、拉取代码、合并分支详细流程3.问题总结4.git push