赞
踩
目录
哈希函数:是一公开函数。用于将任意长的消息M映射为较短的、固定长度的值H(M),又称为散列函数、杂凑函数。我们称函数值H(M)为哈希值、杂凑值、杂凑码、信息摘要。
杂凑值是信息中所有比特的函数,因此提供了一种错误检测能力,即改变信息中任何一个比特或几个比特都会使杂凑值改变
前三条实用性要求,后三条安全性要求
图:哈希函数强碰撞性示意图
图:哈希函数结构示意图
图:SHA系列哈希函数相关参数比较
图:哈希函数碰撞攻击复杂度示意图(单位:年)
(a)原像攻击和第二原像攻击(Preimage or Second Preimage attack)
(b)碰撞攻击(Collision Resistance)
(c)因此对于m位的哈希值,抗穷举攻击的强度为2^m/2:
情景:考虑教室有30位同学,定义函数 H: {张三,李四,ꞏꞏꞏꞏꞏꞏ|在教室里的同学}→{1,2, ꞏꞏꞏꞏꞏꞏ,365}, 如果有两个同学的生日相同,则称为一个“碰撞”. 直观看来,产生碰撞的可能性较小. 但是, 对于30个人的人群,这个事情发生的可能性大约为1/2.当人数增加时,这个可能性就增大. 这 个事实与我们的直观相悖, 称为”生日悖论”.
生日悖论是指在不少于 23 个人中至少有两人生日相同的概率大于 50%。例如在一个 30 人的小学班级中,存在两人生日相同的概率为 70%。对于 60 人的大班,这种概率要大于 99%。从引起逻辑矛盾的角度来说,生日悖论是一种 “佯谬”。但这个数学事实十分反直觉,故称之为一个悖论。生日悖论的数学理论被应用于设计密码学攻击方法——生日攻击。
生日悖论普遍的应用于检测哈希函数:N 位长度的哈希表可能发生碰撞测试次数不是 2N 次而是只有 2N/2 次。这一结论被应用到破解密码哈希函数 (cryptographic hash function) 的 “生日攻击” 中。
总结:对于n位的哈希值,只要尝试2^n/2次,就至少存在一对x和x',使得H(x)和H(x')相同
分组密码的工作模式是:根据不同的数据格式和安全性要求, 以一个具体的分组密码算 法为基础构造一个分组密码系统的方法.基于分组的对称密码算法比如DES/AES算法只是描述 如何根据秘钥对一段固定长度(分组块)的数据进行加密,对于比较长的数据,分组密码工作模 式描述了如何重复应用某种算法安全地转换大于块的数据量.
简单的说就是,DES/AES算法描述怎么加密一个数据块,分组密码工作模式描述了如果 重复加密比较长的多个数据块. 常见的分组密码工作模式有五种:电码本( Electronic Code Book, ECB)模式、密文分组链接(Cipher Block Chaining,CBC)模式、密文反馈(Cipher Feed Back , CFB)模式、输出反馈(Output Feed Back ,OFB)模式和计数器(Counter, CTR)模式
(1)ECB工作模式
加密:输入的是当前明文分组
解密:每一个密文分组分别解密
公式:,
(2)CBC工作模式
加密:输入是当前铭文分组和前一次密文分组的异或
解密:每一个密文分组被解密后,再与前一个密文分组异或得明文
公式:
(3)CFB工作模式
(4)OFB工作模式
(5)CTR工作模式
加密:输入是当前明文分组和计数器密文分组的异或
解密:每一个密文分组被解密后,再与计数器密文分组异或得到明文
公式:
5种工作模式的比较
下面利用对称密码来构造哈希函数,我们规定:
1.1基于分组密码的CBC工作模式杂凑函数
1.2基于分组密码的CFB工作模式杂凑函数
总结:上述两种基于分组密码的杂凑函数中,K可以公开,称为不带密钥的哈希函数;k也可以不公开,称为带密钥的哈希函数(MAC)。在K公开的情况下,上述两种构造杂凑函数的方法是不安全的,容易找到碰撞。这是为什么呢?
概况
图:SHA系列哈希函数的参数比较
注意:所有的长度以比特为单位;安全性是指对输出长度为n比特哈希函数的生日攻击产生碰撞的工作量大约为2^n/2
算法描述
(1)常量与函数:SHA-256算法使用以下常数与函数:
①常量 初始值IV = 0x6a09e667 bb67ae85 3c6ef372 a54ff53a 510e527f 9b05688c 1f83d9ab 5be0cd19,这 些初值是对自然数中前 8个质数(2,3,5,7,11,13,17,19)的平方根的小数部分取前32比特而来.
举个例子来说, 2小数部分约为0.414213562373095048,而0.414213562373095048 ≈ 6 ∗16−1 +a ∗16−2+0 ∗16−3 +9 ∗16−4 +...于是,质数 2 的平方根的小数部分取前32比特就对应出0x6a09e667. 另外,SHA-256还用到了64个常数: K0, K1, …, K63 =
和 8个初始值类似,这些常量是对自然数中前64个质数(2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97…) 的立方根的小数部分取前32比特而来
②函数 SHA-256用到了以下函数:
其中: ∧表示按位“与”; ¬ 表示按位“补”;⊕表示按位“异或”; ROTR i (x )表示循环右移 i比特; SHR i (x )表示右移 i比特;
(2) 算法描述 ①填充
以信息“abc”为例显示补位的过程.a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息 的二进制编码为:01100001 01100010 01100011.
① 补一个“1” : 0110000101100010 01100011 1
② 补423个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000
③ 补比特长度24 (64位表示 ),得到512比特的数据:
②消息分块 将填充后的消息 m′按512比特分成 n组: m′= M(0)||M(1)|| ꞏ ꞏ ꞏ || M(n-1),其中: n = ( l+ k+65)/512.
③消息扩展
④压缩函数
图:SHA-256算法的压缩函数工作流程示意图
⑤基本压缩函数
基本压缩函数的流程如右边公式所述.
说明:
下图是SHA-256算法的基本压缩函数示意图
⑥SHA-256工作全过程
安全性
程序设计
概况
Keccak算法描述
(1) 符号与函数 Keccak算法使用以下符号与函数:
①符号
图:Keccak算法的参数定义
②函数 Keccak算法用到了以下 5个函数: θ(theta)、ρ(rho)、π(pi)、χ(chi)、ι(iota)
(2) 算法描述
Keccak算法 对数据进行填充,然后迭代压缩生成哈希值.
①填充
对数据填充的目的是使填充后的数据长度为 r的整数倍.因为迭代压缩是对 r位数据块进行 的,如果数据的长度不是 r的整数倍,最后一块数据将是短块,这将无法处理.
以算法Keccak-256,信息“abc”为例显示补位的过程. a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息的二进制编码为:01100001 01100010 01100011.此时 r = 1088.
②整体描述
Keccak算法采用海绵结构(Sponge Construction),在预处理(padding并分成大小相同的块 ) 后,海绵结构主要分成两部分:
Keccak算法的整体运算结构如下图
③吸入与挤出阶段
给定输入串 x ,首先对 x 做padding,使其长度能被 r整除,将padding后分割成长度为 r的块, 即 x =x 0|| x1|| x 2||...|| xt-1 .然后执行以下吸入阶段和挤出阶段:
图:Kecca算法的吸入阶段和挤出阶段示意图
④压缩函数
图:Kecca算法的三维数组示意图
图:Kecca算法的压缩函数结构示意图
(3) 安全性与性能
概况
SM3算法描述
(1) 常量与函数:SHA-256算法使用以下常数与函数:
①常量 初始值IV=7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e.
②函数
布尔函数
置换函数
其中: ∧表示按位“与”; ∨表示按位“或” ; ¬ 表示按位“补”;⊕表示按位“异或”; <<<表示循环左移
(2) 算法描述
①填充
以信息“abc”为例显示补位的过程.a, b, c对应的ASCII码分别是97, 98, 99;于是原始信息 的二进制编码为:01100001 01100010 01100011.
②消息扩展
③迭代压缩处理
④压缩函数
图:SM3算法的迭代压缩流程示意图
⑤基本压缩函数 F
注意:
图:SM3算法的基本压缩函数示意图
⑥SM3工作全过程
⑦压缩函数的作用
⑶安全性
第一步:生成私钥 (private key)
产生的 256比特随机数做为私钥(256比特 16进制 32字节 ): 18e14a7b 6a307f42 6a94f811 4701e7c8 e774e7f9 a47e2c20 35db29a2 06321725
第二步:生成公钥 (public key)
第三步:输地址 (address):0x1016f75c54c607f082ae6b0881fac0abeda21781
比特币难度是对挖矿困难程度的度量,即指:计算符合给定目标的一个哈希值的困难程度.
difficulty = difficulty_1_target / current_target difficulty_1_target
的长度为256比特, 前32位为0, 后面全部为1 ,一般显示为哈希值,
0x00000000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF difficulty_1_target表示btc网络最初的目标哈希. current_target是当前块的目标哈希,先经 过压缩然后存储在区块中,区块的哈希值必须小于给定的目标哈希值, 表示挖矿成功
比特币需要利用公钥进行加锁,利用私钥签名进行解锁,从而实现数字货币的交易. 解锁过程实 际上是利用ECDSA算法的产生数字签名. 给定交易信息 m,签名过程如下:
图:挖矿软件发布信息示意图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。