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. fatal: bad object refs/remotes/origin/xxx

    解决方案: 1.项目的.git文件内的目录.git/logs/refs/remotes/origin/,删除该错误的本地远程分支: 2.执行git pull --rebase即可 类似错误信息例子: ...

  2. 【Azure 存储服务】Storage Account Blob 使用REST API如何获取磁盘大小(Content-Length), IOPS信息

    问题描述 1)关于使用Rest API获取非托管磁盘信息比如获取磁盘大小 2)关于使用Rest API获取非托管磁盘信息比如iops 问题答案 #1:关于使用Rest API获取非托管磁盘信息比如获取 ...

  3. C#多线程(10):读写锁

    目录 ReaderWriterLockSlim ReaderWriterLockSlim 常用方法 订单系统示例 并发字典写示例 ReaderWriterLock 本篇的内容主要是介绍 ReaderW ...

  4. nginx设置访问账号密码

    第一:为kibana加上了用户登陆访问 第二:不暴露服务器上5601端口,只开放80端口即可.这对服务器的安全也是一个很大的保护. 接下来我们就开始配置nginx与kibana. 一.配置nginx ...

  5. 基于 XAF Blazor 的规则引擎编辑器

    开源项目地址:https://gitee.com/lowcodexaf/rules-engine-editor 前言 本项目是基于XAFBlazor的规则引擎编辑器,规则引擎采用的是微软开源的Rule ...

  6. 代码片段管理软件 - 发现 utools 这个工具还行 windows软件

    代码片段管理软件 - 发现 utools 这个工具还行 windows软件 介绍 这个软件不是专业的代码片段工具 好在还能凑合用 最完美的还是苹果那个软件,但是用的win没办法了 这个可以粘贴到vsc ...

  7. ThinkPHP 3.2.3

    说明手册 https://www.kancloud.cn/manual/thinkphp/1706 下载地址 https://gitee.com/liu21st/thinkphp32 thinkPHP ...

  8. CAD和实时渲染之间的差距

    建筑师如何将他们喜爱的CAD工具与虚幻引擎和Twinmotion 等快速实时渲染工具结合使用 每个建筑师都有自己喜欢的设计工具.从Revit的粉丝到阿奇卡德的狂热用户,AEC专业人员通常首选CAD和B ...

  9. 从时间复杂度的角度出发,list和vector之间查找,插入,删除等数据操作的区别

    list和vector是STL(标准模板库)中常用的两种序列容器,它们各自在不同类型的操作上有着不同的优势.下面是list和vector在不同操作上的擅长之处: list的擅长操作 插入和删除操作:l ...

  10. vue要做权限管理该怎么做?如果控制到按钮级别的权限怎么做?

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 一.是什么 权限是对特定资源的访问许可,所谓权限控制,也就是确保用户只能访问到被分配的资源 而前端权限归根结底是请求的发起权,请求的发起可 ...