2017-2018-2 20179212 《网络攻防》 作业

本次实验课由王孟亚、李栋我们三个共同完成,我主要负责SM3的研究和Python实现。

SM3的工作原理

SM3密码杂凑算法采用Merkle-Damgard结构,消息分组长度为512b,摘要长度256b。压缩函数状态256b,共64步操作步骤。

SM3密码杂凑算法的初始值:
SM3密码杂凑算法的初始值共256b,由8个32b串联构成,具体值如下
IV=7380166f 4914b2b9 1724422d7 da8a0600
a96f30bc 163138aa e38dee4d b0fb0e4e。

SM3密码杂凑算法的常量:
SM3密码杂凑算法的常量定义如下:

SM3密码杂凑算法的布尔函数:
SM3密码杂凑算法的布尔函数定义如下:

SM3密码杂凑算法的置换函数:
SM3密码杂凑算法的置换函数定义如下:

SM3密码杂凑算法的消息填充:
对于长度为l(l<264)比特的消息m,SM3密码杂凑算法首先将比特“1”添加到消息的末尾,再添加k个“0”,k是满足l+k+1=448 mod 512的最小非负整数。然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m’的比特长度我512的倍数。例如:对消息01100001 01100010 01100011,其长度l=24,经填充得到的比特串如下:01100001 0100010 011000111 0···00···011000

SM3密码杂凑算法的迭代压缩过程:
将填充后的消息m’按512b进行分组:m’=B(0)B(1)···B(n-1),其中n=(l+k+65)/512。对m’按如下方式迭代:
FOR i=0 TO (n-1)
V(i+1)=CF(V(i),B(i));
ENDFOR
其中,CF是压缩函数,V(0)为256b初始值IV,B(i)为填充后的消息分组,迭代压缩的结果为V(n)。

SM3密码杂凑算法的压缩函数:
SM3密码杂凑算法的压缩函数由消息扩展过程和状态更新过程组成,具体描述如下。
1、过程1消息扩展过程:
将消息分组B(i)按一下方式扩展生成132个字W0,W1,···,W67,W’0,W’1,···,W’63用于压缩函数CF:
(1)将消息分组B(i)划分为16个字W0,W1,···,W15;
(2)FOR j=16 TO 67
Wj=P1(Wj-16 XOR Wj-9 XOR (Wj-3<<<15)) XOR (Wj-1<<<7) XOR Wj-6;
ENDFOR
(3)FOR j=0 TO 63
W’j=Wj XOR Wj+4;
ENDFOR
2、过程2 状态更新过程:
假定A,B,C,D,E,F,G,H为寄存器,SS1,SS2,TT1,TT2为中间变量,压缩函数V(i+1)=CF(V(i),B(i)),0≦i≦n-1,状态更新过程描述如下:
ABCDEFGH←V(i);
FOR j=0 TO 63
SS1←SS1+(A<<<12);
TT1←FFj(A,B,C)+D+SS2+W’j;
TT2←GGj(A,B,C)+H+SS1+ Wj;
D←C;
C←B<<<9;
B←A;
A←TT1;
H←G;
G←F<<<19;
F←E;
E←P0(TT2);
ENDFOR
V(i+1)←ABCDEFGH XOR V(i)
3、过程3 杂凑值:
ABCDEFGH←XOR V(n)
输出256b的杂凑值y=ABCDEFGH。

SM3密码杂凑算法的特点:
SM3密码杂凑算法压缩函数整体结构与SHA-256相似,但是增加了多种新的设计技术,包括增加16步全异或操作、消息双字介入、增加快速雪崩效应的P置换等。能够有效地避免高概率的局部碰撞,有效的抵抗强碰撞性的差分分析、若碰撞性的线性分析和比特追踪法等密码分析。
SM3密码杂凑算法合理使用字加运算,构成进位加4级流水,在不显著增加硬件开销的情况下,采用P置换,加速了算法的雪崩效应,提高了运算效率。同时,SM3密码杂凑算法采用了适合32b微处理器和8b智能卡实现的基本运算,具有跨平台实现的高效性和广泛的适用性。

SM3的Python实现

代码已经托管到码云
链接:https://gitee.com/mrg20179212/20179212/blob/master/SM3.py
老师给出的C代码运行结果:

本程序结果:

SM234的更多相关文章

  1. 2017-2018-2 20179207 《网络攻防技术》第十三周作业 python3实现SM234算法

    国密算法SM234 的python3实现 国家标准 GM/T 0002-2012 <SM4分组密码算法> GM/T 0003.1-2012 <SM2椭圆曲线公钥密码算法 第1部分:总 ...

随机推荐

  1. Linux nginx部署laravel

    Composer Composer 是 php 的一个依赖管理工具.它允许你申明项目所依赖的代码库,它会在你的项目中为你安装他们.运行 Composer 需要 PHP 5.3.2+ 以上版本.一些敏感 ...

  2. 用象棋的思维趣说IT人的职业发展和钱途

    最近我花了不少功夫在学习象棋,也学习了王天一等高手的棋路,感觉IT人的职业和下棋一样,往好了讲,争主动权争实惠只争朝夕,往坏了讲,一步走错得用多步来弥补,如果错误太大未必能弥补回来.在本文里,就用下棋 ...

  3. KPI、KPA、OKR三者的区别

    KPI.KPA或者OKR并不是水火不相容有你无我的概念,针对不对的业务状态.管理模式应该有所选择.以下是介绍它们之间的区别. 什么是KPI关键绩效指标 KPI(key performance indi ...

  4. EasyDSS流媒体解决方案实现的RTMP/HLS视频直播、直播鉴权(如何完美将EasyDSS过渡到新版)

    上一篇博文介绍了EasyDSS点播功能,然后作为RTMP流媒体服务器,接受RTMP推流.进行实时的直播流分发又是自身一大核心功能. 需求背景: 写本篇博文的一个目的是向大家介绍一下EasyDSS新版的 ...

  5. 基于镜像安装mysql

    准备目录 cd /opt mkdir -p mysql/data mysql/logs mysql/conf 查找MySql镜像版本 docker search mysql 安装指定版本的mysql镜 ...

  6. mac 地址分配

    https://regauth.standards.ieee.org/standards-ra-web/pub/view.html#registries 34:96:72:3c:5d:d6mac 地址 ...

  7. 换教室(期望+DP)

    换教室(期望+DP) \(dp(i,j,1/0)\)表示第\(i\)节课,申请了\(j\)次调换,这节课\(1/0\)调换. 换教室 转移的时候考虑: 上次没申请 这次也没申请 加上\(dis(fr[ ...

  8. 【TFS】解决TFS编译中文乱码问题

    前言; TFS2018做程序集成非常方便,线上编译然后直接生成docker镜像,但是在使用过程中遇到编译窗口中文乱码的问题,这个问题找了好久没人知道怎么解决.如下: 这个问题不解决,每次编译失败,研发 ...

  9. strstr使用

    extern char strstr(char str1, const char *str2); 语法: strstr(str1,str2) str1: 被查找目标 string expression ...

  10. POJ 之 Hardwood Species

                                                         Hardwood Species Time Limit:10000MS     Memory ...