当前位置: 首页 > 网络应用技术

加密系列:Argon2加密算法详细说明

时间:2023-03-06 11:42:05 网络应用技术

  Argon2是关键导数函数。2015年7月,它被选为密码哈希竞赛的拥护者。它是由卢森堡大学的Alex Bingukov,Daniel Dinu和Dmitry Khovratotovich设计的。Argon2的实现通常基于Creative Commons CC0(即公共领域)或Apache许可证2.0释放并提供了三个相关版本,分别是Argon2d,argon2i和argon2ID。

  本文将讨论Argon2的原理和使用。

  在密码学中,密钥推导函数(KDF)是一个加密哈希函数。它使用伪随机函数来从一个秘密值(例如主密钥,密码或密码)中得出一个或多个键,可用于将密钥扩展到更长的键,或获得所需的键,例如将Diffie-Hellman键交换的结果转换为AE的对称键。

  尽管研究了密码研究密码,但加密算法就越开放,越好。只有通过披露才能查看算法的质量。只有在每个人的彻底研究之后,每个人都可以在行业中使用并传播。

  最著名的密码算法竞赛绝对是NIST在2001年组织的竞赛,以指定标准AES算法。竞争的目的是找到最新的加密算法来取代旧的des algorithm。在这场比赛中,包括Cast-256,Crypton,Deal,DFC,E2,E2,Frog,HPC,HPC,Loki97,Magenta,Magenta,Magenta,Mags,Mars,Mars,Mags,Mags,Mags,Mags,Mags,Mags,Mags,Mags,Mags,Mags,Mags,Mags,火星,RC6,Rijndael,Safer+,Serpent和Twofish。最后,Rijndael算法被选为最终的AES算法实现。

  同样的PHC也是算法竞争。与NIST组织的算法竞赛不同,这是一个由密码学家组织的非官方竞赛。它是由Jean-Philippe Aumasson在2012年秋季发起的。

  在2013年第一季度,发出了征求意见的通知。到2014年3月31日的截止日期,总共收到了24项意见。2014年12月,确定了9个入围名单。2015年7月,Argon2宣布为获胜者。

  Argon2的设计非常简单。它旨在达到最高的内存填充率和有效使用多个计算单元。同时,它还可以提供权衡攻击的防御(使用处理器的缓存和内存)。

  Argon2具有三个变体。ARGON2I,ARGON2D和ARGON2ID.ARGON2D速度更快,并且具有数据依赖项的内存访问方法使其对GPU裂纹攻击具有很强的阻力,适用于没有侧通道正时攻击的应用程序(例如加密货币)。

  Argon2i使用无数据内存访问,这是密码哈希和基于密码的键推导算法的首选。它的特征是速度较慢,因为它在内存上运行更多的处理逻辑,以防止权衡取舍。

  Argon2ID是Argon2i和Argon2d的混合物。它使用数据依赖性和数据独立的内存访问方法,因此可以同时抵抗侧通道正时攻击和GPU的能力。

  Argon2具有两种类型的输入参数,它们是主要输入和次要输入。

  主输入分别包括加密消息P和NONCE S,分别代表密码和盐。

  P的长度为0至232-1字节,S的长度为8至232-1字节(如果执行密码哈希,请推荐16个字节)。

  之所以被称为主要输入的原因是必须输入这两个参数。

  其余参数称为辅助输入。他们包括:

  这些输入可以用以下代码表示:

  让我们看一下非Merger argon2的算法过程:

  Argon2是最简单的。

  在上图中,g表示一个接收两个1024 byte输入并输出1024 byte的压缩函数。

  我表示执行步骤数,上面的φ(i)是输入,该输入是从内存空间中获取的。

  作为内存刺激的算法,一个非常重要的工作是构建初始内存。下一步,让我们看看如何构建初始内存空间。

  首先,我们需要构建H0,这是一个64字节的块值。通过H0,我们可以构建更多的块。H0的计算公式如下:

  H0 = h(p,m,m,t,v,y,y,?,p,p,s,s,s,?k?,k,?x?,x)

  它是前面提到的输入参数的H函数。H0的大小为64 byte。

  查看H0的代码生成:

  对于平行的输入参数,需要将内存分为内存矩阵,该内存矩阵是P线的矩阵。

  计算矩阵B的值:

  其中,H'是基于H的基于变化的算法。

  让我们提供此算法实现:

  如果我们的迭代不止一次,也就是说,t> 1,我们计算下一个迭代b:

  在最后的遍历之后,我们得到了最后的B:

  最后获取输出:

  该逻辑也可以用代码表示:

  最受欢迎的解释,最深的干货,最简单的教程,您不知道的许多技巧正在等待您发现!

  欢迎注意我的公共帐户:“程序的事情”,了解技术并更好地了解您!