长期支持版本

    社区创新版本

      算法库

      openSSL加密接口

      openSSL是常用的密码算法库软件,当前已经支持商密算法SM2/3/4,用户可以通过命令行或API调用商密算法的加解密功能。

      前置条件

      openSSL大于或等于1.1.1m-6版本:

      $ rpm -qa openssl
      openssl-1.1.1m-6.oe2209.x86_64
      

      如何使用

      场景1:使用命令行调用密码算法

      1. SM2公钥算法。

      生成SM2私钥:

      $ openssl ecparam -genkey -name SM2 -out priv.key
      

      根据私钥生成公钥:

      $ openssl ec -in priv.key -pubout -out pub.key
      read EC key
      writing EC key
      

      使用SM2算法对文件进行签名,摘要算法指定为SM3:

      $ openssl dgst -sm3 -sign priv.key -out data.sig data
      

      使用公钥进行验签:

      $ openssl dgst -sm3 -verify pub.key -signature data.sig data
      Verified OK
      
      1. SM3摘要算法。

      使用SM3算法计算数据摘要:

      $ openssl dgst -sm3 data
      SM3(data)= a794922bb9f0a034257f6c7090a3e8429801a42d422c21f1473e83b7f7eac385
      
      1. SM4对称加密算法。

      使用SM4算法对数据进行加密,其中-K和-iv分别指定加密所使用的key值和iv值,通常需要随机生成:

      $ openssl enc -sm4 -in data -K 123456789ABCDEF0123456789ABCDEF0 -iv 123456789ABCDEF0123456789ABCDEF0 -out data.enc
      

      使用SM4算法对数据进行解密:

      $ openssl enc -d -sm4 -in data.enc -K 123456789ABCDEF0123456789ABCDEF0 -iv 123456789ABCDEF0123456789ABCDEF0 -out data.raw
      

      对比加解密数据,结果一致:

      $ diff data data.raw 
      

      场景2:使用API调用密码算法

      可直接安装openssl-help并查询man手册:

      $ yum install openssl-help
      $ man sm2
      $ man EVP_sm3
      $ man EVP_sm4_cbc
      

      内核加密接口

      概述

      Linux内核的加密算法采用crypto框架管理,不同的算法实现在crypto框架中分别进行注册和调用。openEuler提供的5.10内核提供了对商密算法(SM2/3/4)的支持,其中SM2/3算法默认编译在内核中,SM4算法以内核模块的形式提供。

      前置条件

      内核大于或等于5.10.0-106版本:

      # rpm -qa kernel
      kernel-5.10.0-106.1.0.55.oe2209.x86_64
      

      如何使用

      场景1:查询内核支持的加密算法

      通过/proc/crypto查询已注册的商密算法,其中SM2/SM3算法默认加载:

      $ cat /proc/crypto | grep sm3 -A8
      name         : sm3
      driver       : sm3-generic
      module       : kernel
      priority     : 100
      refcnt       : 1
      selftest     : passed
      internal     : no
      type         : shash
      blocksize    : 64
      digestsize   : 32
      
      $ cat /proc/crypto | grep sm2 -A6
      name         : sm2
      driver       : sm2-generic
      module       : kernel
      priority     : 100
      refcnt       : 1
      selftest     : passed
      internal     : no
      type         : akcipher
      

      sm4算法默认不加载,需要先加载对应模块:

      $ modprobe sm4-generic
      $ cat /proc/crypto | grep sm4 -A8
      name         : sm4
      driver       : sm4-generic
      module       : sm4_generic
      priority     : 100
      refcnt       : 1
      selftest     : passed
      internal     : no
      type         : cipher
      blocksize    : 16
      min keysize  : 16
      max keysize  : 16
      

      场景2:算法API调用

      商密算法的调用和其他相同类型的算法调用方法一致,可参考Linux内核文档:

      https://www.kernel.org/doc/html/v5.10/crypto/userspace-if.html
      

      场景3:指令集优化

      Crypto框架支持注册架构相关的算法实现,可以通过特定指令集实现算法性能的优化。当前openEuler 5.10内核支持的指令集优化包括:

      驱动指令集支持优先级
      sm4-neon(ecb/cbc/cfb/ctr)ARM64-NEON指令集200
      sm3-avxX86-AVX指令集300
      sm4-aesni-avx (ecb/cbc/cfb/ctr)X86-AVX指令集400
      sm4-aesni-avx 2(ecb/cbc/cfb/ctr)X86-AVX2指令集500

      当同一个算法注册多个实例时,按照各个算法实例注册的priority选择默认的算法实现,priority数值越大则优先级越高,纯软件的算法实现(后缀为-generic)的priority固定为100。商密算法的指令集优化不默认使能,以内核模块的形式对用户提供,如使能SM3算法的AVX指令集优化的方法为:

      $ modprobe sm3-avx
      $ cat /proc/crypto | grep sm3 -A8
      name         : sm3
      driver       : sm3-avx
      module       : sm3_avx_x86_64
      priority     : 300
      refcnt       : 1
      selftest     : passed
      internal     : no
      type         : shash
      blocksize    : 64
      digestsize   : 32
      
      ......
      

      注意事项

      1. 算法指令集优化使能的前提是CPU支持对应指令集,可以通过/proc/cpuinfo接口查询当前CPU支持的指令集;
      2. 特定指令集的调用本身存在一定开销,因此并不能保证在所有的场景下,指令集优化的性能都高于软件实现;
      3. 部分指令集优化存在一定限制,如neon指令集仅在支持并行计算的加密模式下存在优化效果。

      文档捉虫

      “有虫”文档片段

      问题描述

      提交类型 issue

      有点复杂...

      找人问问吧。

      PR

      小问题,全程线上修改...

      一键搞定!

      问题类型
      规范和低错类

      ● 错别字或拼写错误;标点符号使用错误;

      ● 链接错误、空单元格、格式错误;

      ● 英文中包含中文字符;

      ● 界面和描述不一致,但不影响操作;

      ● 表述不通顺,但不影响理解;

      ● 版本号不匹配:如软件包名称、界面版本号;

      易用性

      ● 关键步骤错误或缺失,无法指导用户完成任务;

      ● 缺少必要的前提条件、注意事项等;

      ● 图形、表格、文字等晦涩难懂;

      ● 逻辑不清晰,该分类、分项、分步骤的没有给出;

      正确性

      ● 技术原理、功能、规格等描述和软件不一致,存在错误;

      ● 原理图、架构图等存在错误;

      ● 命令、命令参数等错误;

      ● 代码片段错误;

      ● 命令无法完成对应功能;

      ● 界面错误,无法指导操作;

      风险提示

      ● 对重要数据或系统存在风险的操作,缺少安全提示;

      内容合规

      ● 违反法律法规,涉及政治、领土主权等敏感词;

      ● 内容侵权;

      您对文档的总体满意度

      非常不满意
      非常满意
      提交
      根据您的反馈,会自动生成issue模板。您只需点击按钮,创建issue即可。
      文档捉虫
      编组 3备份