加解密算法及国密算法介绍

国密算法sm4 CBC模式加解密 一.什么是CBC模式? CBC模式的全称是Cipher Block Chaining模式(密文分组链接模式),之所以叫这个名字,是因为密文分组像链条一样相互连接在一起。 在CBC模式中,首先将明文分组与前一个密文分组进行异或运算,然后再进行加密。 异或运算: 异或,英文为exclusive OR,缩写成xor 异或(xor)是一个数学运算符。它应用于逻辑运算。异或的数学符号为“⊕”,计算机符... 阅读详情

图片内容参看我的网站:www.waltersun.cn

引言

随着信息化的推进,信息安全越来越受到人们的重视。这篇文章简单介绍了常用的密码算法、原理、使用场景,简单比较国密算法,可作为业务使用的入门指导。

消息摘要

消息摘要算法,是指把消息映射到固定长度编码(结果的长度视摘要算法而定,比如sha-1是20字节,sha256和sm3是32字节)的一种单向、不可逆(即不能从摘要恢复消息)的算法,可用于校验消息完整性。一般原理是把消息分块,通过多轮迭代混淆,得到最终结果。算法在设计上要求给定消息m1,很难找到不同的消息m2,使得hash(m1)=hash(m2)。由于这个特性,摘要算法可以防止消息传输过程中失真或被篡改。

举个例子,Alice要发一段消息mA给Bob,Alice担心传输过程中发生意外,比如网线松动、电磁干扰,导致Bob收到的消息不完整或不正确,那么Alice可以把消息的摘要hA和消息mA一起发给Bob,Bob收到h和m后(因为hA和mA在传输过程中都有可能失真,所以这里记为h和m),计算hB=hash(m),如果hB=h,那么可以认为消息正确传输,即hB=hA=h,m=mA。

但是上述过程不能防止中间人篡改消息,如果中间人劫持消息,它可以篡改消息同时计算新的摘要,一起发给Bob,那么Bob就发现不了问题。要防篡改,Alice和Bob可以约定一个key,在做摘要时,同消息一起传入算法,即hash(m,key)。Bob收到消息后,使用相同的算法和key,可计算相同的摘要。由于中间人不知道key,他劫持并修改了消息,也不能计算出与消息一致的摘要。这就是HMAC算法。

目前常用摘要算法有sha1、sha256、md5。我国在2012年发布了sm3算法标准,算法把消息大小填充到32字节的倍数,按32字节一块进行多轮混淆,最终得到16字节的摘要。sm3使用了同sha-1/md5相同的迭代模式(Merkle-Damgard[1]),只是在处理每一块数据时使用了不同的混淆方法。谷歌公司在2017年使用110个GPU算了1年,找到相同摘要的两个消息[2],并已在多年前建议不要使用sha-1算法。md5的碰撞只需要一部近几年的智能手机花费30秒时间[2]。sha256算法相对安全,比特币的工作量证明正是用了sha256来实现的。

对称加密

对称,即加密和解密使用相同的密钥,主要分流加密和块加密。常见的DES,3DES,AES都是块加密算法,这里主要介绍块加密。

块加密算法把明文分块处理,通过可逆的混淆置换,得到一块长度相同的密文,接着处理下一块明文。如果把这些密文块拼在一起当作最终的密文,就是ECB块模式。这种模式下,密文块之间没有关系,可单独解密。解密的过程就是加密的逆过程。

ECB块模式是不安全的,相同的明文块加密会得到相同的密文块,容易被分析破解。如图3[3]所示,图的上半部分展示了把消息分为3个明文块(plaintext),独立加密得到3个密文块(ciphertext),下半部分展示了三个密文块独立解密。图4[3]展示了一种更安全的块模式:CBC。CBC模式下,前一个密文块会作为下一个明文块加密的输入。所以有些算法会让调用者提供一个初始化向量(IV),即加密第一块明文时需要的额外的参数,这个IV不需要保密,也不是必须,但是加密和解密必须一致。图5[3]展示了ECB模式和CBC模式的加密效果,ECB模式的密文还能区分出明文块,通俗的说,密文不够乱,混淆不够彻底。注意IV并不是加密算法本身的一部分,而是块模式的一部分。对称加密算法本身只关注块大小,如何加密单个明文块。

常见的DES算法密钥是8位,已不建议使用。3DES使用24字节密钥加密,实际则是把24字节拆分成3个8字节密钥,对DES简单的叠加。

密文块 = Ek3(Dk2(Ek1(明文块)))

明文块 = Dk1(Ek2(Dk3(密文块)))

k1、k2、k3表示24字节密钥拆分出来的3部分密钥,Ek1、Dk1分别表示以k1为密钥用DES算法加、解密。可以看出,如果k1=k2=k3,该算法等同于DES。

如果想知道DES的实现,但惧怕它的复杂性,或找不到通俗易懂的材料,可以看看SDES(Simplified DES)[4]算法。

我国在2012年发布了SM4对称加密算法。SM4的密钥长度为16字节,分组块长度为16字节。SM4与DES不同的是,它采用了非平衡Feistel结构,能更好的抵抗分析破解。

非对称加密

非对称算法普遍采用RSA。RSA算法依据了一些数论理论,1、大数分解是困难的;2、两个数m、c可以通过模运算(如费马小定理、中国余数理论)互相转换。

大概的过程是这样:Alice选择两个质数p、q,令n=p*q,选1<e<n, d,令(e,n)为公钥,(d,n)为私钥。其中e、d、p、q满足一定的运算关系[5][6]。Alice把公钥发给Bob,传输过程不需要加密;私钥由Alice自己保管。Bob使用公钥加密,Alice使用私钥解密。加解密时把消息/密文当作大数处理,运算过程如下所示。其中m就是消息,c是密文,m<n, c<n。这就是RSA加密对消息由长度限制的原因。这个算法的安全性在于知道了n,无法轻易的确定p和q。实际使用中的RSA位数,就是大数n的位数,位数越大越难分解。目前建议时所用>=2048位的rsa密钥。

签名,验签

由于RSA对消息长度的限制,不能用于加密大的消息,而且大数运算效率低,所以实际使用中RSA很少用于加密数据。数据加密一般使用对称加密算法。非对称一般用户签名算法,即用于身份认证。在签名时,使用私钥加密。比如Alice向Bob发了一个消息,Bob怎么能确定这个消息真的来自Alice,而不是其他人假冒Alice?Alice可以把消息m做摘要得到h,用私钥对h加密得到c,把m和c发给Bob,Bob把c解密得到h,对m做摘要,与h对比,一致则消息是来自Alice,因为只有Alice有私钥(排除私钥泄露、极小概率与别人的公私钥一样)。

椭圆曲线算法(ECC)

近年来ECC越来越受到大家的关注,它更安全,更高效。

打个比喻,能很好的帮助理解ECC算法的安全性。你一个人在台球室,桌上只有一个球,把那个球放在桌上点G,经过一次撞击后,球经过一次或多次反弹,停在了点P。这时你把另一个人叫来,告诉他点G和点P,让他猜出你的撞击力度和方向。如果这个游戏放在椭圆曲线(elliptic curve)上,就是ECC算法。G是基点(起点),P是公钥(终点),你撞击的力度和方向就是私钥,记为d。

我国在2012年发布了SM2 ECC算法,支持签名验签、加解密、密钥交换。SM2 ECC算法与RSA主要区别在:他们的安全性依赖了不同的数据难题。ECC算法更先进更有效。2020年,已公开的RSA被破解的最长密钥是829位,但是256位ecc密钥就有RSA 3072位的安全性。

为什么需要国密

从算法设计上来看,sm2,sm3,sm4对应美国标准ecdsa、sha-256、des,他们有相同的算法结构,只是在一些步骤上有区别,比如数据块的大小不一样、迭代次数不同、使用了不同的参数。相比较,国密的这几个算法的计算量都大于美国标准,但计算量本身不意味着他们具有更好的安全性。

我认为推行国密算法主要有下面两点意义:

  1. 安全性。RSA、ECDSA算法本身没有问题,但很多地方可以做手脚,比如密钥生成算法、随机数生成算法、密码产品的实现[7]。DES多年来也被怀疑有后门,只是一直没有发现确凿的证据。DES加密过程中一些参数的选取原则,是没有公开的。我们国家的信息安全不能被别的国家掌控。
  2. 使用限制。现在大多数算法都是美国标准、美国专利,政府可以控制这些标准、专利、产品的出口使用。就像芯片技术、芯片产品。所以我们很有必要研究和推广自己的密码算法和产品,以备不时之需。

其它国密标准还有:

  1. sm1,对称加密算法,算法未公开发布,仅支持在硬件上实现;
  2. sm7,对称密码算法,适用于非接触式IC卡、支付、通卡类应用;
  3. sm9,标识密码算法,将用户的标识(如邮件地址、手机号码)作为公钥,不需要申请数字证书,适用于互联网等各种新兴领域的安全保障。

国密算法库使用举例

目前很多厂商都提供了成熟的硬件产品,比如加密机、加密卡。国家密码使用规范也要求服务端需要采用硬件密码产品。在其他一些场合比如客户端是允许使用软件加密的。

我们公司在2017年在openssl-1.0.2基础上实现了sm2、sm3、sm4算法及SSL VPN握手协议。接口与openssl原生提供的算法一直,sm3、sm4也提供了EVP接口。使用方法如下:

openssl 加解密以及国密算法 国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。1、SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。2、SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。3、SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。... 阅读详情

相关推荐

国密算法—SM2介绍及基于BC的实现

国密算法—SM2介绍及基于BC的实现 文章目录国密算法—SM2介绍及基于BC的实现简介私钥公钥数据格式密钥数据格式私钥数据格式公钥数据格式加密数据格式签名数据格式计算过程生成密钥加密解密预处理预处理1预处理2数字签名签名验证Java基于BC实现SM2加解密 简介 SM2密码算法是一种椭圆(非对称)密码算法 加密强度:256位(私钥长度); 公私钥长度:公钥长度为64字节(512位),私钥32字节(256位); 支持签名最大数据量及签名结果长度:最大签名数据量长度无限制;签名结果为64字节(但由于签名后会做

zcmain的专栏 1万+

JAVA非对称加密不同系统加密结果不一致

最近在做一个项目,需要用到非对称加密,但是出现一个很诡异的情况,本地开发环境是Windows环境,测试环境是Linux环境,出现一个问题, 那就是本地环境与开发环境同一个私钥字符串加密加密同一个信息,得到的加密结果不一样。 经过查询网络得知,这是由于填充的规则不同导致。 原来的加密的部分代码 byte[] keyBytes = Base64.decodeBase64(privateKey);...

y4356的专栏 2923

国密算法的加解密

对称密码算法 SM4(ECB/CBC/CTR/GCM)非对称密码算法 SM2(加解密/签名验签)基于SM3实现的随机数生成器(多线程加速)服务端(使用私有服务端证书以及自定义端口)模拟TLS握手进行密钥协商(Socket)服务端(使用私有服务端证书以及自定义端口)模拟TLS握手进行密钥协商(Netty)服务端(默认使用4433端口)服务端(默认使用4433端口)随机数生成(通过SM3实现)Hash算法 SM3。

carry_666的博客 750

解决PHP中sm4加密算法与JAVA中sm4加密后的值不一致的问题

PHP中的sm4加密,处理成与java的sm4加密后一致的方式

liy819的博客 4177

SAP CPI 之使用国密算法实现SM系列算法加解密

System.out.println("SM2-私钥:" + privateKey);System.out.println("SM2-公钥:" + publicKey);System.out.println("SM2-密文:" + encrypts);System.out.println("SM2-明文:" + data2);新建groovy,通过import之后,调用jar包中的方法。在CP中导入jar包,选择Upload,选中导入的jar包。的密钥和向量值,不安全!的公钥和私钥,不安全!

u012830826的博客 1335

国密算法SADK-3.2.1.3.jar

代码调用方式见 https://blog.youkuaiyun.com/sz85850597/article/details/100770794 SM2 非对称加密,基于ECC。 SM3 消息摘要,可以用MD5作为对比理解。 SM4 对称加密,密钥长度和分组长度均为128位。

国密算法初探 | 入门教程 | 解析

国密算法即国家密码局认定的国产密码算法。

Ximerr的博客 2694

JAVA国密算法pnc,sm2,sm3,sm4,jar包直接可用

最新JAVA版本国密算法,pnc,sm2,sm3,sm4,jar包直接可用

国密加解密算法介绍与实现

使用SM3算法对数据进行摘要可以得到一个固定长度的哈希值。

一位努力搬砖程序员。在这里,我会分享关于编程技巧、项目实战经验以及对新技术的见解。希望通过我的文章能够帮助你在技术路上更进一步。期待与你共同学习和成长! 820

基于Q-learning的无人机三维路径规划(含完整C++代码)

基于Q-learning的无人机三维路径规划(含完整C++代码)

weixin_54186646的博客 1万+

Cursor聊天记录迁移工具:实现跨设备AI对话同步与备份

在软件开发中,数据持久化与迁移是常见需求,尤其当工具依赖本地存储时。SQLite作为轻量级关系型数据库,因其嵌入式、零配置特性,常被用于存储应用状态与用户数据。其WAL(预写式日志)模式提升了并发性能,但也增加了数据操作复杂性。通过命令行工具与JSON序列化技术,可以实现结构化数据的提取、转换与安全迁移,这对于保障开发资产的连续性与可移植性具有重要价值。例如,在AI辅助编程场景下,开发者与AI的对话记录包含关键的问题分析、解决方案与决策逻辑,是重要的上下文资产。cursor-chat-transfer工具正

weixin_42551967的博客 533

【密码学实战】国密SM2算法介绍及加解密/签名代码实现示例

SM2 的诞生不仅是技术突破,更是国家信息安全战略的重要布局。其基于椭圆曲线密码学(ECC)的设计,在同等安全强度下,密钥长度仅为 RSA 的 1/10,运算效率提升数倍。SM2 已成为 ISO/IEC 国际标准,并深度融入国产密码生态体系,为构建安全可靠的网络安全架构提供了坚实支撑。本文通过代码示例为开发者提供SM2实现参考

2847

Adams二次开发实战指南:从CMD到Python与插件开发全解析

本文全面解析Adams二次开发的三种核心方法:CMD命令、Python脚本和C++插件开发。通过实战案例展示如何实现参数批量修改、自动化仿真流程和定制功能开发,显著提升多体动力学仿真效率。特别适合需要处理复杂建模和重复性任务的工程师学习参考。

weixin_29235923的博客 128

加解密(包含国密SM)

SM系列是我国的国产密码算法,其中SM1、SM7、SM9算法暂未公开,目前公开的算法主要为SM2(中国的ECC)、SM3(中国的SHA-256)、SM4(中国的AES)。SM2算法和RSA都是公钥密码算法,SM2算法是一种更先进安全的算法,在我们国家商用密码体系中被用来替换RSA算法。随着密码技术和计算机技术的发展,目前常用的1024位RSA算法面临严重的安全威胁,我们国家密码管理部门经过研究,决定采用SM2椭圆曲线算法替换RSA算法。

atzqtzq的博客 979

手把手教你学Simulink——基于Simulink的PMSM MTPA + FW 全速域平滑切换策略

本文提出一种基于Simulink的PMSM全速域平滑切换控制策略,通过融合MTPA和弱磁控制(FW)实现基速附近的无冲击过渡。在过渡区采用加权融合电流给定方法,使电流超调<5%、转速波动<2%,全速域效率>90%。文章详细介绍了系统架构、核心算法及Simulink建模步骤,包括融合控制器设计、切换逻辑实现和参数优化。仿真结果表明,该方法相比传统硬切换显著改善了动态性能,并扩展了调速范围。同时提供了可直接复用的工程模板和MATLAB代码,为电机控制工程师提供了实用的全速域控制解决方案。

MHD0815的博客 80

【保姆级教程】YOLOv8_OBB旋转目标检测:训练自己的数据集

【保姆级教程】YOLOv8_OBB旋转目标检测:训练自己的数据集

m0_51579041的博客 1万+

【免费下载】 国际国密加解密算法工具-SM2/SM3/SM4/RSA/AES

国际国密加解密算法工具-SM2/SM3/SM4/RSA/AES 【下载地址】国际国密加解密算法工具-SM2SM3SM4RSAAES 本仓库提供了一个支持国密和国际加密算法的工具,适用于金融数据加密机等场景。该工具集成了SM4、SM2、SM3、AES和RSA等多种加密算法,支持对称加解密、非对称签名验签、加解密等功能。 ...

gitblog_09819的博客 1191

9篇1章1节:中国居民健康与营养调查(CHNS)数据库的官网解析和数据下载(2026年版)

在探讨中国社会经济转型与人口健康变迁的学术领域中,中国健康与营养调查(CHNS) 是一个无法绕过的权威数据库。本文将带你深入了解CHNS的项目背景、庞大的数据体系,以及如何通过这两个核心网站获取关键的家庭、个人及社区层面的研究数据。

MD Code 1699

加解密机制(国密2/3/4,AES,RSA,MD5)

加解密机制(国密2/3/4,AES,RSA,MD5)

晨的一朵云的博客 4370

Oracle 11g安装教程(保姆级超详细安装教程)

Oracle详细安装步骤,每一步都配有图例引导 ORACLE是数据库(Oracle服务端)。是连接数据库的客户端(Oracle客户端)。是连接oracle的可视化客户端软件。

2302_81846649的博客 1万+

宇树 Qmini 双足机器人完全开源:3D打印+5小时组装,新手也能玩转!

教育教学,成为学校里的竞赛竞技,实验课程,论文设计的本体;开发者可以根据开源资料轻松集齐所有零部件,结构件可全部通过3D打印完成(几乎完全不需要任何机加工零部件),搭配宇树的高可靠性电机和标准电池,客户打印完零部件后,大概仅需要3~5小时的手工组装即可得到一只可爱的Qmini小双足机器人本体。一起推动机器人的未来发展,创新没有边界,创造力是无限的,Qmini就是你的第一步,如果你也想做一个能动、能学、还能萌的小双足机器人,现在就可以动手了,全开源、真低门槛、只差你的3D打印机和一点点耐心。

雕爷学编程 1890

【技术实践】基于云峦KeyarchOS的国密技术与实践

国密算法的应用愈加广泛,云峦KeyarchOS的基础密码组件已经支持国密算法,这为云峦KeyarchOS用户提供了有效的国密应用支持。

ITer_szlgz的博客 1416

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

clickhouse如何实现国密加解密

国密算法,作为国家密码局发布的密码算法标准,为保障数据安全提供了重要支撑。国密算法作为国家密码局发布的密码算法标准,具有高安全性、高性能等优点。主要用于数字签名及验证、消息认证码生成及验证、随机数生成等,其算法公开。这些算法均具有高安全性、高性能等优点,已广泛应用于金融、政府、军事等领域。是中华人民共和国政府采用的一种密码散列函数标准,由国家密码管理局于。国密算法,即国家密码局发布的密码算法标准,包括。分组密码算法是我国自主设计的分组对称密码算法,,确保国家,企业的数据资产安全。功能,可以实现国密算法。

zjyy1987的博客 550

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

国密算法概述、及算法的集成应用(sm2、sm3、sm4)

国密算法概述、及算法的集成应用(sm2、sm3、sm4)

qq_38254635的博客 3868

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

php生成国密验证,PHP+gmssl命令行实现国密加解密

1. 国密介绍国密算法是我国自主研发创新的一套数据加密处理系列算法。从SM1-SM4分别实现了对称、非对称、摘要等算法功能。特别适合应用于嵌入式物联网等相关领域,完成身份认证和数据加解密等功能。当然,默认的前提条件是算法密钥必须保证安全性,因此要将国密算法嵌入到硬件加密芯片中结合使用。国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。SM1 ...

weixin_29407885的博客 2752

国密 SM4 文件加解密

国密算法SM4 对文件加解密 说明:调用开源bcprov-jdk15on 加密算法工具,使用SM4算法,对文件进行加密、解密;文件流的操作使用hutool工具包来实现。 引用依赖 <dependency> <groupId>org.bouncycastle</groupId> <artif...

D_D 的专栏 1万+
上一篇: 找对象攻略 - 必不可少的Spring IOC
下一篇: lambda实现原理
Walter Sun
博客等级 码龄9年 1726粉丝 288原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Walter Sun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值