更新文章
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
# 抛币协议
|
||||
----
|
||||
## 1. 使用单向函数
|
||||
|
||||
1. Alice和Bob各自选择一个随机字符串,比如"ljngjkrjgnfdudiudd" 和 "gfdgdfjkherfsfsd"
|
||||
2. Alice随机生成一个抛硬币的结果,比如"tail"
|
||||
3. Bob把自己的随机字符串发送给Alice
|
||||
4. Alice把抛币结果和两个人的随机字符串合并成一个新的字符串,例如"tail ljngjkrjgnfdudiudd gfdgdfjkherfsfsd",并且把这个字符串的hash值"59dea408d43183a3937957e71a4bcacc616d9cbc"发送给Bob
|
||||
5. Alice问Bob: “你猜是head还是tail"?
|
||||
6. Bob猜一个结果,比如"head"
|
||||
7. Alice告诉告诉Bob他猜错了,并且出示完整的字符串
|
||||
|
||||
## 2. 使用满足交换律的加密算法
|
||||
1. Alice和Bob通过别的协议协商出各自的RSA密钥对$\{e_a,d_a,n\}, \{e_bb,d_b,n\}$, 满足$e_ad_a\equiv e_bd_b\equiv1\pmod{\phi(pq)}$
|
||||
2. Alice生成两份消息$M_1$和$M_2$,一份表示"head",一份表示"tail",这些字符串还要包含双方协商好的特定字符串和随机字符串,以满足后期的验证
|
||||
3. Alice使用自己的公钥加密这两份消息,得到$E_a(M_1),E_a(M_2)$,并且以随机的顺序发给Bob
|
||||
4. Bob无法识别消息的内容,随机选择其中的一个消息$M$,并且用自己的公钥加密得到$E_b(E_a(M))$,然后发送给Alice
|
||||
5. Alice无法识别消息中的内容,用自己的私钥解密该消息,得到$D_a(E_b(E_a(M)))=E_b(M)$,然后发送回Bob
|
||||
6. Bob用自己的私钥解密消息,得到$D_b(E_b(M)))=M$,于是Bob得到了抛币的结果并发送给Alice
|
||||
7. 双方交换各自的密钥对,以验证过程双方有没有欺诈
|
||||
|
||||
## 3. 使用二次剩余
|
||||
1. Alice选择两个质数$p,q$,计算$n=qp$,然后将$n$发送给Bob
|
||||
2. Bob随机一个数字$x\lt n/2$,计算$y=x^2 \mod n$,并发送$y$给Alice
|
||||
3. Alice求解同余方程$x^2\equiv y\pmod{pq}$,得到两对解,分别是$\pm x_1, \pm x_2$
|
||||
4. Alice猜测Bob所随机的数字属于哪组解,并发送该组解$\pm x'$给Bob
|
||||
5. Bob根据结果判断,如果$x=x'$或者$x=n-x'$,表示Alice猜对了,否则就是猜错了
|
||||
6. Bob把结果告诉Alice,并出示$x$
|
||||
7. Alice把$p,q$告诉Bob验算
|
||||
|
||||
## 4. 使用雅可比符号
|
||||
1. Bob随机选择两个质数,满足$p\equiv3\pmod 4, q\equiv 3\pmod 4$, 计算$n=pq$发送给Alice
|
||||
2. Alice随机选择一个数字$x$, 满足$\gcd(x,n)=1$, 计算$y=x^2 \mod n$,把$y$发送给Bob
|
||||
3. Bob猜测$J(x,n)$的数值$b\in\{-1,1\}$,并且把$b$发送给Alice
|
||||
4. Alice向Bob出示$x$
|
||||
5. Bob验证$y\equiv x^2\pmod{n}$,并向Alice出示$p,q$
|
||||
@@ -0,0 +1,5 @@
|
||||
# 密码学
|
||||
|
||||
* [RSA](./rsa.md)
|
||||
* [抛币协议](./flip_coin.md)
|
||||
* [智能扑克](./mental_poker.md)
|
||||
@@ -0,0 +1,11 @@
|
||||
# 智能扑克协议
|
||||
|
||||
----
|
||||
## 1. SRA协议
|
||||
假设Alice和Bob要玩一局扑克牌游戏,开局的时候他们都要一副牌(52张)中各抽取5张,那么过程就是这样:
|
||||
1. Alice负责洗牌,她首先生成一个长度为52的数组,数组的每个元素表示一张牌,然后用她的加密算法$E_A$对这些元素进行加密,再把数组顺序打乱(洗牌)之后$E_A(M)$发送给下Bob
|
||||
2. Bob收到这些牌之后并不认识,因为上面都有Alice的锁,所以他只能随机挑出5张牌,用自己的加密算法之后生成$E_B(E_A(M)))$送给Alice
|
||||
3. Alice收到这5张牌之后用自己的解密函数解密,生成$D_A(E_B(E_A(M))))=E_B(M)$送还给Bob
|
||||
4. Bob收到后进行解密,得到$D_B(E_B(M))=M$作为自己的牌
|
||||
5. 最后Bob从剩下的47张牌中随机挑出5张送给Alice,Alice直接解密得到$D_A(E_A(M))=M$作为她的牌
|
||||
6. 发牌结束后双方交换密钥以验证此过程没有作弊
|
||||
@@ -0,0 +1,139 @@
|
||||
# RSA算法
|
||||
-----
|
||||
|
||||
## 1. 历史
|
||||
1977年,三位数学家RonRivest、Adi Shamir 和 Leonard Adleman 设计了一种算法,可以实现非对称加密。这种算法用他们三个人的名字命名,叫做RSA算法。
|
||||
|
||||
## 2. 密钥生成
|
||||
1. 随机选择两个不相等的质数$p$和$q$
|
||||
2. 计算$n=qp, \phi(n)=(p-1)(q-1)$
|
||||
3. 选择一个整数$e$,满足$1\lt e \lt\phi(n), \gcd(e,\phi(n))=1$
|
||||
4. 计算$e$的模反元素$d$,满足$ed\equiv1\pmod {\phi(n)}$
|
||||
5. 公钥为$(e,n)$,密钥为$(d,n)$
|
||||
|
||||
## 3. 加密和解密
|
||||
1. 加密明文$M, M\lt n$,
|
||||
$$
|
||||
C=E(M)=M^e\pmod{n}
|
||||
$$
|
||||
2. 解密密文$C$,
|
||||
$$
|
||||
M=D(C)=C^d\pmod{n}
|
||||
$$
|
||||
|
||||
## 4. 举例
|
||||
1. 爱丽丝选择了$p=61,q=53$, 计算
|
||||
$$
|
||||
\begin{split}
|
||||
n&=pq=61\times53=3233\\
|
||||
\phi(n)&=(p-1)(q-1)=360\times52=3120
|
||||
\end{split}
|
||||
$$
|
||||
|
||||
2. 爱丽丝选择$e=17$,解同余方程
|
||||
$$
|
||||
17\times d\equiv1\pmod{3120}
|
||||
$$
|
||||
使用扩展欧几里得算法解方程
|
||||
$$
|
||||
17d+3120y=1
|
||||
$$
|
||||
得到$d=2753$
|
||||
|
||||
3. 公钥为$(17,3233)$, 密钥为$(2753,3233)$
|
||||
|
||||
4. 鲍勃使用公钥加密明文'A'=65
|
||||
$$
|
||||
E(65)=65^{17}\pmod{3233}=2790
|
||||
$$
|
||||
5. 爱丽丝用私钥解密
|
||||
$$
|
||||
D(2790)=2790^{2753}\pmod{3233}=65
|
||||
$$
|
||||
|
||||
## 5. 证明
|
||||
根据加密规则$M^e \equiv C\pmod {n}, C$可以写成$C=M^e-kn$
|
||||
下面证明下面的公式成立
|
||||
$$
|
||||
C^d \equiv M\pmod {n}
|
||||
$$
|
||||
将C代入要我们要证明的那个解密规则:
|
||||
$$
|
||||
(M^e-kn)^{d}\equiv M\pmod {n}
|
||||
$$
|
||||
它等同于求证
|
||||
$$
|
||||
M^{ed}\equiv M\pmod {n}
|
||||
$$
|
||||
由于
|
||||
$$
|
||||
ed\equiv1\pmod {\phi(n)}
|
||||
$$
|
||||
所以
|
||||
$$
|
||||
ed=h\phi(n)+1
|
||||
$$
|
||||
将ed代入得到:
|
||||
$$
|
||||
M^{h\phi(n)+1}\equiv M\pmod{n}
|
||||
$$
|
||||
接下来,分成两种情况证明上面这个式子。
|
||||
#### 5.1 $M$与$n$互质
|
||||
根据欧拉定理,此时
|
||||
$$
|
||||
M^{\phi(n)}\equiv 1\pmod{n}
|
||||
$$
|
||||
得到
|
||||
$$
|
||||
{(M^{\phi(n)})}^h\times M\equiv M\pmod{n}
|
||||
$$
|
||||
原式得到证明。
|
||||
|
||||
#### 5.2 $M$与$n$不是互质关系
|
||||
此时,由于$n$等于质数$p$和$q$的乘积,所以$M$必然等于$kp$或$kq$。
|
||||
以$M = kp$为例,考虑到这时$k$与$q$必然互质,则根据欧拉定理,下面的式子成立:
|
||||
$$
|
||||
{(kp)}^{q-1}\equiv 1\pmod{q}
|
||||
$$
|
||||
进一步得到
|
||||
$$
|
||||
((kp)^{q-1})^{h(p-1)}\times kp\equiv kp \pmod{q}
|
||||
$$
|
||||
即
|
||||
$$
|
||||
(kp)^{ed}\equiv kp \pmod{q}
|
||||
$$
|
||||
将它改写成下面的等式
|
||||
$$
|
||||
(kp)^{ed}=tq+kp
|
||||
$$
|
||||
这时$t$必然能被$p$整除,即 $t=t'p$
|
||||
$$
|
||||
(kp)^{ed}=t'pq+kp
|
||||
$$
|
||||
因为 $m=kp, n=pq$,所以
|
||||
$$
|
||||
M^{ed} \equiv M\pmod {n}
|
||||
$$
|
||||
原式得到证明。
|
||||
|
||||
## 6. 密钥对的个数
|
||||
对于选定的$n=pq$,能够产生的密钥对$\{e,d,n\}$有多少个?
|
||||
|
||||
由于$ed\equiv1\pmod{\phi(n)}$,所以$\gcd(e,\phi(n))=1$,而且$1\lt e\lt \phi(n)$,所以$e$的个数是和$\phi(n)$互质的数的个数,也就是$e$有$\phi(\phi(n))$个
|
||||
对于$d$,由于$ed\equiv1\pmod{\phi(n)}$,当$e$确定时,方程$ex\equiv1\pmod{\phi(n)}$在$1\lt x\lt \phi(n)$有且只有一个解,所以密钥对$\{e,d,n\}$的个数为$\phi(\phi(n))$个
|
||||
|
||||
|
||||
比如$p=13,q=17$,那么$\phi(n)=12\times 16=2^6\times 3$,
|
||||
$\phi(\phi(n))=\phi(2^6)\times\phi(3)=2^5\times2=64$
|
||||
所以一共有64对密钥
|
||||
|
||||
## 7. 交换律
|
||||
当通信的双方使用模数相等的RSA算法时,RSA算法满足交换律,也就是说Alice使用的密钥为$\{e_1,d_1,n\}$, Bob使用的密钥对为$\{e_2,d_2,n\}$,满足
|
||||
$$
|
||||
e_1d_1\equiv e_2d_2\equiv 1\pmod{\phi(n)}
|
||||
$$
|
||||
那么
|
||||
$$
|
||||
E_B(E_A(M))=E_A(E_B(M))
|
||||
$$
|
||||
Reference in New Issue
Block a user