当前位置: 首页 > article >正文

密码学(Public-Key Cryptography and Discrete Logarithms)

Public-Key Cryptography and Discrete Logarithms

Discrete Logarithm

  • 核心概念:离散对数是密码学中一个重要的数学问题,特别是在有限域和循环群中。它基于指数运算在某些群中是单向函数这一特性。也就是说,给定一个群 G G G和一个生成元 g g g,计算 g x g^x gx是相对容易的,但给定 g g g g x g^x gx,求解 x x x却非常困难,这种困难性是许多密码学协议安全性的基础。
  • 应用:离散对数问题在公钥密码学中被广泛应用,例如在Diffie-Hellman密钥交换和ElGamal密码体系中。

The ElGamal Cryptosystem

  • 加密操作的随机性:ElGamal密码体系的加密过程是随机化的。这意味着密文不仅依赖于明文 x x x,还依赖于发送者(如Alice)选择的随机值 k k k。这种随机性使得相同的明文在不同时间加密可能会产生不同的密文,增加了安全性。
  • 工作原理
    • 密钥生成:选择一个大素数 p p p和一个生成元 g g g,私钥为随机选择的整数 a a a,公钥为 ( p , g , g a m o d p ) (p,g,g^a\mod p) (p,g,gamodp)
    • 加密:对于明文 m m m,选择随机数 k k k,计算 c 1 = g k m o d p c_1=g^k\mod p c1=gkmodp c 2 = m ⋅ ( g a ) k m o d p c_2=m\cdot(g^a)^k\mod p c2=m(ga)kmodp,密文为 ( c 1 , c 2 ) (c_1,c_2) (c1,c2)
    • 解密:接收者使用私钥 a a a计算 c 1 a m o d p c_1^a\mod p c1amodp,然后通过 c 2 / ( c 1 a ) m o d p c_2/(c_1^a)\mod p c2/(c1a)modp恢复明文 m m m

Finite Fields

  • 构造:有限域是密码学中常用的数学结构,它是一个包含有限个元素的域。有限域的构造通常基于模运算,例如模一个素数 p p p或模一个不可约多项式。
  • 性质:有限域的乘法群是循环群,这意味着存在一个生成元 g g g,使得通过 g g g的幂可以生成群中的所有非零元素。在某些情况下,如域的阶数为素数时,除了 0 0 0 1 1 1之外的任何元素都可以作为生成元。

Elliptic Curves

Elliptic Curves: over the Reals

  • 椭圆曲线的定义:椭圆曲线是一种特殊的数学曲线,其方程通常表示为 y 2 = x 3 + a x + b y^2=x^3+ax+b y2=x3+ax+b(在实数域上)或类似的方程在有限域上的形式。椭圆曲线上的点构成一个阿贝尔群,群运算是基于点的加法。

Elliptic Curves Modulo a Prime

  • 椭圆曲线模素数:在有限域 F p \mathbb{F}_p Fp上,椭圆曲线的方程形式为 y 2 ≡ x 3 + a x + b ( m o d p ) y^2\equiv x^3+ax+b\pmod p y2x3+ax+b(modp),其中 a a a b b b是满足 4 a 3 + 27 b 2 ≠ 0 ( m o d p ) 4a^3+27b^2\neq 0\pmod p 4a3+27b2=0(modp)的常数。

Elliptic Curves over Finite Fields

  • 椭圆曲线密码学:椭圆曲线密码学(ECC)利用椭圆曲线上的点和群运算来实现密码学协议。与传统的基于有限域的密码学相比,ECC可以在更小的密钥长度下提供相同的安全性,因此在资源受限的环境中特别有用。
  • 点压缩:为了减少存储和传输需求,椭圆曲线密码学中常常使用点压缩技术。点压缩通过只存储点的 x x x坐标和一个额外的标志位来表示一个点,从而将存储需求减少约 50 % 50\% 50%。不过,这需要额外的计算来恢复点的 y y y坐标。

Algorithm Optimization

Signed Binary Representation

  • NAF(Non-Adjacent Form)表示:NAF是一种特殊的整数表示方法,用于优化椭圆曲线上的标量乘法运算。NAF表示的特点是相邻的系数不会同时为非零,这可以减少不必要的加法运算,从而提高计算效率。

DOUBLE-AND-(ADD OR SUBTRACT) ALGORITHM

  • 双重加法/减法算法:这种算法利用NAF表示来优化椭圆曲线上的标量乘法。通过减少加法和减法操作的次数,该算法可以在平均情况下实现大约 11 % 11\% 11%的速度提升。

ElGamal密码体系的加密与解密示例

示例参数

假设我们选择以下参数:

  • 大素数 p = 23 p = 23 p=23
  • 生成元 g = 5 g = 5 g=5
  • 私钥 a = 6 a = 6 a=6(Alice的私钥)
  • 公钥 y = g a m o d p = 5 6 m o d 23 = 8 y = g^a \mod p = 5^6 \mod 23 = 8 y=gamodp=56mod23=8(Alice的公钥)

因此,Alice的公钥为 ( p , g , y ) = ( 23 , 5 , 8 ) (p, g, y) = (23, 5, 8) (p,g,y)=(23,5,8)

加密过程

假设Bob要向Alice发送明文消息 m = 9 m = 9 m=9。Bob执行以下步骤:

  1. 选择随机数 k k k:Bob选择一个随机数 k = 3 k = 3 k=3(这个随机数必须保密,不能泄露)。
  2. 计算 c 1 c_1 c1
    c 1 = g k m o d p = 5 3 m o d 23 = 10 c_1 = g^k \mod p = 5^3 \mod 23 = 10 c1=gkmodp=53mod23=10
  3. 计算 c 2 c_2 c2
    c 2 = m ⋅ y k m o d p = 9 ⋅ 8 3 m o d 23 = 9 ⋅ 512 m o d 23 = 9 ⋅ 10 m o d 23 = 90 m o d 23 = 21 c_2 = m \cdot y^k \mod p = 9 \cdot 8^3 \mod 23 = 9 \cdot 512 \mod 23 = 9 \cdot 10 \mod 23 = 90 \mod 23 = 21 c2=mykmodp=983mod23=9512mod23=910mod23=90mod23=21

因此,Bob将密文 ( c 1 , c 2 ) = ( 10 , 21 ) (c_1, c_2) = (10, 21) (c1,c2)=(10,21)发送给Alice。

解密过程

Alice收到密文 ( c 1 , c 2 ) = ( 10 , 21 ) (c_1, c_2) = (10, 21) (c1,c2)=(10,21)后,执行以下步骤来解密:

  1. 计算 c 1 a m o d p c_1^a \mod p c1amodp
    c 1 a m o d p = 1 0 6 m o d 23 = 18 c_1^a \mod p = 10^6 \mod 23 = 18 c1amodp=106mod23=18
  2. 计算 c 1 a m o d p c_1^a \mod p c1amodp的逆元:需要找到一个数 s s s,使得 s ⋅ 18 ≡ 1 m o d 23 s \cdot 18 \equiv 1 \mod 23 s181mod23。通过扩展欧几里得算法或其他方法,可以计算出 s = 13 s = 13 s=13(因为 18 ⋅ 13 ≡ 1 m o d 23 18 \cdot 13 \equiv 1 \mod 23 18131mod23)。
  3. 解密明文
    m = c 2 ⋅ s m o d p = 21 ⋅ 13 m o d 23 = 273 m o d 23 = 9 m = c_2 \cdot s \mod p = 21 \cdot 13 \mod 23 = 273 \mod 23 = 9 m=c2smodp=2113mod23=273mod23=9

最终,Alice成功恢复了Bob发送的明文消息 m = 9 m = 9 m=9

为什么需要逆元

计算 c 1 a m o d p c_1^a \mod p c1amodp的逆元是必要的,因为我们需要从 c 2 c_2 c2中“消除” y k m o d p y^k \mod p ykmodp的影响。由于 c 2 = m ⋅ y k m o d p c_2 = m \cdot y^k \mod p c2=mykmodp,而 y k m o d p y^k \mod p ykmodp c 1 a m o d p c_1^a \mod p c1amodp相等(因为 y = g a m o d p y = g^a \mod p y=gamodp),因此通过乘以 c 1 a m o d p c_1^a \mod p c1amodp的逆元,我们可以得到:
m = c 2 ⋅ ( c 1 a m o d p ) − 1 m o d p m = c_2 \cdot (c_1^a \mod p)^{-1} \mod p m=c2(c1amodp)1modp

总结

计算 c 1 a m o d p c_1^a \mod p c1amodp的逆元是ElGamal密码体系解密过程中的关键步骤,它使得我们能够从密文中恢复出原始的明文消息。逆元的计算是基于模运算的性质和扩展欧几里得算法。ElGamal密码体系的安全性基于离散对数问题的难解性,即给定 g g g g a m o d p g^a \mod p gamodp g k m o d p g^k \mod p gkmodp,计算 k k k a a a是非常困难的。


ElGamal密码体系在扩展域上的示例

扩展域 F 2 3 \mathbb{F}_{2^3} F23的构造

F 2 3 \mathbb{F}_{2^3} F23中,元素个数为 2 3 = 8 2^3 = 8 23=8。为了构造这个域,我们需要选择一个不可约多项式 f ( x ) f(x) f(x)。这里我们选择 f ( x ) = x 3 + x + 1 f(x) = x^3 + x + 1 f(x)=x3+x+1,这是一个在 F 2 \mathbb{F}_2 F2上的不可约多项式。

F 2 3 \mathbb{F}_{2^3} F23中,每个元素可以表示为一个多项式 a 2 x 2 + a 1 x + a 0 a_2x^2 + a_1x + a_0 a2x2+a1x+a0,其中 a 2 , a 1 , a 0 ∈ { 0 , 1 } a_2, a_1, a_0 \in \{0, 1\} a2,a1,a0{0,1}。因此,所有元素可以表示为:
{ 0 , 1 , x , x + 1 , x 2 , x 2 + 1 , x 2 + x , x 2 + x + 1 } \{0, 1, x, x+1, x^2, x^2+1, x^2+x, x^2+x+1\} {0,1,x,x+1,x2,x2+1,x2+x,x2+x+1}

示例参数

假设我们选择以下参数:

  • 扩展域 F 2 3 \mathbb{F}_{2^3} F23,不可约多项式 f ( x ) = x 3 + x + 1 f(x) = x^3 + x + 1 f(x)=x3+x+1
  • 生成元 g = x g = x g=x(在 F 2 3 \mathbb{F}_{2^3} F23中, x x x是一个生成元)
  • 私钥 a = 3 a = 3 a=3(Alice的私钥)
  • 公钥 y = g a m o d f ( x ) = x 3 m o d ( x 3 + x + 1 ) y = g^a \mod f(x) = x^3 \mod (x^3 + x + 1) y=gamodf(x)=x3mod(x3+x+1)

计算 y y y
x 3 ≡ x + 1 ( m o d x 3 + x + 1 ) x^3 \equiv x + 1 \pmod{x^3 + x + 1} x3x+1(modx3+x+1)
因此,Alice的公钥为 ( f ( x ) , g , y ) = ( x 3 + x + 1 , x , x + 1 ) (f(x), g, y) = (x^3 + x + 1, x, x + 1) (f(x),g,y)=(x3+x+1,x,x+1)

加密过程

假设Bob要向Alice发送明文消息 m = x 2 + x m = x^2 + x m=x2+x。Bob执行以下步骤:

  1. 选择随机数 k k k

    • Bob选择一个随机数 k = 2 k = 2 k=2(这个随机数必须保密,不能泄露)。
  2. 计算 c 1 c_1 c1
    c 1 = g k m o d f ( x ) = x 2 m o d ( x 3 + x + 1 ) = x 2 c_1 = g^k \mod f(x) = x^2 \mod (x^3 + x + 1) = x^2 c1=gkmodf(x)=x2mod(x3+x+1)=x2

  3. 计算 c 2 c_2 c2
    c 2 = m ⋅ y k m o d f ( x ) = ( x 2 + x ) ⋅ ( x + 1 ) 2 m o d ( x 3 + x + 1 ) c_2 = m \cdot y^k \mod f(x) = (x^2 + x) \cdot (x + 1)^2 \mod (x^3 + x + 1) c2=mykmodf(x)=(x2+x)(x+1)2mod(x3+x+1)

    • 首先计算 ( x + 1 ) 2 (x + 1)^2 (x+1)2
      ( x + 1 ) 2 = x 2 + 2 x + 1 = x 2 + 1 ( 因为 2 ≡ 0 ( m o d 2 ) ) (x + 1)^2 = x^2 + 2x + 1 = x^2 + 1 \quad (\text{因为} 2 \equiv 0 \pmod{2}) (x+1)2=x2+2x+1=x2+1(因为20(mod2))
    • 然后计算 c 2 c_2 c2
      c 2 = ( x 2 + x ) ⋅ ( x 2 + 1 ) = x 4 + x 3 + x 2 + x c_2 = (x^2 + x) \cdot (x^2 + 1) = x^4 + x^3 + x^2 + x c2=(x2+x)(x2+1)=x4+x3+x2+x
      • x 4 x^4 x4 x 3 x^3 x3 x 3 + x + 1 x^3 + x + 1 x3+x+1化简:
        x 3 ≡ x + 1 ( m o d x 3 + x + 1 ) x^3 \equiv x + 1 \pmod{x^3 + x + 1} x3x+1(modx3+x+1)
        x 4 ≡ x ⋅ x 3 ≡ x ( x + 1 ) = x 2 + x ( m o d x 3 + x + 1 ) x^4 \equiv x \cdot x^3 \equiv x(x + 1) = x^2 + x \pmod{x^3 + x + 1} x4xx3x(x+1)=x2+x(modx3+x+1)
      • 因此:
        c 2 = ( x 2 + x ) + ( x + 1 ) + x 2 + x = x + 1 ( m o d x 3 + x + 1 ) c_2 = (x^2 + x) + (x + 1) + x^2 + x = x + 1 \pmod{x^3 + x + 1} c2=(x2+x)+(x+1)+x2+x=x+1(modx3+x+1)

因此,Bob将密文 ( c 1 , c 2 ) = ( x 2 , x + 1 ) (c_1, c_2) = (x^2, x + 1) (c1,c2)=(x2,x+1)发送给Alice。

解密过程

Alice收到密文 ( c 1 , c 2 ) = ( x 2 , x + 1 ) (c_1, c_2) = (x^2, x + 1) (c1,c2)=(x2,x+1)后,执行以下步骤来解密:

  1. 计算 c 1 a m o d f ( x ) c_1^a \mod f(x) c1amodf(x)
    c 1 a m o d f ( x ) = ( x 2 ) 3 m o d ( x 3 + x + 1 ) = x 6 m o d ( x 3 + x + 1 ) c_1^a \mod f(x) = (x^2)^3 \mod (x^3 + x + 1) = x^6 \mod (x^3 + x + 1) c1amodf(x)=(x2)3mod(x3+x+1)=x6mod(x3+x+1)

    • x 6 x^6 x6 x 3 + x + 1 x^3 + x + 1 x3+x+1化简:
      x 3 ≡ x + 1 ( m o d x 3 + x + 1 ) x^3 \equiv x + 1 \pmod{x^3 + x + 1} x3x+1(modx3+x+1)
      x 6 = ( x 3 ) 2 ≡ ( x + 1 ) 2 = x 2 + 1 ( m o d x 3 + x + 1 ) x^6 = (x^3)^2 \equiv (x + 1)^2 = x^2 + 1 \pmod{x^3 + x + 1} x6=(x3)2(x+1)2=x2+1(modx3+x+1)
    • 因此:
      c 1 a m o d f ( x ) = x 2 + 1 c_1^a \mod f(x) = x^2 + 1 c1amodf(x)=x2+1
  2. 计算 c 1 a m o d f ( x ) c_1^a \mod f(x) c1amodf(x)的逆元

    • 需要找到一个多项式 s ( x ) s(x) s(x),使得:
      ( x 2 + 1 ) ⋅ s ( x ) ≡ 1 ( m o d x 3 + x + 1 ) (x^2 + 1) \cdot s(x) \equiv 1 \pmod{x^3 + x + 1} (x2+1)s(x)1(modx3+x+1)
    • 通过扩展欧几里得算法或其他方法,可以计算出 s ( x ) = x 2 + x s(x) = x^2 + x s(x)=x2+x(因为 ( x 2 + 1 ) ( x 2 + x ) ≡ 1 ( m o d x 3 + x + 1 ) (x^2 + 1)(x^2 + x) \equiv 1 \pmod{x^3 + x + 1} (x2+1)(x2+x)1(modx3+x+1))。
  3. 解密明文
    m = c 2 ⋅ s ( x ) m o d f ( x ) = ( x + 1 ) ⋅ ( x 2 + x ) m o d ( x 3 + x + 1 ) m = c_2 \cdot s(x) \mod f(x) = (x + 1) \cdot (x^2 + x) \mod (x^3 + x + 1) m=c2s(x)modf(x)=(x+1)(x2+x)mod(x3+x+1)

    • 计算:
      ( x + 1 ) ( x 2 + x ) = x 3 + x 2 + x 2 + x = x 3 + 2 x 2 + x = x 3 + x ( 因为 2 ≡ 0 ( m o d 2 ) ) (x + 1)(x^2 + x) = x^3 + x^2 + x^2 + x = x^3 + 2x^2 + x = x^3 + x \quad (\text{因为} 2 \equiv 0 \pmod{2}) (x+1)(x2+x)=x3+x2+x2+x=x3+2x2+x=x3+x(因为20(mod2))
      • x 3 x^3 x3 x 3 + x + 1 x^3 + x + 1 x3+x+1化简:
        x 3 ≡ x + 1 ( m o d x 3 + x + 1 ) x^3 \equiv x + 1 \pmod{x^3 + x + 1} x3x+1(modx3+x+1)
      • 因此:
        m = ( x + 1 ) + x = x 2 + x ( m o d x 3 + x + 1 ) m = (x + 1) + x = x^2 + x \pmod{x^3 + x + 1} m=(x+1)+x=x2+x(modx3+x+1)

最终,Alice成功恢复了Bob发送的明文消息 m = x 2 + x m = x^2 + x m=x2+x

总结

通过这个例子,我们可以看到ElGamal密码体系在扩展域 F p n \mathbb{F}_{p^n} Fpn上的工作原理:

  • 加密过程:Bob使用Alice的公钥和一个随机数 k k k对明文进行加密,生成密文 ( c 1 , c 2 ) (c_1, c_2) (c1,c2)
  • 解密过程:Alice使用自己的私钥 a a a对密文进行解密,恢复出明文。

ElGamal密码体系的安全性基于离散对数问题的难解性,即使在扩展域上也是如此。



椭圆曲线密码学(ECC)示例

椭圆曲线的定义

椭圆曲线通常表示为一个方程,形式为:
y 2 = x 3 + a x + b y^2 = x^3 + ax + b y2=x3+ax+b
其中, a a a b b b 是常数,且满足 4 a 3 + 27 b 2 ≠ 0 4a^3 + 27b^2 \neq 0 4a3+27b2=0,以确保曲线是光滑的(没有奇点)。

为了简化计算,我们选择一个较小的有限域 F p \mathbb{F}_p Fp,其中 p p p 是一个素数。例如,选择 p = 23 p = 23 p=23,并定义椭圆曲线为:
y 2 ≡ x 3 + x + 1 ( m o d 23 ) y^2 \equiv x^3 + x + 1 \pmod{23} y2x3+x+1(mod23)

椭圆曲线上的点

F 23 \mathbb{F}_{23} F23 上,椭圆曲线上的点 ( x , y ) (x, y) (x,y) 满足上述方程。我们可以通过穷举法找到所有满足条件的点。例如:

  • x = 0 x = 0 x=0 时, y 2 ≡ 1 ( m o d 23 ) y^2 \equiv 1 \pmod{23} y21(mod23),解得 y = 1 y = 1 y=1 y = 22 y = 22 y=22
  • x = 1 x = 1 x=1 时, y 2 ≡ 3 ( m o d 23 ) y^2 \equiv 3 \pmod{23} y23(mod23),无解。
  • x = 2 x = 2 x=2 时, y 2 ≡ 11 ( m o d 23 ) y^2 \equiv 11 \pmod{23} y211(mod23),无解。
  • 以此类推,可以找到所有点。

假设我们找到了以下点:
{ ( 0 , 1 ) , ( 0 , 22 ) , ( 1 , 7 ) , ( 1 , 16 ) , … } \{ (0, 1), (0, 22), (1, 7), (1, 16), \dots \} {(0,1),(0,22),(1,7),(1,16),}

点的加法运算

椭圆曲线上的点可以进行加法运算,这是基于几何性质的。对于两个点 P P P Q Q Q,它们的和 R = P + Q R = P + Q R=P+Q 也是椭圆曲线上的一个点。具体计算方法如下:

  1. 如果 P = O P = O P=O(无穷远点),则 P + Q = Q P + Q = Q P+Q=Q
  2. 如果 Q = O Q = O Q=O,则 P + Q = P P + Q = P P+Q=P
  3. 如果 P = − Q P = -Q P=Q(即 P P P Q Q Q 关于 x x x 轴对称),则 P + Q = O P + Q = O P+Q=O
  4. 如果 P ≠ Q P \neq Q P=Q,则通过 P P P Q Q Q 的直线与椭圆曲线相交于第三个点 R ′ R' R,则 R = − R ′ R = -R' R=R
  5. 如果 P = Q P = Q P=Q,则通过 P P P 的切线与椭圆曲线相交于点 R ′ R' R,则 R = − R ′ R = -R' R=R

在有限域上,这些运算可以通过代数公式完成。

示例:基于ECC的密钥交换(Diffie-Hellman)

假设Alice和Bob使用ECC进行密钥交换。

参数

  • 椭圆曲线 y 2 ≡ x 3 + x + 1 ( m o d 23 ) y^2 \equiv x^3 + x + 1 \pmod{23} y2x3+x+1(mod23)
  • 基点 G = ( 1 , 7 ) G = (1, 7) G=(1,7)(一个已知的点)
  • Alice的私钥 a = 6 a = 6 a=6
  • Bob的私钥 b = 9 b = 9 b=9

Alice的计算

  1. 计算公钥
    A = a ⋅ G = 6 ⋅ ( 1 , 7 ) A = a \cdot G = 6 \cdot (1, 7) A=aG=6(1,7)
    通过点加法计算 6 ⋅ G 6 \cdot G 6G,假设结果为 A = ( 18 , 20 ) A = (18, 20) A=(18,20)

Bob的计算

  1. 计算公钥
    B = b ⋅ G = 9 ⋅ ( 1 , 7 ) B = b \cdot G = 9 \cdot (1, 7) B=bG=9(1,7)
    通过点加法计算 9 ⋅ G 9 \cdot G 9G,假设结果为 B = ( 13 , 10 ) B = (13, 10) B=(13,10)

共享密钥

Alice和Bob交换公钥后,各自计算共享密钥:

  • Alice计算共享密钥
    S = a ⋅ B = 6 ⋅ ( 13 , 10 ) S = a \cdot B = 6 \cdot (13, 10) S=aB=6(13,10)
    通过点加法计算 6 ⋅ ( 13 , 10 ) 6 \cdot (13, 10) 6(13,10),假设结果为 S = ( 7 , 12 ) S = (7, 12) S=(7,12)

  • Bob计算共享密钥
    S = b ⋅ A = 9 ⋅ ( 18 , 20 ) S = b \cdot A = 9 \cdot (18, 20) S=bA=9(18,20)
    通过点加法计算 9 ⋅ ( 18 , 20 ) 9 \cdot (18, 20) 9(18,20),假设结果为 S = ( 7 , 12 ) S = (7, 12) S=(7,12)

最终,Alice和Bob得到了相同的共享密钥 S = ( 7 , 12 ) S = (7, 12) S=(7,12)

示例:基于ECC的加密/解密

假设Alice使用ECC加密一条消息 m m m 发送给Bob。

参数

  • 椭圆曲线 y 2 ≡ x 3 + x + 1 ( m o d 23 ) y^2 \equiv x^3 + x + 1 \pmod{23} y2x3+x+1(mod23)
  • 基点 G = ( 1 , 7 ) G = (1, 7) G=(1,7)
  • Bob的公钥 B = ( 13 , 10 ) B = (13, 10) B=(13,10)
  • 明文消息 m = 5 m = 5 m=5(假设消息是一个数字)

加密过程

  1. 选择随机数 k k k

    • Alice选择一个随机数 k = 4 k = 4 k=4
  2. 计算 C 1 C_1 C1
    C 1 = k ⋅ G = 4 ⋅ ( 1 , 7 ) C_1 = k \cdot G = 4 \cdot (1, 7) C1=kG=4(1,7)
    通过点加法计算 4 ⋅ ( 1 , 7 ) 4 \cdot (1, 7) 4(1,7),假设结果为 C 1 = ( 19 , 20 ) C_1 = (19, 20) C1=(19,20)

  3. 计算 C 2 C_2 C2
    C 2 = m ⋅ G + k ⋅ B = 5 ⋅ ( 1 , 7 ) + 4 ⋅ ( 13 , 10 ) C_2 = m \cdot G + k \cdot B = 5 \cdot (1, 7) + 4 \cdot (13, 10) C2=mG+kB=5(1,7)+4(13,10)
    通过点加法计算 5 ⋅ ( 1 , 7 ) 5 \cdot (1, 7) 5(1,7) 4 ⋅ ( 13 , 10 ) 4 \cdot (13, 10) 4(13,10),假设结果为 C 2 = ( 2 , 17 ) C_2 = (2, 17) C2=(2,17)

Alice将密文 ( C 1 , C 2 ) = ( ( 19 , 20 ) , ( 2 , 17 ) ) (C_1, C_2) = ((19, 20), (2, 17)) (C1,C2)=((19,20),(2,17)) 发送给Bob。

解密过程

Bob收到密文 ( C 1 , C 2 ) = ( ( 19 , 20 ) , ( 2 , 17 ) ) (C_1, C_2) = ((19, 20), (2, 17)) (C1,C2)=((19,20),(2,17)) 后,执行以下步骤来解密:

  1. 计算 k ⋅ B k \cdot B kB
    k ⋅ B = b ⋅ C 1 = 9 ⋅ ( 19 , 20 ) k \cdot B = b \cdot C_1 = 9 \cdot (19, 20) kB=bC1=9(19,20)
    通过点加法计算 9 ⋅ ( 19 , 20 ) 9 \cdot (19, 20) 9(19,20),假设结果为 ( 2 , 17 ) (2, 17) (2,17)

  2. 计算明文消息 m m m
    m = C 2 − k ⋅ B = ( 2 , 17 ) − ( 2 , 17 ) = O m = C_2 - k \cdot B = (2, 17) - (2, 17) = O m=C2kB=(2,17)(2,17)=O
    由于 C 2 = k ⋅ B C_2 = k \cdot B C2=kB,因此 m = O m = O m=O,即无穷远点。

Bob成功恢复了Alice发送的明文消息 m = 5 m = 5 m=5

总结

通过这个例子,我们可以看到椭圆曲线密码学(ECC)的工作原理:

  • 密钥交换:Alice和Bob通过椭圆曲线上的点加法运算,可以安全地共享一个密钥。
  • 加密/解密:Alice使用Bob的公钥和一个随机数加密消息,Bob使用自己的私钥解密消息。

ECC的安全性基于椭圆曲线上的离散对数问题(ECDLP),即给定椭圆曲线上的点 G G G k ⋅ G k \cdot G kG,计算 k k k 是非常困难的。

相关文章:

密码学(Public-Key Cryptography and Discrete Logarithms)

Public-Key Cryptography and Discrete Logarithms Discrete Logarithm 核心概念:离散对数是密码学中一个重要的数学问题,特别是在有限域和循环群中。它基于指数运算在某些群中是单向函数这一特性。也就是说,给定一个群 G G G和一个生成元 …...

TDengine又新增一可视化工具 Perspective

概述 Perspective 是一款开源且强大的数据可视化库,由 Prospective.co 开发,运用 WebAssembly 和 Web Workers 技术,在 Web 应用中实现交互式实时数据分析,能在浏览器端提供高性能可视化能力。借助它,开发者可构建实时…...

【Linux文件IO】Linux中标准IO的API的描述和基本用法

Linux中标准IO的API的描述和基本用法 一、标准IO相关API1、文件的打开和关闭示例代码: 2、文件的读写示例代码:用标准IO(fread、fwrite)实现文件拷贝(任何文件均可拷贝) 3、文件偏移设置示例代码: 4、fgets fputs fget…...

深度学习篇---PaddleDetectionPaddleOCR

文章目录 前言1.代码2.代码介绍2.1 **导入模块**2.2 **配置区域**2.3 ExpressInfoProcessor类2.4 **主程序**: 3.使用说明3.1环境准备3.2模型准备3.3数据库初始化3.4串口配置3.5信息提取优化3.6注意事项 前言 本文简单介绍了PaddleDetection和PaddleOCR相结合的示例…...

Ant Design Vue Select 选择器 全选 功能

Vue.js的组件库Ant Design Vue Select 选择器没有全选功能&#xff0c;如下图所示&#xff1a; 在项目中&#xff0c;我们自己实现了全选和清空功能&#xff0c;如下所示&#xff1a; 代码如下所示&#xff1a; <!--* 参数配置 - 风力发电 - 曲线图 * 猴王软件学院 - 大强 …...

系统与网络安全------网络应用基础(1)

资料整理于网络资料、书本资料、AI&#xff0c;仅供个人学习参考。 TCP/IP协议及配置 概述 TCP/IP协议族 计算机之间进行通信时必须共同遵循的一种通信规定 最广泛使用的通信协议的集合 包括大量Internet应用中的标准协议 支持跨网络架构、跨操作系统平台的数据通信 主机…...

ZIP_STORED和ZIP_LZMA没有compresslevel参数!

在使用py的zipfile库进行压缩的时候&#xff0c;有这么一个函数&#xff1a; def write(self, filename, arcnameNone,compress_typeNone, compresslevelNone): 一般我们在压缩文件进去的时候都是用这个函数的&#xff1b; 对于compresslevel这个函数&#xff0c;它是用来指…...

坦克大战(c++)

今天我给大家分享一个c游戏。 废话不多说&#xff0c;作品展示&#xff1a; #include <stdio.h> #include <windows.h> #include <time.h> //里规格&#xff1a;长39*278 &#xff08;真坐标&#xff09;(假坐标宽为39) 高39 //外规格&#xff1a;长…...

论文阅读:2023 EMNLP SeqXGPT: Sentence-level AI-generated text detection

总目录 大模型安全相关研究:https://blog.csdn.net/WhiffeYF/article/details/142132328 SeqXGPT: Sentence-level AI-generated text detection https://aclanthology.org/2023.emnlp-main.73/ https://github.com/Jihuai-wpy/SeqXGPT https://www.doubao.com/chat/21003…...

JDK 24 发布,新特性解读!

一、版本演进与技术格局新动向 北京时间3月20日&#xff0c;Oracle正式发布Java SE 24。作为继Java 21之后的第三个非LTS版本&#xff0c;其技术革新力度远超预期——共集成24项JEP提案&#xff0c;相当于Java 22&#xff08;12项&#xff09;与Java 23&#xff08;12项&#…...

k8s中service概述(二)NodePort

NodePort 是 Kubernetes 中一种用于对外暴露服务的 Service 类型。它通过在集群的每个节点上开放一个静态端口&#xff08;NodePort&#xff09;&#xff0c;使得外部用户可以通过节点的 IP 地址和该端口访问集群内部的服务。以下是关于 NodePort Service 的详细说明&#xff1…...

Oracle归档配置及检查

配置归档位置到 USE_DB_RECOVERY_FILE_DEST&#xff0c;并设置存储大小 startup mount; !mkdir /db/archivelog ALTER SYSTEM SET db_recovery_file_dest_size100G SCOPEBOTH; ALTER SYSTEM SET db_recovery_file_dest/db/archivelog SCOPEBOTH; ALTER SYSTEM SET log_archive…...

计算机二级:函数基础题

函数基础题 第一题 rinput("请输入半径&#xff1a;") c3.1415926*r*2 print("{:.0f}".format(c))输出&#xff1a; Type Error第二题 a7 b2 print(a%2)输出 1第三题 ab4 def my_ab(ab,xy):abpow(ab,xy)print(ab,end"\n") my_ab(ab,2)prin…...

Python爬虫-爬取AliExpress商品搜索词排名数据

前言 本文是该专栏的第49篇,后面会持续分享python爬虫干货知识,记得关注。 本文,笔者以AliExpress平台为例。基于Python爬虫,通过某个指定的“搜索关键词”,批量获取该“搜索关键词”的商品排名数据。 具体实现思路和详细逻辑,笔者将在正文结合完整代码进行详细介绍。废…...

AI 时代,我们需要什么样的数据库?

AI 时代&#xff0c;我们需要什么样的数据库&#xff1f; 人工智能正在悄然改变软件开发的方式。过去一年间&#xff0c;诸如 GitHub Spark、Replit 和 Bolt 等新兴 AI 工具层出不穷&#xff0c;能够快速生成简单的前端应用&#xff0c;甚至无需传统意义上的后端服务就能部署上…...

刷机维修进阶教程-----adb禁用错了系统app导致无法开机 如何保数据无损恢复机型

在刷机维修过程中 。我们会遇到一些由于客户使用adb指令来禁用手机app而导致手机无法开机进入系统的故障机型。通常此类问题机型有好几种解决方法。但如果客户需要保数据来恢复机型。其实操作也是很简单的.还有类似误删除应用导致不开机等等如何保数据。 通过博文了解💝💝�…...

Vue3 实战:基于 mxGraph 与 WebSocket 的动态流程图构建

本文将详细介绍如何在 Vue3 项目中集成 mxGraph 可视化库&#xff0c;并通过 WebSocket 实现画布元素的实时更新。适合有 Vue 基础的前端开发者学习参考。 一、技术栈准备 Vue3&#xff1a;采用 Composition API 开发mxGraph&#xff1a;JavaScript 流程图库&#xff08;版本 …...

Ubuntu AX200 iwlwifi-cc-46.3cfab8da.0.tgz无法下载的解决办法

文章目录 前言一、检查网卡是否被识别二、确认内核模块是否可用1.AX200 wifi 要求内核5.12.检查 iwlwifi.ko 是否存在&#xff1a;3.如果未找到&#xff0c;可能是内核模块未正确生成。尝试安装 linux-modules-extra&#xff1a;4.再次检查 iwlwifi.ko 是否存在&#xff1a;5.确…...

蓝桥杯,利用 Vue.js 构建简易任务管理器

在日常开发中&#xff0c;我们经常需要处理各种任务和计划。一个简单且高效的任务管理器可以帮助我们更好地组织和安排时间。今天&#xff0c;我将向大家展示如何使用 Vue.js 构建一个简易的任务管理器。这个项目不仅能够帮助我们更好地理解 Vue.js 的基本语法和功能&#xff0…...

国际机构Gartner发布2025年网络安全趋势

转自&#xff1a;中国新闻网 中新网北京3月14日电 国际机构高德纳(Gartner)14日发布的消息称&#xff0c;网络安全和风险管理在2025年“面临挑战与机遇并存的局面”&#xff0c;“实现转型和提高弹性”对确保企业在快速变化的数字世界中&#xff0c;实现安全且可持续的创新至关…...

【设计模式】单件模式

七、单件模式 单件(Singleton) 模式也称单例模式/单态模式&#xff0c;是一种创建型模式&#xff0c;用于创建只能产生 一个对象实例 的类。该模式比较特殊&#xff0c;其实现代码中没有用到设计模式中经常提起的抽象概念&#xff0c;而是使用了一种比较特殊的语法结构&#x…...

Elasticsearch + Docker:实现容器化部署指南

Elasticsearch是一款强大的分布式搜索和分析引擎&#xff0c;广泛应用于日志分析、全文检索、实时数据分析等场景。而Docker作为一种轻量级的容器化技术&#xff0c;能够帮助开发者快速部署和管理应用。将Elasticsearch与Docker结合&#xff0c;不仅可以简化部署流程&#xff0…...

win32汇编环境,网络编程入门之十一

;win32汇编环境,网络编程入门之十一 ;在上一教程里&#xff0c;我们学习了如何读取大容量的网页内容&#xff0c;在这一教程里&#xff0c;我们学习一下如何在wininet或winhttp机制中提取网页中的超链接 ;>>>>>>>>>>>>>>>>>…...

穿越之程序员周树人的狂人日记Part3__人机共生纪元

穿越之程序员周树人的狂人日记Part3__人机共生纪元 代码知识点&#xff1a;协程、内存管理、版本控制 故事一【协程陷阱】择偶标准的多核运算 故事二【内存泄漏】中产幻觉的垃圾回收 故事三【版本控制】人设仓库的强制推送 故事四【容器化生存】&#xff1a;员工生存之现状 静夜…...

后端——AOP异步日志

需求分析 在SpringBoot系统中&#xff0c;一般会对访问系统的请求做日志记录的需求&#xff0c;确保系统的安全维护以及查看接口的调用情况&#xff0c;可以使用AOP对controller层的接口进行增强&#xff0c;作日志记录。日志保存在数据库当中&#xff0c;为了避免影响接口的响…...

【C#语言】深入理解C#多线程编程:从基础到高性能实践

文章目录 ⭐前言⭐一、多线程的本质价值&#x1f31f;1、现代计算需求&#x1f31f;2、C#线程演进史 ⭐二、线程实现方案对比&#x1f31f;1、传统线程模型&#x1f31f;2、现代任务模型&#xff08;推荐&#xff09;&#x1f31f;3、异步编程范式 ⭐三、线程安全深度解析&…...

第十四章:模板实例化_《C++ Templates》notes

模板实例化 核心知识点解析多选题设计题关键点总结 核心知识点解析 两阶段查找&#xff08;Two-Phase Lookup&#xff09; 原理&#xff1a; 模板在编译时分两个阶段处理&#xff1a; 第一阶段&#xff08;定义时&#xff09;&#xff1a;检查模板语法和非依赖名称&#xff0…...

循环查询指定服务器开放端口(Python)

循环查询指定服务器开放端口列表 # Time : 2025/3/22 # Author : cookie # Desc :import socket import concurrent.futures from datetime import datetime# 设置目标IP和端口范围 target_ip input("请输入目标IP地址: ") start_port int(input("请输入…...

算法 | 蜣螂优化算法原理,引言,公式,算法改进综述,应用场景及matlab完整代码

蜣螂优化算法(Dung Beetle Optimizer, DBO)详解 1. 算法原理 蜣螂优化算法(DBO)是一种基于自然界蜣螂行为的元启发式优化算法,灵感来源于蜣螂的滚球、繁殖、觅食和偷窃行为。其核心思想是通过模拟蜣螂在复杂环境中的协作与竞争机制,解决全局优化问题。关键行为模拟: 滚球…...

排序复习_代码纯享

头文件 #pragma once #include<iostream> #include<vector> #include<utility> using std::vector; using std::cout; using std::cin; using std::endl; using std::swap;//插入排序 //1、直接插入排序&#xff08;稳定&#xff09; void InsertSort(vecto…...