RSA算法和ssh登录详解

RSA算法

数学原理

费马小定理: 若\(a \in Z , p \in P\), 则\(a^{p}-a\)一定是p的倍数.

\((a^{p}-a)/p\)的余数为零, \(a^{p}/p\)\(a/p\)同余, \(a^{p} \equiv a (mod\ p)\). 如果a不是p的倍数, 则\(a^{p-1}-1\)是p的倍数.

欧拉-费马小定理: 若\(a \in Z , n \in Z\), 且a,n互素, 则\(a^{\varphi(n)}-1 \equiv 1 (mod\ n)\).

其中, 若n为质数,\(\varphi(n)=n-1\). 若p,q互质, 则\(\varphi(pq)=(p-1)(q-1)\).


假设Alice要给Bob发送信息, 需要对信息进行加密, 首先需要确定公私钥.

  1. Alice首先选取两个大质数p,q, \(N=pq\), 由欧拉函数的性质, \(\varphi(N)=(p-1)(q-1)\).

  2. 选取一个数e, 使得\(1<e<\varphi(N)\), 且e与\(\varphi(N)\)互质. 得到公钥(N,e).

  3. 根据选取的e, 找另一个数d, 使得\(ed \equiv 1 (mod\ \varphi(N))\), 即\(ed/\varphi(N)\)余1. 得到私钥(N,d)

    \(\exists d \iff e\perp\varphi(N)\)

加密及解密

  1. Alice首先确定N, 公钥e, 私钥d. 并把(N,e)传送到Bob端.

  2. Bob收到公钥(N,e)后, 把发送的数据通过某种方法转化为数字m, \(m<N\). 如果太大, 可以进行切片分批发送.

    对m进行加密, 取\(m^{e}/N\)的余数c, c就是密文, \(c \equiv m^{e}(mod\ N)\). Bob把c传输给Alice.

  3. Alice收到密文c后, 取\(c^{d}/N\)的余数, 这个余数一定就是m, \(m \equiv c^{d}(mod\ N)\). 这样就实现了解密.

    \(c = m^{e} + N的倍数\)

    \(c^{d} = (m^{e} + N的倍数)^{d}\)

    \(c^{d} = m^{ed} + N的倍数\)

    \(c^{d} = m^{1+\varphi(N)的倍数}+N的倍数\)

    \(c^{d} = m(m^{\varphi(N)的倍数})+N的倍数\)

    \(c^{d} = m(1+N的倍数)+N的倍数\) 欧拉-费马小定理

    \(c^{d} = m + N的倍数\)

安全性

公钥e, 密文c和N是可以截取到的, 而私钥d是自身保留的, 如果没有私钥d, 只通过N和e来解密是非常困难的.

假设黑客拥有e, c, N. 如果需要求d, 通过d的构造方法可知, 需要知道\(\varphi(N)\), 从而需要知道p和q. 这就涉及到质因数分解, 对于一个非常大的数N, 分解是非常困难的.

SSH免密登录过程

在登录Linux的过程中, 可以通过SSH来免密登录, 其中的加密算法就是RSA算法.

客户端(Client)就相当于Alice, 而Linux服务端(Server)相当于Bob. 客户端生成公钥(N,e)和私钥(N,d), 把公钥发送到服务端进行保存.

登录的过程:

  1. Client发送登录请求, 其中包括用户名和IP地址.

  2. Server收到后, 查找用户对应的公钥(N,e), 随机生成一段字符串m, 并通过公钥进行加密得到密文c. 把密文c发送给Client.

  3. Client收到密文c后, 通过私钥(N,d)进行解密, 得到原始字符串m, 再把m发送给Server.

  4. Server比对收到的m, 如果相同, 则同意登录, Client实现了免密登录.

posted @ 2020-08-01 11:59  aeinrw  阅读(360)  评论(0编辑  收藏  举报