(记得关注哦)国产商用密码:编程实现分组密码体制中的国密算法SM4。

一、研究 SM4 算法
(一)SM4 算法的分组长度、密钥长度、S 盒、轮函数
①分组长度和密钥长度:
分组长度:SM4 算法的分组长度为 128 位(即 16 字节),这意味着它每次加密或解密的数据块
大小为 128 位。
密钥长度:SM4 算法的密钥长度为 128 位(即 16 字节),与分组长度相同。
② S 盒:
SM4 算法使用了一个固定的 256 字节的 S 盒(Substitution Box),用于将输入的每个字节替换
为另一个字节,增加了密码算法的非线性性。S 盒中的每个元素都是一个 8 位字节,取值范围为
0 到 255。S 盒的具体值是经过严密设计的,并且经过了代换-置换网络(Substitution
Permutation Network)的多轮迭代。
③轮函数:
SM4 算法中的轮函数是核心部分,它在每轮加密过程中对数据进行变换和混淆。
轮函数包括了多次的非线性变换、线性变换和密钥混合操作,以增加算法的安全性。具体来说,
轮函数通过对输入数据进行 S 盒替换、线性变换、密钥加操作等步骤,来产生输出。
(二)分组长度、密钥长度、S 盒、轮函数在加密和解
密过程中的作用。
SM4 算法的各个组成部分发挥着不同的作用:
①分组长度:加密和解密过程中,数据被分成固定长度的数据块(128 位或 16 字节),称为分
组。这个分组长度决定了一次加密或解密操作处理的数据量。
密钥长度:密钥长度决定了密钥的复杂度和算法的安全性。在加密和解密过程中,密钥被用于生
成轮密钥和混合数据块,对数据进行加密和解密。
② S 盒:在加密和解密过程中,S 盒用于进行字节替换操作。具体来说,每个输入字节都会在 S
盒中查找对应的替换值,以增加算法的非线性性。S 盒中的字节替换是 SM4 算法中的一个重要步 骤,有助于混淆输入数据,增加加密算法的安全性。
③轮函数:轮函数是 SM4 算法中最核心的部分,它在加密和解密过程的每一轮中都会被调用。轮
函数通过一系列的变换和操作来对数据进行混淆和加密。
在加密过程中,轮函数通过对输入数据的非线性变换、线性变换和密钥混合等操作,生成输出数
据。在解密过程中,轮函数的作用类似,但是需要反向使用轮密钥和逆变换,以实现解密操作。
总的来说,SM4 算法的分组长度、密钥长度、S 盒和轮函数等组成部分在加密和解密过程中协
同工作,通过一系列的变换和操作来保证数据的安全性和机密性。分组长度决定了一次加密或解
密操作处理的数据量,密钥长度决定了密钥的复杂度和算法的安全性,S 盒用于进行字节替换
操作以增加非线性性,而轮函数则是实现加密和解密的核心部分,通过对数据进行混淆和加密
来保证数据的安全性。
二、实现 SM4 算法:
(一)由于篇幅有限,源码由附件给出,在此仅展示实现 SM4 算法的加
密、解密及密钥扩展功能的核心代码及原理
①加密算法实现
SM4 算法的加密过程,主要包括以下几个步骤:
明文分块:将输入的明文分成每个 8 字节(64 位)一块,存储在名为 cipher 的字符串数组中
的前四个元素中。密钥扩展:调用 KeyExtension 函数生成轮密钥,将生成的轮密钥存储在名为
rks 的字符串中。轮加密:循环执行 32 轮的加密操作。在每一轮中,进行一系列的 XOR 和 T 运
算,然后将结果存储在 cipher 数组中的相应位置。输出状态:在每一轮加密后,输出当前轮的
轮密钥和输出状态。返回密文:最后,将最后一轮的输出状态连接起来,形成最终的密文,并将
其作为函数的返回值。将 SM4 算法的加密过程分为明文分块、密钥扩展、轮加密和输出状态等步
骤,实现了对输入明文的加密操作。
②解密算法的实现
主要包括以下几个步骤:
密文分块:将输入的密文分成每个 8 字节(64 位)一块,存储在名为 plain 的字符串数组中的
前四个元素中。密钥扩展:调用 KeyExtension 函数生成轮密钥,将生成的轮密钥存储在名为
rks 的字符串中。轮解密:循环执行 32 轮的解密操作。在每一轮中,进行一系列的 XOR 和 T 运
算,然后将结果存储在 plain 数组中的相应位置。输出状态:在每一轮解密后,输出当前轮的
轮密钥和输出状态。返回明文:最后,将最后一轮的输出状态连接起来,形成最终的明文,并将
其作为函数的返回值。将 SM4 算法的解密过程分为密文分块、密钥扩展、轮解密和输出状态等步
骤,实现了对输入密文的解密操作。
③ 密钥扩展算法实现
密钥扩展过程,具体步骤如下:常量 FK 和 CK 的定义:定义了常量 FK 和 CK,分别用于密钥
扩展过程中的异或运算和 T 运算。初始轮密钥生成:将输入的主密钥 MK 分为每个 8 字节(64
位)一块,分别与 FK 进行异或运算,得到初始的四个轮密钥,并存储在名为 K 的字符串数组中
的前四个元素中。轮密钥扩展:循环执行 32 轮的密钥扩展操作。在每一轮中,进行一系列的 XOR
和 T2 运算,然后将结果存储在 K 数组中的相应位置,并将其连接起来形成完整的轮密钥序列。
返回轮密钥序列:将所有的轮密钥连接起来,形成完整的轮密钥序列,并将其作为函数的返回
值。实现了 SM4 算法中的密钥扩展过程,包括初始轮密钥的生成和 32 轮的轮密钥扩展操作,生
成的轮密钥序列用于加密和解密过程中的轮密钥异或运算。
三、功能测试和验证
(一)编写测试用例,测试用例应该覆盖各种情况,包括不同长度的明
文和密钥、不同的工作模式(如 ECB、CBC、CTR 等)、边界情况。
①不同长度的明文和密钥
明文:0x012345
密钥:0x0123456789ABCDEFFEDCBA9876543210
明文:0x0123456789ABCDEFFEDCBA9876543210
密钥:0x012345
总结:在不足或超过 32 位时进行填充或截断
②不同工作模式
ECB 模式:
明文:0x0123456789ABCDEFFEDCBA9876543210
密钥:0x0123456789ABCDEFFEDCBA9876543210
CBC 模式:
初始向量:0x0123456789ABCDEFFEDCBA9876543210
明文:0x0123456789ABCDEFFEDCBA9876543210
密钥:0x9876543210ABCDEFFEDCBA9876543210
CTR 模式:
明文:0x0123456789ABCDEFFEDCBA9876543210 密钥:0x0123456789ABCDEFFEDCBA9876543210
初始计数器:0x0000000000000000
综上,我设计的 SM4 算法可以应对不同的工作模式
③边界情况
明文和密钥均为全 0:
明文:0x00000000000000000000000000000000
密钥:0x00000000000000000000000000000000
明文和密钥均为全 F:
明文:0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
密钥:0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
四、性能评估及优化 (一)SM4 算法进行性能评估
①在代码添加可以检查时间及占用内存的算法,然后测试
测试结果如下:
cpu 实时使用情况:
运行情况:
(二)比较不同实现方式的性能,并探讨优化算法的方法,提高其效率
和性能
①针对代码优化的方法:
减少字符串拼接操作:在 NLTransform、LTransform、L2Transform、T、T2 函数中,存在大
量的字符串拼接操作。这些操作可能会导致内存的频繁分配和释放,影响性能。可以考虑使用字
符数组或字符串缓冲区来减少拼接操作。
减少字符串与数值的转换:在 HexToDec、BinToHex、int_to_string 函数中,存在字符串
与数值之间的转换操作。这些操作可以直接在数值之间进行,避免额外的转换开销。
减少字符串遍历次数:在 HexToBin、XOR 函数中,存在对字符串的多次遍历操作。可以尝
试优化算法,减少遍历的次数,从而降低时间复杂度。
内存管理优化:在加密和解密过程中,通过 string 数组存储中间结果,可能会导致频繁
的内存分配和释放。可以考虑使用固定大小的缓冲区来优化内存管理。
②经过优化的代码,主要包括减少字符串拼接操作、减少字符串与数值的转换以及避免重复计
算。成果展示:
总结:比较看出①加密快了 2ms② 解密快了 7ms
五、安全性分析
(一)对于我设计的代码 SM4 算法进行安全性分析,评估其抵抗各种攻
击(如差分攻击、线性攻击、穷举搜索攻击等)的能力
①针对差分攻击的安全评估:
增加非线性变换的复杂性: 通过 NLTransform 函数实现了非线性变换,使用了预定义的
S 盒(Substitution Box),增加了混淆度和非线性性质。
增加轮数: 通过 T 函数和 T2 函数对明文进行了多轮的变换,每轮使用了不同的密钥轮
函数,增加了加密的复杂性和安全性。
密钥扩展的增强: KeyExtension 函数对密钥进行了扩展,使用了多轮的迭代运算,引入
了复杂的非线性变换,增强了密钥的复杂性和安全性。
②针对线性攻击的安全性评估:
增加非线性变换:类似于对抗差分攻击的措施,通过 NLTransform 函数实现了 S 盒的非
线性变换,增加了算法的非线性特性。
增加轮数:与差分攻击相同,增加了多轮的变换,每轮的轮函数都引入了非线性变换和密
钥混淆,增加了算法的复杂性和安全性。 ③针对穷举搜索攻击的安全评估:
增加密钥长度:密钥的长度为 128 位(32 个十六进制字符),足够安全性和抗穷举搜索
攻击。
总结:我的代码通过增加非线性变换、增加轮数和保证足够的密钥长度,实现了一定程度上
的对抗差分攻击、线性攻击和穷举搜索攻击的能力
(二)调研 SM4 算法的安全特性和安全性分析方法,
并提出改进建议
①安全特性和安全性分析方法的调研发现:
SM4 算法是我国自主研制的分组密码算法,算法简单,易于在件和软件上实现,到目前为
止,SM4 算法还没有被攻破,目前仍然是安全 [3] 。SM4 加密算法以 128bit 的数据块为单位
与 128bit 的密钥实现异或、移位的线性变换和采用 S 盒的非线性变换,S 盒是一种非线
性结构,将明文块与轮密钥最大限度的混淆和扩散,增加明文与密文之间复杂程度,从而有效
地抵抗线性分析和差分分析。SM4 算法与 Feistel 网络和 SP 网络相比,以降低线性扩散
和差分扩散的速度提高非线性程度和降低芯片集成度。若考虑采用穷举攻击法攻击需要 2128
次运算,计算量很大,而 DES 算法只需 256 次运算,要想用穷举攻击法破解需要相当长的
时间,目前使用该破解方法是不可实现的。但 SM4 算法加密和解密使用同一密钥,收发双方
密钥交换时存在的安全隐患,这必将带来数据加密的安全问题。
基于这种考虑很多学者提出了使用混合的加密算法,Liu Hong [4] 提出用混合混沌系统和椭
圆密码曲线进行混合加密来处理图像问题,对图像加密安全性做全面分析,证明该混合加密方
案的可行性。马擎宇,张东 [5] 提出将 R ijndael 和椭圆曲线密码体制的混合加密算法应用到
遥感数据加密,使用 AES 对要传输的遥感数据进行加密,同时使用 ECC 加密 AES 密钥,这样
既能快速地对遥测数据进行加密,又能很好地解决密钥的管理和分配问题。伍娟 [6] 提出基于国
密 SM4 和 SM2 的混合加密算法实现,利用商用密码的对称加密算法和非对称加密算法的优
点,进行混合加密,通过实验验证了方案的正确性。但一个算法性能的评价标准不应该只是单一
的从算法的安全性和运行效率来来考虑,还应该结合实际的应用环境从多方面权衡。 ② 改进建议:
增加轮数是一种有效的提高密码算法安全性的方式。增加 SM4 算法的轮数可以增加算法的
复杂度,使得密码分析攻击的难度大大增加。通过引入更多的轮数,每轮的混淆和扩散操作都会
增加,从而增强算法的抗攻击能力,如差分攻击和线性攻击等。
改进密钥扩展算法可以使生成的轮密钥更加随机和安全。密钥扩展算法的质量直接影响到算
法的整体安全性,因此改进密钥扩展算法,增加密钥的随机性和扩散性,是提高算法安全性的
关键步骤之一。优化 S 盒置换算法是提高密码算法混淆性和扩散性的重要途径之一。通过增加
S 盒的非线性程度,可以有效提高算法的抗差分攻击和线性攻击的能力,增强算法的安全性。
增强随机性可以使密码算法更加不可预测,从而提高算法的安全性。在算法中引入更多的随
机性因素,如增加随机轮数、随机选择 S 盒等,可以增强算法的抗各种攻击的能力。密钥管理
的安全性直接关系到整个系统的安全性。加强密钥管理的安全性包括密钥的生成、存储、传输和
销毁等环节。有效的密钥管理措施可以防止密钥泄露和被破解,保护系统的安全性。通过增加轮
数、改进密钥扩展算法、优化 S 盒置换算法、增强随机性和加强密钥管理等措施,可以显著提高
SM4 算法的安全性,使其更加适用于各种安全要求较高的场景。
期末报告总结:
  截至此时,本学期计算机密码学期末报告顺利完成,总用时 4 天 16 小时。从报告的开始到
结束,读了数十篇论文,看了上百篇博客,访问的网站内容涉及了各种密码学算法、安全漏洞和
攻击手法。有时候,某个概念理解起来比较困难,需要反复阅读和思考,某个算法或漏洞的理解
需要通过实际操作来加深,需要花费更多的时间去尝试和实,我在阅读大量的文献和博客花极
大的耐心和毅力,故余虽愚,卒获有所闻。
  在研究过程中,深入了解了 TLS 协议的基本原理、常见攻击类型和防御措施。在我的报告
中,我详细介绍了 SM4 算法及其安全特性,并提出了改进建议,例如增加轮数、改进密钥扩展
算法、优化 S 盒置换算法、增强随机性和加强密钥管理等。这些改进措施可以有效提高 SM4 算
法的安全性,使其更适用于各种安全要求较高的场景。
此外,我还在第一部分(必选项)介绍了 BREACH 漏洞,对其原理和影响进行了分析,并
提出了相应的防御措施。了解了 BREACH 漏洞的攻击方式和影响范围,有助于我更好地加强对网
络安全的防护措施,保护个人和组织的信息安全。
  在整个研究过程中,我不仅学到了专业知识,还提高了解决问题的能力和分析思维。通过深 入研究和探索,我对密码学和网络安全有了更深入的理解,特别是对于国密 SM4 的调研过程
中,我第一次认识到国产商用密码的伟大。一位前辈的博客下的一段话更我震撼不已——“没有
网络安全就没有国家安全,没有信息化就没有现代化。世界一流强国,必然是世界一流的网络强
国。信息网络基础设施及其核心技术是赢得未来的关键,网络安全买不来、等不来、要不来”。
  由衷倾佩推广国密算法的前辈们的毅力,支持国密,研究国密,使用国密。在未来,我将继
续保持对密码学领域的热情和探索,不断提升自己的专业能力,为信息安全事业贡献自己的一
份力量,让我们接过前辈的旗帜,为建设网络强国添砖加瓦。共勉!同时,这次艰辛的期末报告
经历也将成为我人生道路上宝贵的财富,激励我在面对困难时永不放弃,勇往直前。
  • 11
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值