RSA
Tags: rsa, cryptography
Alice 买了一个带钥匙的锁,把钥匙自己留在,锁发给 Bob。Bob 把信息放在锁里锁住,然后发给 Alice,Alice 用钥匙打开锁,取出里面的信息。这样没有任何的钥匙交换(key exchange)。也就是说她可以把锁公开出来,任何人都可以用这个锁来发信息给她。而她只要保留这把锁的钥匙就可以。
再用颜色来举例子。
Alice 随机选择一个颜色,例如红色(red),并且有办法找到她的互补色青色(cyan),她把青色作为公钥(public key)公布出去,Bob 把他想发给 Alice 的颜色,例如黄色(yellow),与青色混合,发给 Alice。
Alice 用红色与收到的颜色混合,因为红色加互补色青色等于白色,这样她就能看到 Bob 发给她的颜色,黄色。
而监听者 Eve 只能看到青色和 Bob 发出的黄青混合色,但是他不知道红色的存在,所以他无法知道 Bob 真正发出的是什么颜色。
如果我们想把上面的描述用数学方案表达出来,可以这样。
数学方案
把一段信息转换成整数 \(m\),取一个公开的\(e\),选一个随机的\(n\),得到 \(c = m^e \bmod n\),把 \(c\) 作为加密信息发出去。得到 \(c\) 的过程计算量很小。但是如果只知道 \(c,e,n\),去计算 \(m\) 的话,计算量会很大。
但是收到 \(c\) 的人要想办法把 \(c\) 还原成 \(m\)呢?
她需要有一个 \(d\),使得 \(c^d \bmod n = m\)
整个过程相当于 \(m^{e^d} \bmod n = m\) 即:
\[m^{ed} \bmod n = m\]这里 \(e\) 是用来加密(encryption),而 \(d\) 就是用来解密(decryption)的。因此,我们需要一种方法来生成 \(e\) 和 \(d\),使得别人很难知道 \(d\)。
欧几里得发现每一个数都是由质数相乘得到的,并且这些质数是唯一的。
Alice 找到一个大质数 \(p1\),一个大质数 \(p2\),两者相乘得到一个超大和数 \(n\)。
\[\phi(ab) = \phi(a) \phi(b)\]如果 \(n = p1\ p2\),那么依照欧拉函数(Euler’s totient function)
\[\phi(n) = (p1-1)(p2-1)\]欧拉定理(Euler’s Theorem)告诉我们:
\[m^{\phi(n)} \equiv 1 \bmod n\]例如 \(5^{\phi(8)} \equiv 1 \bmod 8\)
我们可以推出:
\[m^{\phi(n)} \equiv 1 \bmod n \Rightarrow m^{k\ \phi(n)} \equiv 1 \bmod n\] \[m^{k\ \phi(n)} \equiv 1 \bmod n \Rightarrow m \cdot m^{k\ \phi(n)} \equiv m \cdot 1 \bmod n \Rightarrow m^{k\ \phi(n)+1} \equiv m \bmod n\]\(m^{k\ \phi(n)+1} \equiv m \bmod n\) 正是我们想要找的:
\[m^{ed} \equiv m \bmod n\]即:
\[ed = k \cdot \phi(n)+1\]只要知道 \(e\),就能计算出 \(d\)。而 \(d\) 应该是 Alice 的私钥(private key)。
举个例子
Bob 把他的想要发送给 Alice 的信息变成整数 89。
Alice 随机选了两个质数,\(p = 53, q = 59\),使得:
\[n = p \cdot q = 3127\] \[\phi(n) = (p-1)(q-1) = 52 \cdot 58 = 3016\]现在我们需要有一个 \(e\),一个 \(d\),\(e\) 用来加密,\(d\) 用来解密。
\(e\) 和 \(d\) 需要满足什么条件呢?我们需要:
\[ed \equiv 1 \bmod {(p-1)(q-1)}\]即
\[ed \equiv 1 \bmod {\phi(n)}\]那为什么需要满足上述条件呢?
因为在 decrypt 的时候,我们需要 \(d\) 使得 \(m = c^d \bmod n\)
我们要用 \(e\) 把 \(m\) 加密成 \(c\)
因为 \(c = m^e \bmod n\)
所以 \(c^d \bmod n = (m^e \bmod n)^d \bmod n\)
又因为 \((m^e \bmod n)^d \bmod n = m^{ed} \bmod n\)
当 \(m < n\) 时,
\[m^{ed} \bmod n = m^1 \bmod n = m\]那什么时候 \(m^{ed} \bmod n = m \bmod n\) 呢?
当且仅当 \(ed \equiv 1 \bmod {(p-1)(q-1)}\) 时 (即 \(ed \bmod {(p-1)(q-1)} = 1\))。
如果 \(ed \equiv 1 \bmod {(p-1)(q-1)}\),可以推出
\[ed \equiv 1 \bmod {(p-1)}\] \[ed \equiv 1 \bmod {(q-1)}\]即 \(ed \bmod {(p-1)} = \ ed \bmod {(q-1)} = 1\)
又因为 \(m^k \equiv m^{k \bmod {(p-1)}} \bmod p\),用 \(ed\) 替换 \(k\),得到:
\[m^{ed} \equiv m^{ed \bmod {(p-1)}} \bmod p \equiv m \bmod p\] \[m^{ed} \equiv m^{ed \bmod {(q-1)}} \bmod q \equiv m \bmod q\]依照中国剩余定理(Chinese Remainder Theorem):
如果 \(n_1 = m^{ed}\), \(n_2 = m\):
\[m^{ed} \equiv m \bmod p\] \[m^{ed} \equiv m \bmod q\]并且 \(p\), \(q\) 都为质数,即可得到:
\[m^{ed} \equiv m \bmod n\]因为 \(ed \equiv 1 \bmod {(p-1)(q-1)}\),也就是说 \(d\) 是 \(e \bmod {(p-1)(q-1)}\) 的模倒数(Multiplicative Inverse)。
当 \(e\) 与 \((p-1)(q-1)\) 为互质时,\(gcd(e, (p-1)(q-1)) = 1\), 扩展欧几里得算法(ExtendedEuclid) 可以给我们 \(x\), \(y\) 使得 \(ex+(p-1)(q-1)y = 1\)
又因为 \((p-1)(q-1)\) 显然可以整除 \((p-1)(q-1)y\),所以 \(ex \equiv 1 \bmod {(p-1)(q-1)}\)。而 \(x\) 正是我们要求的 \(d\)。
还有几个问题:
- 为什么扩展欧几里得算法可以帮我们得到 \(x\)?
- 如何选择 \(e\) 呢?
这些问题我们下次再讲。
Read more: