密码学(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 y2≡x3+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执行以下步骤:
- 选择随机数 k k k:Bob选择一个随机数 k = 3 k = 3 k=3(这个随机数必须保密,不能泄露)。
- 计算 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 - 计算 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=m⋅ykmodp=9⋅83mod23=9⋅512mod23=9⋅10mod23=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)后,执行以下步骤来解密:
- 计算 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 - 计算 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 s⋅18≡1mod23。通过扩展欧几里得算法或其他方法,可以计算出 s = 13 s = 13 s=13(因为 18 ⋅ 13 ≡ 1 m o d 23 18 \cdot 13 \equiv 1 \mod 23 18⋅13≡1mod23)。
- 解密明文:
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=c2⋅smodp=21⋅13mod23=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=m⋅ykmodp,而 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} x3≡x+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执行以下步骤:
-
选择随机数 k k k:
- Bob选择一个随机数 k = 2 k = 2 k=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 -
计算 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=m⋅ykmodf(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(因为2≡0(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} x3≡x+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} x4≡x⋅x3≡x(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)
- 将 x 4 x^4 x4和 x 3 x^3 x3模 x 3 + x + 1 x^3 + x + 1 x3+x+1化简:
- 首先计算 ( x + 1 ) 2 (x + 1)^2 (x+1)2:
因此,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)后,执行以下步骤来解密:
-
计算 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} x3≡x+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
- 将 x 6 x^6 x6模 x 3 + x + 1 x^3 + x + 1 x3+x+1化简:
-
计算 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))。
- 需要找到一个多项式 s ( x ) s(x) s(x),使得:
-
解密明文:
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=c2⋅s(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(因为2≡0(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} x3≡x+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)
- 将 x 3 x^3 x3模 x 3 + x + 1 x^3 + x + 1 x3+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} y2≡x3+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} y2≡1(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} y2≡3(mod23),无解。
- 当 x = 2 x = 2 x=2 时, y 2 ≡ 11 ( m o d 23 ) y^2 \equiv 11 \pmod{23} y2≡11(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 也是椭圆曲线上的一个点。具体计算方法如下:
- 如果 P = O P = O P=O(无穷远点),则 P + Q = Q P + Q = Q P+Q=Q。
- 如果 Q = O Q = O Q=O,则 P + Q = P P + Q = P P+Q=P。
- 如果 P = − Q P = -Q P=−Q(即 P P P 和 Q Q Q 关于 x x x 轴对称),则 P + Q = O P + Q = O P+Q=O。
- 如果 P ≠ Q P \neq Q P=Q,则通过 P P P 和 Q Q Q 的直线与椭圆曲线相交于第三个点 R ′ R' R′,则 R = − R ′ R = -R' R=−R′。
- 如果 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} y2≡x3+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的计算
- 计算公钥:
A = a ⋅ G = 6 ⋅ ( 1 , 7 ) A = a \cdot G = 6 \cdot (1, 7) A=a⋅G=6⋅(1,7)
通过点加法计算 6 ⋅ G 6 \cdot G 6⋅G,假设结果为 A = ( 18 , 20 ) A = (18, 20) A=(18,20)。
Bob的计算
- 计算公钥:
B = b ⋅ G = 9 ⋅ ( 1 , 7 ) B = b \cdot G = 9 \cdot (1, 7) B=b⋅G=9⋅(1,7)
通过点加法计算 9 ⋅ G 9 \cdot G 9⋅G,假设结果为 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=a⋅B=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=b⋅A=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} y2≡x3+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(假设消息是一个数字)
加密过程
-
选择随机数 k k k:
- Alice选择一个随机数 k = 4 k = 4 k=4。
-
计算 C 1 C_1 C1:
C 1 = k ⋅ G = 4 ⋅ ( 1 , 7 ) C_1 = k \cdot G = 4 \cdot (1, 7) C1=k⋅G=4⋅(1,7)
通过点加法计算 4 ⋅ ( 1 , 7 ) 4 \cdot (1, 7) 4⋅(1,7),假设结果为 C 1 = ( 19 , 20 ) C_1 = (19, 20) C1=(19,20)。 -
计算 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=m⋅G+k⋅B=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)) 后,执行以下步骤来解密:
-
计算 k ⋅ B k \cdot B k⋅B:
k ⋅ B = b ⋅ C 1 = 9 ⋅ ( 19 , 20 ) k \cdot B = b \cdot C_1 = 9 \cdot (19, 20) k⋅B=b⋅C1=9⋅(19,20)
通过点加法计算 9 ⋅ ( 19 , 20 ) 9 \cdot (19, 20) 9⋅(19,20),假设结果为 ( 2 , 17 ) (2, 17) (2,17)。 -
计算明文消息 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=C2−k⋅B=(2,17)−(2,17)=O
由于 C 2 = k ⋅ B C_2 = k \cdot B C2=k⋅B,因此 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 k⋅G,计算 k k k 是非常困难的。
相关文章:
密码学(Public-Key Cryptography and Discrete Logarithms)
Public-Key Cryptography and Discrete Logarithms Discrete Logarithm 核心概念:离散对数是密码学中一个重要的数学问题,特别是在有限域和循环群中。它基于指数运算在某些群中是单向函数这一特性。也就是说,给定一个群 G G G和一个生成元 …...
自然语言处理|深入解析 PEGASUS:从原理到实践
一、引言 在信息爆炸的时代,互联网上的文本数据以极快的速度增长。无论是新闻资讯、学术论文、社交媒体动态,还是各类报告文档,我们每天接触到的文字信息量巨大。如何快速、准确地提取关键内容成为一项重要任务。文本摘要技术通过将长篇文本…...
矩阵指数的定义和基本性质
1. 矩阵指数的定义 矩阵指数 e A t e^{\boldsymbol{A}t} eAt 定义为幂级数的形式: e A t ∑ k 0 ∞ ( A t ) k k ! e^{\boldsymbol{A}t} \sum_{k0}^\infty \frac{(\boldsymbol{A}t)^k}{k!} eAtk0∑∞k!(At)k 当 A \boldsymbol{A} A 为 n n n \times n …...
react 技术栈请问该如何优化 DOM 大小
针对 React 应用中 DOM 大小过大 的问题,以下是详细的优化方案和具体操作步骤,帮助你提升 Lighthouse 性能评分和用户体验: 一、问题根源分析 DOM 大小过大(如超过 1500 个节点或深度超过 32 层)会导致: …...
redis,tar.gz安装后,接入systemctl报错解决
1. WARNING Memory overcommit must be enabled! 这种报错,有两种解决方法 1.1 修改系统参数 编辑 /etc/sysctl.conf 文件,设置 overcommit_memory 为 1 vm.overcommit_memory 11.2 修改redis的最大使用内存 修改配置文件 redis.conf maxmemory 1g…...
YOLOv5部署全场景问题解决方案手册(2025版)
YOLOv5部署全场景问题解决方案手册(2025版) 文章目录 YOLOv5部署全场景问题解决方案手册(2025版)[TOC]一、环境配置问题1.1 CUDA与PyTorch版本冲突1.2 依赖库缺失问题 二、模型转换问题2.1 ONNX导出失败2.2 TensorRT转换问题 三、…...
Canal 解析与 Spring Boot 整合实战
一、Canal 简介 1.1 Canal 是什么? Canal 是阿里巴巴开源的一款基于 MySQL 数据库增量日志解析(Binlog)中间件,它模拟 MySQL 的从机(Slave)行为,监听 MySQL 主机的二进制日志(Binl…...
AI第一天 自我理解笔记--微调大模型
目录 1. 确定目标:明确任务和数据 2. 选择预训练模型 3. 数据预处理 (1) 数据清洗与格式化 (2) 划分数据集 (4) 数据加载与批处理 4. 构建微调模型架构 (1) 加载预训练模型 (2) 修改模型尾部(适配任务) (3) 冻结部分层(…...
SpringBoot日志
目录 一、日志的用途 二、日志的使用 1.打印日志 2.在程序中得到日志对象 3.使用日志对象打印日志 4.日志格式说明 5.日志框架的了解 门面模式(外观模式) 6.日志级别 7.日志配置 配置日志级别 日志持久化 配置日志文件分割 配置日志格式 三、…...
Redis数据结构详解--列表
Redis 列表是简单的字符串列表,按照插入顺序排序,常用命令: LPUSH key value1 [value2...] 在列表头部插入一个或多个值RPUSH key value1 [value2...] 在列表尾部插入一个或多个值LPOP key 移除并获取列表头部第一个元素RPOP key 移除并获取…...
[项目]基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信
基于FreeRTOS的STM32四轴飞行器: 六.2.4g通信 一.Si24Ri原理图二.Si24R1芯片手册解读三.驱动函数讲解五.移植2.4g通讯(飞控部分)六.移植2.4g通讯(遥控部分)七.通讯模块的完成(遥控部分)七.通讯模块的完成&a…...
ElasticSearch 7.x 集群 + Kibana 部署完全指南(5节点)
ElasticSearch 7.x 集群 Kibana 部署完全指南(5节点) 一、基础环境准备 1. 系统要求 CentOS 7/Ubuntu 18.04JDK 11(Elasticsearch 7自带JDK)内存:建议每个节点≥8GB磁盘:≥50GB(根据数据量调…...
前端项目中应该如何选择正确的图片格式
在前端项目中选择正确的图片格式是优化页面性能、提升用户体验的关键步骤之一。以下是常见图片格式的特点、适用场景及选择建议,帮助你在不同场景下做出最优决策: 一、常见图片格式对比 格式特点适用场景不适用场景JPEG- 有损压缩,文件小- 不…...
Python实现WYY音乐下载
一、需求背景 WYY音乐作为国内主流音乐平台,其歌曲资源丰富但下载接口存在多重加密保护。本文将通过Python结合JS逆向技术,解析其核心加密逻辑,实现免费歌曲的下载功能。 二、技术难点分析 1. 接口加密机制 通过抓包分析可知,网易云核心接口使用两次加密: 第一次:获取…...
药房链路轨道“空间拓扑优化+动态算法决策+多级容错控制”三重链式编程技术解析与应用
总论 随着智能医疗技术的快速发展,药房自动化系统已成为现代医院运营的核心基础设施。本文以“空间拓扑优化动态算法决策多级容错控制”三重链式编程技术为核心研究对象,探讨其如何通过跨学科技术融合实现药房链路轨道系统的精准化、高效化与可靠化运行…...
笔记本运行边缘计算
笔记本电脑可以用来运行PCDN(Peer-to-Peer Content Delivery Network)服务。实际上,如果你有闲置的笔记本电脑,并且它具备一定的硬件条件和网络环境,那么它可以成为一个不错的PCDN节点。 运行PCDN的基本要求 硬件需求…...
IMX8MP Android 10系统编译SDK
概述: 本文描述了在Ubuntu 20.04操作系统上搭建IMX8MP Android10系统编译环境。 ubuntu主机端设置 1. ubuntu 20.04 1. 450G Free Disk space 2. 16GB RAM以上 3. 安装 sudo apt-get install uuid uuid-dev zlib1g-dev liblz-dev liblzo2-2 liblzo2-dev lzop …...
项目实战:基于瑞萨RA6M5构建多节点OTA升级-创建系统最小框架<三>
MCUBoot项目创建完成后,接下来我们需要搭建多节点OTA系统最小框架,再将系统分模块搭建逐层完善,直到实现最终完整系统。开始动手干吧! 目录 一、创建项目 二、配置FSP 2.1 配置RS485属性 2.2 配置定时器0 2.3 创建初始化进程并配置属性 2.4 创建RS485进程并…...
汇能感知高品质的多光谱相机VSC02UA
VSC02UA概要 VSC02UA是一款高品质的200万像素的光谱相机,适用于工业检测、农业、医疗等领域。VSC02UA 包含 1600 行1200 列有源像素阵列、片上 10 位 ADC 和图像信号处理器。它带有 USB2.0 接口,配合专门的电脑上位机软件使用,可进行图像采集…...
Fisher 信息矩阵公式原理:使用似然估计,二阶导数等知识点
Fisher 信息矩阵公式原理:使用似然估计,二阶导数等知识点 目录 Fisher 信息矩阵公式原理:使用似然估计,二阶导数等知识点Fisher 通过似然估计求解真实数据和权重参数之间的差异**1. Fisher 信息矩阵的定义****2. 计算对数似然函数的二阶导数****3. 代入 Fisher 信息矩阵定义…...
Xilinx系列FPGA视频采集转HDMI2.0输出,基于HDMI 1.4/2.0 Transmitter Subsystem方案,提供6套工程源码和技术支持
目录 1、前言工程概述免责声明 2、相关方案推荐我已有的所有工程源码总目录----方便你快速找到自己喜欢的项目我已有的 GT 高速接口解决方案我已有的FPGA图像处理方案 3、详细设计方案设计框图硬件设计架构FPGA开发板输入Sensor之-->OV5640摄像头动态彩条Video In To AXI4-S…...
dify重磅升级:从0.15.3安全升级1.1.0新手避坑指南
Docker Compose 部署 备份自定义的 docker-compose YAML 文件(可选) cd docker cp docker-compose.yaml docker-compose.yaml.-$(date +%Y-%m-%d-%H-%M).bak从 main 分支获取最新代码 git checkout main git pull origin main停止服务,命令,请在 docker 目录下执行...
工业相机选型
工业相机选型 一、工业相机分类二、相机的主要参数2.1 分辨率2.2 速度2.3 光学接口 / 接口类型2.4 相机靶面尺寸2.5 像元尺寸2.6 精度 三、镜头介绍及选型方法3.1 工作距离(WD)3.2 视场角(FOV)3.3 (镜头)靶面尺寸3.4 帧率3.5 光圈…...
Vue3:构建高效用户界面的利器
一、Vue.js 简介 Vue.js(读音 /vjuː/, 类似于 view)是一套构建用户界面的渐进式框架。它只关注视图层,采用自底向上增量开发的设计。Vue 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件 ,学习起来非常简单…...
mysql与redis的日志策略
MySQL 和 Redis 在日志记录方面采用了不同的策略,分别对应写前日志(Write-Ahead Logging, WAL)和写后日志(Write-After Logging)。以下是它们的详细说明: 1. MySQL:写前日志(Write-A…...
在 Spring Boot 中调用 AnythingLLM 的发消息接口
整体逻辑: 自建系统的web UI界面调用接口: 1.SpringBoot接口:/anything/chatMessageAnything 2.调用anythingLLM - 调用知识库deepseek r1 . Windows Installation ~ AnythingLLMhttps://docs.anythingllm.com/installation-desktop/windows http://localhost:3…...
Kotlin 基础语法
1. 🌟 Kotlin:Java 的“超级进化体”? Kotlin 是一门由 JetBrains 开发的 现代静态类型编程语言,支持 JVM、Android、JavaScript、Native 等多平台: Kotlin 与 Java 深度兼容,Kotlin 会编译为 JVM 字节码,…...
设计模式使用Java案例
代码设计要有可维护性,可复用性,可扩展性,灵活性,所有要使用设计模式进行灵活设计代码 创建型 简单工厂模式(Simple Factory) 简单工厂模式(Simple Factory Pattern)是一种创建型…...
LORA的AB矩阵是针对Transformer的多头还是MLP
LORA的AB矩阵是针对Transformer的多头还是MLP Transformer中的矩阵是一个整体还是分开的每个小矩阵 在LORA(Low-Rank Adaptation)中,AB矩阵的应用位置和Transformer中的矩阵拆分方式如下: 1. LORA的AB矩阵作用对象 LORA的AB矩阵主要作用于Transformer的多头注意力模块和…...
【Gitee】删除仓库的详细步骤
文章目录 1、点击个人主页2、点击仓库3、点击想要删除的仓库4、点击管理5、点击侧边栏的删除仓库 1、点击个人主页 进入gitee官网,登录后点击个人主页 2、点击仓库 点击仓库跳转,如下图所示: 3、点击想要删除的仓库 这个页面会展示你所…...
DNS缓存使用中有什么问题?DNS缓存有哪些作用?
此前已经给大家介绍过刷新dns缓存的方法和流程以及dns缓存中毒和清楚dns缓存的知识介绍。那么你知道dns缓存使用中有什么问题吗?dns缓存有哪些作用? 以下是有关dns缓存的一些知识介绍。 一、DNS缓存使用中有什么问题? 1、缓存刷新不受控 当企业的域名发生变更时…...
Ollama + Open WebUI 本地部署DeepSeek
文章目录 前言一、环境准备最低系统要求必要软件 二、安装 Ollama通过 Docker 部署验证安装 三、部署 Open WebUI快速启动配置说明 四、加载 DeepSeek 模型通过 Ollama 拉取模型支持模型列表 五、使用 Web 界面交互首次使用功能特性 六、高级配置GPU 加速(NVIDIA&am…...
STM32-汇编
学习arm汇编的主要目的是为了编写arm启动代码,启动代码启动以后,引导程序到c语言环境下运行。换句话说启动代码的目的是为了在处理器复位以后搭建c语言最基本的需求。因此启动代码的主要任务有: 初始化异常向量表; 初始化各工作模…...
word中老是有一个空白页删不掉
1、首先第一种:最后一页空白页删除方法 如果空白页是出现在最后一页的话,一般的删除方法是可行的,我们可以直接按Backspace或者Delete直接删除 2、缩小行距 如果空白页只有一行,而且还删不掉,我们可以在这一行点击鼠…...
docker需要sudo才能使用
一种方法是添加当前用户到docker组里去,当时添加的时候貌似是没问题的,但是现在又不可以了 产生的报错 ❯ docker images Cannot connect to the Docker daemon at unix:///home/ying/.docker/desktop/docker.sock. Is the docker daemon running?解决…...
Unity导出WebGL,无法显示中文
问题:中文无法显示 默认字体无法显示中文 在编辑器中设置了中文和英文的按钮,中文按钮无法显示 导出后无法显示中文 解决办法: 自己添加字体,导入项目,并引用 示例 下载一个字体文件,这里使用的阿里…...
理解大模型的function call ,思维链COT和MCP 协议
在大模型中,function call 是指模型调用外部功能或工具以完成特定任务的过程。这种机制使得模型不仅能生成文本,还能执行特定的操作,如生成图像、获取数据或进行计算。 关键特点 功能扩展:通过调用外部函数,模型可以实…...
K8S学习之基础三十三:K8S之监控Prometheus部署程序版
部署 Prometheus 通常包括以下步骤: 1. 下载 Prometheus 首先,从 Prometheus 官方网站 下载适用于你操作系统的最新版本。 bash 复制 wget https://github.com/prometheus/prometheus/releases/download/v2.30.0/prometheus-2.30.0.linux-amd64.tar…...
c语言笔记 结构体指针运用
目录 1.结构体指针与结构体变量 2.结构体指针与结构体数组 c语言其实有时候基本知识还是一样只是说换了一个名称但是所表示的含义是一样的。 结构体指针是指针的一种类型,可以指向结构体变量或者结构体数组,下面我们来探究一下结构体指针跟结构体变量的…...
科普类——双目立体视觉与 RGBD 相机的简单对比
双目立体视觉与 RGBD 相机生成的深度图在原理、性能和应用场景上有显著差异。以下是两者的详细对比和分析: 1. 原理差异 (1) 双目立体视觉 (Stereo Vision) 原理: 通过两个摄像头模拟人眼视差,计算匹配像素点的水平位移(视差&…...
为什么要用linux?
使用 Linux 有许多独特的优势,尤其适合技术爱好者、开发者和企业用户。以下是 选择 Linux 的主要理由,涵盖不同场景的需求: --- 1. 开源与自由 🆓 - 完全免费:无需支付系统或软件授权费用,节省成本。 - 开放…...
Linux系统管理与编程05:网络管理番外篇
兰生幽谷,不为莫服而不芳; 君子行义,不为莫知而止休。 0.安装VMware workstation(以下简称VW)、MobaXterm和CentOS7.x minimal版 CentOS7.x minimal安装时选择网卡连接为nat,过程参照我的博客(略)。 1.…...
(2025|ICLR|华南理工,任务对齐,缓解灾难性遗忘,底层模型冻结和训练早停)语言模型持续学习中的虚假遗忘
Spurious Forgetting in Continual Learning of Language Models 目录 1. 引言 2. 动机:关于虚假遗忘的初步实验 3. 深入探讨虚假遗忘 3.1 受控实验设置 3.2 从性能角度分析 3.3 从损失景观角度分析 3.4 从模型权重角度分析 3.5 从特征角度分析 3.6 结论 …...
RabbitMQ 集群降配
这里写自定义目录标题 摘要检查状态1. 检查 RabbitMQ 服务状态2. 检查 RabbitMQ 端口监听3. 检查 RabbitMQ 管理插件是否启用4. 检查开机自启状态5. 确认集群高可用性6. 检查使用该集群的服务是否做了断开重连 实操1. 负载均衡配置2. 逐个节点降配(滚动操作…...
Git——分布式版本控制工具使用教程
本文主要介绍两种版本控制工具——SVN和Git的概念,接着会讲到Git的安装,Git常用的命令,以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。如果想直接上手用Vscode操作远程仓库则直接看7和9即可! 目录 1. SVN和Git介绍 1.1 …...
在 Offset Explorer 中配置多节点 Kafka 集群的详细指南
一、是否需要配置 Zookeeper? Kafka 集群的 Zookeeper 依赖性与版本及运行模式相关: Kafka 版本是否需要 Zookeeper说明0.11.x 及更早版本✅ 必须配置Kafka 完全依赖 Zookeeper 管理元数据2.8 及以下版本✅ 必须配置Kafka 依赖外置或内置的 Zookeeper …...
nvm 安装某个node.js版本后不能使用或者报错,或不能使用npm的问题
安装了nvm之后发现不能使用某个版本的node.js,报错之后,不能使用npm这个命令。可以这样解决: 1、再node.js官网直接下载node.js 的压缩包。 找到nvm的安装目录 2、直接将文件夹解压到这个安装目录中修改一下名字即可。...
C++20 中的同步输出流:`std::basic_osyncstream` 深入解析与应用实践
文章目录 一、std::basic_osyncstream 的背景与动机二、std::basic_osyncstream 的基本原理三、std::basic_osyncstream 的使用方法(一)基本用法(二)多线程环境下的使用(三)与文件流的结合 四、std::basic_…...
美摄接入DeepSeek等大模型,用多模态融合重构视频创作新边界!
今年以来,DeepSeek凭借其强大的深度推理分析能力,在AI领域掀起新的热潮。美摄科技快速响应市场需求,迅速接入以DeepSeek、通义千问、商汤、文心一言为代表的大模型,为企业视频创作生产带来全新体验。 传统视频创作面临着同质化、…...
Git 使用笔记
参考链接: 创建版本库 - Git教程 - 廖雪峰的官方网站 Git使用教程,最详细,最傻瓜,最浅显,真正手把手教 - 知乎 命令使用 cd f: 切换目录到 F 盘 cd gitCxl 切换目录到 gitCxl 文件夹 mkdir gitCxl 创建新文件…...