如何用MD5和SHA等构造密码方案中的哈希函数

news2024/9/20 10:40:21

常见符号

先复习一些常见符号

符号意义
p , q p, q p,q大素数
Z p \mathbb{Z}_p Zp集合 { 0 , 1 , 2 , … , p − 1 } \{ 0,1,2, \dots, p-1 \} {0,1,2,,p1}
Z N ∗ \mathbb{Z}^*_N ZN N N N互质的整数
Z p ∗ \mathbb{Z}^*_p Zp p p p互质的整数,即集合 { 1 , … , p − 1 } \{1, \dots, p-1\} {1,,p1}
{ 0 , 1 } λ \{0, 1\}^\lambda {0,1}λ长度为 λ \lambda λ的比特串
{ 0 , 1 } ∗ \{0, 1\}^* {0,1}任意长度的比特串
G \mathbb{G} G阶为素数的有限循环群
G \mathbb{G} G双线性配对有关的有限循环群

如何实现 H : { 0 , 1 } ∗ → Z p ∗ H : \{0, 1\}^* \to \mathbb{Z}^*_p H:{0,1}Zp

记输入为 x x x,用SHA256哈希函数实现 H H H,且 log ⁡ 2 ( p ) > 256 \log_2 (p) > 256 log2(p)>256注: 这里的哈希函数 H H H在密码方案中一般被当成随机谕言机

  • 参考答案:网址

直接思路: ( S H A 256 ( x )   m o d   ( p − 1 ) ) + 1 \left( \mathsf{SHA256}(x) ~ \mathrm{mod} ~ (p-1) \right) + 1 (SHA256(x) mod (p1))+1。直接模 p p p无法保证哈希结果不为零。模 ( p − 1 ) (p-1) (p1)使得值域为 [ 0 , p − 2 ] [0, p-2] [0,p2],加1使得值域为 [ 1 , p − 1 ] [1, p-1] [1,p1]

由于哈希函数 S H A 256 ( x ) < 2 256 \mathsf{SHA256}(x) < 2^{256} SHA256(x)<2256,而 Z p ∗ \mathbb{Z}^*_p Zp元素比特串长度大于256,所以上述思路无法做到与随机函数 f : y ← Z p ∗ f: y \gets \mathbb{Z}^*_p f:yZp不可取分,即 Z p ∗ \mathbb{Z}^*_p Zp中有一些元素总是取不到,这与随机谕言机的定义冲突。

改进思路: 拓展SHA256的长度。

k = 1 + ⌈ log ⁡ 2 ( p ) / 256 ⌉ k = 1 + \lceil \log_2(p) / 256 \rceil k=1+log2(p)/256,利用HMAC构造 k k k不同的输出为256比特的哈希函数 H i ( x ) H_i(x) Hi(x),HMAC的定义详见维基百科。

在这里插入图片描述

具体而言,对 H i ( x ) H_i(x) Hi(x),随机选取512比特的种子 c i c_i ci,使

H i ( x ) = S H A 256 ( ( c i ⊕ o p a d ∥ S H A 256 ( ( c i ⊕ i p a d ∥ x ) ) H_i(x) = \mathsf{SHA256} \Big( (c_i \oplus\mathsf{opad} \| \mathsf{SHA256} \big( (c_i \oplus\mathsf{ipad} \| x \big) \Big) Hi(x)=SHA256((ciopadSHA256((ciipadx))

最终构造

( ( H 0 ( x ) ∥ H 1 ( x ) ∥ ⋯ ∥ H k − 1 ( x ) )   m o d   ( p − 1 ) ) + 1 \Big( \big( H_0(x) \| H_1(x) \| \cdots \| H_{k-1}(x) \big) ~ \mathrm{mod} ~ (p-1) \Big) + 1 ((H0(x)H1(x)Hk1(x)) mod (p1))+1

扩展之后,取模之前的数的长度肯定大于 log ⁡ 2 ( p ) \log_2(p) log2(p)

我的疑问: 这里怎么保证抗碰撞性质?即使HMAC是抗碰撞的,那么攻击者不可以利用 ( p − 1 ) (p-1) (p1)的循环制造扩展哈希的碰撞对吗?例如:攻击者分别给出5的原像和 ( p − 1 + 5 ) (p-1+5) (p1+5)的原像。为了解决这个问题,可不可以一旦检测到 H 0 ∥ ⋯ ∥ H k − 1 ≥ ( p − 1 ) H_0 \| \cdots \| H_{k-1} \geq (p-1) H0Hk1(p1),就对 x x x加一个随机成分 γ \gamma γ,利用雪崩效应使 H 0 ∥ ⋯ ∥ H k − 1 < ( p − 1 ) H_0 \| \cdots \| H_{k-1} < (p-1) H0Hk1<(p1)

如何实现 H : Z p ∗ → { 0 , 1 } λ H: \mathbb{Z}^*_p \to \{0, 1\}^\lambda H:Zp{0,1}λ

跟上述做法类似,用 2 λ 2^\lambda 2λ取模。

参考答案:网址

如何实现 H : M → Z N ∗ H: \mathcal{M} \to \mathbb{Z}^*_N H:MZN

这里 M \mathcal{M} M是消息(message)的定义域, N N N是大素数 p p p q q q的积。

参考答案:网址

主要思路: Z N ∗ \mathbb{Z}^*_N ZN不包含 p , q , 0 p, q, 0 p,q,0,那么可以直接用哈希函数对 N N N取模。只要 N N N足够大,刚好取到 p , q , 0 p, q, 0 p,q,0的概率为可忽略函数。

个人思考: 若运气不好刚好取到 p , q , 0 p, q, 0 p,q,0,则对 m ∈ M m \in \mathcal{M} mM填充随机成分。

如何实现 H : { 0 , 1 } ∗ → G H: \{0, 1\}^* \to \mathbb{G} H:{0,1}G

可以先将输入 x x x映射至 Z q \mathbb{Z}_q Zq得到 h h h,再将 g h g^h gh作为哈希输出。这里的 g g g是群的生成元。

双线性对上的哈希函数

PBC library和Charm-Crypto library都有提供相应函数,不再赘述。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ElasticSearch - ElasticSearch基本概念及集群内部原理

文章目录1. ElasticSearch的应用场景01. Elasticsearch 是什么&#xff1f;02. 为何使用 Elasticsearch&#xff1f;03. Elasticsearch 的用途是什么&#xff1f;04. Elasticsearch 的工作原理是什么&#xff1f;05. Elasticsearch 索引是什么&#xff1f;06. Logstash 的用途是…

SAP UI5 Upload/Download file through NetWeaver Gateway

1、创建 SEGW对象 2、创建Entity Type 要把Media 标识打上 3、 激活对象然后到DPC Class的扩展对象里面重定义 /IWBEP/IF_MGW_APPL_SRV_RUNTIME~GET_STREAM /IWBEP/IF_MGW_APPL_SRV_RUNTIME~CREATE_STREAM /IWBEP/IF_MGW_APPL_SRV_RUNTIME~UPDATE_STREAM METHOD /iwbep/if_m…

手写操作系统+文件系统开源啦

哈喽&#xff0c;我是子牙&#xff0c;一个很卷的硬核男人。喜欢研究底层&#xff0c;聚焦做那些大家想学没地方学的课程&#xff1a;手写操作系统、手写虚拟机、手写模拟器、手写编程语言… 今年是我创业的第二年&#xff0c;已经做了两个课程&#xff1a;手写JVM、手写操作系…

十五、Spring中的八大模式

1 简单工厂模式 BeanFactory的getBean()方法&#xff0c;通过唯一标识来获取Bean对象。是典型的简单工厂模式&#xff08;静态工厂模式&#xff09;&#xff1b; 2 工厂方法模式 FactoryBean是典型的工厂方法模式。在配置文件中通过factory-method属性来指定工厂方法&#x…

多线程的创建、Thread类、线程安全、同步、通信

目录 多线程的创建 方式一&#xff1a;继承Thread类 方式二&#xff1a;实现Runnable接口 方式三&#xff1a;JDK 5.0新增&#xff1a;实现Callable接口 Thread的常用方法 线程安全 线程安全问题是什么、发生的原因 线程安全问题案例模拟 线程同步 同步思想概述 方式…

0202state详解-组件-React

文章目录1 state简介2 初始化state3 React中事件绑定4 类方法中this指向问题5 解决React类组件方法this指向5 setState5.1 更新state状态数据方式5.2 更新state整体替换还是合并相同项&#xff1f;5.3 关于构造器、render方法调用次数6 state简写7 问题解答后记1 state简介 Re…

在NVIDIA JetBot Nano小车上更新WIFI驱动

前言:树莓派上的WIFI驱动类型比较多&#xff0c;经常有更好驱动的需求本文给出RealTek的无线WIFI模组&#xff0c;8821CU的驱动更新办法步骤第一 通过其他方式连接网络小车通过网线或者老的WIFI连接到网络上第二 构建驱动模块并下载驱动首先&#xff0c;我们需要打开一个ubuntu…

【深度学习】BERT变体—RoBERTa

RoBERTa是的BERT的常用变体&#xff0c;出自Facebook的RoBERTa: A Robustly Optimized BERT Pretraining Approach。来自Facebook的作者根据BERT训练不足的缺点提出了更有效的预训练方法&#xff0c;并发布了具有更强鲁棒性的BERT&#xff1a;RoBERTa。 RoBERTa通过以下四个方面…

【JavaEE】基于mysql与servlet自制简易的表白墙程序

文章目录1 表白墙页面构建2 Servlet 回顾3 表白墙后端程序实现3.1 我们需要做什么&#xff1f;3.2 实现细节4 实现结果写在最后1 表白墙页面构建 该页面由标题、文本、三个 input 输入框与一个提交按钮构成&#xff0c;整体比较简单&#xff0c;相关样式文件和页面代码会在后面…

【16】linux命令每日分享——tail命令查看文件

大家好&#xff0c;这里是sdust-vrlab&#xff0c;Linux是一种免费使用和自由传播的类UNIX操作系统&#xff0c;Linux的基本思想有两点&#xff1a;一切都是文件&#xff1b;每个文件都有确定的用途&#xff1b;linux涉及到IT行业的方方面面&#xff0c;在我们日常的学习中&…

分布式中雪花算法

背景需要选择合适的方案去应对数据规模的增长&#xff0c;以应对逐渐增长的访问压力和数据量。 数据库的扩展方式主要包括&#xff1a;业务分库、主从复制&#xff0c;数据库分表。 2.数据库分表概念&#xff1a;将不同业务数据分散存储到不同的数据库服务器&#xff0c;能够支…

网络参考模型

OSI参考模型 应用层 不服务于任何其他层&#xff0c;就是位APP提供相应的服务&#xff0c;不如HTTP、域名解析DNS提供服务表示层 1.使得应用数据能够被不同的系统&#xff08;Windows\Linux&#xff09;进行识别和理解 2.数据的解码和编码、数据的加密与解密、数据的压缩和解…

简单易懂值得收藏的Spring源码解析,依赖注入和bean的初始化

简单易懂值得收藏的Spring源码解析&#xff0c;依赖注入和bean的初始化原理解析依赖注入PropertyValues、PropertyValue、PropertyAccessorbyNamebyTypeAutowiredbean的初始化源码走读依赖注入populateBean方法autowireByNameautowireByType方法AutowiredAnnotationBeanPostPro…

广义状态平均法功率变换器建模分析

两种状态平均法在功率变换器建模的应用比较 [!info] Bibliography [1] 高朝晖, 林辉张晓斌 & 吴小华, “两种状态平均法在功率变换器建模的应用比较,” 计算机仿真, no. 241-244248, 2008. [!note] 状态空间平均法采用直流量近似&#xff08;线性系统模型&#xff09;&…

通达信指标公式颜色代码的四种写法(COLOR/RGB)

通达信指标公式颜色代码有四种写法&#xff0c;分别为COLOR颜色的英文、COLOR十六进制、RGBX十六进制、RGB(R,G,B)。标题有点尴尬&#xff0c;让我想到孔乙己“茴”字的四种写法&#xff0c;哈哈。 一、COLOR颜色的英文 “COLOR颜色的英文”这种写法比较简单&#xff0c;函数库…

【C++】bsearch函数的使用及二分法查找介绍

写程序的时候&#xff0c;肯定避免不了需要从集合中找到符合条件的元素&#xff0c;一般情况下&#xff0c;最简单也最常用的就是循环遍历元素&#xff0c;这种方法虽然写的简单&#xff0c;但是小数据量还行&#xff0c;但是数据过大的话&#xff0c;这样效率就低了。循环的时…

浅谈游戏中运用到的人工智能

电子游戏中的人工智能意味着电子游戏中角色的创造性行为就像人类游戏玩家正在控制他们一样。它提供了自适应和响应式的视频游戏体验。1949年初&#xff0c;密码学家克劳德香农发现了游戏中的人工智能&#xff0c;从而联想到了电脑上的单人国际象棋游戏。对于人工智能的发展&…

Android的基础介绍

一、Android介绍 Android是一种基于Linux的自由及开放源代码的操作系统,Android 分为四个层,从高层到低层分别是应用程序层、应用程序框架层、系统运行库层和Linux内核层。 Android 是Google开发的基于Linux平台的开源手机操作系统。它包括操作系统、用户界面和应用程序——…

力扣-可回收且低脂的产品

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道超级超级超级简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1757. 可回收且低脂的产品二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交S…

iview tree树形菜单实践之数据回显与选中

iview tree树形菜单在使用过程中&#xff0c;多多少少有一些小坑&#xff0c;本文简单罗列几个&#xff1a; 避坑指南&#xff1a; 关于iview tree树形菜单在使用过程中存在父级菜单的数据传输和回显问题 简单就是两个方面&#xff1a;勾选后数据传输和回显问题。 一&#xff…