国产密码算法及应用
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
国产密码算法及应用
商用密码,是指能够实现商用密码算法的加密、解密和认证等功能的技术。(包括密码算法编程技术和密码算法芯片、加密卡等的实现技术)。商用密码技术是商用密码的核心,国家将商用密码技术列入国家秘密,任何单位和个人都有责任和义务保护商用密码技术的秘密。
商用密码的应用领域十分广泛,主要用于对不涉及国家秘密内容但又具有敏感性的内部信息、行政事务信息、经济信息等进行加密保护。比如各种安全认证、网上银行、数字签名等。
为了保障商用密码安全,国家商用密码管理办公室制定了一系列密码标准,包括SSF33、SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法等等。其中SSF33、SM1、SM4、SM7、祖冲之密码
是对称算法;SM2、SM9是非对称算法;SM3是哈希算法。
目前已经公布算法文本的包括SM2椭圆曲线公钥密码算法、SM3密码杂凑算法、SM4分组密码算法等。
一、国密算法简介
1.SM1对称密码
国密SM1算法是由国家密码管理局编制的一种商用密码分组标准对称算法,分组长度为128位,密钥长度都为128比特,算法安全
保密强度及相关软硬件实现性能与AES相当,算法不公开,仅以IP 核的形式存在于芯片中。
采用该算法已经研制了系列芯片、智能IC卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括国家政务通、警务通等重要领域)。
2.SM2椭圆曲线公钥密码算法
SM2算法就是ECC椭圆曲线密码机制,但在签名、密钥交换方面不同于ECDSA、ECDH等国际标准,而是采取了更为安全的机制。国密SM2算法标准包括4个部分,第1部分为总则,主要介绍了ECC基本的算法描述,包括素数域和二元扩域两种算法描述,第2部分为数字签名算法,这个算法不同于ECDSA算法,其计算量大,也比ECDSA复杂些,也许这样会更安全吧,第3部分为密钥交换协议,与ECDH功能相同,但复杂性高,计算量加大,第4部分为公钥加密算法,使用ECC公钥进行加密和ECC私钥进行加密算法,其实现上是在ECDH上分散出流密钥,之后与明文或者是密文进行异或运算,并没有采用第3部分的密钥交换协议产生的密钥。对于SM2算法的总体感觉,应该是国家发明,其计算上比国际上公布的ECC算法复杂,相对来说算法速度可能慢,但可能是更安全一点。
设需要发送的消息为比特串M,len为M的比特长度。为了对明文M进行加密,作为加密者的用户应实现以下运算步骤:
步骤1:用随机数发生器产生随机数k∈[1,n -1];
步骤2:计算椭圆曲线点C1=[k]G=(X1,Y1 ),将C1的数据类型转换为比特串;
步骤3:计算椭圆曲线点S=[h]P,若S是无穷远点,则报错;
步骤4:计算椭圆曲线点[k]P =(X2,Y2),将坐标X2,Y2的数据类型转换为比特串;
步骤5:计算t=KDF(x2ll y2,len),若t为全0比特串,则返回步骤1;
步骤6:计算C2 = M⊕t;
步骤7:计算C3=Hash(x2 ll M ll y2);
步骤8:输出密文C=C1 ll C2 ll C3。
2010年底,国家密码管理局公布了我国自主研制的“椭圆曲线公钥密码算法”(SM2算法)。为保障重要经济系统密码应用安全,国家密码管理局于2011年发布了《关于做好公钥密码算法升级工作的通知》,要求“自2011年3月1日期,在建和拟建公钥密码基础设施电子认证系统和密钥管理系统应使用SM2算法。自2011年7月1日起,投入运行并使用公钥密码的信息系统,应使用SM2算法。”近期,人民银行组织召开多次专题会议讨论研究金融领域国产加密算法升级
改造的相关工作。
3.SM3杂凑算法
又叫文摘算法,也有叫杂凑算法的。功能与MD5,SHA-1相同。产生256位的编码。该算法位不可逆的算法。具体算法也是保密。SM3
密码杂凑算法给出了杂凑函数算法的计算方法和计算步骤,并给出了运算示例。此算法适用于商用密码应用中的数字签名和验证,消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。在SM2、SM9标准中使用。此算法对输入长度小于2的64次方的比特消息,经过填充和迭代压缩,生成长度为256比特的杂凑值,其中使用了异或,模,模加,移位,与,或,非运算,由填充,迭代过程,消息扩展和压缩函数所构成。
SM3算法包括预处理、消息扩展和计算Hash值三部分。预处理部分由消息填充和消息分组两部分组成。首先将接收到的消息末尾填充一个“1”,再添加k个“0”,使得填充后的数据成为满足length = 448mod512bit的数据长度,再在末尾附上64bit消息长度的二进制表示数,然后将消息分成512bit的子块,最后将每个512bit的消息子块扩展成132个字用于Hash值的计算。SM3算法计算流程图如图所示。
SM3算法的Hash运算主要是在压缩函数部分,压缩函数共包含64轮,每轮包括12步运算,64轮循环计算结束后,再将计算结果与输入到本轮计算的初始数据进行异或运算,即上一次Hash运算的Hash值输出与输入到本轮计算的初始数据异或得到本次Hash值输出,Hn即为最终的Hash值,H0为设计者提供的初始值IV。
图 SM3算法流程图
4.SM4对称算法
此算法是一个分组算法,用于无线局域网产品。该算法的分组长度为128比特,密钥长度为128比特。加密算法与密钥扩展算法都采用32轮非线性迭代结构。解密算法与加密算法的结构相同,只是轮密钥的使用顺序相反,解密轮密钥是加密轮密钥的逆序。
定义反序变换R为:
R(A0,A1,A2,A3)=(A3,A2,A1,A0),A i∈Z322,i = 0,1,2,3。设明文输入为(X0,X1,X2,X3)∈(Z322)4,密文输出为(Y0,Y1,Y2,Y3)∈(Z322)4,轮密钥为rk i∈Z322。则本算法的加密变换为:
X i+4 = F(X i,X i+1,X i+2, X i+3,rk i)= Xi⊕T(X i+1⊕X i+2⊕ X i+3⊕rk i),i= 0,1,2,3 (31)
(Y0,Y1,Y2,Y3)= R(X32,X33,X34,X35)=(X35,X34,X33,X32)。
本算法的解密变换与加密变换结构相同,不同的仅是轮密钥的使