跳转至

密码学笔记

This is a placeholder for the excerpt.

数学基础

贝祖恒等式

贝祖恒等式:\(ax + by = gcd(a, b)\),其中 \(x, y\) 为整数(可以为负数)。当 \(a, b\) 互质时,\(x, y\)\(a, b\) 的模逆元。

模逆元

加法逆元:古典密码学,例如凯撒密码、仿射密码会用到。古典密码学不能够抗频率分析。

乘法逆元:使用扩展欧几里得算法求解。例如求解 \(x, y\) 使得 \(13x = 1 \mod 35\)

欧几里得算法将每一个没有出现的数用已知的数表示,然后逐步替换,直到得到最终的结果。

35 = 2 * 13 + 9
         13 = 1 * 9 + 4
                  9 = 2 * 4 + 1

=> 1 = 9 - 2 * 4 
     = (35 - 2 * 13) - 2 * (13 - 1 * 9)
     = 35 * 1 - 2 * 13 - 2 * 13 + 2 * 9
     = 35 * 1 - 4 * 13 + 2 * (35 - 2 * 13)
     = 35 * 3 - 8 * 13

欧拉函数

欧拉函数:小于 \(n\) 且与 \(n\) 互质的数的个数。\(\displaystyle \phi(n) = n \prod_{p|n} (1 - \frac{1}{p})\)

欧拉定理:\(a^{\phi(n)} = 1 \mod n\),其中 \(a, n\) 互质。

费马小定理:\(a^{p-1} = 1 \mod p\),其中 \(p\) 为素数。

从而,如果 \(p, q\) 互质,那么 \(\phi(pq) = (p - 1)(q - 1)\)

经典的密码学算法

哈希函数

哈希函数:摘要,单向不可逆函数,用于在不告知具体内容的情况下仍然能够验证内容的完整性。破解方法:空间换时间、彩虹表。

彩虹表:对随机起点,多次哈希(每次哈希之前需要取余数),得到一个链表。只存储链表的头尾,节省空间。破解时,只在末端寻找泄露的哈希值, 如果没找到,对原有的起点多次哈希(但总哈希次数减少 1 次),在新的到的链表尾部寻找,直到找到或者哈希次数为 0。 彩虹表的初始值:由于无法保证上面的过程生成完整的明文空间,因此,彩虹表不保证一定能够找到,但是可以保证找到的是正确的。

对称加密算法

分组密码与流密码:分组密码是将明文分组加密(并且每一组会影响后续的组),流密码是将明文流加密。

DES、AES:对称加密算法,使用相同的密钥进行加密和解密。混淆、扩散。微小的改变会导致密文的巨大变化。

AES:SubBytes、ShiftRows、MixColumns、AddRoundKey。

非对称加密算法

RSA:非对称加密算法,使用公钥加密、私钥解密。基于大素数的乘法取模运算。RSA 的安全性基于大整数分解的困难性。

ECC:椭圆曲线加密算法,使用椭圆曲线上的点进行加密。ECC 的安全性基于椭圆曲线上的离散对数问题的困难性。抗量子计算攻击、侧信道攻击。

选择合适的椭圆曲线E和基点G,接收方选择私钥d,计算公钥Q=dG,发送方选择随机数k,计算点C1=kG,C2=kQ,发送C1和C2给接收方,接收方计算C2-dC1,得到明文。

椭圆曲线上的点构成一个群,提供加法运算。

同态加密算法

ElGamal:非对称、部分同态性质的加密算法。可以实现对乘法的同态性质,即 \(E(m_1) \cdot E(m_2) = E(m_1 \cdot m_2)\)

密码学协议

数字签名

数字签名的原理:Alice 发送报文 M 给 Bob,Alice 拥有自己的私钥 priv 和公钥 pub。

Alice 使用自己的私钥对 Hash(M) 进行加密,得到 Enc(priv, Hash(M)),然后将 MEnc(priv, Hash(M)) 发送给 Bob。

数字签名能够保证报文的完整性和真实性,但是不能保证报文的机密性。

不经意间传输

不经意间传输:允许 Alice 向 Bob 传输一组消息,Bob 选择获取其中一个。并且满足:Alice 不能知道 Bob 选择的是哪一个,Bob 不能知道 Alice 传输的其它消息。

1-out-of-2 OT(RSA):假设 Alice 有消息 \(m_0\)\(m_1\) ,Bob想要获取 \(m_b\) (\(b \in \{0,1\}\))。

  1. Alice 生成 RSA 密钥对,公钥为 \(n, e\),私钥为 \(d\)
  2. Alice 生成随机数 \(x_0, x_1\)
  3. Alice 将公钥 \(n, e\)\(x_0, x_1\) 发送给 Bob。
  4. Bob 选择 \(b\),生成随机数 \(k\)
  5. Bob 使用 Alice 的公钥加密 \(k\),然后使用 \(x_b\) 混淆,并将得到的 \(v\) 发送给 Alice。
    • \(v = (x_b + k^e) \mod n\)
  6. Alice 使用私钥解密得到 \(k_0\)\(k_1\),其中一个等于 \(k\),但此时 Alice 不知道是哪一个:
    • \(k_0 = (v - x_0)^d \mod n\)
    • \(k_1 = (v - x_1)^d \mod n\)
  7. Alice 使用一次性密码本加密 \(m_0\)\(m_1\),并将结果发送给 Bob:
    • \(m_0' = m_0 \oplus k_0\)
    • \(m_1' = m_1 \oplus k_1\)
  8. Bob 使用选择的 \(b\)\(k\) 解密得到 \(m_b\)
    • \(m_b = m_b' \oplus k\)

秘密共享

秘密共享:将一个秘密 \(S\) 分割成 \(n\) 个份额,并分发给 \(n\) 个参与者,使得只有当足够数量 (门限值 \(t\)) 的参与者协作时,才能重构出原始秘密。

基于多项式插值的秘密共享:假设有秘密 \(S\),门限值 \(t\),参与者数量 \(n\)

  1. 秘密持有者构建多项式 \(f(x) = S + a_1x + a_2x^2 + \cdots + a_{t-1}x^{t-1}\),其中 \(a_1, a_2, \cdots, a_{t-1}\) 是随机数。
    • \(f(0) = S\)
    • 每个参与者 \(i\) 都会得到一个份额 \(f(i)\)
  2. 门限值 \(t\) 个参与者协作,使用拉格朗日插值法重构出原始秘密 \(S\)
    • 解密的过程就是解出多项式 \(f(x)\) 的系数的过程,这是一个线性方程组。

安全多方计算

安全多方计算:Alice 和 Bob 合作计算,例如计算 \(f(x, y) = x + y\),但是不希望对方知道自己的输入。

Yao 的混淆电路方法:

  1. Alice 负责将待计算的函数转换为等价的布尔电路。
  2. 对每一个逻辑门,Alice 将它的两个输入端口 a,b 的可能输入值替换为随机的标签 \(X_0^a, X_1^a\)\(X_0^b, X_1^b\);将它的输出端口 c 的可能输出值替换为随机的标签 \(X_0^c, X_1^c\)。使用这些标签替换逻辑门的原始真值表。
  3. 对于每一个真值表项,Alice 使用输入项作为密钥加密输出项,得到乱码表。这将确保只有拥有正确输入的参与者才能解密输出项。
    • 例如,对于与门,0 & 1 = 0 对应的乱码表项为 \(Enc_{X_0^a, X_1^b}(X_0^c)\)
  4. Alice 将电路中所有门的计算后的混淆表发送给 Bob,并将与她的输入相对应的标签发送给 Bob。
  5. 对于 Bob 的每一个输入位,他使用 1-out-of-2 OT 协议向 Alice 请求对应的标签。
  6. Bob 使用 Alice 发送的标签解密混淆表,得到输出标签。Bob 向 Alice 发送输出标签,Alice 解密得到输出。

零知识证明

零知识证明:证明者向验证者证明某个断言是真的,但是不泄需任何关于这个断言的信息。

Schnorr 协议:Peggy 向 Victor 证明她知道 \(x\) 的值。

  1. Peggy 和 Victor 选择一个素数 \(p\) 和域 \(\mathbb{Z}_p\) 的乘法群的生成元 \(g\)
  2. Peggy 计算 \(y = g^x \mod p\),发送给 Victor。
  3. 重复以下过程:
    1. Peggy 选择随机数 \(r \in [0, p-2]\),计算 \(C = g^r \mod p\),发送给 Victor。
    2. Victor 在以下两个选项中选择一个:
      • 要求 Peggy 提供 \(r\),然后验证 \(C \equiv g^r \mod p\)
      • 要求 Peggy 提供 \((x + r) \mod (p-1)\),然后验证 \(C \cdot y \equiv g^{(x + r) \mod (p-1)} \mod p\)
        • 由于 \(g\)\(\mathbb{Z}_p\) 的生成元,其阶数为 \(p-1\),因此 \(g^{p-1} \equiv 1 \mod p\)(费马小定理)。
        • 因此,对于任何指数 \(k\)\(g^{k \mod (p-1)} \equiv g^k \mod p\)(展开 \(k\)\(k = q \cdot (p-1) + r\))。
      • 两个选项随机选择,确保了 Peggy 无法通过预测 Victor 的选择,以事先发送准备好的 \(C\)

密钥交换

Diffie-Hellman 密钥交换:Alice 和 Bob 通过公开的通道交换信息,生成一个共享的密钥。

威胁模型

攻击者的目标是窃取密钥,根据攻击者能够获得的信息,分为:

选择明文攻击(可以选择明文并获得其加密后的密文)、选择密文攻击(可以选择密文并获得其解密后的明文)、已知明文攻击。