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. 【Azure 应用服务】Azure Function 不能被触发

    问题描述 Azure Function 不能被Postman 触发,错误信息如下: Error: write EPROTO 4020778632:error:100000f7:SSL routines ...

  2. Langchain 介绍与入门

    官方介绍 LangChain 是一个利用LLM开发应用程序的框架.它让应用程序具备: 上下文感知能力:将LLM连接到上下文源(提示说明.少量示例.用以形成其响应的内容等) 推理:依靠LLM进行推理(例 ...

  3. 【自动化】使用PlayWright+代理IP实现多环境隔离

    Playwright是由微软公司2020年初发布的新一代自动化测试工具,相较于目前最常用的Selenium,它仅用一个API即可自动执行Chromium.Firefox.WebKit等主流浏览器自动化 ...

  4. putty配置kali linux 远程连接

    首先配置sshd_config文件 VI 编辑或者使用 gedit 文本编辑, 修改的内容包括下面几个 红色标出(为了以复原建议大家 拷贝一份或者修改的地方进行标注) 之后重启服务,但是有的还是存在报 ...

  5. prometheus 监控系统

    一. 安装docker环境 二. 安装prometheus 2.1 编辑配置文件 2.2 编辑docker-compose 三. grafana 展示 四 添加监控节点 五. 监控 java进程 六. ...

  6. 发布DDD脚手架到Maven仓库,IntelliJ IDEA 配置一下即可使用

    作者:小傅哥 博客:https://bugstack.cn 项目:https://gaga.plus 沉淀.分享.成长,让自己和他人都能有所收获! 大家好,我是技术UP主,小傅哥. 这篇文章将帮助粉丝 ...

  7. Google Chart API学习(三)

    书接上回: maps-charts: <html> <head> <script type="text/javascript" src="h ...

  8. iBatis查询API

    "一切皆Socket!" 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. --有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信 ...

  9. Spring Boot学习日记4

    学会pom.xml 分析 打开pom.xml,看看Spring Boot项目的依赖: <?xml version="1.0" encoding="UTF-8&quo ...

  10. django(cookie与session、中间件、auth模块)

    一 cookie与session 1 发展史及简介 """ 发展史 1.网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的 eg:新闻.博客.文章 2.出现了 ...