带妹妹学密码系列4—ZUC祖冲之算法

基本介绍

序列密码也称为流密码((Stream Cipher),是对称密码算法的一种,也是密码学的一个重要分支。序列密码诞生较早,而且具有实现简单、便于硬件实施、效率高等特点,因此获得了广泛应用,并且在专用机构或机密机构中具有明显优势,序列密码在许多重要应用领域已成为主流密码。
设计原理:采用一个短的种子密钥来控制某种算法获取长的密钥序列的办法用以提高加解密,这个种子的长度较短,存储,分配都比较容易。
在实际使用中,密码设计者往往希望设计出一个滚动密钥生成器,使得密钥经其扩展成的密钥流序列具有如下性质:极大的周期、良好的统计特性、抗线性分析和抗统计分析。

分组密码与序列密码的区别有无记忆性。(分组密码有,序列无)。

ZUC

祖冲之序列密码算法(简称ZUC 算法)是由我国自主设计的密码算法,包括祖冲之算法、加密算法128-EEA3和完整性算法128-EIA3。2004年3GPP (The 3rd Generation Partner Project)启动LTE(Long Term Evolution)计划,2010年底LTE被指定为第四代移动通信标准,简称4G通信标准。安全是LTE的关键技术,并预留密码算法的接口。2011年,我国推荐ZUC算法的128-EEA3加密算法和128-EIA3完整性算法成为3GPPLTE 保密性和完整性算法标准,即第四代移动通信加密标准,这是第一个成为国际标准的我国自主研制的密码算法,对我国电子信息产业具有非常重要的意义。2012年,ZUC 算法被发布为国家密码行业标准,2016年被发布为国家标准。

算法结构

ZUC 算法是一种面向字的序列密码,该算法以一个 128位的密钥和一个128位的初始变量作为输入,一串 32位字的密钥序列作为输出,输出的密钥序列可以用来加密或解密。ZUC 算法的总体结构如下图所示,由一个顶层的16段的LFSR、中间层比特重组(简称BR)和底层非线性函数F组成。

初始化阶段:算法运行但不产出
首先把128bit的密钥k和初始变量IV加载到LFSR中,两个32位R1,R2全部清零,然后执行32轮下列操作。
(1):按上诉内容将密钥、初始变量以及常数加载到LFSR各单元中;
(2):初始化记忆单位位R1=R2=0
(3):for i=0 to 31 do
-Bitreorganization();
-Z=F(X0 , X1, X2);
-LFSRWithInitialishtionMode(Z>>1)。
其中,>>表示32比特字右循环移位。
工作阶段:每个时钟脉冲会产生一个32位字的输出。
初始化阶段后,算法进行工作阶段。算法执行一次下面操作,并丢弃函数F的输出W.
(1)Bitreorganization();
(2)F(X0 , X1, X2); //本次执行,F丢弃输出
(3)LFSRWithInitialishtionMode
接着算法进行产生密钥流阶段,也就是说,将下面的操作运行一次会输出一个32位的字Z:
KeystreanmGeneration()
(1) Bitreorganization();
(2)Z=F(X0,X1,X2)⊕X3Z=F(X0 , X1, X2)\oplus X3Z=F(X0,X1,X2)⊕X3
(3)LFSRWithInitialishtionMode()
输出的32位密钥序列Z可以用来对信息初始变量和完整性认证

算法描述

ZUC 算法结构分为上、中、下三层,分别为LFSR、BR、非线性函数F。
1、LSRF初始化模块LFSRWithInitialishtionMode()
LFSR包括16个31位寄存器单元变量s0,s1,s2,…,s15,有初始化模式和工作模式。
(1)初始化模式。
在初始化模式下,LFSR接收一个31位的输入字u,而u是通过去掉非线性函数F输出的32位字w的最右边的位获得的。也就是u=w>>1,即循环右移1位。初始化模式详细步骤如下。

(2)工作模式
在此模式下,LFSR 不再接收任何输入,其工作如下。

2,比特重组模块 Bitreorganization()
Bitreorganization表示为BR层,该层从LFSR 特定的8个单元中抽取128位,形成4个32位的字,这里的前3个字会在底层的非线性函数F中使用,最后一个字将涉及产生密钥流,以供下层非线性函数F和密钥输出使用。假设s0,s2,s5,s7,s9,s11,s14,s15是 LFSR里的特定8个单元,比特重组模块按如下方式形成4个32位的字X0,X1,X2,X3,详细步骤如下。

3、非线性函数F
W=F(X0 , X1, X2)为非线性函数,非线性函数F包括两个32位的记忆单元R1和R2,。F的输入为X0,X1和X2来自比特重组的输出,然后F输出一个32位的字W,函数F的具体过程如下:

其中,“田”为模2^32的加法,S表示32x32位的S盒;L1,L2是线性变换。
S盒由4个并列的8x8的S盒组成,共32x32,即S=(S0,S1,S2,S3),这里S0=S2,S1=S3。
L1,L2是32位到32位的线性变换,其定义为

带妹妹学密码系列4---流密码(ZUC)相关推荐

  1. 带妹妹学密码系列三 ——分组密码(二)

    在分组密码(一)(分组密码(一))中介绍了分组密码的基础知识,在该章节中,我将介绍具体的密码方案,希望通过具体方案的学习,对分组密码有更深的认识.对于使用到的基础知识,在该章不再累述,有需要的朋友请看 ...

  2. 带你学MySQL系列 | “存储过程”学不会,那是你没有看这篇文章!

    目录 1.存储过程的相关概念 什么是存储过程: 类似于java中的方法,python中的函数. 使用存储过程的好处: 1.提高代码的重用性: 2.简化操作: 3.减少了编译次数,并且减少了和数据库服务 ...

  3. 带你学MySQL系列 | 什么是数据定义语言(DDL)呢?

    如果你是刚刚学习MySQL的小白,在你看这篇文章之前,请先看看下面这些文章.有些知识你可能掌握起来有点困难,但请相信我,按照我提供的这个学习流程,反复去看,肯定可以看明白的,这样就不至于到了最后某些知 ...

  4. 带你学MySQL系列 | 困扰MySQL初学者的分组聚合查询,我终于讲明白了!

    1.分组查询的原理图 对上述原始数据,按照DEPARTMENT_ID(员工id)分组统计SALARY(薪水)的平均值. 上述原理写成代码,应该怎么写呢? select department_id,av ...

  5. Carson带你学Android:这是一份全面详细的WebView学习攻略

    前言 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 那么这种该如何实现呢?其实这是Android里一个叫WebView组件实现 今天, ...

  6. Carson带你学Android:你要的WebView与 JS 交互方式都在这里了

    前言 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝.京东.聚划算等等,如下图 上述功能是由Android的WebView实现的,其中涉及到Android客户端与 ...

  7. Carson带你学Android:RxJava过滤操作符

    前言 Rxjava由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. 今天,我将为大家详细介绍RxJava操作符中最常用的 过滤操作符,希望你们会 ...

  8. python调用按键精灵插件_【师兄带你学Python-1】你会涮火锅吗?

    大家好,我是狐狸博士.从今天起,我来和大家聊聊Python自学以及助力咱们科(Rí)研(Cháng)工作的那些事儿.如果你想事半功倍.想按时下班.想按时毕业,再或者你想成为大神玩转数据,请千万不要错过 ...

  9. Carson带你学Android:图文详解RxJava背压策略

    前言 Rxjava,由于其基于事件流的链式调用.逻辑简洁 & 使用简单的特点,深受各大 Android开发者的欢迎. 本文主要讲解的是RxJava中的 背压控制策略,希望你们会喜欢. Cars ...

  10. Carson带你学Android:手把手带你入门跨平台UI开发框架Flutter

    前言 Flutter 作为Google出品的一个新兴的跨平台移动客户端UI开发框架,正在被越来越多的开发者和组织使用,包括阿里的咸鱼.腾讯的微信等. 今天,我将献上一份 <全面 & 详细 ...

最新文章

  1. MATLAB【十四】————遍历三层文件夹操作
  2. apache用户认证
  3. k8s入门系列之介绍篇
  4. Linux上vi的使用教程
  5. 海天学院的打造IT人才讲座准备
  6. java语言程序设计考点_计算机二级考试Java语言程序设计考点:关键字
  7. java Socket Tcp示例三则(服务端处理数据、上传文件)
  8. Python 数据分析三剑客之 Matplotlib(九):极区图 / 极坐标图 / 雷达图的绘制
  9. 子主题function php,php – 带有依赖项的子主题
  10. vue在html中写style,vue开发之style(六)(CSS页面布局之样式、背景、文字)
  11. 微课|中学生可以这样学Python(例11.2):tkinter猜数游戏(3)
  12. vue 子级拿值_Vue 父组件主动获取子组件的值,子组件主动获取父组件的值
  13. docker的安装与加速器的配置
  14. js变量按照存储方式区分,有哪些类型,并表述其特点
  15. MyEclipse 中各种 libraries 的含义
  16. SVN创建分支-查看分支创建之前文件的历史记录
  17. vba中FreezePanes(冻结窗格)用法
  18. 让AI做作业:基于PaddleNLP-Taskflow的错别字单项测试
  19. C# 文字视频生成器
  20. 提问 未来计算机的发展趋势是什么,未来计算机的发展趋势是什么?

热门文章

  1. matlab好看的字体,[转载]最合适写代码的字体
  2. latex 之好看的字体格式
  3. 地铁应急指挥系统解决方案
  4. WIN10专业版如何调整系统字体大小
  5. [bzoj1001]狼抓兔子 最小割
  6. (笔记总结)串行通信接口标准
  7. 使用Python的pandas库操作Excel
  8. Ubuntu18.04 安装 Anaconda3和卸载Anaconda3
  9. 国外经济学期刊分类汇总(经济学、统计学、精算学和金融计量方面)
  10. 常用公差配合表图_车间里常用的机械测量工具竟然这么多?涨知识