RSA

公钥与私钥

  1. 随意选择两个大素数 pq, pq, 计算 N=pq.

  2. 根据欧拉函数,求得 r=ϕ(N)=ϕ(p)×ϕ(q)=(p1)(q1)

  3. 选择e<r (gcd(e,r)=1). 求得d,ed=1modr

  4. 销毁p,q

  5. pk=(N,e)

    sk=(N,d)

加密

将消息 m 转换为小于 N 的非负整数 n

c=nemodN

解密

n=cdmodN

原理

cd=nedmodN

已知 ed=1modr,即 ed=1+hϕ(N),那么有

ned=n1+hϕ(N)=n(nϕ(N))h

nN 互素,则由欧拉定理得:

ned=n(nϕ(N))h=n(1)h=nmodN

nN 不互素,则不失一般性考虑 n=pt, 以及 ed1=k(q1),得:

ned=(pt)ed=0=pt=nmodp

ned=ned1n=nk(q1)n=(nq1)kn=1kn=nmodq

ned=nmodN 得证

IND-CPA安全结构:使用RSA加密

Encryption using RSA

c=mH(r) || RSA.ENCsk(r)

可以直接使用 RSA 实现单向安全吗

填充:PKCS #1v1:5

y=0x00||0x02||r||0x00||m

c=yemodN

选择密文攻击:Bleichenbacher 攻击

IND-CCA安全结构:最优非对称加密(OAEP)

OAEP

s=(m||0...0)G(r)

t=rH(s)

c=RSA.ENCpk(s||t)