密码学中的SM2

 目录

概述

功能

密钥生成

基点G的生成

模数p

密钥生成过程

加解密

加密过程:

解密过程:

数字签名

概述

对第5步r的计算方式分析

对第6步s的计算方式分析

加密模式

优缺点

论文和研究方向推荐

论文

 研究方向 


概述

SM2是中国密码学算法标准中的一种非对称加密算法,它是由国家密码管理局(中国密码局)发布的一种椭圆曲线公钥密码算法。SM2基于椭圆曲线离散对数问题,主要用于数字签名、密钥交换和加密等密码学应用。

以下是SM2算法的主要特点和原理:

  1. 非对称加密:SM2使用非对称密钥加密体制,包括公钥和私钥。公钥用于加密数据和验证数字签名,私钥用于解密数据和生成数字签名。

  2. 椭圆曲线密码学:SM2基于椭圆曲线密码学,通过椭圆曲线上的点运算来实现加密和解密操作。SM2采用的是素数域上的椭圆曲线,具体是由国家密码管理局指定的一条256位的椭圆曲线。

  3. 安全性:SM2具有较高的安全性。它使用的椭圆曲线离散对数问题被认为是难以解决的数学难题,可以提供强大的安全性保障。同时,SM2还采用了一系列安全性增强措施,如密钥派生函数和随机数生成算法,以防止各种攻击。

  4. 数字签名:SM2可以用于生成和验证数字签名。发送方可以使用私钥对数据进行签名,接收方使用相应的公钥来验证签名的有效性。数字签名可以确保数据的完整性和身份认证,防止数据被篡改或冒充。

  5. 密钥交换:SM2还可以用于密钥交换,双方可以使用各自的私钥和对方的公钥来生成一个共享密钥,用于后续的对称加密通信。

SM2作为中国密码学标准的一部分,被广泛应用于各种信息安全领域,包括电子商务、移动支付、互联网金融等。它具有较高的安全性和性能表现,并得到了国际密码学界的认可和关注。


功能

  1. 密钥生成

    • 随机选择一个私钥(随机数),通常是一个256位的随机数。
    • 使用椭圆曲线上的点运算,将私钥与基点(椭圆曲线上的固定点)相乘,得到公钥。公钥是一个曲线上的点,可以表示为(x, y)坐标。
  2. 加密

    • 随机选择一个临时私钥(临时随机数),通常是一个256位的随机数。
    • 使用临时私钥与基点相乘,得到临时公钥。
    • 将明文数据转换为椭圆曲线上的点(编码)。
    • 生成一个随机数k,与临时公钥进行点运算,得到C1点。
    • 使用接收方的公钥进行点运算,将C1点与明文数据进行异或运算,得到C2点。
    • 使用临时私钥与C1点相乘,得到一个数值。
    • 对C2点和该数值进行哈希运算,得到C3点。
    • 将C1、C2和C3点组成密文。
  3. 解密

    • 使用私钥与C1点相乘,得到一个数值。
    • 对C2点和该数值进行哈希运算,得到C3点。
    • 将C1、C2和C3点组成密文。
    • 使用接收方的私钥与C1点相乘,得到临时公钥。
    • 使用临时公钥进行点运算,将C1点与C2点进行异或运算,得到明文数据。
  4. 数字签名

    • 对待签名数据进行哈希运算,得到哈希值。
    • 随机选择一个数值k,与基点相乘,得到点(x1, y1)。
    • 将x1的值与哈希值进行异或运算,得到一个数值。
    • 计算该数值的模反函数,得到另一个数值。
    • 将哈希值与另一个数值进行相乘,得到一个数值。
    • 使用私钥与该数值相乘,得到一个数值。
    • 使用点(x1, y1)与该数值进行点运算,得到点(x2, y2)。

将x2的值与哈希值进行比较,如果相等,则签名有效。


在SM2算法中,加密和解密是绑定在一起的,需要使用一对密钥,即公钥和私钥。发送方使用接收方的公钥进行加密,接收方使用自己的私钥进行解密。因此,加解密是作为一个整体功能进行使用的

数字签名功能是可以独立使用的发送方可以使用自己的私钥生成数字签名,并将签名附加在数据上发送给接收方。接收方使用发送方的公钥来验证数字签名的有效性,从而确保数据的完整性和身份认证。

密钥生成是SM2算法的前置步骤,它用于生成一对公钥和私钥。这对密钥可以用于后续的加解密和数字签名操作。因此,密钥生成是一个单独的功能,它为之后的加解密和数字签名提供了必要的密钥。

综上所述,可以将SM2的加解密作为一个绑定的功能,数字签名作为一个独立的功能,并单独考虑密钥生成作为另一个功能。


密钥生成

基点G的生成

基点G(也称为生成点、基点或基础点)是椭圆曲线上的一个特殊点,用于执行关键的操作和生成密钥对。

基点G的主要用途有两个:

  1. 密钥生成:基点G可以用作生成密钥对的基础。通过在椭圆曲线上对基点G进行重复的点运算,可以生成一系列相关的点,其中的某些点可用作公钥,另一些点可用作私钥。

  2. 密钥交换:基点G还可以用于执行密钥交换协议。参与者可以利用基点G和一些算法,通过交换计算的中间结果,最终协商出共享的密钥。

每个椭圆曲线都有一个对应的基点G(一对一的),这个基点是特定椭圆曲线上的一个固定点。基点G是椭圆曲线密码学中非常重要的组成部分,它定义了椭圆曲线上的加法运算和密钥生成过程。

通常,在设计椭圆曲线时,会选择一个合适的素数域模数p和相应的椭圆曲线方程。然后,根据特定的算法和安全要求,计算出一个合适的基点G,并确保它满足一些数学性质,如阶(order)和循环性。

一个模数p和一个椭圆曲线方程可以唯一确定一个基点G。 

基点G是曲线上的一个特殊点,它需要满足一些附加条件才能成为合适的基点。这些条件包括:

  1. 在椭圆曲线上:基点G必须位于椭圆曲线上,即满足椭圆曲线方程。

  2. 有合适的阶(order):基点G的阶是指它与自身的倍数相加的结果的个数。一个好的基点应该有一个适当大的阶,以提供足够的安全性。

  3. 循环性:基点G的倍数相加应该能够遍历曲线上的所有点,不会出现重复的点。这种循环性是基于基点G的阶。

假设我们有一个椭圆曲线方程为:

E: y^2 = x^3 + ax + b

其中,a和b是曲线的系数。

  1. 首先,需要选择一个合适的素数域的模数p,以及系数a和b的取值。

  2. 根据选择的模数p和系数a、b,计算出满足椭圆曲线方程的所有点的集合。

  3. 接下来,需要计算椭圆曲线的阶。阶是指基点G与自身的倍数相加所能生成的点的个数。

  4. 从曲线上选择一个点P作为候选的基点。

  5. 对于点P,进行倍点运算,即将点P与自身相加,得到2P、3P、4P,依此类推,直到计算得到一个循环的效果,即nP = O,其中O表示无穷远点(曲线上不存在的特殊点)。

  6. 如果得到的循环的长度等于阶,那么点P就可以作为基点G。

总结来说,通过椭圆曲线的方程,我们可以计算出满足方程的所有点的集合。然后,在这些点中选择一个候选的基点,并进行倍点运算,验证是否满足循环的条件。如果满足循环的条件,那么该点就可以作为椭圆曲线的基点G


模数p

模数p在椭圆曲线密码学中扮演着重要的角色,具有以下几个作用:

  1. 定义域限制:模数p确定了椭圆曲线方程中的坐标值的范围。椭圆曲线的点坐标通常是模p的剩余类(residue class),即在0到p-1之间的整数。这样,模数p限制了椭圆曲线上的点在哪个有限域上运算。

  2. 安全性:选择适当的模数p对椭圆曲线密码学的安全性至关重要。模数p的大小应根据安全要求来确定,通常应该是一个大素数。较大的模数可以增加椭圆曲线离散对数问题的计算复杂度,提供更高的安全性。

  3. 运算性能:模数p的大小也会影响椭圆曲线的计算性能。较小的模数可以加快计算速度,但可能会降低安全性。选择合适的模数需要在安全性和性能之间进行权衡。

  4. 数字表示和存储:模数p决定了椭圆曲线上的点在计算机系统中的表示和存储方式。通常,点坐标需要使用固定长度的二进制表示,模数p决定了这个长度。


密钥生成过程

SM2算法的密钥生成过程如下:

  1. 选择椭圆曲线参数:选择一个适当的椭圆曲线作为密码学基础,SM2标准中规定了一条256位的椭圆曲线。

  2. 生成私钥:随机选择一个私钥d,通常是一个256位的随机数。

  3. 计算公钥:使用椭圆曲线上的点运算,将基点G(椭圆曲线上的固定点)与私钥d相乘,得到公钥Q。具体计算公式为 Q = d * G。

  4. 公钥编码:将公钥Q的坐标(x, y)进行编码,常用的编码方式为压缩编码或非压缩编码。

示例:

假设我们选择了一条椭圆曲线,其参数为:

曲线方程:y^2 = x^3 + ax + b

椭圆曲线参数:a = 0,b = 7

基点G的坐标:(x_G, y_G)

  1. 选择私钥: 私钥d = 1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef

  2. 计算公钥: 进行椭圆曲线上的点运算,将基点G与私钥d相乘。 Q = d * G

  3. 公钥编码: 将公钥Q的坐标(x_Q, y_Q)进行编码,得到最终的公钥。

例如,压缩编码方式下,公钥的编码形式为:公钥 = 02 || x_Q(其中02表示y坐标为偶数)。

这样,我们就完成了SM2算法的密钥生成过程。通过随机选择私钥,再经过椭圆曲线上的点运算,我们可以得到一对公钥和私钥,用于后续的加解密和数字签名操作。


对公钥进行编码是为了在实际应用中更方便地传输和存储公钥信息。

在椭圆曲线密码学中,公钥通常由椭圆曲线上的一个点表示,该点的坐标是一个有限域中的元素。公钥的坐标可以是(x, y)形式的非压缩表示,也可以是压缩表示,只包含其中一个坐标和一个标志位。

在SM2算法中,为了减少公钥的传输大小和存储空间,通常使用压缩编码或非压缩编码方式对公钥进行表示。压缩编码只包含一个坐标和一个标志位,而非压缩编码则包含两个坐标。

通过编码,公钥的表示形式变得更紧凑,占用的空间更小,有助于提高效率和降低资源消耗。在实际使用中,编码后的公钥可以更方便地传输、存储和处理。

需要注意的是,在使用公钥进行加密、数字签名验证等操作时,需要根据编码方式对公钥进行解码,以恢复到椭圆曲线上的点形式进行运算。


加解密

SM2算法的加解密过程如下:

加密过程:

 现在我们有一个基点G,还有基点G的阶n(即nG=O,O为无穷远点)

选择一个随机数k,1<=k<=n-1

C1=kG,又因为kG肯定不为O,所以kG对应着椭圆曲线中的一个点,设为(x1,y1)

所以可以看作将(x1,y1)表示为比特串,这个比特串为C1

S的作用是作为数字签名,接收方可以自行再计算一个S来和收到的S进行对比,如果相同,就没问题

t其实就相当于加密密钥,算出来t与明文M异或就可以得到密文

因为基点G,发送方是不会发送给接收方的,但是没有G又无法解密,C1的作用是可以在不需要基点G的情况下进行解密(这地方我当时卡了十几分钟都没明白C1是干啥的


 在SM2算法中,加密后的密文C由三个部分组成:

  1. C1:这是一个椭圆曲线上的点,表示加密过程中生成的临时公钥点Q'。这个点的坐标可以用压缩或非压缩编码表示。

  2. C2:这是一个椭圆曲线上的点,表示加密后的数据。它与明文数据M进行异或运算后得到。C2 = M ⊕ (Q' * Pb),其中Pb是接收方的公钥点。

  3. C3:这是一个哈希值,用于验证密文的完整性。H是对C2点和临时私钥与C1点的运算结果进行哈希运算得到的。

解密过程:

但是我按照书上的算法列出了两个S的计算方式,S的相同需要k和d_B数值相同,这一点我也没搞明白) 

通过这个图应该可以看出C1的作用,可以避免传输G,又可以进行解密


数字签名

概述

 

 第4步目的还是在避免传输基点G的条件下帮助解码


对第5步r的计算方式分析

在SM2数字签名算法中,计算参数 r = (e + x) mod n 的目的是为了生成签名中的 r 值,其中 e 是哈希值 H 的整数表示,x 是临时公钥 K 的 x 坐标,n 是曲线的阶数。下面是每个参数的具体作用:

  1. 哈希值 H (e):

    • 哈希值 H 是对待签名的消息进行哈希运算后得到的结果。
    • 确保了消息的完整性和唯一性
    • 在签名过程中,将哈希值 H 用作计算参数 r 的一部分,确保签名与消息相关联。
  2. 临时公钥的 x 坐标 (x):

    • 在签名过程中,通过临时私钥 k 计算临时公钥 K = k * G。
    • 临时公钥 K 的 x 坐标 x 被用作计算参数 r 的一部分。
    • 这样可以确保签名的随机性和唯一性,因为每次使用不同的临时私钥 k,都会生成不同的临时公钥 K。
  3. 曲线的阶数 n:

    • 曲线的阶数 n 表示椭圆曲线上点的数量。
    • 在签名过程中,n 用作计算参数 r 的模数,即进行取模运算。
    • 这确保了计算出的 r 值在一定范围内,并且与曲线的特性相对应。

综上所述,计算参数 r = (e + x) mod n 的过程中,哈希值 H、临时公钥的 x 坐标 x 和曲线的阶数 n 扮演着重要的角色:

  • 哈希值 H 保证了签名与消息相关联,确保签名的唯一性。
  • 临时公钥的 x 坐标 x 增加了签名的随机性和抗攻击性。
  • 曲线的阶数 n 用于将计算结果限制在一定范围内,符合椭圆曲线的特性。

这些参数的选择和计算是为了增加签名的安全性、随机性和可验证性,使得SM2数字签名算法具备良好的性质和保护特性。


对第6步s的计算方式分析

在SM2数字签名算法中,计算参数 s 的目的是生成签名中的 s 值,其中 d 是私钥,k 是临时私钥,r 是签名参数。下面是每个参数的具体作用:

  1. 私钥 d:

    • 私钥 d 是签名者拥有的私密信息,用于生成对应的公钥。
    • 在计算参数 s 时,私钥 d 被用作计算的一部分。
  2. 临时私钥 k:

    • 临时私钥 k 是在签名过程中生成的一个随机数。
    • 它用于计算临时公钥 K = k * G 和生成签名中的 r 值。
  3. 签名参数 r:

    • 签名参数 r 是在签名过程中计算得到的,与临时公钥的 x 坐标相关。
    • 它用于验证签名的有效性。
  4. 曲线的阶数 n:

    • 曲线的阶数 n 是椭圆曲线上点的数量,它也用作计算参数 s 的模数。

现在来解释计算参数 s = ((1 + d)^(-1) * (k - r * d)) mod n 的作用:

  • ((1 + d)^(-1) * (k - r * d)) 表示一系列运算,包括私钥 d 和临时私钥 k 的运算。
  • (1 + d)^(-1) 是私钥 d 加一的逆元素,即 (1 + d) 的模逆,它的作用是确保计算参数 s 时的数学运算可逆。("可逆" 这个特性是为了确保计算参数 s 的数学运算在验证过程中是可逆的,使得签名的验证能够得到正确的结果,并保证了签名的可靠性和可验证性。)
  • (k - r * d) 是临时私钥 k 减去 r 与私钥 d 乘积的结果,它的作用是确保计算参数 s 时包含了临时私钥 k 和签名参数 r 的信息。

最后,通过对计算结果进行取模运算 ((1 + d)^(-1) * (k - r * d)) mod n,保证了计算得到的参数 s 在一定范围内,并符合椭圆曲线的特性。

综上所述,计算参数 s 的过程中,私钥 d、临时私钥 k、签名参数 r 和曲线的阶数 n 扮演着重要的角色:

  • 私钥 d 用于参与计算,确保签名的安全性和私密性。
  • 临时私钥 k 和签名参数 r 用于计算 s,增加了签名的随机性和抗攻击性。
  • 曲线的阶数 n 用于将计算结果限制在一定范围内,符合椭圆曲线的特性。

这些参数的选择和计算是为了增加签名的安全性、随机性和可验证性,使得SM2数字签名算法具备良好的性质和保护特性。


加密模式

在SM2算法中,有两种主要的加密模式用于加密数据,分别是C1C2C3模式(密文格式1)和C1C3C2模式(密文格式2)。

1. C1C2C3模式(密文格式1)
   - C1:随机生成的曲线上的点,用于混淆加密结果。它不直接包含加密数据,而是用于提供混淆和保护密文的安全性。
   - C2:加密后的密文数据。这是对原始数据使用SM4对称加密算法进行加密得到的结果。
   - C3:对加密数据的MAC值(消息认证码)。MAC用于验证数据的完整性和防止篡改。通过对加密数据进行消息认证,可以确保数据在传输过程中没有被篡改。

   这种模式适用于对称加密的情况,其中使用SM4对称加密算法对数据进行加密。C1C2C3模式提供了数据机密性和完整性的保护。

2. C1C3C2模式(密文格式2)
   - C1:随机生成的曲线上的点,用于混淆加密结果。
   - C3:对加密数据的MAC值(消息认证码)。与密文格式1相比,C3的位置发生了变化。
   - C2:加密后的密文数据。这是使用SM2非对称加密算法对原始数据进行加密得到的结果。

   这种模式适用于非对称加密的情况,其中使用SM2非对称加密算法对数据进行加密。C1C3C2模式也提供了数据机密性和完整性的保护,但与密文格式1相比,MAC值的位置发生了变化。

总的来说,这两种密文格式在加密过程中采用了不同的顺序和位置安排,但都保证了加密数据的机密性和完整性。具体选择哪种模式取决于应用场景和使用需求。


在C1C2C3模式中,先生成随机的曲线上的点C1,然后对原始数据使用SM4对称加密算法进行加密得到C2,最后计算加密数据的MAC值得到C3。

而在C1C3C2模式中,同样先生成随机的曲线上的点C1,然后对原始数据计算MAC值得到C3,最后再使用SM2非对称加密算法对原始数据进行加密得到C2。

两种模式对于C2、C3的计算的输入数据不同,一个是加密后的,一个是加密前的


优缺点

C1C2C3模式和C1C3C2模式在应用场景、优点和缺点方面有一些差异。以下是它们的一些特点:

C1C2C3模式(密文格式1):
- 应用场景:适用于对称加密的情况,其中使用SM4对称加密算法对数据进行加密。
- 优点:
  - 提供机密性:使用对称加密算法对数据进行加密,确保数据的保密性。
  - 防篡改:通过计算MAC值,能够验证数据的完整性,防止数据在传输过程中被篡改。
- 缺点:
  - 密文长度增加:由于需要包含C1、C2和C3,密文的长度相对较长。
  - 仅适用于对称加密:该模式仅适用于对称加密算法,无法直接用于非对称加密算法。

C1C3C2模式(密文格式2):
- 应用场景:适用于非对称加密的情况,其中使用SM2非对称加密算法对数据进行加密。
- 优点:
  - 机密性和完整性:同样提供了机密性和完整性的保护,通过非对称加密算法和MAC值的计算。
  - 简化解密过程:密文格式中C3位于C2之前,使得解密时先验证完整性,然后再进行解密操作。
- 缺点:
  - 密文长度增加:与C1C2C3模式相同,密文长度相对较长。
  - 仅适用于非对称加密:该模式仅适用于非对称加密算法,无法直接用于对称加密算法。

总体而言,选择使用哪种模式应基于具体的应用需求和标准规范。如果需要对称加密,可以选择C1C2C3模式;如果需要非对称加密,可以选择C1C3C2模式。同时,需要考虑密文长度和解密过程的复杂性。

论文和研究方向推荐

论文

  1. "SM2密码算法在商用密码应用设计中的应用",作者:王小云,刘军。该论文介绍了SM2算法的设计和实现,包括其密码学原理、密钥生成、加密和数字签名等内容。它提供了对该算法的全面理解。

  2. "SM2密码系统的安全分析",作者:赖学嘉,王小云,冯登国。该论文对SM2算法进行了安全性分析,包括对其密钥长度、抵抗各种攻击和潜在漏洞的评估。它提供了对SM2算法的密码学强度和安全性的洞察。

  3. "SM2加密算法的高效安全椭圆曲线实现",作者:龚光,乔克新。该论文侧重于SM2算法的高效实现,提供了在椭圆曲线上进行算术运算的优化技术。它讨论了实际实现的性能改进和安全性考虑。

  4. "SM2数字签名算法的高效实现",作者:杨波,刘树青,文伟强。该论文着重于SM2数字签名算法的高效实现,包括签名生成和验证的优化。它讨论了诸如基于窗口的标量乘法和预计算表等技术。

  5. "SM2密码算法及其应用概述",作者:曹志刚,陈克非,桂小林。该论文概述了SM2算法的特点、安全性和各种应用。它讨论了SM2在中国的应用以及其在国际标准化方面的潜力。

 研究方向 

  1. 椭圆曲线密码学:研究椭圆曲线的数学性质、算法和应用,包括椭圆曲线的参数选择、加密算法和数字签名等方面。

  2. 密码算法分析与设计:对SM2算法进行更深入的安全性分析,包括密钥长度、抗攻击性能和抗侧信道攻击等方面的研究,以进一步提高算法的安全性。

  3. 密码协议与安全通信:研究基于SM2算法的密码协议设计,包括密钥交换、认证协议和安全通信协议等方面,以确保通信的机密性、完整性和认证性。

  4. 高效实现与优化:针对SM2算法的实际应用需求,研究算法的高效实现和优化技术,包括硬件加速、软件优化、并行计算等方面,以提高算法的性能和效率。

  5. 标准化与应用推广:研究将SM2算法作为密码学标准应用于实际系统和应用中的方法和机制,包括标准化过程、规范制定、应用推广和安全性评估等方面。

  • 17
    点赞
  • 92
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值