在好例子网,分享、交流、成长!
您当前所在位置:首页Others 开发实例一般编程问题 → 祖冲之密码算法

祖冲之密码算法

一般编程问题

下载此实例
  • 开发语言:Others
  • 实例大小:0.41M
  • 下载次数:3
  • 浏览次数:226
  • 发布时间:2020-08-13
  • 实例类别:一般编程问题
  • 发 布 人:robot666
  • 文件格式:.pdf
  • 所需积分:2
 

实例介绍

【实例简介】
国家密码管理局发布的祖冲之密码算法文档,PDF格式
祖冲之序列密码算法 1术语和定义 下列术语和定义适用于本文件。 比特bit 二进制字符0或1称之为比特。 字节byte 由8个比特组成的比特串称之为字节。 字 word 由2个以上(包含2个)比特组成的比特串称之为字。 本文主要使用31比特字和32比特字 字表示 word representation 本文字默认采用进制表示。当字采用其它进制表示时,总是在字的表示之前或之后添加指示符。 例如,前缀0x指示该字采用十六进制表示,后缀下角标2指示该字采用二进制表示。 高低位顺序 bit order ing 本文规定字的最高位总是位于字表示中的最左边,最低位总是位于字表示中的最右边。 2符号和缩略语 2.1运算符 +算术加法运算 ab整数a和b的乘积 赋值操作符 md整数模运算 ⊕按比特位逐位异或运算 田模2加法运算 字符串或字节串连接符 取字的最高16比特 取字的最低16比特 <<k32比特字循环左移k位 》k32比特字右移位 a→b向量a赋值给向量b,即按分量逐分量赋值 2符号 下列符号适用于本文 线性反馈移位寄存器的16个31比特寄存器单元变量 Xo, An 12, r3 比特重组输出的4个32比特字 Ru, R2 非线性函数F的2个32比特记忆单元变量 非线性函数F输出的32比特字 R与进行模23加法运算输出的32比特字 ∥∥Zk1dFL R与按比特位逐位异或运算输出的32比特字 算法每拍输出的32比特密钥字 初始种子密钥 初始向量 15比特的宇符串常量,i=0,1,2,…15 非线性函数 输出密钥字长度 2.3缩略语 下列缩略语适用于木文: ZLC 祖沖之序列密码算法或者祖冲之算法 LESR 线性反馈移位寄存器 BR 比特重组 3算法描述 3.1算法整体结构 祖冲之算法逻辑上分为上中下层,见图1。上层是16级线性反馈移位寄存器(LFSR);中层是比特 重组(BR);下层是非线性函数F。 mod 231 F 15 R S15S14S13S12S1|S tose, ss sasssz, so B S15HI S14 S11Li S SZL I S5I S2i: S Xr R W2 <<<16 s·L2 F 图1祖冲之算法结构图 3.2线性反馈移位寄存器LFSR 3.2.1概述 LFSR包括16个31比特寄存器单元变量s,s1,…,s5 LSR的运行模式有2种:初始化模式和工作模式 3.2.2初始化模式 在初始化模式卜,LFSR接收·个31比特字u。u是由非线性函数F的32比特输出〃通过舍弃最低 位比特得到,即a=畛>1。在初始化模式下,LFSR计算过程如下: LFSRWithInitialisat ion Mode(u) (1)v=2s;+2s3+22so+2s1+(1+2)smod(2-1) (2)s=(rla)mod(211) )如果s=0,则置s=2- 3) 模2-1乘法和模2-1加法的实现参见附录B。 3.2.3工作模式 在工作模式下,LFSR不接收任何输入。其计算过程如下: LFSRWithWorkMode o (1)s6=2s;+2s+22s1+2s-(1+2)smod(2-1); (2)如果s=0,则置s1:=2-1 (3)( 3.3比特重组BR 输入为FSR寄仔器单元变量s,s2,s,s,s,sn,s,s,输出为4个32比特宇、耳、不、K 计算过程如下 BitReconstruction( (1)-sa1‖sa (4) 34非线性函数F F包含2个32比特记忆单元变量R和R。 F的输入为3个32比特字、K、,输出为一个32比特字∥。计算过程如下: F (o, Y, 5) (1)∥=(。⊕)田; (2)=R田 (3)V2=R⊕ (4)R=S(L1(∥n1‖n) )R=S(L2(1‖) 其中S为32比特的S盒变换,S盒定义见附录A:;L和L为32比特线性变换,定义如下 L1(功=r⊕(F<<2)⊕(r<10)⊕(<18)⊕(r<24), L2(=H⊕(H《8)⊕(<14)⊕(<22)⊕(H<30)。 35密钥装入 将初始密钥k和初始向量ⅳ分别扩展为16个31比特字作为LFSR寄存器单元变量s,si,…,si 的初始状态。设k和分别为 kok 和 Iv 其中k和ⅳ均为8比特字节,0≤15。密钥装入过程如卜 (1)D为240比特的常量,可按如下方式分成16个15比特的字串: D=d‖d‖……‖da 其中 d=100010010101112 d1=0100110101111002, d-110001001101011, d5=001001101011102, d=1010111100010012, d=011010111100010 d=110001001101012, dh=000100110101111 d=10011010110002, d=010111100010011 d0=110101111000100 d1=001101011110001 d12=101111000100110 d3-0111100010011012, d4=111100100110102, d3-100011110101100。 (2)对0≤i≤15,有s=k1|d‖ 3.6算法运行 3.6.1初始化阶段 首先把128比特的初始密钥k和初始向量ⅳ按照3.5的密钥装入方法装到LFSR的寄存器单元变量sa ,…,s;中,作为LFSR的初态,并置32比特记忆单元变量足和R为全0。然后执行下述操作 重复卜述过程32次: (1 BitReconstruct ion ( (2)W=F(X0,X1,X2); (3)输出32比特字W (4) LFSRWithInitialisationMode (W >>1) 3.6.2工作阶段 首先执行下列过程一次,并将F的输出合弃 (1) BitReconstruction() (2)F(XO,X1,X2) (3) LFSRWithWorkMode o 然后进入密钥输出阶段。在密钥输出阶段,每运行一个节拍,执行下列过程一次,并输出一个32 比特的密钥字2 (1) BitReconstruction() (2)7=F(X0,X1,K2)⊕X3; (3)输出32比特密钥字Z; (1) LFSRWithWorkMode o 附录A s盒 和S的定义分别见表A.1和表2。改S(或S)的8比特输入为x。将x视作两个16进制数含4 32比特S盒S由4个小的8×8的S盒并置而成,即S=(S,S,S,S),其中S=S,S=S 即Fh‖,则表1(或表2)中第h行和第列交叉的元素即为S(或S)的输出S2(x)(或S 设S盒S的32比特输入Ⅹ和32比特输出Y分别为: Ⅹ-x1‖x1‖x:‖x3 0 巧 ys 其中x和均为8比特字芍,i-0,1,2,3。则有y-S(x),i-0,1,2,3 表A1S盒 23456789ABC DEF 03E725B47CAE0003304D1549809B96DCB 7B1BF932AF9D6A45B82DFC1D08530390 84 E4 CE D991 DD 296AC 3CDC1F81E|734369c6B5BDFD396320D438 4767DB2A7CFED57c5F32C|BB14210659B EF5E314F7F5A440D8251495FBA581C 6 4A16 D5 17 A8 9224 1F 8C FF D8 AE 2E 01 D3AD 7|: 4D)A46BBc9D):9A8F871)7:3A806F2FC8 8B1B437F70A2213287CcC|3C89c7C39656 907BFT00B2B973235417961464C10F A|BC2695888AB0A3FBc01894F2E1E5E9|5D B DO DC1l66645CEC39427512F5749cAA23 C|0E86ABBE|2A02E767E644A26cc2939FF1 DF6FA36D250689E6271153DD640c4E20F E:|8:|83776B 053:0C30HA70B7A1F84965 F8D271ADB81B3A0F4457A19DFEE783460 表A.2S盒 BC D EH 055c2637138C81786F3cDA5B29AAFD|77 18CC5940C461A1300E3|48167240F9F842 24426689681D9453E1076C6A78B83913E1 3AB5562Ac06B3052266BFDC|0BFA6248 4DD2011063609C1CFF62752BB69F5D487 5 4C D2 9C57 A4 BC 9A DF FE D6 8D TAEB 62B|53D85CA11417FB23D57D306 730809 7EE 70 3F61 B219 8E 4E E5 4B 93 8F 5D DBA9 8ADP1 AE 2E CB 2D 46 6E ID 97 C8 D1 r9 937A57583呢AB8sB91c0cm4989 表A2S盒(续 A01B6BD5824A25F387899159050B895E4 B DO C7 CE ED OF B4 6F A0 CC FO 4A79 C3 DE C A3 EF 51 E6 18 EC IB 2C80 E7 FF21 D5A6A541E41319235c433070BA7E0E34 |88B1987CF33)606C7B 1F32650428 F|64BE859B2F598AD7B025ACAF1203E2|F2 注:S盒和S盒数据均为十六进制表示 附录B 模21-1乘法和模2-1加法的实现 B.1模2-1乘法 两个31比特字模2-1乘法可以快速实现。特别地,当其中一个字具有较低的汉明重量时,可 以通过31比特的循环移位运算和模21加法运算实现。例如,计算 ab mod(21),其中l21212 ab mod(2-1)-(a<31i)+(a<1刀+(a<<k)mod(21-1), 其中:<<3表示3比特左循环移位运算。 B.2模2-1加法 在32位处理平台上,两个31比特字a和b模2-1加法运算c-a+bmd(2-1)可以通过下 面的两步计算实现: 1)c=a b 2)c=(c&0x7FFFF)+(c>31)。 【实例截图】
【核心代码】

标签:

实例下载地址

祖冲之密码算法

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警