openGauss 支持国密 SM3 和 SM4 算法

栏目: 软件资讯 · 发布时间: 3年前

内容简介:1. 国密算法介绍 国密即国家密码局认定的国产密码算法,常用的算法有 SM1,SM2,SM3,SM4,其中密钥长度和分组长度均为 128 位。针对银行客户对数据库安全能力的诉求以及提高产品安全竞争力的要求,进行数据库企业...

1. 国密算法介绍

密即国家密码局认定的国产密码算法,常用的算法有 SM1,SM2,SM3,SM4,其中密钥长度和分组长度均为 128 位。针对银行客户对数据库安全能力的诉求以及提高产品安全竞争力的要求,进行数据库企业级安全能力增强,openGauss 自 2.0.0版本 支持了国密算法,主要包括用户认证支持国密SM3算法,支持利用国密 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,并重启数据库使该参数生效,则之后创建的用户将采用 SM3 算法进行明文密码的加密。

openGauss 支持国密 SM3 和 SM4 算法

(2)创建用户

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

openGauss 支持国密 SM3 和 SM4 算法

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

openGauss 支持国密 SM3 和 SM4 算法

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

openGauss 支持国密 SM3 和 SM4 算法

对于利用SM3加密算法创建的用户,只有加密算法和认证方式均为SM3算法时,认证才会通过。

针对SM3用户,当通过JDBC远程连接时,需手动下载Jar包bcprov-jdk15on,并导入至应用程序中。

下载:https://mvnrepository.com/artifact/org.bouncycastle/bcprov-jdk15on/1.68

对于创建其他认证方式的用户,过程与SM3类似,此处不再赘述。

2.2 实现原理

openGauss 使用 RFC5802 口令认证方案

  • 用户秘钥生成

RFC5802秘钥衍生过程如下图所示
openGauss 支持国密 SM3 和 SM4 算法

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口令认证流程如下图所示:


openGauss 支持国密 SM3 和 SM4 算法

说明:

  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  配置的认证方式,与客户端进行相应的认证交互。

3. 国密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_aes128(encryptstr, keystr)

       描述:以keystr为密钥对encryptstr字符串进行加密,返回加密后的字符串。

- gs_decrypt_aes128(decryptstr,keystr)       

       描述:以keystr为密钥对decryptstr字符串进行解密,返回解密后的字符串

openGauss 支持国密 SM3 和 SM4 算法

gs_encrypt和gs_decrypt函数示意:

- gs_encrypt(encryptstr, keystr, algorithm)

      描述:以keystr为密钥对encryptstr字符串利用algorithm进行加密,返回加密后的字符串。可选的algorithm为sm4和aes128。

- gs_decrypt(decryptstr,keystr, algorithm)

       描述:以keystr为密钥对decryptstr字符串利用algorithm进行解密,返回解密后的字符串。可选的algorithm为sm4和aes128。

openGauss 支持国密 SM3 和 SM4 算法

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

openGauss 支持国密 SM3 和 SM4 算法

openGauss 支持国密 SM3 和 SM4 算法

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


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

The Four

The Four

Scott Galloway / Portfolio / 2017-10-3 / USD 28.00

NEW YORK TIMES BESTSELLER USA TODAY BESTSELLER Amazon, Apple, Facebook, and Google are the four most influential companies on the planet. Just about everyone thinks they know how they got there.......一起来看看 《The Four》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

MD5 加密
MD5 加密

MD5 加密工具