公钥密码学
概念: 公钥\(PU\),私钥\(PR\)
加密/解密: 发送方用接受方的公钥进行加密
数字签名: 发送方A用私钥加密,接收方B用A的公钥解密 (没有保密性,因为所有有A的公钥的人都可以解密)
Diffie-Hellman
原根
p是质数 \(\bmod p\)下的原根: \(g\bmod p,g^2\bmod p,\dots g^{p-1} \bmod p\)是\(1\dots p\)的全排列
\(A=g^a \bmod p\) 已知\(A,g\),求\(a\)的复杂度
方法
分析
-
不是加密算法,一般用来交换密钥K(因为攻击者只知道g,p,A,B), 不知道a,b
-
缺陷: 中间人攻击 用自己的c替换a 已知g,p
RSA
单向函数: n不能分解成p
Key generation
- 选择两个大质数\(p,q\) \(n=pq\) (用miller-rabin)
- 找两个数e,d: 满足\(ed \bmod (p-1)(q-1)=1\) (用扩展欧几里得)
- \(PB=(e,n),PR=d\)
加密解密
- 加密 \(c=m^e \bmod n\)
- 解密\(m=c^d\bmod n\)
证明: \(\varphi(n)=\varphi(p)\varphi(q)=(p-1)(q-1)\)
- 如果m,n互质 \(m^{ed}\mod n=m^{h\varphi(n)+1}\mod n=m\bmod n\) (欧拉定理)
- 如果m,n不互质, m是p或q的倍数
- 如果m是p的倍数 \(m^{ed}=0=m(\bmod p)\)
- 如果m不是p的倍数,m,p互质,\(m^{p-1}=1(\bmod p),m^{ed}=m^{k(q-1)(p-1)+1}=m(\bmod p)\)
- 所以\(m^{ed}=m(\bmod p)\), 同理\(m^{ed}=m(\bmod q)\)
数字签名
- 验证签名者、日期、时间
- 验证消息内容
- 第三方仲裁
明文-> 单向哈希 -> 得到100bit的哈希值 -> 签名算法(利用私钥) -> 发送明文和签名 -> 比较明文的哈希值 和用公钥解密的签名
Message Authentication Code
keyed hash function 用的是共享的key, 不是公钥