中国密码算法与NIST标准对比

news2024/10/6 4:07:07

1. 引言

NIST定义AES为标准的对称密钥加密算法。但NIST被指出可能在加密算法中添加NSA后门。为此,在中国,ShāngMì (SM) 系列密码算法,作为TLS 1.3集成和无线认证的备选方案:

  • SM2:定义了认证(签名)
  • SM3:定义了哈希函数
  • SM4:定义了加密。由Lü Shuwang于2007年发明,并于2016年称为国标(GB/T 32907-2016)。同时定义在RFC 89998中:
    在这里插入图片描述

2. SM2

SM2是与ECDSA、EdDSA、RSA等价的签名方案:
在这里插入图片描述
最快的签名方案是ECDSA(P256),其签名速度比CurveSM2快10倍多。但SM2的签名速度也还可以,要比RSA签名速度快10倍。而验签速度,ECDSA的验签速度要比SM2快2倍。【下图源自https://asecuritysite.com/openssl/openssl3_b2】
在这里插入图片描述

3. SM3

SM3提供了256位哈希:
在这里插入图片描述
SM3是主流哈希中最慢的哈希算法之一,其速度约为SHA-1的37%:【下图源自https://asecuritysite.com/openssl/openssl_full2b】
在这里插入图片描述
以“Hello”哈希为例:

echo -n "Hello" | openssl dgst -sm3
dc74f051ad5bc19ba721bf0023e10de03bae29bbe013c43988bae55828bceb

4. SM4

SM4加密算法,其block size为128为,加密密钥为128位:
在这里插入图片描述
每个block数据有32轮处理。此外,可在IV(Initialisation Vector)中添加128位的salt值。
总体来首,SM4的性能不如AES和Cha-Cha20。AES-128-ECD的速度约是SM4-ECB的100倍:【下图源自https://asecuritysite.com/openssl/openssl3_b】
在这里插入图片描述
SM4示例代码为:

import os
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
import sys
message="Hello"
keysize=16
iv = os.urandom(16)
mode=0
if (len(sys.argv)>1):
 message=str(sys.argv[1])
if (len(sys.argv)>2):
 mode=int(sys.argv[2])
key = os.urandom(keysize)
padder = padding.PKCS7(128).padder()
unpadder = padding.PKCS7(128).unpadder()
cipher=None
if (mode==0): 
 cipher = Cipher(algorithms.SM4(key), modes.CBC(iv))
if (mode==1): 
 cipher = Cipher(algorithms.SM4(key), modes.OFB(iv))
if (mode==2): 
 cipher = Cipher(algorithms.SM4(key), modes.CFB(iv))
if (mode==3): 
 cipher = Cipher(algorithms.SM4(key), modes.CTR(iv))
if (mode==4): 
 cipher = Cipher(algorithms.SM4(key), modes.ECB())
encryptor = cipher.encryptor()

str=padder.update(message.encode())+padder.finalize()
ciphertext = encryptor.update(str ) + encryptor.finalize()
# Now decrypt
decryptor = cipher.decryptor()

rtn=unpadder.update(decryptor.update(ciphertext) + decryptor.finalize())+unpadder.finalize() 
 
print("Type:\t\t\t",cipher.algorithm.name)
print("Mode:\t\t\t",cipher.mode.name)
print("Message:\t\t",message)
print("Message with padding:\t",str)
print("\nKey:\t\t\t",key.hex())
if (mode!=4): print("IV:\t\t\t",iv.hex())
print("\nCipher:\t\t\t",ciphertext.hex())
print("Decrypt:\t\t",rtn.decode())

运行示例为:

Type:    SM4
Mode:    CBC
Message:   Hello
Message with padding:  b'Hello\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b\x0b'
Key:    ff010929f29f618ea5181a6a2e9de7a0
IV:    56f8a40da11cd93a67172311470879c3
Cipher:    292994cf3bf587e2b9f020a6c94026c1
Decrypt:   Hello

SM4也是OpenSSL 3.X的核心组件:
在这里插入图片描述

5. 结论

  • SM2签名算法,签名速度要比ECDSA(P256)慢10倍。
  • SM3哈希算法,哈希运算用时是SHA-1的3倍。
  • SM4对称加密算法,比AES要慢很多。原因可能在于对AES有很多处理器加速。

参考资料

[1] How Do The Chinese Ciphers Compare with NIST Standards?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1136713.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

薅!语雀致歉送6个月会员;万字教程讲透AI视频生成;提示词14个黄金设计法则;吴恩达AI职业规划指南 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 讯飞发布星火认知大模型 V3.0,并推出多款大模型产品 10月24日,科大讯飞正式发布「星火认知大模型V3.0」&#…

layui框架实战案例(23):select编辑回显内容及事件调用

layUI框架实战案例系列文章 layui框架实战案例(21):layui上传的哪些事(layui.upload组件、 file文件域、php后台上传)layui框架实战案例(20):常用条件判断和信息展示技巧(图片预览、动态表格、短信已读未读、链接分享、信息脱敏、内置框架页)layui框架实…

【经验分享】openGauss容灾集群搭建

gs_sdr命令代码解读 背景 openGauss推出了容灾架构,相比之前的一个集群主从架构,而容灾架构是两个集群间的数据同步。为了更深入了解其原理,本文试图通过阅读gs_sdr命令相关的代码来学习下相关的各种操作。 1.容灾搭建过程可以参考&#xf…

Ragnar-lothbrok 靶机

Ragnar-lothbrok 信息搜集 存活检测 详细扫描 后台网页扫描 网站信息搜集 secret “秘密”网页 将密文保存到 password.txt 此页面使用了 wordpress CMS 疑似用户 ragnar wpscan 也爆破出了用户 ragnar wpscan --url http://10.4.7.155/wordpress/ --enumerate u 密码获…

Node.js中的单线程服务器

为了解决多线程服务器在高并发的I/O密集型应用中的不足,同时避免早期简单单线程服务器的性能障碍,Node.js采用了基于"事件循环"的非阻塞式单线程模型,实现了如下两个目标: (1)保证每个请求都可以…

外汇天眼:获利数倍、财务自由不是梦? 小心网络投资诈骗4阶段!

近年来网络投资愈来愈热络,我们经常看到有人因做加密货币、外汇交易而致富的报道,并开始寻找可以获利的投资机会与渠道。 然而,诈骗集团也注意到这个趋势,因此透过假冒经纪商或开设黑平台等方式,伺机获取不法所得。 有…

Github.io个人主页模板(进阶版)

网上很多博客感觉是有点Outdate了,而且通用性不强,希望这篇博客能给你帮助。 【保姆级教程】手把手教你用github制作学术个人主页(学者必备)_github个人主页模板-CSDN博客 【GitHub】用Jekyll模板快速制作github.io学术主页 - 知…

JVS低代码表单引擎之文本框的强大作用,建议收藏!

表单是低代码最基础的数据输入的方式,其中文本框是配置话表单的最基础的业务能力组件之一,主要用于收集和展示用户录入的文本类的信息,例如名称、地址、描述说明等等。 那么我们接下来分几个方面分别对文本框的使用进行讲解。 基础功能 拥有…

初识Java 16-1 字符串

目录 字符串的常量和变量 不变的String常量 String变量 重载的和更快的StringBuilder 容易忽略的递归现象 对字符串的操作 格式化输出 System.out.format() Formatter类 格式说明符 Formatter转换 String.format() 新特性:文本块 本笔记参考自&#xff…

Creaform形创HandySCAN MAX l Elite三维扫描仪便携式3D测量解决方案

CASAIM中科院广州电子智能制造事业部连续多年荣获形创Creaform战略级代理商证书。战略级代理商是形创Creaform最高级别的合作伙伴。 2023年CASAIM中科院广州电子智能制造事业部的形创Creaform战略级代理商证书: Creaform 形创是便携式三维测量解决方案和工程服务领…

使用mac自带VNC公网远程控制macOS

公网远程控制macOS【使用mac自带VNC】 文章目录 公网远程控制macOS【使用mac自带VNC】前言1. 测试局域网内远程控制1.1 macOS打开屏幕共享1.2 测试局域网内VNC远程控制 2. 测试公网远程控制2.1 macOS安装配置cpolar内网穿透2.2 创建tcp隧道,指向5900端口 3. 测试公网…

人工智能的发展方向:探索智能未来的无限可能

原创 | 文 BFT机器人 人工智能,简称AI,是一门专注于研究计算机如何能像人类一样思考、学习和解决问题的科学。它的创造初衷是构建一个智能系统,能模仿、模拟甚至实现人工智能的各种功能和行为,随着科技的持续进步,人工…

TSINGSEE青犀智能分析网关裸土覆盖算法如何做到防范山体滑坡?

在雨水季节,特别是山区,十分容易发生山体滑坡现象,会导致山村、铁路、公路、房屋、甚至城镇被冲毁,造成严重的人员伤亡和财产损失。而TSINGSEE青犀智能分析网关裸土覆盖算法是一种利用图像处理技术来评估裸露土壤面积和裸露程度的…

VMware打开共享虚拟机后找不到/mnt/hgfs/文件夹,以及不能拖拽/复制粘贴等操作,ubuntu不能安装VMware tools

问题原因 我的问题出现原因是,安装ubuntn虚拟机的时候VMware tools没有安装好,需要重新安装,但安装选项是暗的,不能操作。 类似这种情况,虚拟机开启时也是,因为我虚拟机已经装好了,开启时是亮…

【JAVA】:万字长篇带你了解JAVA并发编程【二】

目录 【JAVA】:万字长篇带你了解JAVA并发编程【二】3. 线程池池化技术线程池的概念与作用什么是线程池?优点 Executor框架Executor框架组成部分工作任务抽象接口和类 线程池的生命周期非核心线程和核心线程ThreadPoolExecutor线程池的工作流常见的线程池…

快速解决msvcp140.dll丢失问题的5个方法,轻松修复dll问题

在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是“msvcp140.dll丢失”。那么,msvcp140.dll究竟是什么?它丢失需要怎么修复呢?本文将从多个角度对这一问题进行详细解析。 一、msvcp140.dll是什么 msvcp14…

C/C++输出整数 2020年9月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析

目录 C/C输出整数 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序编写 四、程序说明 五、运行结果 六、考点分析 C/C输出整数 2020年9月 C/C编程等级考试一级编程题 一、题目要求 1、编程实现 输入四个整数,把输入的第三、第四个整数输出…

Jmeter(十四):跨线程组传递jmeter变量及cookie的处理详解

setUp线程组 setUp thread group 一种特殊类型的线程组,用于在执行常规线程组之前执行一些必要的操作。 在 setup线程组下提到的线程行为与普通线程组完全相同。不同的是执行顺序--- 它会在普通线程组执行之前被触发; 应用场景举例: A、测…

21.7 Python 使用Request库

Request库可以用来发送各种HTTP请求,该框架的特点是简单易用,同时支持同步和异步请求,支持HTTP协议的各种方法和重定向。它还支持Cookie、HTTPS和认证等特性。 Request库的使用非常广泛,可以用于网络爬虫、API调用、网站测试等场景…

vue3 echarts实现k线

文章目录 echarts实现k线核心代码完整代码 echarts实现k线 安装 npm install echarts实现效果 没有添加成交量和均线 核心代码 引入echarts echartsData表示echarts数据 这样写是为了方便点击时间切换k线数据 window.addEventListener(“resize”, () > { chart.resi…