国密算法Go语言实现(详解)(六) ——SM2(椭圆曲线公钥密码算法)

本文详细介绍了如何在Go语言中实现国密SM2算法,包括椭圆曲线公钥密码算法的关键部分。提供了一个原创代码库链接,并对代码进行了修改以符合GO语言标准包规范,同时加入了中文注释以解释逻辑。文章还定义了相关常量、变量,如BitSize、KeyBytes、UnCompress,以及CipherTextType枚举类,用于区分不同版本的国标规范。此外,文章还介绍了SM2推荐的256位椭圆曲线参数和简化后的曲线方程。
摘要由CSDN通过智能技术生成

国密算法Go语言实现(详解)(六) ——SM2(椭圆曲线公钥密码算法)


原创代码:https://github.com/ZZMarquis/gm

引用时,请导入原创代码库。本文仅以注释方式详解代码逻辑,供学习研究使用。

对原创代码的修改内容

  1. 修改了部分常量、变量、结构体属性的名称, 以便与GO语言标准包规范相统一
  2. 加入中文注释,解释代码逻辑

注释者及联系邮箱

Paul Lee
paul_lee0919@163.com

const (
	// BitSize 代表曲线基础域的比特长度
	BitSize = 256
	// KeyBytes 代表秘钥的字节长度,其中加7整除8其实是“向上取整”,用以兼容基础域位数不是8的整数倍的情况。
	KeyBytes = (BitSize + 7) / 8
	// UnCompress 代表椭圆曲线上的点采用“未压缩”的形式存储,占1个字节,详见国标1-4.1.(b)的定义。
	UnCompress = 0x04
)

以上为SM2算法定义的三个常数:

  1. BitSize 代表曲线基础域的比特长度
  2. KeyBytes 代表秘钥的字节长度,其中加7整除8其实是“向上取整”,用以兼容基础域位数不是8的整数倍的情况
  3. UnCompress 代表椭圆曲线上的点采用“未压缩”的形式存储,占1个字节,详见国标1-4.1.(b)的定义
// CipherTextType 是为了区分两个版本SM2国标在密文形式上的区别而创设的枚举类
type CipherTextType int32

const (
	//C1C2C3 代表旧标准[GM/T 0009-2012]的密文顺序
	C1C2C3 CipherTextType = 1
	//C1C3C2 代表新标准[GB/T 32918-2016]的密文顺序
	C1C3C2 CipherTextType = 2
)

CipherTextType是为了区分新旧两个版本的国标规范而设置的密文顺序标识枚举类,其中:

  1. C1C2C3 代表旧标准[GM/T 0009-2012]的密文顺序
  2. C1C3C2 代表新标准[GB/T 32918-2016]的密文顺序
var 
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,用于实现数字签名、密钥交换和数据加密等功能。相比于RSA算法SM2算法基于椭圆曲线上点群离散对数难题,具有更高的密码强度。\[1\] 关于SM2算法的移植,目前已经在我国的密码应用领域得到广泛应用。国家密码管理局于2011年发布了《关于做好公钥密码算法升级工作的通知》,要求在建和拟建公钥密码基础设施电子认证系统和密钥管理系统中使用SM2算法。同时,自2011年7月1日起,投入运行并使用公钥密码的信息系统也应使用SM2算法。\[2\] SM2算法的移植工作主要包括将算法应用到相应的系统和设备中,并确保其安全性和性能。移植过程中需要考虑算法实现细节、密钥管理、算法性能优化等方面的问题。同时,还需要进行相关的测试和验证,确保移植后的算法能够正常运行并满足安全需求。 总之,SM2椭圆曲线公钥密码算法已经在我国得到广泛应用,并且有相关的政策要求在密码应用系统中使用该算法。移植工作需要考虑算法实现和性能优化,并进行相应的测试和验证。\[1\]\[2\] #### 引用[.reference_title] - *1* *2* *3* [sm2国密算法的纯c语言版本,使用于单片机平台(静态内存分配)](https://blog.csdn.net/qq8864/article/details/100582268)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值