OpenSSL 3.2.0新增Argon2支持——防GPU暴力攻击

1. 引言

OpenSSL新发布的3.20版本中,引入了一些新特性,包括:

  • post-quantum方法
  • Brainpool曲线
  • QUIC
  • Argon2:Argon2 是一种慢哈希函数,在 2015 年获得 Password Hashing Competition 冠军,利用大量内存计算抵御 GPU 和其他定制硬件的破解,提高哈希结果的安全性。
  • 等等
    在这里插入图片描述
    Argon2开源实现见:
  • https://github.com/P-H-C/phc-winner-argon2(C)

Argon2: the memory-hard function for password hashing and other applications 由Alex Biryukov、Daniel Dinu 和 Dmitry Khovratovich 设计,为密钥派生函数(KDF,Key Derivation Function),可用于:

  • 创建密码的哈希值
  • 基于密码创建加密密钥
  • 2015年7月获得 Password Hashing Competition 冠军
  • 可抵抗GPU和侧道攻击。

Argon2利用大量内存和大量计算资源进行 Hash 计算,有三个变种:

  • 1)Argon2i:Argon2i使用独立于数据的内存访问,这是密码散列和基于密码的密钥派生的首选方法,但速度较慢,因为它会在内存中进行更多的传递,以防止受到折衷攻击。
  • 2)Argon2d:Argon2d是比较快的,被用于数据依赖的内存访问,这使得它对GPU破解攻击具有很高的抵抗力,适用于不受侧信道攻击威胁的应用程序(如加密货币)。
  • 3)Argon2id:Argon2id是Argon2i和Argon2d的混合体,使用依赖于数据和独立于数据的内存访问的组合,这使Argon2i能够抵抗侧通道缓存计时攻击,并使Argon2d能够抵抗GPU破解攻击。

Argon2i、Argon2d和Argon2id之间通过参数区分:

  • A time cost, which defines the amount of computation realized and therefore the execution time, given in number of iterations
  • A memory cost, which defines the memory usage, given in kibibytes
  • A parallelism degree, which defines the number of parallel threads

2. Password

Password 是 Web 服务主要的认证方式之一。

Password 一般以 Hash 后的形式存储在数据库中。这些数据库如果被拖库,使用 Dictionary Attack 可以轻松破解,因为他们的熵很低。相同的密码会被不同的用户使用或同一个用户在不同系统中使用。

为了解决这个问题,设计者在密码 Hash 的过程里加入了 salt。

Dictionary Attack 一个字典文件,储存了单词、短语、常用密码和他们 hash 后结果。将密码与 hash 结果对比,就能破解[2]。
Brute Force Attack 尝试每一个给定长度下的字符组合,效率很低。

加盐已经可以解决大部分问题,但无法阻止 Brute Force Attack,借助 GPU、FPGA、ASIC 等定制硬件可以非常低成本的进行 Hash 计算。此外,如果 salt 和 password 被一起被拖库(甚至代码),会使得破解成本更加低。

这里核心的问题是,Hash 方法使用的是无内存计算的,而 GPU、ASIC 等硬件可以让无内存计算变得非常高效。但是,当一个 Hash 方法需要用到一大块内存去计算的时候,这些硬件就会束手无策。所以 memory-hard hash function 开始被设计和使用。

Memory-hard hash function 也可以被用在加密货币的工作量证明中,用来压制 GPU 和 ASIC 在加密货币中的滥用。例如 scrypt 被用作莱特币的工作量证明算法。

当今,8个(小写)字母的密码,可在10秒内暴力破解。若使用9个(小写)字母的密码,则可在10分钟内破解。若只是在密码末尾添加一个数字或让首字母大写,对破解速度几乎无影响。具体见Calculate Passwords。

Argon2是抗GPU攻击的,同时具有内存开销。其开销包括:

  • 执行时长:CPU开销
  • 所需内存:内存开销
  • degree of parallelism并行度:以 p p p来表示

Argon2的参数有:

  • Password §: Defines the password bytes to be hashed
  • Salt (S): Defines the bytes to be used for salting.
  • Parallelism §: Defines the number of threads that are required for the parallelism.
  • TagLength (T): Define the number of bytes to return for the hash.
  • MemorySizeKB (m): Amount of memory (in KB) to use.

具体的bench性能为:【其中 n n n用于time cost, p p p用于parallelism, m m m为message】
在这里插入图片描述
由上图可发现:

  • n = 128 n=128 n=128时,计算哈希值用时为0.105秒,即每秒可做10次哈希运算。
  • n = 8192 n=8192 n=8192时,计算哈希值用时为5.78秒,这个时间对用户登录来说有点过长。

实际使用时,应选择哈希计算时长合理,且抵抗攻击足够强健的参数。

OpenSSL Argon2指令示例:

Command: openssl kdf -keylen 24 -kdfopt pass:Hello -kdfopt salt:NaCl1234 -kdfopt iter:1 -kdfopt memcost:8 ARGON2IPassword: Hello
KDF: ARGON2
Salt: NaCl1234
Length: 24
Iterations: 1
Memcost: 8
-----------------
ARGON2I
7E:C8:58:7D:85:96:F6:9C:5A:13:F3:78:27:7C:DC:D5:FA:28:FF:B4:EC:C8:2F:00
ARGON2D
BB:13:EE:29:A3:38:95:D4:C5:81:5A:1B:0B:05:48:0E:22:53:F1:3F:13:12:16:F7
ARGON2ID
07:65:6A:7F:16:81:C8:85:39:68:0E:F4:64:92:2A:38:CE:7E:71:83:DE:72:39:0D

参考资料

[1] Prof Bill Buchanan OBE 2023年11月博客 An Early Cybersecurity Christmas Present From OpenSSL: Some Argon
[2] Argon2算法简介

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

科技云报道:至简至强,新一代服务器的算力美学

科技云报道原创。 在这个时代,数据和计算的边界正在迅速扩张。 随着云计算、物联网和人工智能的日益成熟,对算力的需求已经突破了传统的限制,进入了一个全新的阶段。在这个阶段,不仅是算力的量级发生了变化,其性质和…

java配置+J_IDEA配置+git配置+maven配置+基本语句

当前目录文件夹dir 进入文件夹cd 返回上一级cd.. 创建文件夹:mkdir 文件名删除文件夹:rd 文件夹名, 目录不为空不能直接删 rd /s 带子文件夹一起删 清屏cls 切换d盘才能进入 下载git地址: Git - Downloading Package (g…

在linux上基于shell自动部署Java项目

一,安装git yum list git 列出git安装包 yum install git 在线安装git 使用 git -varsion 查看是否安装成功 安装成功 二, Git克隆代码 git clone 远程仓库地址 三,创建shell脚本 touch shell.sh shell脚本 #!/bin/sh echo echo 自动…

【计算机网络】TCP协议——2.连接管理(三次握手,四次挥手)

目录 前言 一. 建立连接——三次握手 1. 三次握手过程描述 2. TCP连接建立相关问题 二. 释放连接——四次挥手 1. 四次挥手过程描述 2. TCP连接释放相关问题 三. TCP状态转换 结束语 前言 TCP——传输控制协议(Transmission Control Protocol)。是一种面向连接的传…

机器学习---道路拥堵案例

一、道路拥堵情况预测 1、构建训练集: 每条道路的拥堵情况不仅和当前道路前一个时间点拥堵情况有关系,还和与这条道路临近的其他道路的拥堵情况有关。甚至还和昨天当前时间点当前道路是否拥堵有关联。我们可以根据这个规律,构建训练集&…

通过层进行高效学习:探索深度神经网络中的层次稀疏表示

一、介绍 深度学习中的层次稀疏表示是人工智能领域日益重要的研究领域。本文将探讨分层稀疏表示的概念、它们在深度学习中的意义、应用、挑战和未来方向。 最大限度地提高人工智能的效率和性能:深度学习系统中分层稀疏表示的力量。 二、理解层次稀疏表示 分层稀疏表…

JDK bug:ciObjectFactory::create_new_metadata

文章目录 1、问题2.详细日志3.JDK:bug最终bug链接: 京东遇到过类似bug各位大佬如果有更详细的解答可以留言。 1、问题 Problematic frame: V [libjvm.so0x438067] ciObjectFactory::create_new_metadata(Metadata*)0x327 关键字还是ciObjectFactory::cr…

初探 Reactor、Proactor 线程模型与 BIO、AIO、NIO

1 前言 工作中或者是技术上经常会遇到 I/O 、线程模型相关的问题,以及同步、异步、阻塞、非阻塞等各种基础问题,之前上学时候的概念认知总是模糊的,一知半解。趁这次了解希望能够更加深入的去了解这方面的知识,于是有了接下来这篇…

MATLAB图解傅里叶变换(初学者也可以理解)

1、概述 相信很多人对于傅里叶变换可能觉得比较复杂和有点难懂,其实不难,它只是一种积分变换。 傅里叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。也就是说&qu…

windows安装wsl ubuntu

飞灵科技产品 flyelf-tech.com,flyelf.taobao.com 电脑是windows10专业版,需要一个ubuntu环境,所以按下面步骤安装了下。 开始菜单里搜“功能”,打开“启动或关闭windows功能”。打开下面两项,然后重启。 在开始菜单里…

Android-----AndroidManifests.xml 之meta-data

一、概念 meta-data:元数据、文件元数据。主要用来定义一些组件相关的配置值。 metadata是一组供父组件使用的名值对(name-value pair),一个组件元素可以包含任意数量的meta-data子元素。这些子元素的值存放在一个 Bundle 对象中…

使用vite搭建项目时,在启动vite后,浏览器显示页面:找不到localhost的网页

现象 在使用前端工具vite(版本5),搭建vue3项目时,启动vite,浏览器显示页面:找不到localhost的网页, 起初怀疑是 未加参数 --host0.0.0.0,导致,后加上该参数后问题依旧 解决 将index.html页面…