专栏首页Pou光明国密算法SM3与SM4简介与应用

国密算法SM3与SM4简介与应用

一、国密SM3与SM4

国产密码算法(国密算法)是指国家密码局认定的国产商用密码算法,目前主要使用公开的SM2、SM3、SM4三类算法,分别是非对称算法、哈希算法和对称算法。不懂也没关系,以后别人说SM2、SM3、SM4知道它们是干啥的就行。这次主要和大家从简单的SM3、SM4说起。

SM3算法:SM3杂凑算法是我国自主设计的密码杂凑算法,适用于商用密码应用中的数字签名和验证消息认证码的生成与验证以及随机数的生成,可满足多种密码应用的安全需求。为了保证杂凑算法的安全性,其产生的杂凑值的长度不应太短,例如MD5输出128比特杂凑值,输出长度太短,影响其安全性SHA-1算法的输出长度为160比特,SM3算法的输出长度为256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。

SM4算法:SM4分组密码算法是我国自主设计的分组对称密码算法,用于实现数据的加密/解密运算,以保证数据和信息的机密性。要保证一个对称密码算法的安全性的基本条件是其具备足够的密钥长度,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。

里面的一些术语不知道也没关系,以后会再梳理的......

二、信息摘要(SM3)一些特性

消息摘要或者哈希函数以任意消息(任意内容或者任何长度)作为输入,然后产生一个固定长度大小的哈希值作为结果输出。具体来说,该函数具有以下特性:

· 对于任意给定的消息,生成哈希值很简单

· 从任意给定的哈希值去计算出一条消息是不可行的(即函数是单向的)

· 修改消息而不修改哈希值是不可行的

· 找到两条具有相同哈希值的消息是不可行的

三、开源程序使用举例

测试文件结构如图:

测试源码:

#include <SM3.h>#include <stdio.h>#include <stdlib.h>#include <string.h>
# define EVP_MAX_MD_SIZE                 32#define ALLOC_OBJ(type, size) (type *)calloc(1, (sizeof(type)*size))
int main(){        unsigned char msgbuf[] = "abc";        unsigned char msgbuf1[] = "abc";  unsigned char dgst[EVP_MAX_MD_SIZE];  unsigned int dgstlen = (unsigned int)sizeof(dgst);
  SM3_state *ctx = ALLOC_OBJ(SM3_state, 1);  SM3_Init(ctx);  SM3_Update(ctx, msgbuf, sizeof(msgbuf)-1);  SM3_Final(dgst, dgstlen, ctx, sizeof(msgbuf)-1);
   printf("Digest1 is: ");   for (int i = 0; i < dgstlen; i++)          printf("%02x", dgst[i]);   printf("\n");
        // second use   SM3_Hash(msgbuf1 , sizeof(msgbuf1)-1, dgst, dgstlen);   printf("Digest2 is: ");   for (int i = 0; i < dgstlen; i++)     printf("%02x", dgst[i]);   printf("\n");

   free(ctx);  return 0;}

测试效果:

SM4简单举例:

int main(){    unsigned char key[] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};    unsigned char iv[] = {1,2,3,4,5,6,7,8};    unsigned char plain_text[] = "hello world!";    unsigned char out_plain_text[sizeof(plain_text)];    unsigned char cipher_text[16];
    SM4_EncCBC(key, iv, plain_text, cipher_text, sizeof(plain_text)-1);
    SM4_DecCBC(key, iv, cipher_text, out_plain_text, sizeof(plain_text)-1);    printf("%s\n",cipher_text);

    printf("%s\n",out_plain_text);
  return 0;}

四、小结与资源链接

①国密C语言实现的git链接:

https://github.com/JulongChain/julongchain-csp-sdt

②相关术语链接:

http://gmssl.org/docs/evp-api.html

③纯初学入门,为了快速应用。最开始用的GmSSL,这个文档相对全一些,对初学者会友好一些,但是还是需要一点儿密码学的基础,我是两个结合一起看的。

本文分享自微信公众号 - Pou光明(pou0230),作者:PouG

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-05-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • KonaJDK 8 新版本更新,国密算法轻松用

    ? 导读 | TencentKona 是腾讯开源的可立即投入生产的 OpenJDK 发行版,在主流 OpenJDK8 的基础上进行了针对性的开发和优化。本次 ...

    腾小云
  • KonaJDK 助力微服务国密算法使用特性一览

    ? ? 导读 本次 TencentKona 8 版本更新到 8.0.4, 在同步到社区版本 8u272 的基础上,还有哪些新的特性呢?本文为您一一介绍: Up...

    腾讯云中间件团队
  • KonaJDK 助力微服务国密算法使用特性一览

    ? 导读 本次 TencentKona 8 版本更新到 8.0.4, 在同步到社区版本 8u272 的基础上,还有哪些新的特性呢?本文为您一一介绍: Upda...

    腾讯技术工程官方号
  • SM? SM1? SM2? SM3? SM4?

    最近看了一个项目的代码,用到了SM2,SM3,SM4,瞬间懵逼,一会用SM2,一会用SM3,一会又用SM4,SM???

    Java技术编程
  • 【易错概念】国密算法SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、ZUC

    众所周知,为了保障商用密码的安全性,国家商用密码管理办公室制定了一系列密码标准,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9、祖冲之密码算法(...

    辉哥
  • Bytom国密网说明和指南

    Gitee地址:https://gitee.com/BytomBlockchain/bytom

    比原链Bytom
  • sm2,sm3,sm4国密算法的纯c语言版本,使用于任何嵌入式平台

    国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。

    独行猫A
  • 国密算法sm2-.Net实现

    国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。

    西门呀在吹雪
  • [ffffffff0x] 安全工具系列 :SM3国密算法模块学习

    国密即国家密码局认定的国产密码算法.主要有 SM1,SM2,SM3,SM4.密钥长度和分组长度均为 128 位.

    r0fus0d
  • sm2国密算法的纯c语言版本,使用于单片机平台(静态内存分配)

    之前的动态内存分配,在上面总是莫名其妙的崩。不知道堆和栈空间该改多大合适。且总共64K的内存,太受限了。

    独行猫A
  • 国密SSL协议之Nginx集成

    Nginx自身支持标准的SSL协议,但并不支持国密SSL协议。本文描述了Nginx配置的国密SSL协议(单向)的完整过程,仅供学习和参考之用。

    gmssl
  • 国密SSL协议之Apache集成

    Apache httpd自身支持标准的SSL协议,但并不支持国密SSL协议。本文描述了Apache httpd配置的国密SSL协议(单向)的完整过程,仅供学习和...

    gmssl
  • 详解国密SSL ECC_SM4_SM3套件

    国密算法最好的应用场景应该是SSL/TLS通信,然而国密文档中并没有单独规范SSL/TLS协议,我们能参考的只有《GM/T 0024-2014 SSL VPN ...

    云水木石
  • 你到底是对称还是不对称?

    至此,总结下,大部分情况下使用对称加密,具有比较不错的安全性。如果需要分布式进行秘钥分发,考虑非对称。如果不需要可逆计算则散列算法。因为这段时间有这方面需求,就...

    我是程序员小贱
  • 密码发展史之近现代密码

    一、近代密码阶段 近代密码是指从第一次世界大战、第二次世界大战到1976年这段时期密码的发展阶段。 电报的出现第一次使远距离快速传递信息成为可能,事实上,它增强...

    安智客
  • 国密算法SM2加解密_签名验签图形化例子

    点击上方蓝字可直接关注!方便下次阅读。如果对你有帮助,麻烦点个在看或点个赞,感谢~

    用户5908113
  • 03 | 密码学基础:如何让你的密码变得“不可见”?

    上一讲,我们学习了黄金法则的三部分核心内容:认证、授权、审计。它们描述了用户在使用应用的各个环节,我们需要采取的安全策略。

    斑马
  • 区块链BaaS云服务(15)复杂美chain33

    【摘要】 1. 整体架构 采用模块插件化的设计,模块可插拔,适应多种场景。 应用层 EVM虚拟机, WASM虚拟机,GO语言原生合约以及JVM虚拟机(研发完成,...

    用户7358413
  • 国密SSL协议之性能测试

    国密SSL性能指标主要有三个:新建速率(CPS,Connection per second)、加密吞吐(Throughput)、最大并发连接(Max Persi...

    gmssl

扫码关注云+社区

领取腾讯云代金券