SM9算法C++实现系列目录:

  • 基于JPBC的SM9算法的java实现与测试

  • 国密SM9算法C++实现之0:源码下载地址

  • 国密SM9算法C++实现之一:算法简介

  • 国密SM9算法C++实现之二:测试工具

  • 国密SM9算法C++实现之三:椭圆曲线接口、参数初始化

  • 国密SM9算法C++实现之四:基本功能函数与KGC接口的实现

  • 国密SM9算法C++实现之五:签名验签算法

  • 国密SM9算法C++实现之六:密钥封装解封算法

  • 国密SM9算法C++实现之七:加密解密算法

  • 国密SM9算法C++实现之八:密钥交换算法

  • 国密SM9算法C++实现之九:算法功能与测试例子

国密SM9算法C++实现之一:算法简介

文章目录

  • 国密SM9算法C++实现之一:算法简介
    • @[toc]
    • 曲线参数
    • 密钥部分
    • 算法部分
    • 用户身份标识符:ID

SM9标识密码算法是由国密局发布的一种IBE(Identity-Based Encryption)算法。IBE算法以用户的身份标识作为公钥,不依赖于数字证书。国密SM9算法标准包括5个文档,分别为:
《GMT 0044-2016 SM9标识密码算法:第1部分 总则》
《GMT 0044-2016 SM9标识密码算法:第2部分 数字签名算法》
《GMT 0044-2016 SM9标识密码算法:第3部分 密钥交换协议》
《GMT 0044-2016 SM9标识密码算法:第4部分 密钥封装机制和公钥加密算法》
《GMT 0044-2016 SM9标识密码算法:第5部分 参数定义》

曲线参数

SM9是基于256位的BN椭圆曲线的,使用素域 FpFpFp 和有限域 Fp2Fp^2Fp2,双线性对使用R-ate。曲线参数主要包括:

  • 椭圆曲线方程:y2=x3+by^2 = x^3 + by2=x3+b
  • 方程参数b:05
  • 参数t
    60000000 0058F98A
  • 基域特征q
    B6400000 02A3A6F1 D603AB4F F58EC745 21F2934B 1A7AEEDB E56F9B27 E351457D
  • 群的阶N
    B6400000 02A3A6F1 D603AB4F F58EC744 49F2934B 18EA8BEE E56EE19C D69ECF25
  • 余因子cf:1
  • 群1 的生成元P1 = (xp1 , yp1)
    坐标xp1:
    93DE051D 62BF718F F5ED0704 487D01D6 E1E40869 09DC3280 E8C4E481 7C66DDDD
    坐标yp1:
    21FE8DDA 4F21E607 63106512 5C395BBC 1C1C00CB FA602435 0C464CD7 0A3EA616
  • 群2 的生成元P2 = (xp2, yp2)
    坐标xp2:
    (85AEF3D0 78640C98 597B6027 B441A01F F1DD2C19 0F5E93C4 54806C11 D8806141 ,
    37227552 92130B08 D2AAB97F D34EC120 EE265948 D19C17AB F9B7213B AF82D65B )
    坐标yp2:
    (17509B09 2E845C12 66BA0D26 2CBEE6ED 0736A96F A347C8BD 856DC76B 84EBEB96 ,
    A7CF28D5 19BE3DA6 5F317015 3D278FF2 47EFBA98 A71A0811 6215BBA5 C999A7C7 )

详细参数可参考国密局SM9文档。

SM9算法主要包括密钥部分部分和算法部分。

  • 密钥部分:包括主密钥对(公钥和私钥)和用户私钥
  • 算法部分:包括签名验签算法、密钥封装解封算法、加密解密算法和密钥交换算法

密钥部分

SM9算法的密钥由KGC(密钥生成中心)产生,主要包括KGC的主密钥对和用户的私钥。
主密钥对分为签名主密钥对加密主密钥对

  • 签名主密钥对:其私钥是一个在[1,N-1]范围内的随机数;公钥是G2群的基点P2的倍点,倍数为私钥。
  • 加密主密钥对:其私钥是一个在[1,N-1]范围内的随机数;公钥是G1群的基点P1的倍点,倍数为私钥。

主密钥对的公私钥用在不同场景,其中主私钥仅用于计算用户私钥;主公钥则由KGC公开并用在其他部分。同时,签名主公钥仅用于签名和验签算法;加密主公钥则用于密钥封装、加密和密钥交换中。

用户私钥由KGC产生,包括签名私钥和加密私钥。

  • 签名私钥:是G1群的基点P1的倍点。签名私钥仅用于签名中
  • 加密私钥:是G2群的基点P2的倍点。加密私钥用于密钥解封、解密和密钥交换中私钥

KGC使用主私钥和用户身份标识(以下简称ID)生成用户的私钥。

算法部分

SM9算法包括签名验签、密钥封装解封、加密解密和密钥交换四大部分。

  • 签名算法:使用签名主公钥和签名者的签名私钥给数据签名
  • 验签算法:使用签名主公钥和签名者ID验证签名
  • 密钥封装算法:使用加密主公钥和密钥解封者(使用对称密钥的另一方)ID封装一个对称密钥
  • 密钥解封算法:使用加密主公钥和密钥解封者ID解出封装了的对称密钥
  • 加密算法:使用加密主公钥和解密者ID加密数据
  • 解密算法:使用解密者的加密私钥和解密者ID解密数据
  • 密钥交换算法:密钥交换双方使用加密主公钥、自己的加密私钥和双方的ID协商出一个共享密钥

用户身份标识符:ID

总结上述描述,可见在SM9算法中的用户身份标识ID主要用于用于私钥生成、验签、密钥封装解封、加密解密封和密钥交换。各部分的ID描述如下:

  • 私钥生成:ID是私钥属主的ID
  • 验签:ID是签名者的ID
  • 密钥封装解封:ID是解封者的ID
  • 加密解密:ID是解密者的ID
  • 密钥交换:发起方和响应方都需要自己的ID和对方的ID

SM9算法的简介就介绍到这里,具体的算法描述和数学理论课参考SM9算法标准,以及后续文章。

国密SM9算法C++实现之一:算法简介相关推荐

  1. 国密SM9算法C++实现之八:密钥交换算法

    SM9算法C++实现系列目录: 基于JPBC的SM9算法的java实现与测试 国密SM9算法C++实现之0:源码下载地址 国密SM9算法C++实现之一:算法简介 国密SM9算法C++实现之二:测试工具 ...

  2. 国密SM9算法C++实现之七:加密解密算法

    SM9算法C++实现系列目录: 基于JPBC的SM9算法的java实现与测试 国密SM9算法C++实现之0:源码下载地址 国密SM9算法C++实现之一:算法简介 国密SM9算法C++实现之二:测试工具 ...

  3. 国密SM9算法C++实现之九:算法功能与测试例子

    SM9算法C++实现系列目录: 基于JPBC的SM9算法的java实现与测试 国密SM9算法C++实现之0:源码下载地址 国密SM9算法C++实现之一:算法简介 国密SM9算法C++实现之二:测试工具 ...

  4. 国密SM9算法C++实现之五:签名验签算法

    SM9算法C++实现系列目录: 基于JPBC的SM9算法的java实现与测试 国密SM9算法C++实现之0:源码下载地址 国密SM9算法C++实现之一:算法简介 国密SM9算法C++实现之二:测试工具 ...

  5. 国密SM9算法C++实现之六:密钥封装解封算法

    SM9算法C++实现系列目录: 基于JPBC的SM9算法的java实现与测试 国密SM9算法C++实现之0:源码下载地址 国密SM9算法C++实现之一:算法简介 国密SM9算法C++实现之二:测试工具 ...

  6. 国密SM9算法C++实现之三:椭圆曲线接口、参数初始化

    SM9算法C++实现系列目录: 基于JPBC的SM9算法的java实现与测试 国密SM9算法C++实现之0:源码下载地址 国密SM9算法C++实现之一:算法简介 国密SM9算法C++实现之二:测试工具 ...

  7. 国密SM9算法C++实现之四:基本功能函数与KGC接口的实现

    SM9算法C++实现系列目录: 基于JPBC的SM9算法的java实现与测试 国密SM9算法C++实现之0:源码下载地址 国密SM9算法C++实现之一:算法简介 国密SM9算法C++实现之二:测试工具 ...

  8. 国密局公开SM2和SM3算法或预示中国商密算法将走向开放

    临近2010年年底的时候,在国密局的网站上公布了基于椭圆曲线ECC的SM2公开密钥国密算法和SM3杂凑算法.加上原来的SM1商密对称算法,中国定义的算法终于开始成熟并且以一个大方的姿态展示出来了. 此 ...

  9. 国密SM9系列算法验证工具

    国密局SM9算法验证工具:SM9签名.SM9加解密.SM9秘钥交换.SM9秘钥封装.中间步骤计算-

最新文章

  1. python中的装饰器(以及多个装饰器详细执行过程)
  2. vue 在 html 中自定义 tag
  3. 【UML】对象图Object diagram(转)
  4. 设计模式是什么鬼(状态)
  5. 全国主要省份城市的DNS服务器地址
  6. java获取局域网内主机,java怎么获取局域网内所有主机ip
  7. PHP函数set_magic_quotes_runtime()的作用
  8. 【生信进阶练习1000days】day11day12-GEO data mining
  9. 老骥伏羲,某讯遗产K3路由器2021年刷机指南。
  10. IO、NIO和Netty
  11. 使用秀米编排点击展示H5
  12. mellanox 网卡驱动,Mellanox网卡OFED驱动安装
  13. 如何辩证看待技术与业务的关系
  14. php json encode 参数,PHP json_encode函数的参数说明与用法
  15. Hi3516EV200设置手动曝光时间
  16. linux下cuda cudnn安装 没有权限的安装
  17. 在Linux中安装Pentaho Server 9.1并使用MySQL作为存储库
  18. python设置变量age和tall的值、编写一个_Python变量学习
  19. STM32 CAN通信的学习笔记总结(从小白开始)
  20. 无线路由Buffalo G300N V2 CH小测

热门文章

  1. arduino人体红外报警实验
  2. 不可不知的量化因子模型选股策略
  3. CCNA-思科网络基础(IP地址 MAC地址 DNS DHCP PING )
  4. 领秀d8 android4.5 root,Root神器重大更新 KingRoot V4.5发布
  5. linux 手机 rom image,安卓手机刷机界面image 文件夹什么意思 里面的文件都是什么作用...
  6. Blender 制作刀光特效所用模型
  7. 数据库之order by
  8. 分享大神的一些博文、视频、资料--持续更新
  9. 在每一个时光寻找,寻找适合我的孤岛。
  10. CTF比赛工具自收集