1、加密哈希函数的高速 FPGA 实现摘要在这篇论文中,提出了实施的加密散列函数的一种新方法。这种方法旨在提高哈希函数特别是速度时,一个大的相似块如常用的头文件进行散列的消息。该方法利用特殊的运行时可重构功能的 FPGA。基本上,当一个块的信息,常用的散列识别,哈希值被存储在存储器中,在随后出现的消息块,哈希值不需要重新计算;而这仅仅是从内存中检索,从而使一个显着的增加速度。该系统自学习和能够动态地建立在其频繁发生的消息块而无需用户干预的知识。具体的哈希函数,采用该技术的是布莱克,一个组决赛。表的内容作者的独创性.宣言三摘要.四奉献.v确认.VI表.列表九数字.列表 X1。介绍.11.1 加密散列
2、函数.1散列函数的应用. 1.241.3 问题的陈述.71.4 文献综述.81.5 提出工作.81.6 论文提纲.92。背景.102.1 当前哈希函数.102.2 布莱克哈希函数.112.2.1 信息填充.152.2.2 反.162.2.3 状态初始化.172.2.4 状态更新.182.2.5 g-函数.192.2.6 定型.222.3 实现布莱克.233。在布莱克以前的作品.高速实现 25八3.1 并行.253.2 流水.263.3 快速加法器.274。提出的设计.294.1 .消息预处理器 314.2 记忆.324.3 解码器.334.4 系统.365。实施和结果.415.1 硬件实现.4
3、15.2 软件实现.435.3 测试程序.435.4 结果.456。结论和未来的工作.496.1 结论.6.2 未来的工作.49参考书目.50维塔 auctoris .54表的列表表 1 置换表(RC).2表 2 布莱克常数.22表 3 .定稿 22表 4 布莱克的初始化向量(IV).23表 5 样品.译码器的真值表 35表 6 的结果(1).45表 7 的结果(2).46图列表图 1 布莱克.顶层图 12图 2 状态初始化.17图 3 状态更新:列和对角线.19图 4 . g-函数 20图 5 流水线应用于布莱克.27图 6 快速加法器.28图 7 消息预处理.31图 8 内存.33图 9
4、解码器.34图 10 系统框图.36图 11 详细介绍一些系统互连.37图 12 ASM 图为布莱克.控制器 38图 13 布莱克控制器.插图翅片状态实现 39图 14 次哈希与#在原有普通块 K 和提出的设计.47图 15 次哈希与常用的 1 块每个消息的消息# . K47图 16 次哈希与常用的 5 块每个消息的消息# . K48图 17 次哈希与常用的 9 块每个消息的消息# . K481 章1。背景简介1.1 加密散列函数毫无疑问,电子通信已经彻底改变了我们的世界。世界已经从通信的主要字母写在纸上并发送通过邮局即时通信通过电子邮件,聊天和社交网站如 facebook 和谷歌+。许多交流
5、活动,传统上通过后现在通过电子手段完成的。这些活动包括传送文档,图像,音频和视频。沟通需要安全,避免欺诈活动,如模仿。一家机构如转录生成的文件可以被数字签名;相机所创建的图像可以进行数字水印,都在努力确保安全通信。许多计划来发挥作用,当我们试图提供信息安全。这些方案,如数字签名和数字水印技术,利用一些密码原语。加密哈希函数体或积木使用,用于提供信息安全方案。对自己的加密散列函数通常不提供充分的信息保障;然而,他们在提供信息安全方案中发挥关键作用。因此,安全的加密散列函数的速度可以显着影响的整体安全和信息安全方案的计算效率。加密哈希函数是一种将输入数据的任意长度成固定长度的输出。加密哈希函数散列
6、函数用于从普通计算机程序有所不同;然而,简单的加密散列函数只会被称为散列函数,在本论文的其余部分。一个哈希函数的输出必须有一定的性能;这些都是:图像预处理的阻力,第二图像预处理、抗碰撞。这些特性确保散列函数是安全的。性能干于哈希函数被攻击的方法。图像前性暗示的 Hash 函数的单向函数。这是不可行的,它应该是攻击者确定原始数据(或信息)从一个给定的散列码或消化(消化是散列码或散列值的另一个名字)。第二原像电阻保证消息甚至丝毫的改变会改变消化。那就是,如果一个攻击者是一个消息,它应该是不可行的攻击者操纵消息仍然获得相同的摘要作为原始消息摘要。抗碰撞性给出了相对于信息指纹一般类比消化。这是每一个消
7、息,预计将有一个独特的哈希码,它应该为攻击者找到两个消息具有相同的哈希代码通常是困难的。在数学上,一个哈希函数(H )的定义如下:H: 0,1 * 0,1 n在这个符号, 0,1 *是指任何长度包括空字符串,二进制的元素集合 0,1 n 指的是长度为 n 的二进制元素的集合因此,哈希函数映射一组任意长度的二进制元素为一组固定长度的二进制元素。同样,一个哈希函数的性质,定义如下:x 0,1 *;Y 0,1 n1。图像预处理:给予抗 Y = H(X ),它应该是很难找到 X。2。第二原像电阻:给定 x,应该很难找到 X,H (x)= H(x)(x x)。3。抗碰撞:它应该很难找到任何对 X 和 X
8、(X X),H ( x)= H(X )性质二图像预处理、抗碰撞似乎相似,但不同的是,在第二原像电阻的情况下,攻击者是一个消息(x)开始,但抗碰撞没有消息了;它只是由攻击者找到任何两个消息,产量相同的散列值。“难”或“难”在这样的背景下,意味着它将需要很长的时间(几年前)和大量的内存的计算机执行的计算。这是,例如,它将需要许多年,很多计算机与今天的技术标准,从它的摘要值计算消息内存;因此,计算是不可行的。需要注意的是,由于电脑的处理能力已经在过去的几十年里增加一些有趣的,哈希函数之前被认为是安全的(具有所有特性的图像预处理,第二图像预处理和抗碰撞性)现在被认为是“破”。同时,如果攻击者能够证明时
9、间将“打破”一个哈希函数,虽然不小,明显减少了,这将被视为软弱的哈希函数。随着计算能力的提高和分析 Hash 函数进行一定的散列函数的标准,也因为他们被认为是弱的修订。最好是有一个散列函数,安全高效。在实践中,对输入消息的哈希函数的长度是不是任意的,但它有一个最大值。然而,相对于产生的哈希代码的长度,输入消息的长度可以是任意的。哈希函数操作首先打破一个消息到一个固定大小的块(除非整个消息是小于或等于块的大小)。在这个打破的过程中,信息通常是“填充”,使其融入整个块的数目没有任何“剩余”或边角料。块的大小(即,在一个块中的比特数)取决于哈希函数。填充一个消息由加入一定数量的零和一的消息结束。填料
10、通常也包括在填充比特信息的长度嵌入;其它信息也可以嵌入在根据哈希函数填充比特。随着信息的填充和分解成块,哈希函数运行在一个迭代的方式。第一个消息块输入到哈希函数和相应的哈希码获得。第二消息块然后输入随着第一块的哈希代码。因此,从第一个消息块输出哈希称为链或中间值并返回哈希函数的输入作为第二消息块压缩的初始值。初始值用于第一信息块的压缩是一个常数,对于一个特定的散列函数,它是通常被称为“初始化向量。哈希值时得到的最后消息块被压缩为哈希代码(或消化)的消息。Hash 函数的应用 1.2如前所述,哈希函数是用于某些信息安全方案。这些措施包括:数字签名,消息认证码(MAC)和数字图像水印。也有如密码存
11、储的哈希函数的简单应用。在密码存储中的应用,通过在第一次登录的用户输入的密码不存储在计算机系统中;而对密码的散列存储。登录到系统后,用户需要输入密码;系统的哈希值并与存储的哈希进行比较。如果有一个匹配,用户被授予访问其他的系统用户被拒绝访问。该方案的优势在于,如果攻击者设法获取系统的存储设备,只有密码哈希可以检索并不能因为散列函数是单向函数用于恢复原始密码。在数字签名中,哈希函数是用来提高效率(速度)和减少带宽的方案。数字签名提供了证明消息的真实性的一种手段。它依赖于加密/解密密钥的使用。如果一方用私钥加密的信息,唯一的关键,可以解密消息的公钥。相反,如果一个信息被成功解密用的密钥,这意味着该
12、消息只能是加密用的私钥或换句话说,消息来源于 A.用私钥加密信息的过程称为(数字)签名留言。然而,在实践中,信息本身是没有签署,而消化(哈希值)的计算和消息摘要签署。这样做的好处是,首先,消化是一个固定长度的,所以非对称加密单元的输入都是一个固定的已知长度,不论原始邮件的大小。因此,我们可以说,输入的带宽是固定的,减少就如果消息本身是签署了。其次,通过非对称密钥加密的过程是计算密集型的;尺寸越小的输入,更快的操作。消息认证码(MAC)可以用来验证收到的消息是一个发送相同的。就是说,它可以用来验证消息没有被破坏或操纵的运输。然而,它不能用来验证发送方的身份向三分之一方因为 MAC 可以由寄件人或
13、收件人的计算机。一个 MAC 与键控散列函数计算。带密钥的哈希函数的输入包括除消息的关键。手术的成功依赖于密钥的保密性。发送者和接收者必须使用相同的密钥,而密钥必须保持第三方的秘密。生成一个MAC,发送者输入消息和密钥的哈希函数(以及任何适用的常量字符串)在进行算法如HMAC 1 和 2 UMAC 指定。生成的 MAC 和消息将被发送到接收机。验证消息没有被操纵,还产生一个 MAC 使用相同的散列函数和算法的消息。如果由接收机产生的 MAC是从发送方收到的 MAC 相同,则接收认为确实的消息没有被操纵。该方案提供了验证消息的完整性的一种简单方法。在计算 MACS 效率的发送者和接收者,哈希函数
14、需要能够在高速度、高效率的方式运作哈希函数的另一个重要应用是数字图像水印的发现。数字图像水印信息的嵌入过程(称为数字图像水印)。这是促进图像处理检测的目的。由一个发送者利用水印的原始结构预计将由收件人知道。如果水印图像处理,水印也受到影响;因此,当收件人提取水印,它将不同于预计。这是一个聪明的在那里的信息是一个图像的情况下提供的信息安全手段。哈希函数是用于水印算法;一个常见的例子是黄的水印算法 3 。在王的算法,对图像进行分块,每个块的像素进行独立。这样做是在水印嵌入时,当提取验证的目的。在水印嵌入时,哈希输出截断到所需的大小并进行异或运算二进制水印给输出将被加密并放置在像素对应的最低有效位的
15、位置的图像。因为图像可以包含许多像素块,能够在高速度、高效率的方式运作的哈希函数是必要的。1.3 问题陈述哈希函数,为先前建立的,在信息安全方案非常有用。除了以上提到的应用(数字签名,数字水印等),散列函数也用于发电是利用伪随机数将在许多密码方案。在大多数这些应用,特别是数字签名,数字图像水印和消息认证码,是最为理想的散列函数操作尽可能快的时候特别巨大的流量或负载信息有望手术。因此,很多的研究工作已经花费在标准或广泛使用的哈希函数的高速实现的区域。美国国家标准与技术研究所(NIST)组织了一次比赛,选择一个新的哈希函数的标准,预计将至少比目前的安全 Hash 函数标准明显要快(SHA-2)。这
16、是符合客观的哈希函数的运行速度和提高整体性能时,它是利用随着信息安全方案的其他元素。本文的目的是探讨哈希函数使用现场可编程门阵列(FPGA)实现高速度和布莱克哈希函数(在比赛的最后一轮 NIST 的候选人之一)。1.4 文献综述正如前面提到的,一个显着的研究工作已经花费在哈希函数实现了高速区。布莱克像其他许多哈希函数散列函数的设计使它能够运行在高转速的意图。它有一个相对简单的算法;它的压缩功能是修饰“双轮”版本的伯恩斯坦的流密码“嚓嚓”已深入分析和发现优秀的性能和并行化 4 。布莱克已经被研究人员寻求提供高速运行方式研究。一个为布莱克速度优化是发现文学的技术是并行性 5 。其他已应用于布莱克的
17、速度优化技术(在流水线算法流水线是可行的一个地区) 6 ,使用携带的压缩功能保存加法器 6 。这些技术集中在主要的“核心”的哈希函数。没有,据我们所知有任何企图通过哈希迭代/重复的过程改进的哈希函数的速度。1.5 提出的工作审议了优化速度,已应用于布莱克在文学作品中,我们注意到,这些优化对哈希函数的核心,而不考虑哈希迭代或重复的过程。这里提到的哈希迭代/重复的过程,是指一个过程,信息被分解成块,每个块被压缩在转动直到最终哈希代码(消息摘要的)产生。在这一过程中,冗余的计算可能会发生。发生这种情况时,同样的信息块压缩不止一次。例如,当两个消息将散列在一个数字签名方案,如果消息的第一块是相同的,那
18、么哈希函数要重复同样的计算两次当它是压缩这些块。每个压缩需要的回合数或换句话说,一个时钟周期数。在 blake-256(布莱克给 256 位消化的典型实现),每个压缩需要 14 个时钟周期。如果在相同的初始消息块一千将消息散列在信息安全解决方案,这些多余的计算可以设法避免,这产生了一个节约 10001414000 个时钟周期。这导致了在速度明显增加。本文旨在提供识别和消除冗余计算时可能遇到的散列消息和这样的一种手段,提高速度和散列函数的计算效率。1.6 论文提纲本文的其余部分的结构如下:2 章介绍和解释了布莱克哈希函数操作的概念,这是必要的一个正确的认识,以往和当前的研究工作。3 章介绍了优化
19、速度,已应用于布莱克在文学。4 章说明了我们所提出的架构,为布莱克哈希函数提供了额外的速度优化。5 章介绍了该架构的实施和结果。最后,6 章提出结论性意见和对未来工作的建议。2 章2。背景2.1 当前的散列函数在今天使用的哈希函数是从以前的哈希函数找到弱点。第一个公开的哈希函数是由罗纳德Rivest 在 1989 开发的,它被称为消息摘要算法(MD2)。1990,参与开发的另一个名叫MD4 哈希算法。MD4 算法是基于 Merkle-Damgard 结构 7 。1991,再开发另一个哈希算法 Rivest 取代 MD4;这个新的算法被命名为 MD5。与此同时,美国国家标准与技术研究所(NIST
20、)是一个哈希函数的标准。 1993,NIST 开发的安全散列标准(沙)。本标准由NIST 公布作为美国联邦信息处理标准( FIPS)。然而,出版后不久,该算法被撤回由于未披露的“重大缺陷”。它是由一个修订版本 SHA-1 取代。SHA-1 算法已被广泛应用于信息安全方案,如传输层安全(TLS ),安全套接字层(SSL),Internet 协议安全(IPSec),安全 Shell(SSH)和良好隐私( PGP)。二,一组散列函数(SHA-224,SHA-256,SHA-384 和 SHA-512,)设计是由美国国家安全局(NSA)和 NIST 公布 2001。这些散列函数SHA-2 是根据其消化
21、的位数命名;例如在 SHA-256 消化 256 位。二是对原标准的更新(SHA-1)。许多上述的哈希函数已损坏或已发现他们的弱点。MD2,MD4 和 MD5 都被打破 8 。碰撞了找到 SHA-0 9 和一些密码学家发现产生 SHA-1 的碰撞在少于评价 10 的预期数量的算法。这意味着,SHA-1 是弱。由于一些弱点已经被发现在 SHA-1 的有一些相似之处的SHA-1 和 SHA-2,NIST 决定更新哈希标准,新标准将被称为沙。三不会来自 NIST SHA-2;相反,在 2007 举办的任何人免费提交候选人哈希算法 SHA-3 竞赛。“草案要求和SHA-3 算法”发表和评价标准是基于公
22、众反馈 NIST 更新评价标准。比赛开始 64 候选人提交。该 64 份意见书,NIST 的接受 51 的第一轮评估。第一轮的候选人被张贴在网上供公众审查 NIST NIST 网站;也有它自己的内部审查小组。2009,基于公众的反馈和内部评审,名单上的 51 位候选人减少到 14 名比赛的第二轮。评价的二轮后,候选人名单进一步缩小到 5 决赛。这五位候选人是布莱克,groestl,Keccak,JH,绞。我们选择了布莱克的哈希函数,一组入围,在哈希函数由于其公共识别速度优化这项工作是一个安全、高效的哈希函数。描述布莱克的算法在以下部分提供。2.2 布莱克哈希函数布莱克哈希函数 4 是一段建议提
23、交由 NIST 的让-菲利普 Aumasson,卢卡 henzen,威利迈耶和拉斐尔 C. W.藩。原来在十月 2008 提交了修订与调整的三决赛是在 2011 一月提交。的改进版本的散列函数的名字是由 blake-28,BLAKE-32,blake-48,blake-64 到 blake-224,blake-256,blake-384 和 blake-512 分别。这些新的名字为布莱克哈希函数的各种版本的消化大小。消化这些大小相同的 SHA-2 便于直接替代布莱克在应用程序中利用二。在最初提交作出的调整是轮为 blake-224 推荐数量的变化,blake-256 14(而不是 10),轮为
24、blake-384 推荐数量的变化,blake-512 16(而不是 14)。一个与它的输入和输出 blake-256 顶层图如图 1 所示(当我们说到布莱克的散列函数,我们通常指的是它的核心功能就如图 1;描绘的是单位的哈希值只有个别消息块)。对 Hash 函数的主要输入是信息块的输入和输出的主要是消化(或哈希值)。消息块输入以 512 比特的消息块可以表示文本,图像或任何类型的信息。还有其他的输入(盐和计数器),其中一个是可选的。图 1 顶层图布莱克盐的输入是一个可选的输入,用户可以利用引入用户控制的参数对每个消息块压缩。盐是有用的随机散列。如果盐是没有用的,它的值是设定为 0。这项工作的
25、速度优化,我们不会利用盐。计数器的输入端增加一个额外的安全层的哈希函数。我们将仔细看看在后面的一节柜台。布莱克的设计师并没有重新发明轮子;而他们放在一起组成了先前的分析和发现是安全的和有效的形式布莱克。布莱克的作品以迭代的方式正如大多数哈希函数做;那是,以往的信息块的哈希代码反馈为下一个消息块压缩的散列函数的输入。然而,布莱克跟随哈希迭代框架(海法)方法由 Biham 和该 11 提出并不是 Merkle-Damgard 迭代(MD ) 7 模式。海法是一个改进版的 MD 建设。布莱克不跟海法完全,但它借用了它。在海法的主要思想是引入一个特殊的计数器,初始值(IV)每个消化的大小和盐的压缩函数
26、的输入。摘要的长度也包括(除了消息的长度)在信息的填充。的 Merkle-Damgard 构建仅包括在填充消息长度。布莱克跟海法的迭代模式,它能够提供一定的攻击性,MD 结构不能充分防止如长度延伸。布莱克的内部结构被称为局部广泛管结构 4 。宽管施工 12 是一个哈希函数的内部状态的一种结构(从哈希值提取)大(在比特数)比哈希值。当地的宽管的灵感是由宽管结构;地方宽管,大的内部状态初始化初始值(或价值链),盐和计数器。当地的宽管结构的优点是,它使当地的碰撞是不可能的。布莱克的压缩功能大量借鉴了丹尼尔 J 伯恩斯坦的流密码“嚓嚓”。伯恩斯坦,一个在伊利诺伊州大学的芝加哥的数学教授也提交了 SHA
27、-3 候选称 CubeHash NIST CubeHash,但在比赛的第二轮淘汰。布莱克的压缩函数实际上是一个修改的双圆的” 4 。这是一个修改后的版本,因为布莱克的设计师加入一个消息,原来一个恒定的输入”功能。查查以前进行 Aumasson(布莱克的一个设计师)。从他的分析,Aumasson 确信的简单和安全的 ”,导致布莱克恰恰通过。ChaCha 的目的是免疫所有种类的边信道攻击和布莱克自动继承财产。边信道攻击是攻击不攻击压缩功能,但系统泄漏数据实施攻击(如时序和功率分析信息)。例如,一个程序在单片机上运行的功耗轨迹是充分的信息。ChaCha 的性能被认为是优秀的,在分析过程中发现有强烈的
28、并行化。再次,布莱克继承了这些属性,这使它成为一种高效的哈希函数。在散列消息与布莱克的第一步是垫的消息,掰成块的 512 位。衬垫的细节将在下一节中解释。对 blake-256 块大小是 512 位,但字的大小是 32 位的;因此,每个信息块包含 16 个字。布莱克的算法初始化一个内部状态从初始(或链)的价值和其他输入(S)(盐,计数器)然后更新内部状态的回合数进行计算使用块在每一轮的状态(字)的消息块和一些常数。盐的输入,不使用时设置为 0;因此,它作为一个恒定的内部状态初始化。在状态更新轮已全部完成,完成过程进行从内部状态提取哈希代码。这个散列代码可以对消息的消化,也可能是一个中间或价值链,将为下一个消息块的内部状态初始化初始值。然而,如果消息块正在处理的是消息的最后一条消息块,然后在最后阶段得到的散列值是消息摘要。2.2.1 信息填充一个消息填充在哈希它为一定数量的原因;首先,消息是垫可分为块的整数。例如,如果一个消息有 592 位,无填充信息的前 512 位可以被放置在一块,但那 80 位左挂。解决这类问题,该消息填充使一个 1024 位的消息。现在可以分为 2 块。填料是通过附加的零和一位在邮件的末尾做。填充了嵌入消息的特定属性的最后一个消息块。这提高了哈希函数对某些类型的攻击的安全。布莱克,一个消息(M)是用第一延伸其长度,| M |,这样| M |