自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

一分鐘了解 RSA 算法到底是個(gè)什么鬼?

開發(fā) 前端
本文將概述 RSA 算法的流程,并用一個(gè)簡單示例進(jìn)行闡述,最后講解了一種意想不到的“旁門左道”的破解方式。

背景

大家好,我是石頭哥。

RSA 算法大家肯定都聽說過了,它是一種常見的非對(duì)稱加密算法,常用來對(duì)一些在網(wǎng)絡(luò)上傳輸?shù)拿舾行畔⑦M(jìn)行加密。

但具體流程不知道大家清楚不?本文將概述 RSA 算法的流程,并用一個(gè)簡單示例進(jìn)行闡述,最后講解了一種意想不到的“旁門左道”的破解方式。

RSA 算法流程

具體算法流程如下:

找到互質(zhì)的兩個(gè)數(shù), p 和 q, 計(jì)算 N = p*q

確定一個(gè)數(shù) e, 使得 e 與 (p-1)(q-1) 互質(zhì), 此時(shí)公鑰為 (N, e), 告訴給對(duì)方

確定私鑰 d, 使得 e*d-1能夠被(p-1)(q-1)整除

消息傳輸方傳輸消息 M, 加密密文C為:

消息接受方通過收到密文消息 C, 解密消息 M:

RSA算法依賴于歐拉定理,一個(gè)簡化版本為大致為 a 和 p 互質(zhì),那么有:

即a 的 p-1 次方 對(duì) p 取余為1,(a 的 p-1次方減去1可以整除 p)

歐拉定理的證明比較復(fù)雜,可以參考下文末的參考資料。

舉個(gè)例子

還是用個(gè)簡單示例來說明:

N = pq, 取倆素?cái)?shù) p=11, q = 3, N = p * q = 33, 取 e 與 (p-1)(q-1) = 20 互質(zhì)的數(shù) e = 3, 然后通過

確定私鑰, 即取一個(gè) d 使得 3*d -1 能 20 被整除, 假設(shè)取 d=7 或者d=67。(3*7-1=20 當(dāng)然能被20整除, 3*67-1=200 也能被20整除)

因此 public key 為 (N=33, e=3), private key 為 d=7 或者d=67。

假設(shè)加密消息M=8, 通過加密算法,得到密文 C=8^3 % 33 = 17。

再來看解密, 由,得到明文 M = 17^7 % 33 = 8 或者 M=17^67 % 33=8, 是不是很神奇? (這里^ 表示多少次方,后文中的有的表示異或)

來, 安利一個(gè)計(jì)算器的工具, bc 命令, 支持任意精度的計(jì)算, 其實(shí) Mac簡單的計(jì)算就可以通過前面介紹的 Alfred 可以方便得完成。

linux計(jì)算器

RSA 破解

如果需要破解 RSA 的話,就是需要找到 p 和 q, 使得 pq=33, 如果知道了 p 和 q 就能通過公鑰 N 和 e 反推出私鑰 d 了。

當(dāng)然上面所述的案例較簡單,當(dāng) N 很大時(shí),就特別困難了。大數(shù)分解在歷史以來就一直是數(shù)學(xué)上的難題。

曾經(jīng)有人花了五個(gè)月時(shí)間分解了這個(gè)數(shù)39505874583265144526419767800614481996020776460304936454139376051579355626529450683609727842468219535093544305870490251995655335710209799226484977949442955603(159位數(shù)), RSA-155 (512 bits) [from wikipedia]。

這條路走不通, 就有人走了"旁門左道"了, Stanford 的幾個(gè)研究者用了兩個(gè)小時(shí)破解了 OpenSSL 0.9.7 的 1024-bit 的 RSA 私鑰 (感興趣的同學(xué)可以看他們的論文Remote Timing Attacks are Practical),用到的方法就是后面提到的時(shí)序攻擊(或譯為"計(jì)時(shí)攻擊")。

計(jì)時(shí)攻擊(Timing Attack)

計(jì)時(shí)攻擊是邊信道攻擊(或稱"側(cè)信道攻擊",Side Channel Attack,簡稱 SCA) 的一種, 主要是一種利用不同的輸入會(huì)有不同的執(zhí)行時(shí)間這個(gè)特點(diǎn)進(jìn)行的。

剛開始看到這個(gè),我還是大為震驚的。憑直覺想,感覺要實(shí)際應(yīng)用起來干擾項(xiàng)太多了,是不是可以直接忽略?

不過,看到上述論文有實(shí)際攻破成功的案例,以及各大編程語言紛紛補(bǔ)丁來看,這樣做還是非常需要的,至少是“政治”正確的。

例如 JDK 1.6.0_17 中的Release Notes 中就提到了 MessageDigest.isEqual中的 bug 的修復(fù),如下圖所示:

MessageDigest.isEqual計(jì)時(shí)攻擊

參考資料:

[Timing Attacks on RSA: Revealing Your Secrets through the Fourth Dimension](http://www.cs.sjsu.edu/faculty/stamp/students/article.html)

[Remote Timing Attacks are Practical](http://crypto.stanford.edu/~dabo/papers/ssl-timing.pdf)

[費(fèi)馬小定理](https://zh.wikipedia.org/wiki/%E8%B4%B9%E9%A9%AC%E5%B0%8F%E5%AE%9A%E7%90%86)


責(zé)任編輯:武曉燕 來源: 程序猿石頭
相關(guān)推薦

2022-07-18 06:16:07

單點(diǎn)登錄系統(tǒng)

2017-07-06 08:12:02

索引查詢SQL

2020-07-09 07:37:06

數(shù)據(jù)庫Redis工具

2020-07-17 07:44:25

云計(jì)算邊緣計(jì)算IT

2021-08-06 08:50:45

加密貨幣比特幣區(qū)塊鏈

2020-09-23 06:54:51

路由表接口數(shù)據(jù)包

2017-03-30 19:28:26

HBase分布式數(shù)據(jù)

2022-06-02 08:46:04

網(wǎng)卡網(wǎng)絡(luò)服務(wù)器

2016-09-14 15:57:53

架構(gòu)分布式系統(tǒng)負(fù)載均衡

2020-05-21 19:46:19

區(qū)塊鏈數(shù)字貨幣比特幣

2018-06-26 05:23:19

線程安全函數(shù)代碼

2018-07-31 16:10:51

Redo Undo數(shù)據(jù)庫數(shù)據(jù)

2017-02-21 13:00:27

LoadAverage負(fù)載Load

2015-10-10 14:11:00

互聯(lián)網(wǎng)數(shù)據(jù)挖掘爬蟲

2020-01-30 11:26:17

QinQVLAN協(xié)議

2018-01-14 23:19:25

靜態(tài)動(dòng)態(tài)互聯(lián)網(wǎng)

2017-12-26 16:24:36

接口代碼數(shù)據(jù)

2012-06-26 09:47:23

大數(shù)據(jù)

2011-02-21 17:48:35

vsFTPd

2016-09-12 17:28:45

云存儲(chǔ)應(yīng)用軟件存儲(chǔ)設(shè)備
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)