首页 > 其他分享 >国密 SM2 的非对称加密解密过程

国密 SM2 的非对称加密解密过程

时间:2024-04-12 22:33:43浏览次数:19  
标签:BigInteger 公钥 私钥 32 SM2 椭圆 国密 非对称 C1

国密 SM2 的非对称加密解密过程

椭圆曲线

椭圆曲线是由一组方程描述的点的集合:

y2 = x3 + ax + b 其中 a, b 满足 (4a3 + 27b2 ≠ 0)

SM2 定义了一个 sm2p256v1 的椭圆曲线方程

各种参数

BigInteger p = FromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFF");
BigInteger a = FromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00000000FFFFFFFFFFFFFFFC");
BigInteger b = FromHex("28E9FA9E9D9F5E344D5A9E4BCF6509A7F39789F515AB8F92DDBCBD414D940E93");
BigInteger n = FromHex("FFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFF7203DF6B21C6052B53BBF40939D54123");
BigInteger h = BigInteger.One;

Point G coord: (22963146547237050559479531362550074578802567295341616970375194840604139615431, 85132369209828568825618990617112496413088388631904505083283536607588877201568)

公钥,私钥

  • 私钥:

可以随机生成一个 BigInteger D,必须符合区间 [1, n - 1]

  • 公钥:

私钥 D * G(Point) 得到的一个 Point: Q

隐函数微分 dy/dx = (3x² + a) / (2y)

椭圆曲线密码(Elliptic Curve Cryptography,ECC)的安全性主要基于椭圆曲线离散对数问题(Elliptic Curve Discrete Logarithm Problem,ECDLP)的难度。简单来说,如果知道椭圆曲线上的两个点P和Q,并且知道存在一个整数d,使得dP=Q(这里的乘法表示点的数乘,就是把点P加d次),那么想从P和Q推算出d是几乎不可能的。这就是椭圆曲线离散对数问题。

这个乘法异常的复杂 D * G 就是 D 个 G点相加,2 * G 就是过这个点的切线与椭圆曲线的交点,和 x 轴的对称点,还有有限域的处理,求同余...。
所以也能看出来知道公钥和 G 也很难求出 私钥 D

私钥和公钥的关系:

D * G = Q

加密过程

公钥: Q

  1. 随机生成一个 BigInteger K
  2. K * Q 生成一个 Point(x, y) KPB

C2: 每对原文 byte[] 每32个byte z循环处理,序号初始为1

32 和后续待处理字节长度取小值

  1. 对 KPB(x,y), 序号做摘要 记作 buf: byte[32]
  2. 这32个字节 分别和 buf的32个字节做异或运算 z[zOff + i] ^= buf[xOff + i];
  3. 序号 + 1 处理后续的

C1: k * G

C3: KPB.x 原文byte[], KPB.y 做摘要

解密过程

私钥: D

因为:C1 = K * G
所以 C1 * D = K * G * D = K * (G * D) = K * Q = KPB

然后: 异或运算满足 A ^ B ^ A = B
所以对 C2来相同的运算即可得到原文

C3用来验证是否一致

总结

知道密文和公钥无法解密,因为不知道随机生成的 K

C1 部分的生成和公私钥的生成是一模一样的,类似的原理很难通过 C1 和 G 倒推出K,解不了密

加密后占用空间 C2 和原文长度一致
C1 不压缩 标志位 + x + y = 65, C3 = 摘要长度 32 增大 97
C1 压缩 标志位 + x = 33 C3 = 摘要长度 32 增大 65

然后一般的结果有 C1C2C3 和 C1C3C2两种排列模式
实际情况中,针对这三部分有无数种基于 ASN.1 的包装方式,最终都是按照 C1C2C3 组装好进行解密

标签:BigInteger,公钥,私钥,32,SM2,椭圆,国密,非对称,C1
From: https://www.cnblogs.com/huiyuanai709/p/18132263/sm2_encrypt_decrypt

相关文章

  • 国密 SM2 的非对称签名验签过程
    国密SM2的非对称签名验签过程介绍非对称加密确保了消息传输中的保密性,但是由于使用公钥加密,而公钥是分发出去的,可能泄露,谁都可以使用公钥加密发送消息。因此为了保证收到的消息是由对应的发送者发出的,就需要用到非对称签名和验签逻辑,发送者通过自己的私钥进行对消息进行签名,......
  • 如何用加密技术守护你的数字世界(4):非对称加密
    该文章Github地址:https://github.com/AntonyCheng/encryption-notes【有条件的情况下推荐直接访问GitHub以获取最新的代码更新】在此介绍一下作者开源的SpringBoot项目初始化模板(Github仓库地址:https://github.com/AntonyCheng/spring-boot-init-template【有条件的情况......
  • RSA非对称加密和开放鉴权
    #导入base64模块来进行base64编码importbase64importrsaimporttimeclassHandleSign:#定义服务器公钥,往往可以存放在公钥文件中,通过抓包获取server_pub="""-----BEGINPUBLICKEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQENQujkLfZfc5Tu9Z......
  • linux - GPG 非对称加密工具
    GNUPrivacyGuard(GPG)是一种主要设计用于使用公钥加密技术对数据进行加密和签名的工具。然而,它还包含仅使用用户提供的密码来加密数据的能力,并且支持多种加密算法。1.查看gpg支持的算法gpg--version2.生成密钥#使用默认选择gpg--generate-key#更灵活的算法选择g......
  • 使用OpenEuler x86_64 实现Bouncycastle SM2加解密
    使用OpenEulerx86_64实现BouncycastleSM2加解密一、安装运行环境安装java和mavensudoyuminstalljava-17-openjdksudoyuminstallmaven安装完成后,你就可以在OpenEuler上使用Maven来管理Java项目了。二、创建项目工程在项目根目录下创建pom.xml文件用......
  • 商密测评必知:国密算法的重要性与应用
    国密算法是指由中国国家密码管理局发布的密码算法标准,旨在保障国家信息安全。目前,国家密码管理局已发布了一系列国产商用密码标准算法,包括SM1(SCB2)、SM2、SM3、SM4、SM7、SM9以及祖冲之密码算法(ZUC)等。通过在金融、电子政务及安防等领域广泛应用国密算法,在对敏感数据进行机密性......
  • 如何进行设备的非对称性能测试
    非对称性能测试介绍RFC2544是RFC组织提出的用于评测网络互联设备(防火墙、IDS、Switch等)的国际标准。主要是对RFC1242中定义的性能评测参数的具体测试方法、结果的提交形式作了较详细的规定。标准中定义了4个重要的参数:吞吐量(Throughput)、丢包率(LostRate)、时延(Latency)和背靠背(Bac......
  • 利用openssl生成SM2公私钥对
      openssl1.1.1+版本增加了对SM2的支持,所以我们就能直接使用这些版本的opsnssl生成SM2的公私钥对。首先我们得在Linux或者Windows服务器中安装对应版本的openssl库,具体过程略。软件包请到官网下载:https://www.openssl.org/安装完成后,使用下列命令查看该版本的op......
  • 常用加密及其相关的概念、简介(对称、AES、非对称、RSA、散列、HASH、消息认证码、HMAC
    PS:要转载请注明出处,本人版权所有。PS:这个只是基于《我自己》的理解,如果和你的原则及想法相冲突,请谅解,勿喷。环境说明  无前言  在之前,一直是通过生活、工作零零碎碎接触过加密及加密算法相关的信息,但是也只是听说过,并不知道这些算法用处和区别。  最近由于工作安......
  • 对称加密和非对称加密
    一、对称加密和非对称加密对称加密和非对称加密是两种常用的加密算法。对称加密(SymmetricEncryption)使用相同的密钥来进行加密和解密。常见的对称加密算法有:DES(DataEncryptionStandard)、3DES(TripleDES)、AES(AdvancedEncryptionStandard)和RC4(RivestCipher4)等。在对称加密......