2021SC@SDUSC

本周对于国密SM2算法原理进行简要的介绍,方便后续对其在CUDA上进行设计。

一、SM2加解密过程

SM2 国密非对称加密算法,属于椭圆曲线密码体制(ECC
Author:John
基于椭圆曲线的离散对数难题,目前 SM2 256 bit 加密算法是相当安全的,相当于 RSA 2048 bit 及以上的安全性
有公钥、私钥之分,公钥给别人,可以在一定范围内公开,私钥留给自己,必须保密。由私钥可以计算公钥;由公钥计算私钥,是相当困难的,现阶段是不可能

加密过程:
    设需要发送的消息为比特串 M ,klen 为 M 的比特长度。
    为了对明文 M 进行加密,作为加密者的用户 A 应实现以下运算步骤:
    A1:用随机数发生器产生随机数k∈[1,n-1];
    A2:计算椭圆曲线点 C1=[k]G=(x1,y1),([k]G 表示 k*G )将C1的数据类型转换为比特串;
    A3:计算椭圆曲线点 S=[h]PB,若S是无穷远点,则报错并退出;
    A4:计算椭圆曲线点 [k]PB=(x2,y2),将坐标 x2、y2 的数据类型转换为比特串;
    A5:计算t=KDF(x2 ∥ y2, klen),若 t 为全0比特串,则返回 A1;
    A6:计算C2 = M ⊕ t;
    A7:计算C3 = Hash(x2 ∥ M ∥ y2);
    A8:输出密文C = C1 ∥ C2 ∥ C3。
解密过程:
    设klen为密文中C2的比特长度。
    为了对密文C=C1 ∥ C2 ∥ C3 进行解密,作为解密者的用户 B 应实现以下运算步骤:
    B1:从C中取出比特串C1,将C1的数据类型转换为椭圆曲线上的点,验证C1是否满足椭圆曲线方程,若不满足则报错并退出;
    B2:计算椭圆曲线点 S=[h]C1,若S是无穷远点,则报错并退出;
    B3:计算[dB]C1=(x2,y2),将坐标x2、y2的数据类型转换为比特串;
    B4:计算t=KDF(x2 ∥ y2, klen),若t为全0比特串,则报错并退出;
    B5:从C中取出比特串C2,计算M′ = C2 ⊕ t;
    B6:计算u = Hash(x2 ∥ M′ ∥ y2),从C中取出比特串C3,若u != C3,则报错并退出;
    B7:输出明文M′。
原理:
     用户 A 持有公钥PB=[dB]G(仅有PB值),用户 B 持有私钥 dB
     加密:C1=k*G  C2=M⊕(k*PB)      解密:M′=C2 ⊕ (dB*C1)     # 这里只叙述基本原理,便于理解
     证明:dB*C1=dB*k*G=k*(dB*G)=k*PB  因此,M′=C2 ⊕ (dB*C1)=M⊕(k*PB)⊕(k*PB)=M  得证

注:此实现算法所研究的椭圆曲线是基于域 Fp 上的椭圆曲线

安全参数设置:
     随机数 k 和私钥 dB 最好大点。

加密流程图如下图:

SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高
学习sm2算法,首先学习ECC算法。

二、ECC算法

首先,了解“椭圆曲线离散对数问题”,如下图:

上图中Q=kP不是简单的代数乘法 ,该表达式会在后面分析到。我们从图中信息很容易知道:已知私钥K基点P是很容易求出公钥Q的,但已知基点P公钥Q私钥K是非常困难的。这样的单向性正适合密码学。

接着来看“椭圆曲线”:

这里的“椭圆曲线”不能与高中所学的椭圆曲线方程划等号,这里所说的“椭圆曲线”,形状并不是椭圆。它知识类似于计算一个椭圆周长的方程而这样命名的。椭圆曲线始终关于x轴对称。

如图所示,括号内的条件是为了保证曲线不包含奇点,即曲线上任意一点都存在切线。

接下来,讲解其加法是怎样计算的。

计算A+B,首先过A、B两点作一条直线,交椭圆曲线于一点。再经过该点作一条平行于y轴的直线交椭圆曲线于另一点(也就是图中的C点),那么C=A+B

可以看出这里的加法区别于代数上坐标的加法运算。根据这个算法很容易就知道A+(-A)=∞,如上图右边部分,本身连线就与y轴平行,无交点(相当于相交于一个无穷远点)。

由上图就可以知道如何计算A+A也就是2A了。若计算A+A,根据上面介绍的算法很容易知道,假设B无限接近于A,则不难看出A+A实际上就是过A点做椭圆曲线的切线交椭圆曲线于一点,再通过该点作平行于y轴的直线交曲线于另一点(如上图C点),那么C=2A=A+A。以此类推计算A的倍数例如3A,就是A+2A,将其看作A+B就可以作图得出C,即3A。

综上所述,我们就可以知道其中的单向性了。Q=kP,如同上述的3A=3*A,已知k=3,P=A,是很容易求出3A的,但已知Q=3A,P=A,就很难推出k=3。由于这里举例中k太小,不好理解,我们来看下图:

如上图你会发现A(图中为G)的倍数没有任何的规律,这就意味着越难破解,这不正是密码学所需要的?因此,回到之前你就能理解为什么很难推出k=3了。

PQ公开,k保密。因为Q=kP,所以M+rQ-k(rP)=M.

 以上图片介绍了“有限域” ,以及在有限域上的椭圆曲线运算。假设A、B两点的坐标,求C(也就是A+B)的坐标,根据上图公式一步一步计算得到对应坐标即可。

由上图若计算2A用人工手算发现过程比较繁琐,这仅仅是2A,更别说k取大值,因此下面有较为简化的算法:

通过上面知识的简单学习基本掌握了ECC加密算法。

ECC算法描述
  1、用户A选定一条适合加密的椭圆曲线Ep(a,b)(如:y2=x3+ax+b),并取椭圆曲线上一点,作为基点G。
  2、用户A选择一个私有密钥k,并生成公开密钥(公钥PB)K=kG。
  3、用户A将Ep(a,b)和点(公钥)K,G传给用户B。
  4、用户B接到信息后 ,将待传输的明文(M)编码到Ep(a,b)上一点M,并产生一个随机整数r(r<n)。加密开始
  5、用户B计算点C1=M+rK;C2=rG。
  6、用户B将C1、C2传给用户A。
  7、用户A接到信息后,计算C1-kC2,结果就是点M。因为C1-kC2=M+rK-k(rG)=M+rK-r(kG)=M
  再对点M进行解码就可以得到明文。
  密码学中,描述一条Fp上的椭圆曲线,常用到六个参量:
  T=(p,a,b,G,n,h)。
  (p 、a 、b 用来确定一条椭圆曲线,G为基点,n为点G的阶,h 是椭圆曲线上所有点的个数m与n相除的整数部分)
  这几个参量取值的选择,直接影响了加密的安全性。参量值一般要求满足以下几个条件:
  1、p 当然越大越安全,但越大,计算速度会变慢,200位左右可以满足一般安全要求;
  2、p≠n×h;
  3、pt≠1 (mod n),1≤t<20;
  4、4a3+27b2≠0 (mod p);
  5、n 为素数;
  6、h≤4。

三、SM2算法简介

SM2算法与RSA算法一样,同属于非对称算法体系,是属于椭圆曲线加密(ECC)算法的一种。但与RSA算法不同的是RSA算法是基于大整数分解数学难题,SM2算法是基于椭圆曲线上点群离散对数难题。
  相对于RSA算法,SM2算法具有以下优点:
  安全性高。192位的SM2密码强度已经比RSA 2048位密码强度要高。
  存储空间小。SM2算法的密码一般使用192-256位,RSA算法密码一般需要使用2048-4096位。
  签名速度快。SM2在私钥运算上,速度远比RSA快得多。
  国产算法。由国家密码管理部门制订规范,不存在不可公开的密码,保证无国外可利用的后门。
  目前认为在国内被非常广泛使用的RSA 1024位算法不再安全,国家密码管理局下达了通知:自2011年7月1日起,投入运行并使用公钥密码的信息系统,应使用SM2椭圆曲线密码算法。

详细的SM2算法原理流程步骤参考博客:SM2 SM3 SM4简介_cqwei1987的博客-CSDN博客

本篇参考博客:密码学算法之 SM2国密算法_BlackNight168的博客-CSDN博客_sm2算法

参考视频:【ECC加密算法】| ECC加密原理详解| 椭圆曲线加密| 密码学| 信息安全_哔哩哔哩_bilibili

山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第七周)相关推荐

  1. 山东大学软件工程应用与实践——使用CUDA/GPU技术加速密码运算(第五周)

    2021SC@SDUSC 很抱歉由于自身身体原因,本来打算这周对AES算法进行CPU和GPU的实际检测比较分析进行推迟.我决定对于SHA.AES.RSA三个算法在CPU和GPU性能对比放在最后几周. ...

  2. 山东大学软件工程应用与实践——GMSSL开源库(四)——SM9数字签名算法及验证的源代码分析

    2021SC@SDUSC 目录 一.引言 二.密钥的生成数字签名与签名验证相关代码 1.判定函数 2.签名的初始化函数 3.签名执行函数 4.真正的签名函数 5.签名验证初始化函数 6.签名验证执行函 ...

  3. 山东大学软件工程应用与实践——GMSSL开源库(一) ——WINDOWS下GMSSL的安装与编译的超详细保姆级攻略

    2021SC@SDUSC GMSSL简介 GmSSL是一个开源的密码工具箱,支持SM2/SM3/SM4/SM9/ZUC等国密(国家商用密码)算法.SM2国密数字证书及基于SM2证书的SSL/TLS安全 ...

  4. 山东大学软件工程应用与实践——WeaselTSF(一)

    2021SC@SDUSC 文章目录 简单介绍 WeaselTSF.h 从本篇博客开始分析WeaselTFS这个包中的代码. 简单介绍 WeaselTSF.vcproj This is the main ...

  5. <2021SC@SDUSC>博客(5)山东大学软件工程应用与实践JPress代码分析(四)

    2021SC@SDUSC 前言 在前面三篇文章中,我对 JPress 项目的基础框架 JFinal 和 JBoot 在使用层面进行了拆解与分析.在接下来的文章中,我将在代码层面对 JPress 项目中 ...

  6. <2021SC@SDUSC>博客(9)山东大学软件工程应用与实践Jpress代码分析(8)

    2021SC@SDUSC Lucene和ElasticSearch 在上一篇博客中提到的Elasticsearch是一个基于Lucene搜索引擎为核心构建的开源,分布式,RESTful搜索服务器.这里 ...

  7. 山东大学软件工程应用与实践——GMSSL开源库(二)——浅尝SM9

    2021SC@SDUSC 概述 为了降低公开密钥系统中密钥和证书管理的复杂性,以色列科学家.RSA算法发明人之一Adi Shamir在1984年提出了标识密码(Identity-Based Crypt ...

  8. 山东大学软件工程应用与实践——GMSSL开源库(九)——SM9密钥封装与公钥加密的源代码分析

    2021SC@SDUSC 文章目录 int SM9_wrap_key(密钥的封装) int SM9_unwrap_key(密钥的解封) int SM9_encrypt(公钥加密算法) int SM9_ ...

  9. 山东大学软件工程应用与实践——Pig代码综述

    2021SC@SDUSC 目录 一.Pig是什么? 二.Pig的特点 三.Pig安装部署 四.组内分工 一.Pig是什么? Pig 是Apache平台下的一个免费开源项目,是MapReduce的一个抽 ...

最新文章

  1. luogu P5142 区间方差(线段树、乘法逆元)
  2. 谈谈CTO、技术总监、首席架构师的区别
  3. SQL注入——基于联合查询的字符型GET注入(三)
  4. js call,apply,bind三个方法的区别
  5. 前端学习(1270):接口调用async/await
  6. 函数返回结构体指针_9.3 结构体指针
  7. 【警惕】大量未修复WebLogic WSAT组件RCE漏洞的主机被挖矿程序攻击
  8. Python中的break和continue的使用方法
  9. CS224N刷题——Assignment1.3_word2vec
  10. linux访问vdma的数据,Xilinx VDMA 24位流输出与32位AXI总线的内存流数据关系
  11. 圈点2006年的省级卫视
  12. windows下载东西提高速度的方式。
  13. macd java 源代码_炒股知识一MACD详解
  14. 泰坦尼克号生存者预测(细节篇)
  15. 输入数值n,计算并输出下列多项式的值:S = 1 + 1/1! + 1/2! + 1/3! + 1/4! + ... + 1/n!
  16. 有的放矢,Liferay进军数字体验市场
  17. 华为云linux登录用户名密码,华为云Linux服务器安装宝塔Linux面板详细图文教程
  18. 一个简单的天气预报APP
  19. 企业完成云转型的成功之道:云成本优化管理
  20. 计算机通讯技术核心期刊有哪些,通信类核心期刊汇总.doc

热门文章

  1. php怎么不重复随机数,php怎么生成不重复随机数
  2. vue---百度地图实现定位功能
  3. 91、基于STM32的智能投食智能鱼缸鱼塘养殖宠物喂食换水无线系统
  4. Zygote启动流程解析
  5. Android摄像头--通过Intent启动
  6. 超详细百度翻译js逆向(token 和 sign)
  7. 如果有一天我不再烦你,你会想我吗?
  8. AES-GCM算法例程
  9. 安装ChemOffice 15.1就是这么简单
  10. 2013年搜索引擎盘点,爱恨交加