[密码学] 杂凑函数
文章目录
- 基本概念
- 杂凑函数的定义
- 杂凑函数的应用
- 安全属性
- 基本属性
- 安全属性
- 通用攻击方法
- 碰撞攻击
- 生日攻击
- 常见结构
- 一般模型
- 主要构造方法
- 基于分组密码
- 单倍长度
- 多倍长度
- 定制杂凑函数
- MD结构
- 定义
- MD强化
- MD结构的安全性
- MD结构的长度扩展攻击
- 多碰撞(t-碰撞)攻击
- 海绵结构
- 常见的杂凑函数算法
- SHA-256(MD结构)
- 消息填充
- 压缩函数
- 示意图
- 消息扩充方案
- 函数f
- SHA-3算法 Keccak(海绵结构)
基本概念
杂凑函数的定义
①又称Hash函数、哈希函数,y=H(x);
②将任意长度的消息x压缩为固定长度的杂凑值(哈希值、指纹值)y;
杂凑函数的应用
①检测消息完整性;
②构建伪随机函数;
③用作伪随机函数发生器;
④用于数字签名,提高数字签名的速度;
⑤电子签名等认证方案的关键技术;
⑥比特币;
⑦工作量证明;
⑧区块链的起源性技术;
安全属性
基本属性
①压缩性
应用于任意大小的数据块,产生定长的输出。
②有效性
对任意给定的消息x,计算H(x)是容易的。
安全属性
抗原像(单向性):给定H和任一个像y,其对应的输入未知,找到一个原像x满足H(x)=y是计算上不可行的。
抗第二原像(抗弱碰撞):给定H和任一个消息x,找另一个消息x’(x≠x‘),满足H(x)=H(x’)是计算上不可行的。
抗碰撞(抗强碰撞):给定H,找到任意两个不同的消息x和x’,满足H(x)=H(x’)是计算上不可行的。
一般来说**!!!!!满足抗碰撞,就暗含着满足抗第二原像;满足抗第二原像,就暗含着抗原像!!!!!**
抗长度扩展攻击:给定杂凑值H(M)和消息的长度|M|,找到h’和z满足H(M|z)=h’是计算上不可行的。
此外,还要考虑增强目标抗碰撞特性,伪随机函数攻击等。
通用攻击方法
碰撞攻击
寻找x,x’,满足h(x)=h(x’)且x≠x’
如果能找到杂凑函数的碰撞,就意味着两个不同的文件可以产生相同的“指纹”,从而伪造签名。
主要方法:生日攻击、特殊方法(针对)
生日攻击
找到一对碰撞的理想复杂度为2^(n/2)
若能够以小于2^(n/2)的复杂度找到一对碰撞,则认为h被破解
常见结构
一般模型
迭代处理,通过处理固定长度的连续分组来杂凑任意长度的输入。
主要构造方法
根据迭代压缩函数f的不同:
①基于数学困难问题;
②基于分组密码:杂凑值长度等于分组长度
杂凑值长度大于分组长度:MDC-2,MDC-4等
③定制杂凑函数:MD4,MD5;SHA-{0,1,224,256,384,512}等
基于分组密码
优点:
①基于较为成熟的分组密码算法;
②假如系统中已经有了分组密码的一个有效实现,把它作为杂凑函数的中心元件,几乎不需附加代价
缺点:
实现效率一般不如定制杂凑函数
单倍长度
多倍长度
定制杂凑函数
优点:可选择利于快速实现的基本运算
缺点:难以进行安全性证明;出现时间短,设计理念不够成熟
MD结构
定义
MD强化
为了进一步提高安全性,对消息填充进行的强化
MD结构的安全性
!!!易于构造二次碰撞!!!
MD结构的长度扩展攻击
多碰撞(t-碰撞)攻击
海绵结构
常见的杂凑函数算法
SHA-256(MD结构)
①MD结构;
②SHA-2系列:
根据输出杂凑值长度的不同划分为:SHA-224/256/384/512多个版本;
在不同版本中,消息分块长度/压缩函数步数/常数选择也是不同的
③SHA-256
消息分块为512比特;链接值CV长度为256比特;输出的杂凑值长度为256比特
消息填充
压缩函数
其中,ROT表示循环移位,SH表示移位,R表示右移,右上角数字表示移动的位数
示意图
消息扩充方案
函数f
SHA-3算法 Keccak(海绵结构)
[密码学] 杂凑函数相关推荐
- js 实现2的n次方计算函数_密码杂凑函数的基本性质探讨
密码学研究的宗旨是保证数据和通信的机密性.完整性和认证性,其中完整性和认证性的实现依赖于一类关键的密码学函数---密码杂凑函数.密码杂凑函数通常用来计算数据的短"指纹"(也称杂凑值 ...
- android杂凑算法,SM3密码杂凑算法分析
SM3密码杂凑算法分析 杂凑函数在密码学中具有重要的地位,被广泛应用在数字签名,消息认证,数据完整性检测等领域.杂凑函数通常被认为需要满足三个基本特性:碰撞稳固性,原根稳固性和第二原根稳固性.2005 ...
- 国密算法 SM2公钥密码 SM3杂凑算法 SM4分组密码 python代码完整实现
包含SM2公钥密码.SM3杂凑算法和SM4分组密码的国密算法完整工具包完成了.此前分别发布过上述三个算法的代码: SM2:国密算法 SM2 公钥加密 非对称加密 数字签名 密钥协商 python实现完 ...
- 开放原子训练营(第一季)铜锁探密,SM3杂凑算法加强至pro版
目录 前言: 一.初遇铜锁 自我总结: 1.环境搭建,一次难忘的经历 2.键盘敲出的每一个命令,都是最美的音符 二.SM3杂凑算法增强改造 三.艺术源于生活 四.对开放原子开源基金会的感受 前言: 说 ...
- 原味的SM3密码杂凑算法
根据国家密码管理局官网发布的规范文档里的算法描述,对SM3密码杂凑算法进行了原汁原味的实现.代码里的函数.变量名称都尽量使用算法描述中的名称,尽量遵循算法描述的原始步骤,不使用算法技巧进行处理. 算法 ...
- 【图解SHA1杂凑算法】SHA1杂凑算法的Python实现保姆级教程 | 物联网安全 | 信息安全
系列索引:[图解安全加密算法]加密算法系列索引 Python保姆级实现教程 | 物联网安全 | 信息安全 起初写实验时找到的代码大多基于c/c++,python可参考的资料很少,所以借着这次实验的机会 ...
- SM3国密杂凑值算法的原理和c语言实现
一.SM3算法介绍 杂凑值算法也可称为摘要算法或者哈希算法.通过对数据资料的填充.分组.扩展压缩等方式计算成特定长度的数值,来作为数据指纹或者数据特征使用.常见的MD5算法长度为128bit(16字节 ...
- 国密SM3密码杂凑算法原理及实现(附源码)
相关文章: 国密SM3哈希算法原理及实现(附源码) SHA1哈希算法原理及实现(附源码) MD5哈希算法原理及实现(附源码) MD4哈希算法原理及实现(附源码) MD2哈希算法原理及实现(附源码) M ...
- 国密算法SM3(杂凑算法)
国家密码管理局关于发布<SM3密码杂凑算法>公告 SM3密码杂凑算法 JavaScript对本算法的一个实现:https://github.com/wcube/sm-crypto
最新文章
- 共建网络安全 共享网络文明 2015福建网络安全日开幕在即
- Git关于pull,commit,push的总结
- mysql获取用户名_mysql-LEFT JOIN 3列获取用户名
- java是如何写入文件的
- PHP 在作为中间件时print无返回值问题
- Zookeeper 如何选举master 主节点?
- ImageLoader的简单分析(四)
- 威廉第三的MAC系列教程(一) ——使用ACPI Patcher制作DSDT补丁
- linux系统expdp按表空间导出,expdp导出是全库吗
- 倒排索引Inverted index
- Delphi 编译的程序在win10中怎样默认以管理员身份运行
- 小米路由器3/3G/4通过串口(ttl)刷机
- React 父子组件的生命周期关系(16.4版本及以后)
- 原生js-简易点名册实现
- 推荐一个开源的 .NET 二维码生成库
- Arch 中 fcitx5 提示拼音不可用的解决过程
- 电厂计算机房设计规范,发电厂消防设计规范.docx
- 用C语言写个人财务管理系统
- 情人,就是彼岸那朵花
- PTA-成绩录入时的及格与不及格人数统计
热门文章
- python flask框架发布问答平台注册页面_Python|Flask框架实现QQ账号登录
- IT运维服务管理中知识
- 数据中心冷却塔结冰应急演练
- 为什么一体化机柜会那么的受欢迎?
- 谷歌开始用AI技术帮助数据中心散热节省成本
- DayDayUp:大学英语六级考试历年真题答案规律分析、应试回答精讲、及六级改革历史之详细攻略
- DL之DNN之BP:神经网络算法简介之BP算法/GD算法之不需要额外任何文字,只需要八张图讲清楚BP类神经网络的工作原理
- Py之ipython:Python库之ipython的简介、安装、使用方法详细攻略
- HiveSQL中复杂数据类型操作
- C++中构造函数和析构函数的调用顺序