亚信安慧AntDB之国密算法介绍

news2024/10/7 8:23:14

近年来,为摆脱对国外技术和产品的过度依赖,建设行业网络安全环境,增强我国行业信息系统安全、可靠的能力,国家有关机关和监管机构站在国家安全和长远战略的高度提出了“推动国密算法应用实施、加强行业安全可控”的要求。

密码算法是保障信息安全的核心技术,支持和应用国密算法不仅保障了算法的安全性,避免了陷门,而且高度符合国家安全战略布局要求。

常见的国密算法

常见的国密算法主要有SM1,SM2,SM3,SM4,SM7,SM9。

其中SM1是对称加密算法中的分组加密算法,其强度与AES相当,但是该算法不公开,仅以IP核的形式存在于芯片中;

SM2是一种椭圆曲线密码公钥密码算法,其密钥长度256bits,包含数字签名、密钥交换和公钥加密;

SM3用于替代MD5/SHA-1/SHA-2等国际算法,适用于数字签名和验证、消息认证码的生成与验证以及随机数的生成;

SM4与SM1类似,是我国自主设计的分组对称密码算法,用于替代DES/AES等国际密码算法,与AES算法具有相同的密钥长度、分组长度;

SM7是一种分组密码算法,该算法未公开,适用于非接触IC卡,应用包括身份识别类应用(门禁卡、工作证、参赛证),支付与通卡类应用等;

SM9是基于标识的非对称密码算法,用椭圆曲线对实现的基于标识的数字签名算法、密钥交换协议、密钥封装机制和公钥加密与解密算法。

实际中常用的国产密码算法,主要包括SM1,SM2,SM3,SM4。

AntDB中的国密算法

AntDB目前实现的国密算法有SM3、SM4两种。

SM3算法

SM3是我国自研的一种密码散列函数标准,由国家密码管理局于2010年12月17日发布。在商用密码体系中,SM3主要用于数字签名的生成及验证、消息认证码生成及验证、随机数生成等,其安全性及效率与SHA-256相当。

SM3算法采用Merkle-Damgard结构,消息分组长度为512位,摘要值长度为256位。SM3杂凑算法经过填充、迭代压缩,最后生成长度为256比特的杂凑值。

AntDB在内核中实现了SM3算法。支持对字符串类型和bytea类型的数据做摘要计算。登录到AntDB后,可以通过select 语句来调用SM3算法做消息摘要。

AntDB中提供以下函数供用户使用:

表1:antdb的sm3函数

使用方法:

postgres=# select adb_sm3('abcdefg');                              adb_sm3-------------------------------------------------------------------- \x08b7ee8f741bfb63907fcd0029ae3fd6403e6927b50ed9f04665b22eab81e9b7(1 row)
postgres=#postgres=# select adb_sm3('12345678'::bytea);                              adb_sm3-------------------------------------------------------------------- \x0fffff81e971fa3f09107abf77931463fc0710bfb8962efeae3d5654b073bb0c(1 row)
postgres=#

AntDB中的SM3算法主要经过参数校验、填充、迭代压缩,最后生成杂凑值。

1、参数校验

通过在pg_proc.dat中指定函数的参数类型,利用AntDB解析SQL时,会对函数原型进行匹配,自动排除不满足参数类型的输入。

2、填充

输入消息m的长度为l,首先在消息末尾添加比特’1’ ,再添加k个0,k需要满足l+1+k = 448(mod 512)的最小的非负整数。再在末尾添加长度为64bits的数,其值为长度l。

3、迭代压缩

将消息512bits分为一组,使用压缩函数CF对每一分组进行处理,并将结果存在8个32bits寄存器中,循环处理完所有分组后,寄存器中的值即为最后的摘要值。

图1:SM3加密流程

SM4算法

SM4是我国自主设计的分组对称密码算法,由国家密码管理局于2012年3月21日发布,用于实现数据的加密和解密,以保证数据和信息的机密性。SM4是一种Feistel结构的分组密码算法,其分组长度和密钥长度均为128bits。

SM4算法使用128位的加密密钥,并采用32轮迭代加密结构,每一轮加密使用一个32位的轮密钥,共使用32个轮密钥。因此需要使用密钥扩展算法,由加密密钥生成32个轮密钥。SM4解密过程与加密过程算法相同,但是轮密钥使用的顺序与加密是相反的。

分组密钥的工作模式相当于分组密码算法的框架,它决定了采用那种流程对明文或密文进行处理,常见的工作模式有ECB,CBC,CFB,OFB,CTR,这里简要介绍ECB和CBC。

ECB(电子密码本)模式,需要加密的消息按照块密码的大小被分为多个块,并对每个块进行独立加密,其过程如下图所示。

CBC(密钥分组链接)模式,每个明文块先与前一个密文块进行异或后,再进行加密,其过程如下图所示。

图2:ECB加密过程

图3:CBC加密过程

AntDB在内核中实现了SM4算法,目前默认采用的工作模式为CBC,同时也支持EBC,并使用pkcs7算法对不足128bits的数据进行填充。对于明文plaintext,支持字符串类型和bytea类型的数据。

AntDB中提供以下SM4加密函数供用户使用:

表2:antdb的sm4加密函数

AntDB中提供以下SM4解密函数供用户使用:

表3:antdb的sm4解密函数

使用方法:

postgres=# select adb_sm4_encrypt('AntDB@1234','I love china');          adb_sm4_encrypt------------------------------------ \x821e1666416aef5bd4586c99c7e9a738(1 row)
postgres=#postgres=# select adb_sm4_decrypt('AntDB@1234','\x821e1666416aef5bd4586c99c7e9a738'); adb_sm4_decrypt----------------- I love china(1 row)
postgres=#postgres=# select adb_sm4_encrypt('AntDB@1234','I love china',1);          adb_sm4_encrypt------------------------------------ \xe81340ab0e578933ef32e96e6bd1f7cf(1 row)
postgres=#postgres=#postgres=# select adb_sm4_decrypt('AntDB@1234','\xe81340ab0e578933ef32e96e6bd1f7cf',1); adb_sm4_decrypt----------------- I love china(1 row)
postgres=#

AntDB中SM4的加密主要经过密码校验、参数校验、数据填充、32轮密钥扩展、32轮迭代算法、反序变换、最后生成密文。

解密主要经过密码校验、参数校验、32轮密钥扩展、32轮迭代算法、反序变换、丢弃填充、最后变成明文。

1、密码校验

首先验证用户输入的密码格式是否正确,须满足:8~16个字符,必须包含数字,字母大小写,特殊字符中的三种及以上。然后将用户输入的密钥进行扩展:不足16个字符,从首个字符进行拷贝填充至16个字符。

2、参数校验

通过在pg_proc.dat中指定加解密函数的参数类型,利用AntDB解析SQL时,会对函数原型进行匹配,自动排除不满足参数类型的输入。

3、32轮密钥扩展

因加解密过程须经过32轮迭代,每轮都需要一个32bit的密钥,所以需要将原始128bits的密码扩展为32个32bits的密钥。SM4加密解密过程中使用的轮密钥是相同的,只是解密使用轮密钥的顺序与加密使用轮密钥顺序相反。

4、数据填充

AntDB中使用PKCS7算法对加密数据进行填充,即以16 bytes划分数据,对于尾部不满16 bytes的数据,用“16-尾部数据长度”的字符值进行填充。如果正好为16的倍数,则需要填充16位0x10。

5、32轮迭代运算

将每组的数值分为4个32bits的值,再结合轮密钥做异或换位运算。

6、反序变换

将每组的4个32bit的值,顺序逆置,如w1w2w3w4变为w4w3w2w1。

图4:SM4加解密流程

关于亚信安慧AntDB数据库

AntDB数据库始于2008年,在运营商的核心系统上,服务国内24个省市自治区的数亿用户,具备高性能、弹性扩展、高可靠等产品特性,峰值每秒可处理百万笔通信核心交易,保障系统持续稳定运行超十年,并在通信、金融、交通、能源、物联网等行业成功商用落地。

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

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

相关文章

感谢信∣企企通再获肯定,中国煤科【天玛智控】SRM项目成功上线,推动煤矿供应链智能化高效协同发展

近日,煤矿智能无人化开采技术引领者【北京天玛智控科技股份有限公司】(以下简称“天玛智控”)携手企企通打造的SRM数字化采购平台成功上线。系统上线后,实现了天玛智控与供应商之间的信息共享和业务协作,提升采购业务效…

解决android studio build Output中文乱码

1.效果如下所示: 代码运行报错的时候,Build Output报的错误日志中中文部分出现乱码,导致看不到到底报的什么错。 2.解决办法如下: 点击Android studio开发工具栏的Help-Edit Custom VM Options....,Android studio会…

Node.js中的并发和多线程处理

在Node.js中,处理并发和多线程是一个非常重要的话题。由于Node.js是单线程的,这意味着它在任何给定时间内只能执行一个任务。然而,Node.js的事件驱动和非阻塞I/O模型使得处理并发和多线程变得更加高效和简单。在本文中,我们将探讨…

继承-学习2

this关键字:指向调用该方法的对象,一般我们是在当前类中使用this关键字,所以我们常说代表本类对象的引用 super关键字:代表父类存储空间的标识(可看作父类对象的引用) 父类: package ven;public class Fu {//父类成员…

Jenkins笔记(一)

个人学习笔记(整理不易,有帮助点个赞) 笔记目录:学习笔记目录_pytest和unittest、airtest_weixin_42717928的博客-CSDN博客 目录 一:简单了解 二:什么是DevOps 三:安装Jenkins 四&#xff1…

uniapp实现-审批流程效果

一、实现思路 需要要定义一个变量, 记录当前激活的步骤。通过数组的长度来循环数据,如果有就采用3元一次进行选择。 把循环里面的变量【name、status、time】, 全部替换为取出的那一项的值。然后继续下一次循环。 虚拟的数据都是请求来的, 组装为好渲染的格式。 二…

Diffusion Models/Score-based Generative Models背后的深度学习原理(5):伪似然和蒙特卡洛近似配分函数

Diffusion Models专栏文章汇总:入门与实战 前言:有不少订阅我专栏的读者问diffusion models很深奥读不懂,需要先看一些什么知识打下基础?虽然diffusion models是一个非常前沿的工作,但肯定不是凭空产生的,背…

FaceBook获取广告数据

1、访问 广告管理工具 确认自己登陆的账号下面能看到户。 ​ 2、使用 图谱Api探索工具 生成用户短期口令 ​ 3、get请求(或者浏览器直接打开)访问: https://graph.facebook.com/v19.0/me?fieldsid,name, email&access_token{上一步生成的口令} ​ 4、短期…

ChatGPT4.0 的优势、升级 4.0 为什么这么难以及如何进行升级?

前言 “ChatGPT4.0一个月多少人民币?” ”chatgpt4账号“ ”chatgpt4 价格“ “chatgpt4多少钱” 最近发现很多小伙伴很想知道关于ChatGPT4.0的事情,于是写了这篇帖子,帮大家分析一下。 一、ChatGPT4.0 的优势 (PS:…

Tiktok矩阵系统搭建的逻辑和源代码!

很多和我一样从事外贸工具开发的朋友都清楚,TikTok矩阵系统不仅确保了平台的高效运行,还为用户提供了个性化的内容推荐,从而大大提升了用户黏性,因此很多人都乐意去开发类似的工具,下面我们就来说说Tiktok矩阵系统搭建…

常用SQL查询方法与实例

目录 SELECT查询 INSERT查询 UPDATE查询 DELETE查询 JOIN查询 GROUP BY查询 HAVING查询 窗口函数 公共表表达式(CTEs) 递归查询 透视表 分析函数 解透视 条件聚合 日期函数 合并语句 情况语句 常用SQL查询方法有以下几种: S…

【Android】View 的滑动

View 的滑动是 Android 实现自定义控件的基础,同时在开发中我们也难免会遇到 View 的滑动处理。其实不管是哪种滑动方式,其基本思想都是类似的:当点击事件传到 View 时,系统记下触摸点的坐标,手指移动时系统记下移动后…

全志XR806 FreeRTOS快速开发入门

RTOS 快速开发入门 XR806 是一颗高集成度无线应用MCU,其集成了ARMv8-M 内核、IEEE 802.11b/g/n Wi-Fi 子系统、BLE 5.0子系统、电源管理系统、高级别的安全系统以及丰富的外设接口,具有优秀的射频性能、稳定性、可靠性和超低功耗。 芯之联软件开发平台…

IIS发布PHP网站字体404解决办法

最近在使用 IIS 发布 PHP 网站时,我遇到了一个前端问题,即字体库文件 404 错误。这个问题的根本原因是 IIS 未能正确识别字体文件类型,导致浏览器在加载页面时无法正确获取所需字体资源,进而触发了404错误。这样的问题会导致网站页…

量化投资实战(一)之K线图策略

点赞、关注再看,养成良好习惯 Life is short, U need Python 量化投资实战系列,不断更新中 1. K线图简介 K 线图(Candlestick Charts)又称为“蜡烛图”、“阴线图”等。股市及期货市场中的 K 线图的画法包含四个数据,…

ETH网络中的区块链

回顾BTC网络的区块链系统 什么是区块链?BTC网络是如何运行的?BTC交易模式 - UXTO ETH网络中的区块链 ETH网络的基石依旧是 区块链。上面 什么是区块链? 的文章依旧适用。 相比BTC网络,ETH网络的账户系统就相对复杂,所…

FPGA之带有进位逻辑的加法运算

module ADDER( input [5:0]A, input [5:0]B,output[6:0]Q ); assign Q AB; endmodule 综合结果如下图所示: 使用了6个Lut,,6个LUT分布…

【通信基础知识】完整通信系统的流程图及各模块功能详解

2024.2.29 抱歉最近在写毕设大论文,因此没有太多时间更新。然而,在写论文的过程中,发现自己对通信系统的了解还不够全明白,因此差了一些硕博论文总结了一个完整的通信系统流程图。若有不对的地方请多多指正//部分内容有参考ChatGP…

Python+neo4j构建豆瓣电影知识图谱

文章目录 数据来源数据整理导入节点和关系导入使用Subgraph批量导入节点和关系 多标签实体和实体去重 数据来源 http://www.openkg.cn/dataset/douban-movie-kg 该网址拥有丰富的中文知识图谱数据集,OpenKG(Open Knowledge Graph),可供研究人员使用研究…

2019年下半年教师资格证考试《高中信息技术》题

2.在如图1所示的图文混排Word文档中,文字环绕方式使用了( D)。 图1 A嵌入型 B上下环绕型 C衬于文字下方 D编辑环绕顶点 6.在Flash中绘制类似“雨”的形状,一般首先使用“椭圆工具”绘制出一个圆形(如图4中a图&…