采用环形首尾互联互控的雪崩效应极好的Hash算法/杂凑函数RING-512设计原理详解

RING-512密码杂凑算法

黄金龙(QQ1435271638)

什么是Hash算法?

Hash算法,又称为哈希算法、杂凑函数、散列函数、消息摘要算法。它可以将相当长(一般不大于2^64Bit)的输入数据经过计算生成固定长度的Hash值,不同的输入数据对应不同的Hash值(产生碰撞的概率很小)。同时Hash计算的过程是不可逆的,也就是说,由Hash值无法逆推出输入数据。

Hash算法的应用非常多,分别是安全加密、唯一标识、数据校验、散列函数、负载均衡、数据分片、分布式存储、区块链等。

RING-512密码杂凑算法描述

RING-512密码杂凑算法采用类分组密码算法结构,消息分组长度为512bit,摘要长度为512bit。压缩函数状态大小为512bit,共64步,每步更新全部16个寄存器,这加快了算法的雪崩效应。

RING-512密码杂凑算法的初始值

RING-512密码杂凑算法的初始值IV共512bit,由16个32bit字(IV0∽IV15)串联而成,具体值如下:

RING-512密码杂凑算法的常量

RING-512密码杂凑算法的常量为64个32bit字(CN0∽CN63),具体值如下:

RING-512密码杂凑算法的消息填充

对长度为l(l<264)比特的消息m,RING-512密码杂凑算法首先将比特“1”添加到消息的末尾,再添加k个“0”,k是满足(l+k+1)=448Mod512的最小非负整数。然后再添加一个64位比特串,该比特串是消息长度的二进制表示。填充后的消息m`的长度是512 的倍数。

RING-512密码杂凑算法的迭代压缩过程

将填充后的消息m`按512bit进行分组:m`=B(0)B(1)…B(n-1),其中n=(l+k+65)/512。对m`按如下方式迭代:

FOR i=0 TO (n-1)

M(i)=MsgMix(B(i))

V(i+1)=CF(V(i),M(i))

ENDFOR

其中CF是压缩函数,V(0)为512 bit初始值IV,B(i)为填充后的消息分组,迭代压缩的结果为V(n)。

MsgMix为消息混乱函数,描述如下:

FOR i=0 TO 15

M[i]=((B[i]+CN[4*i])CN[4*i+1]+ CN[4*i+2])CN[4*i+3];

ENDFOR

RING-512密码杂凑算法的压缩函数

假定A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P为32位寄存器,T0,T1,T2,T3为中间变量,压缩函数V(i+1)=CF(V(i),M(i)),V(0)←IV0||……||IV15,0≤i≤n-1

状态更新过程描述如下:

ABCDEFGHIJKLMNOP←V(i);

FOR j=0 TO 63

T0=FFFF0(A,B,C,D);

E=E⊕T0+M[0]⊕A;

F=F⊕T0+M[1]⊕B;

G=G⊕T0+M[2]⊕C;

H=H⊕T0+M[3]⊕D;

T1=FFFF1(E,F,G,H);

I=I⊕T1+M[4]⊕E;

J=J⊕T1+M[5]⊕F;

K=K⊕T1+M[6]⊕G;

L=L⊕T1+M[7]⊕H;

T2=FFFF2(I,J,K,L);

M=M⊕T2+M[8]⊕I;

N=N⊕T2+M[9]⊕J;

O=O⊕T2+M[10]⊕K;

P=P⊕T2+M[11]⊕L;

T3=FFFF3(M,N,O,P);

A=A⊕T3+M[12]⊕M;

B=B⊕T3+M[13]⊕N;

C=C⊕T3+M[14]⊕O;

D=D⊕T3+M[15]⊕P;

Temp=A;A=B;B=C;C=D;D=E;E=F;F=G;G=H;

H=I;I=J;J=K;K=L;L=M;M=N;N=O;O=P;P=Temp;

ENDFOR

V(i+1)←ABCDEFGHIJKLMNOPV(i)

杂凑值为

ABCDEFGHIJKLMNOP←ABCDEFGHIJKLMNOPV(i)

4个混淆扩散函数(FFFF0,FFFF1,FFFF2,FFFF3)

Y=FFFF0(X0,X1,X2,X3)

{

}

Y= FFFF1(X0,X1,X2,X3)

{

}

Y= FFFF2(X0,X1,X2,X3)

{

}

Y= FFFF3(X0,X1,X2,X3)

{

}

SBOX32(Z)=SBOX32(z3||z2||z1||z0)=SBOX(z3)||SBOX(z2)||SBOX(z1)|| SBOX(z0)

SBOX查找表

RING-512密码杂凑算法的特点

RING-512密码杂凑算法压缩函数整体结构为类分组密码结构,除了没有消息扩展函数外,还增加了多种新的设计技术,包括使用S盒作为非线性变换、使用了4个不同的加快雪崩效应的混淆扩散函数、每步更新16个寄存器的值等。这样能够有效地避免高概率的局部碰撞,有效地抵抗强碰撞性的差分分析、弱碰撞性的线性分析和比特追踪法等密码分析。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

保护Word或Excel的几种方法,总有一种满足你的需求

你已经在Microsoft Word或Excel中创建了一个重要或机密文件,你希望将其保密或至少保持安全。也许你想确保只有你和某些人可以阅读或编辑它。也许你想限制某人可以对文件进行的修改类型。你甚至可以向读者保证这是最终版本。如果你知道在Word和Excel中使用哪些工具以及它们是如…

openGauss学习笔记-182 openGauss 数据库运维-升级-升级前准备与检查

文章目录 openGauss学习笔记-182 openGauss 数据库运维-升级-升级前准备与检查182.1 升级前准备与检查清单182.2 收集节点信息182.3 备份数据182.4 获取升级包182.5 健康检查182.5.1 前提条件182.5.2 操作步骤 182.6 检查数据库节点磁盘使用率182.7 检查数据库状态182.7.1 验证…

JavaWeb——前端之AjaxVue

6. 前后端交互 6.1 Ajax&#xff08;原生的&#xff09; 概念&#xff1a; Asynchronous JavaScript And XML&#xff08;异步的JavaScript和XML&#xff09; 作用&#xff1a; 数据交互&#xff1a;通过Ajax可以给服务器发送请求&#xff0c;并获取服务器响应的数据异步交…

用 print 太慢了!强烈推荐这款Python Debug工具~

作为程序员&#xff0c;我们都深知调试&#xff08;Debug&#xff09;在编程过程中的重要性。 然而&#xff0c;使用传统的"print"语句进行调试可能效率较低&#xff0c;今天&#xff0c;笔者将推荐一款独具一格的Python调试工具——Reloadium。 Reloadium为IDE添加…

Java技术栈 —— Redis的雪崩、穿透与击穿

Java技术栈 —— Redis的雪崩、穿透与击穿 〇、实验的先导条件&#xff08;NginxJmeter&#xff09;一、Redis缓存雪崩、缓存穿透、缓存击穿1.1 雪崩1.2 穿透1.3 击穿 二、Redis应用场景——高并发2.1 单机部署的高并发问题与解决&#xff08;JVM级别锁&#xff09;2.2 集群部署…

数据结构:基于数组的环形队列(循环队列)实现

1 前言 队列是一种先进先出的线性表&#xff0c;简称为FIFO。它只允许在队尾插入成员&#xff0c;在队头删除成员&#xff0c;就像现实生活中排队上车一样。 队列的实现可以通过链表或数组完成&#xff0c;一般来说都推荐使用链表来实现队列&#xff0c;使用数组实现队列时每次…

SpreadJS 集成使用案例

SpreadJS 集成案例 介绍&#xff1a; SpreadJS 基于 HTML5 标准&#xff0c;支持跨平台开发和集成&#xff0c;支持所有主流浏览器&#xff0c;无需预装任何插件或第三方组件&#xff0c;以原生的方式嵌入各类应用&#xff0c;可以与各类后端技术框架相结合。SpreadJS 以 纯前…

Java日期和时间(二)

新增的日期和时间 为什么要学习新增的日期和时间 1、代替Calendar LocalDate&#xff1a;年、月、日 LocalTime&#xff1a;时、分、秒 LocalDateTime&#xff1a;年、月、日、时、分、秒 ZoneId&#xff1a;时区 ZoneldDatetime&#xff1a;带时区的时间 2、代替Date Instan…

使用flutter开发一个简单的轮播图带指示器的组件

使用PageView开发一个带指示器的轮播图组件&#xff0c;当轮播图切换的时候&#xff0c;指示器也会跟着切换&#xff0c;切换到当前轮播图所在的索引时&#xff0c;指示器的背景色会变成蓝色&#xff0c;否则是灰色。使用了一个curIndex变量来记录当前激活的轮播图索引。并使用…

HarmonyOS资源分类与访问

资源分类与访问 应用开发过程中&#xff0c;经常需要用到颜色、字体、间距、图片等资源&#xff0c;在不同的设备或配置中&#xff0c;这些资源的值可能不同。 应用资源&#xff1a;借助资源文件能力&#xff0c;开发者在应用中自定义资源&#xff0c;自行管理这些资源在不同…

【INTEL(ALTERA)】如何使用quartus设计助理Design Assistant提高结果质量,很好的资料一定要分享!!!

大家在用quartus的时候一定遇到过超级多的警告 warning&#xff0c;甚至异常 error&#xff0c;还有无从下手的timing 。 多扇出&#xff0c;布线拥堵&#xff0c;时序违例是不是让你头疼不已&#xff1f;那你一定要看看这篇文章分享的文档和资料。 优化设计的源代码通常是提高…

CMake入门教程【基础篇】什么是CMakeLists.txt

文章目录 什么是CMakeLists.txtCMakeLists.txt的核心作用CMakeLists.txt的基本结构总结 什么是CMakeLists.txt CMakeLists.txt是一个由CMake&#xff08;一个跨平台的自动化构建系统&#xff09;使用的配置文件。这个文件用于定义软件构建的过程&#xff0c;包括编译源代码、链…

wait 和 notify 这个为什么要在synchronized 代码块中

文章目录 wait 和 notify 这个为什么要在synchronized 代码块中&#xff1f; wait 和 notify 这个为什么要在synchronized 代码块中&#xff1f; wait 和 notify 用来实现多线程之间的协调&#xff0c;wait 表示让线程进入到阻塞状态&#xff0c;notify 表示让阻塞的线程唤醒。…

Vue3+Echarts(柱状图):点击不同的按钮可以切换不同年份的数据

一、需求 在Vue3项目中&#xff0c;绘制一个柱状图&#xff1a; 柱状图会展示某一年里四个季度的销售额提供2个按钮选项&#xff0c;点击不同的按钮可以切换到不同年份的销售额&#xff0c;这里的年份指2022年以及2023年目标效果如下&#xff1a; 默认展示的是2023年的数据&a…

spring 之 事务

1、JdbcTemplate Spring 框架对 JDBC 进行封装&#xff0c;使用 JdbcTemplate 方便实现对数据库操作 1.1 准备工作 ①搭建子模块 搭建子模块&#xff1a;spring-jdbc-tx ②加入依赖 <dependencies><!--spring jdbc Spring 持久化层支持jar包--><dependency&…

病情聊天机器人,利用Neo4j图数据库和Elasticsearch全文搜索引擎相结合

项目设计目的&#xff1a; 本项目旨在开发一个病情聊天机器人&#xff0c;利用Neo4j图数据库和Elasticsearch全文搜索引擎相结合&#xff0c;实现对病情相关数据的存储、查询和自动回答。通过与用户的交互&#xff0c;机器人可以根据用户提供的症状描述&#xff0c;给出初步的可…

论虚继承的作用

虚继承 实验介绍 在上一小节中学习了多继承与多重继承,实际在开发的时候可能会遇到一种情况,既用到了多继承又用到了多重继承,这种继承方式通常又称为菱形继承。但这样一来就会产生新的问题,过多消耗空间。希望通过本小节学习能知道菱形继承以及产生的问题和解决方式。 …

【网络面试(3)】浏览器委托协议栈完成消息的收发

前面的博客中&#xff0c;提到过很多次&#xff0c;浏览器作为应用程序&#xff0c;本身是不具备向网络中发送网络请求的能力&#xff0c;要委托操作系统的内核协议栈来完成。协议栈再调用网卡驱动&#xff0c;通过网卡将请求消息发送出去&#xff0c;本篇博客就来探讨一下这个…

给零基础朋友的编程课09 上集 - 代码

给零基础朋友的编程课09 上 - 矩形、曲线、文字、案例5讲解 上_哔哩哔哩_bilibili 上半Code: / // 彩色案例 艺术仿制品4 // /// 色表 // // 238,150,43 橙 // 229,207,192 暖灰 // 204,50,47 暗红// 项目设定 size(825, 984); // 设置画布(窗口)尺寸 background(…

计算机网络——基础知识汇总(八)

前言&#xff1a; 前面我们已经将计算机网络的基础知识和基础框架有了一个简单的学习与了解&#xff0c;也对它可能考的一些计算机网络计算大题有了一个详细的解答与记录&#xff0c;现在我们将计算机网络中的一些基础知识点进行一个总结与记录&#xff0c;这些基础知识大多会出…