0%

ZUC(祖冲之)算法

前言

ZUC是一个对称流密码算法,其以中国古代著名数学家祖冲之的拼音(ZU Chongzhi)首字母命名,中文称作祖冲之算法。

这段时间在实现ZUC算法的驱动,ZUC是一个国产的密码算法集。包含了三个部分,分别是算法的描述,也就是如何产生密钥流的。然后就是保密性算法,用于对数据进行加解密。最后就是完整性算法,类似于MD5等的摘要算法,为给定的数据计算出一个唯一的消息认证码,用于确认消息在传递的过程中不被篡改。

ZUC算法于 2011 年 9 月正式被 3GPP SA全会通过,成为 3GPP LTE 第三套加密标准核心算法。ZUC算法是中国第一个成为国际密码标准的密码算法。

ZUC相关的国家标准文档可以在国家标准全文公开系统上面查询到。网址:http://www.gb688.cn/bzgk/gb/index

avatar

ZUC是一种流加密算法,按位进行加密,跟SNOW3G是一样的算法。也是一种对称加密算法,跟AES等对称算法不同的是,它加解密的流程是完全一样的。一般对称算法加密和解密流程会有稍微的差别,只是加解密的密钥是完全一样的。

GMSSL有关于ZUC算法的实现代码,可以参照标准和代码学习。不过在GMSSL中,仅仅实现了保密性算法的EVP,并没有实现完整性算法。不能直接使用OpenSSL调用完整性算法。zuctest.c文件给出了标准文档的数据测试用例。

算法描述

在线预览链接:

http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=8C41A3AEECCA52B5C0011C8010CF0715

这个部分给出了祖冲之算法的一般结构。

avatar

这一部分主要描述的是如何根据输入的初始密钥k和初始向量iv、以及输入数据的长度得到同等长度的密钥字。

保密性算法

在线预览链接:

http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=5D3CBA3ADEC7989344BD1E63006EF2B3

这个部分描述了保密性算法的输入与输出。
avatar

一般情况下,比如在LTE应用场景中,初始向量IV是根据给定的参数得到的,然后再计算出密钥流,结合输入数据计算加密结果。

avatar

在加密的过程中,由于密钥流都是按照字来输出的,所以除了最后一片数据外,每次加密的数据的长度最好都是4字节的整数倍。

完整性算法

在线预览链接:

http://c.gb688.cn/bzgk/gb/showGb?type=online&hcno=C6D60AE0A7578E970EF2280ABD49F4F0

这个部分描述了完整性算法的输入与输出。

avatar

跟保密性算法相同,初始向量IV也由具体的参数计算出来。

avatar

在计算的过程中,由于密钥流都是按照字来输出的,所以除了最后一片数据外,每次处理的数据的长度最好都是4字节的整数倍。

更多

根据算法的描述文档,结合GMSSL的软算法的实现,可以比较容易的实现算法流程。

对称算法的原理,其实主要还是基于计算机的异或操作,同样的数,连续两次跟相同的数进行异或,结果就是其本身。

数学科学是一门比较神奇的学科,根据其产生了许多的应用。

了解一个算法,最好的方法就是去看官方文档,中国的国家标准可以从上面那个网站查询到。对于美国的nist文档(比如AES、DES等算法文档),可以到https://www.nist.gov/网站查询,下面是AES算法文档链接: https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.197.pdf, 比较方便的是这个网站上面的文档是可以下载的,但是我们国家的标准网站上面的文档只能在线看,当然对于文档页数不多的,可以自己截图保存再自行导出pdf文件。


行动,才不会被动!

欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。

博客地址: https://fishmwei.github.io

掘金主页: https://juejin.cn/user/2084329776486919