1. 国密算法介绍

    国密即国家密码局认定的国产密码算法,主要有 SM1,SM2,SM3,SM4。密钥长度和分组长度均为 128 位。针对银行客户对数据库安全能力的诉求以及提高产品安全竞争力的要求,进行数据库企业级安全能力增强,openGauss 自 2.0.0 版本支持了国密算法,主要包括用户认证支持国密 SM3 算法sm3 算法,支持 SM4 国密算法加解密函数sm4 算法。

  2. 国密 SM3 算法——用户认证

    2.1 使用方法

    openGauss 现支持四种用户认证方式,其通过 postgresql.conf 文件中的参数 password_encryption_type 确定,认证方式与该参数的对应关系如下表所示:

认证方式 参数

md5 password_encryption_type=0

sha256+md5 password_encryption_type=1

sha256 password_encryption_type=2

sm3 password_encryption_type=3

其中 SM3 认证算法目前只支持 gsql、 JDBC、 ODBC 三种连接方式。

创建 SM3 认证方式的用户的步骤:

(1)在 postgresql.conf 文件中配置 password_encryption_type=3,并重启数据库使该参数生效

(2)创建用户

如下示例中,创建了 test 用户,通过系统表 pg_authid 的 rolpassword 字段可以查看用户创建时对应的加密方式,图示即对应 sm3 加密

(3)在 pg_hba.conf 文件中配置认证方式为 sm3

此时 test 用户远程登录方可认证通过

对于创建其他认证方式的用户,过程与 SM3 类似,此处不再赘述,需注意加密方式与认证方式对应即可。

2.2 实现原理

openGauss 使用 RFC5802 口令认证方案

用户秘钥生成

RFC5802 秘钥衍生过程如下图所示:

SaltedPassword := PBKDF2 (password, salt, i)

ClientKey := HMAC(SaltedPassword, "Client Key")

StoredKey := Hash(ClientKey)

服务器端存的是 StoredKey 和 ServerKey:

1)StoredKey 是用来验证 Client 客户身份的

服务端认证客户端通过计算 ClientSignature 与客户端发来的 ClientProof 进行异或运算,从而恢复得到 ClientKey,然后将其进行 hash 运算,将得到的值与 StoredKey 进行对比。如果相等,证明客户端验证通过。

2)ServerKey 是用来向客户端表明自己身份的

类似的,客户端认证服务端,通过计算 ServerSignature 与服务端发来的值进行比较,如果相等,则完成对服务端的认证。

3)在认证过程中,服务端可以计算出来 ClientKey,验证完后直接丢弃不必存储。

要做到合法的登录,必须知道 Password、SaltedPassword 或者 ClientKey。如果 StoryKey 和 ServerKey 泄露,无法做到合法登录。

认证流程

标准 RFC5802 口令认证流程如下图所示:

1、客户端发送 username 给服务端。

2、服务端返回给客户端 AuthMessage 和计算出来的 ServerSignature。

3、客户端收到信息后,首先利用认证信息 AuthMessage 中的 salt 和 iteration-count(迭代次数),从 password 计算得到 SaltedPassword,然后计算得到下层所有的 key。计算 HMAC(ServerKey, AuthMessage) == ServerSignature 是否相等,如果相等,则 client 完成对服务端的认证。

4、客户端将计算得到的 ClientProof 发送给服务端。

5、服务端使用其保存的 StoredKey 和 AuthMessage 计算 HMAC,在和接收的 client 发送的 ClientProof 进行异或,得到 ClientKey,在对 ClientKey 进行哈希,和其保存的 StoredKey 进行比较是否一致。如果一致,则客户端的认证通过。

服务器端收到客户端请求后,根据 pg_hba.conf 配置的认证方式,与客户端进行相应的认证交互。

  1. 国密 SM4 算法——数据加解密

    SM4 国密算法可用于对表中的某一列数据进行加解密。参考 gs_encrypt_aes128 加密函数、gs_decrypt_aes128 解密函数,新增的加密函数 gs_encrypt,解密函数 gs_decrypt 支持 aes128、sm4 的加解密,可以兼容 aes128。其中 SM4 算法调用 openssl 中的 EVP_sm4_cbc()接口。

gs_encrypt_aes128 和 gs_decrypt_aes128 函数示意:

gs_encrypt 和 gs_decrypt 函数示意:

利用 SM4 算法对表中数据进行加解密示意图:

至此,openGauss 支持使用国密 SM3 算法进行用户认证,SM4 算法进行数据加解密。

openGauss支持国密SM3和SM4算法的更多相关文章

  1. 一个支持国密SM2/SM3/SM4/SM9/ZUC/SSL的密码工具箱

    转:https://blog.csdn.net/xuq09/article/details/91815366 The GmSSL Project网址:http://gmssl.org/docs/qui ...

  2. 推荐一款能支持国密SM2浏览器——密信浏览器

    密信浏览器( MeSince Browser )是基于Chromium开源项目开发的国密安全浏览器,支持国密算法和国密SSL证书,同时也支持国际算法及全球信任SSL证书:密信浏览器使用界面清新,干净. ...

  3. openssl 全面支持国密SM2/SM3/SM4加密算法

    sm4展示 代码 /** 文件名: https://github.com/liuqun/openssl-sm4-demo/blob/cmake/src/main.c */ #include <s ...

  4. 国密SM3算法在linux和windows平台结果不一致问题

    什么是sm3,是一种类似于sha256的哈希算法,是咱们国家的哈希标准算法: 最近在使用sm3算法时,同样的一份数据,调用同样的sm3接口,发现得到的结果是不一样的: 那么在应用过的过程中,如果同样的 ...

  5. 使用Docker编译OpenResty支持国密ssl加密

    编译环境 执行编译操作环境如下 #操作系统 CentOS Linux release 7.4.1708 (Core) #docker版本 Version: 19.03.5 编译过程 Dockerfil ...

  6. OpenSSL 1.1.1 国密算法支持

    OpenSSL 1.1.1 国密算法支持 https://www.openssl.org/ https://github.com/openssl/openssl OpenSSL 1.1.1 新特性: ...

  7. 2017-2018-2 20179204《网络攻防实践》第十三周学习总结 python实现国密算法

    国密商用算法是指国密SM系列算法,包括基于椭圆曲线的非对称公钥密码SM2算法.密码杂凑SM3算法.分组密码SM4算法,还有只以IP核形式提供的非公开算法流程的对称密码SM1算法等. 第1节 SM2非对 ...

  8. Hyperledger Fabric密码模块系列之BCCSP(五) - 国密算法实现

    Talk is cheap, show me your code. 代码也看了,蛋也扯了,之后总该做点什么.响应国家政策,把我们的国密算法融合进去吧--  先附两张bccsp下国密算法的设计实现图. ...

  9. 20155206赵飞 基于《Arm试验箱的国密算法应用》课程设计个人报告

    20155206赵飞 基于<Arm试验箱的国密算法应用>课程设计个人报告 课程设计中承担的任务 完成试验箱测试功能1,2,3 . 1:LED闪烁实验 一.实验目的  学习GPIO原理  ...

  10. 《基于Arm实验箱的国密算法应用》课程设计 结题报告

    <基于Arm实验箱的国密算法应用>课程设计 结题报告 小组成员姓名:20155206赵飞 20155220吴思其 20155234昝昕明 指导教师:娄嘉鹏 设计方案 题目要求:基于Arm实 ...

随机推荐

  1. Redis灵魂11问

    目录 说说redis都有哪些数据类型吧 Redis为什么快呢? 那为什么Redis6.0之后又改用多线程呢? 知道什么是热key吗?热key问题怎么解决? 什么是缓存击穿.缓存穿透.缓存雪崩? 缓存击 ...

  2. 【Azure 环境】台湾同胞:詢問大陸所有廠牌手機是否都可透過通知中心發送訊息

    什么是 Azure 通知中心? Azure 通知中心提供易于使用且向外扩展的推送引擎,可用于将通知发送到任何平台 (iOS.Android.Windows.Kindle.百度等 ) 从任何后端 (云和 ...

  3. 【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?

    问题描述 当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口? 问题回答 根据文档调研,在ER线路服务的层面,是无法做网络策略来限制 ...

  4. 原生、复杂流程操作、融合专家系统,澜码科技发布企业级Agent平台AskXBOT

    AI原生企业级Agent构建平台具备哪些特性?澜码AskXBOT平台揭晓答案 澜码科技正式发布了AI原生企业级Agent平台AskXBOT,怎么看待这个产品? 原生.复杂流程操作.融合专家系统,澜码科 ...

  5. 使用 Docker 部署 MrDoc 在线文档管理系统

    1)MrDoc 介绍 MrDoc 简介 MrDoc 觅思文档:https://mrdoc.pro/ MrDoc 使用手册:https://doc.mrdoc.pro/p/user-guide/ MrD ...

  6. 使用C#创建服务端Web API

    前言 C# Web API 是一种基于 .NET 平台(包括但不限于.NET Framework 和 .NET Core)构建 HTTP 服务的框架,用于创建 RESTful Web 服务.REST( ...

  7. 多个 .NET Core SDK 版本之间进行切换 global.json

    由于同一台电脑可以安装多个版本的.NET Core SDK. 当安装了许多不同版本的.NET Core SDK 之后,要如何才能使用旧版dotnet 命令,执行dotnet new 或dotnet b ...

  8. 使用LabVIEW打开默认应用程序中的文档(PDF,Word,Excel,Html)

    问题详情 我想让我的LabVIEW VI使用默认应用程序打开硬盘上的文档.如何实现? 解决方案 有一个名为 "Open a Document on Disk.vi" 的 VI,它可 ...

  9. 感慨 vscode 支持win7最后一个版本 1.70.3 于2022年7月发布

    为什么 家里电脑一直是win7,也懒的升级,nodejs也不能用最新的,没想到vscode也停产了 https://code.visualstudio.com/updates/v1_70 后记 别用u ...

  10. 解决Windows下json.hpp中文乱码问题

    文中使用的是 json 库,整个库的代码由一个单独的头文件json.hpp组成,用普通的C++11编写的.它没有库,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来很方便. 先引用头文件和命名空 ...