# RSA 公鑰加密算法

終端之間信息傳遞安全性的保證始終是業(yè)務的剛性需求架专。不同的加密算法針對不同的業(yè)務需求,
因為公司是金融公司性質,又不是傳統(tǒng)的金融公司(PS:牽扯到數(shù)字貨幣、常聽說的比如:比特幣)贺喝,加密算法這塊也算是有一部分的了解。

這里要講的內容如 標題??

數(shù)字簽名

  • 數(shù)字簽名就是類似紙質文件上的手寫簽名的電子版宗兼。任何人都可以輕松地核對簽名躏鱼,不能偽造它是其存在的根本目的。
  • 數(shù)字簽名可以為簽名者身份和其簽署的信息內容提供證明殷绍。
  • 對于電子簽署的商業(yè)性合同,電子支票,電子購貨單和其他一些各方希望進行認證的電子信息來說是一種理想的解決方案染苛。

素數(shù)

在密碼學中需要找到最大的隨機素數(shù)是必須的。大素數(shù)很多主到,通常測試適當?shù)碾S機整數(shù)殖侵,知道找到素數(shù)的過程是可行的。
素數(shù)的分布函數(shù) π(n): 描述了小于或等于n的素數(shù)的數(shù)目
素數(shù)定理給了 π(n) 一個有用近似:

$$ \lim_{n \to +\infty} \frac{π(n)}{n/(\ln n)} \quad = 1 $$


e.g:

n = 10^9 時其誤差不超過 6% 其:π(n)=508,475,34,且 n/ln * n≈ 482,549,42

伯努利實驗

RSA基于素數(shù)原理:尋求大素數(shù)是很容易的镰烧,把一個數(shù)分解成兩個最大素數(shù)的積卻相當?shù)睦щy

公鑰加密


公鑰加密,顧名思義有一把 公鑰私鑰
在 RSA 加密算法中楞陷,每一個秘鑰由一對整數(shù)組成怔鳖。在密碼學中常以 AliceBob 作為例子,這也是每當有人普及比特幣相關的技術的時候頻率出現(xiàn)較多的名詞固蛾。


如圖:用 $P_A$ 表示 Alice 公鑰结执,$S_A$ 表示 Alice 私鑰
同理:

如圖:用 $P_B$ 表示 Bob 公鑰度陆,$S_B$ 表示 Bob 私鑰

秘鑰需要保密,公鑰可以對任何人透露,這個跟比特幣地址是一樣的献幔。
公鑰和秘鑰指定了可用于任何信息的函數(shù)懂傀。設 $\mathfrak{D}$ 表示允許的信息集合。其可能是所以有限長度的位序列的集合蜡感。

在最原始的公鑰加密設想中蹬蚁,要求公鑰與秘鑰指定一種從 $\mathfrak{D}$ 到其自身的一一對應的函數(shù)。對應 Alice 的公鑰 $P_A$ 的函數(shù)用 $P_A()$ 表示郑兴,他的秘鑰 $S_A$ 的函數(shù)表示成 $S_A()$, 因此 $P_A()$ 與 $S_A()$ 函數(shù)都是 $\mathfrak{D}$ 的排列犀斋。架設已知秘鑰 $P_A$ 或 $S_A$,可以有效的計算出函數(shù) $P_A()$ 和 $S_A()$

系統(tǒng)中任何參與者的公鑰和秘鑰都是一個“匹配對”,它們指定的函數(shù)互為反函數(shù)情连,也就是說叽粹,對于任何消息 $M\in\mathfrak{D} $ 有:
$$ M = S_A(P_A(M)) \ M = P_A(S_A(M)) $$


由此可以看出,運用兩把秘鑰 $P_A$ 和 $S_A$ 對 $M$ 相繼進行變換后却舀,最后任然得到消息 $M$

故在應用程序中:要求除了 Alice 外虫几,沒人能在較實用的時間內計算出函數(shù) $S_A()$。 對于送給 Alice 加密郵件的保密性與 Alice 的數(shù)字簽名的有效性挽拔。

因為$P_A$是公開的辆脸,就比如 數(shù)字貨幣的地址,這樣就可以計算出 $P_A()$ 它也是 $S_A()$ 的反函數(shù)篱昔,這個時候就要保證只有 Alice 能夠計算出 $S_A()$ 每强。

模擬一個發(fā)送環(huán)境:

如上圖: BobAlice 發(fā)送一條加密的消息 Message,竊取著得到的是一串亂碼。

  1. Bob 得到 Alice 的公鑰 $P_A$
  2. Bob 計算出對應的 M 的密文 $C=P_A(M)$州刽,并把 C發(fā)送給 Alice
  3. Alice 得到密文 C 之后空执,運用自己的秘鑰 $S_A$ 恢復原始信息: $S_A(C)=S_A(P_A(M))=M$.

由于 $S_A()$ 和 $P_A()$ 互為反函數(shù),所以 Alice 能夠根據(jù) C 計算出 M穗椅。因為只有 Alice 能夠計算出 $S_A()$, 所以也只有 Alice 能根據(jù) C計算出 M辨绊。因為 Bob 運用 $P_A$ 對M進行加密,所以只有 Alice 可以理解接收的消息匹表。

用類似的公鑰系統(tǒng)的設想可以很容易的實現(xiàn)數(shù)字簽名门坷,現(xiàn)在 Alice 希望把一個數(shù)字簽署的答復 M^' 發(fā)送給 Bob

在公鑰的數(shù)字簽名中, Alice 將她的數(shù)字簽名 $\sigma = S_A(M')$ 附加到消息 M‘上袍镀,來對消息 M’ 簽名默蚌。她將消息/簽名對 $(M', \sigma)$ 發(fā)送給 Bob,Bob 通過檢查等式 $M’ = P_A(\sigma)$ 來驗證它。如果等式成立苇羡,則他接受 $(M',\sigma)$ 作為 Alice 已經(jīng)簽名的一個消息

  1. Alice 運用她的秘鑰 $S_A$ 和等式 $\sigma = S_A(M')$ 計算出信息 M’ 的數(shù)字簽名 $\sigma$.

  2. Alice 把消息/簽名對 $(M', \sigma)$ 發(fā)送給 Bob.

  3. 當 Bob 收到 $(M', \sigma)$ 時绸吸,他可以利用 Alice 的公鑰,通過驗證等式 $M’ = P_A(\sigma)$ 來證實該消息的確是來自 Alice.

    如果 M’ 包含 Alice 的名字,這樣 Bob 就知道應該使用誰的公鑰锦茁。
    由上圖中的驗證可以看到攘轩,如果符合 Bob 可以得出消息 M‘ 確實是 Alice 簽名的結論。如果不成立码俩,那么 Bob 就可以得出一個結果: 要么就是信息 M‘或數(shù)字簽名 $\sigma$ 因傳輸錯誤而損壞度帮,要么信息對 $(M',\sigma)$ 是一個故意的偽造。

因為一個數(shù)字簽名既證明了簽署者身份稿存,也證明了簽署的信息內容笨篷,所以它是對文件末尾的手寫簽名的一種模擬。

數(shù)字簽名必須可以被能取得簽署者公鑰的人去驗證,一條所簽署過的信息可以被確認方確后再傳送到其他可以驗證簽名的各方挠铲。

比如我給你的一個比特幣其實就是一個簽名的過程冕屯,只是比特幣采用的是多次簽名加密技術,比這個要復雜許多(做區(qū)塊鏈開發(fā)的人可能見笑了)拂苹,其原理是怎樣的呢安聘?密碼學中一個通俗的例子:
AliceBob 的一張電子支票,Bob 確認了支票上 Alice 的簽名后瓢棒,就可以把這張支票交送給銀行浴韭,而銀行也可以對簽名進行一個驗證,然后就可以調撥相應的資金脯宿。

上面講到的是簽署的信息是沒有加密的,該信息是公開透明的念颈,比如比特幣交易的過程中是公開透明,該行為會向全網(wǎng)進行一個廣播连霉,同而使各個節(jié)點都能同步到該交易事件榴芳。

而我們這里要說的反而恰恰相反,我們要把信息進行一個加密跺撼,怎樣去加密呢窟感?就是把有關加密和簽名的兩種方案結合起來使用,就可以創(chuàng)建出同時被簽署和加密的消息歉井,簽署者首先把其數(shù)字簽名附加在消息的后面柿祈,然后再用他預定的接受者的公鑰對最終的消息/簽名對進行加密。接收者用其密鑰對收到的消息進行解密哩至,以同時獲得原始消息和數(shù)字簽名躏嚎。然后接收者可以用簽署者的公鑰對簽名進行驗證。很有意思菩貌!

RSA加密系統(tǒng)

公鑰私鑰創(chuàng)建過程

1.隨機選出最大素數(shù) $\mathcal{P}$ 和 $\mathcal{q}$, 使得 $\mathcal{P}\not=\mathcal{q}$ e.g:素數(shù) $\mathcal{P}$ 和$\mathcal{q}$ 可能各有 1024 位卢佣。
2.計算 $n=\mathcal{P} \mathcal{q}$
3.選取一個與 $\phi(n)$互質的最小奇數(shù) e,其中由等式 $\phi(n)$ 等于 ($\mathcal{P}-1$)($\mathcal{q}-1$)
4.對模 $\phi(n)$, 計算出 e 的乘法逆元 d 值箭阶。
5.將對 $P=(e,n)$ 公開珠漂,并作為參與者的 RSA 公鑰
6.使對 $S=(d,n)$ 保密晚缩,并作為參與者的 RSA秘鑰

設 $D$ 為集合 $Z_n$.為了變換與公鑰 $P=(e,n)$ 相關的消息 $M$, 計算 $$P(M) = M^e\mod n$$
這個時候變換與秘鑰 $S =(d,n)$ 相關的密文 C,計算 $$S(C)=C^d \mod n$$

上面所看到的等式對加密與簽名是通用的媳危。為了創(chuàng)建一個簽名,簽署人把其秘鑰應用于待簽署的消息冈敛,而不是密文中待笑。為了確認簽名,將簽署人的公鑰應用在簽名中抓谴,而并非在加密的消息中暮蹂。

用模的求冪過程,來對公鑰與秘鑰的一些操作癌压。
我們設公鑰(e,n)和秘鑰(d,n)滿足 $\lg e = O(1)$, $\lg d \leq \beta$, 且 $\lg n \leq \beta$.
然后仰泻,應用公鑰需要執(zhí)行 $O(1)$ 次模乘法運算和 $O(\beta^2)$ 次位操作。 應用秘鑰需要執(zhí)行 $O(\beta)$ 次模乘法運算 $O(\beta^3)$ 次位操作滩届。

RSA安全性保證

RSA加密的安全性主要來源于對最大整數(shù)進行因式分解的困難性集侯。如果對方對公鑰中的模 n 進行分解,就可以根據(jù)公鑰推導出秘鑰帜消,主要是因為對方和公鑰創(chuàng)建者以同樣的方法使用因子 $\mathcal{P}$ 和 $\mathcal{q}$ .故如果能夠分解大整數(shù)棠枉,就可以輕易破解 RSA 加密算法。

這樣來講:對RSA加密系統(tǒng)的破解難易程度取決于分解最大整數(shù)的困難度泡挺。

在計算機發(fā)展的歷史中至今還沒有發(fā)行比分解模 n 更容易的方法來打破 RSA加密辈讶。

通過隨機選取兩個 1024 位的素數(shù)并求出它們的積,就可以創(chuàng)建出一把用現(xiàn)在技術在可行時間內破解的公鑰娄猫。也就是說在算法的發(fā)展史上沒有取得新的突破性進展的時候贱除,RSA 加密算法是一種安全方面的保證。

基于上面論述的原理媳溺,在實際的實現(xiàn)過程中 選取的位素數(shù)通常在 768到 2048 位月幌。由此就需要能夠有效的找出最大素數(shù)。

在實際的應用當中為了提高效率褂删,最長使用的是一種 秘鑰管理 模式的RSA飞醉,來實現(xiàn)快速無公鑰加密系統(tǒng)。在這樣的一個系統(tǒng)中屯阀,加密秘鑰與解密秘鑰是同一個缅帘。

e.g:
Alice 把一條長消息 M 發(fā)送給 Bob, 她從快速無公鑰加密系統(tǒng)中選取一把隨機秘鑰 K,然后運用 K 對 M進行加密难衰,得到密文 C钦无。這個時候 C的長度與 M一樣長,但是 K相當短盖袭。在一步匾嘱, Alice 利用 Bob的公開 RSA秘鑰對 K進行加密吮成。 因為 K 很短睛驳,所以計算 $P_B(K)$ 的速度也很快。$t_1 = P_B(K)的計算時間$凭峡,$t_2 = P_B(M)的計算時間$, 有: $t_1 > t_2$.
最后 Alice 把 $(C,P_B(K))$ 傳送給 Bob, Bob對 $P_B(K)$ 解密得到 K,然后在用 K 對 C 進行解密决记,得到 M摧冀。

通過上面例子了解到:使用一種混合的方法來提高數(shù)字簽名的執(zhí)行效率。

把 RSA 與一個公開的 抗沖突散列算法 h 結合系宫。 使用該函數(shù)的目的就是找出兩條消息 M和M',有 h(M)=h(M').
h(M)的值是消息M的一個短 “指紋” 的一個概念索昂。
如果 Alice 簽署消息 M,她第一步要做的就是把函數(shù) h 作用于 M得到的指紋h(M),然后用她的秘鑰加密h(M). Alice 將 $(M,S_A(h(M)))$ 作為她簽署的 M 的版本發(fā)送給 Bob. Bob 可以通過計算 h(M),并將 $P_A$ 應用于收到的 $P_A(h(M))$ 驗證其是否等于h(M)來驗證簽名的真實性扩借。
原理:沒有人能夠同時創(chuàng)建出兩條具有相同指紋的消息椒惨,所以在計算機上不可能改變簽署的消息,又保持了簽名的合法性潮罪。

所以利用證書可以輕松地分配公鑰康谆。
e.g:
在公網(wǎng)中有一個 T,每個人都知道其 公鑰错洁。 Alice 從T得到一條簽署的證書秉宿,聲明 “Alice” 的公鑰是 $P_A$. 由于每個人都知道 $P_T$,該證書是 “自我認證”。 Alice 可以把自己的證書含在簽名信息當中屯碴,使得接受者可以立即得到 Alice 的公鑰描睦,來驗證其簽名。因為 Alice 的秘鑰是被 T 簽署的导而,所以接收者知道 Alice 的秘鑰確實是 Alice 本人的秘鑰忱叭。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市今艺,隨后出現(xiàn)的幾起案子韵丑,更是在濱河造成了極大的恐慌,老刑警劉巖虚缎,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件撵彻,死亡現(xiàn)場離奇詭異,居然都是意外死亡实牡,警方通過查閱死者的電腦和手機陌僵,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來创坞,“玉大人碗短,你說我怎么就攤上這事√庹牵” “怎么了偎谁?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵总滩,是天一觀的道長。 經(jīng)常有香客問我巡雨,道長闰渔,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任鸯隅,我火速辦了婚禮澜建,結果婚禮上,老公的妹妹穿的比我還像新娘蝌以。我一直安慰自己,他們只是感情好何之,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布跟畅。 她就那樣靜靜地躺著,像睡著了一般溶推。 火紅的嫁衣襯著肌膚如雪徊件。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天蒜危,我揣著相機與錄音虱痕,去河邊找鬼。 笑死辐赞,一個胖子當著我的面吹牛部翘,可吹牛的內容都是我干的。 我是一名探鬼主播响委,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼新思,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了赘风?” 一聲冷哼從身側響起夹囚,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎邀窃,沒想到半個月后荸哟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡瞬捕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年鞍历,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片山析。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡堰燎,死狀恐怖,靈堂內的尸體忽然破棺而出笋轨,到底是詐尸還是另有隱情秆剪,我是刑警寧澤赊淑,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站仅讽,受9級特大地震影響陶缺,放射性物質發(fā)生泄漏。R本人自食惡果不足惜洁灵,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一饱岸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧徽千,春花似錦苫费、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至牍汹,卻和暖如春铐维,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背慎菲。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工嫁蛇, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人露该。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓睬棚,卻偏偏與公主長得像,于是被迫代替她去往敵國和親有决。 傳聞我的和親對象是個殘疾皇子闸拿,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

推薦閱讀更多精彩內容

  • RSA是目前最有影響力和常用的公鑰加密算法 這篇筆記目的是梳理RSA算法加解密的證明思路RSA算法是一種非對稱密碼...
    無令便逐風閱讀 689評論 0 1
  • 公鑰密碼系統(tǒng)及RSA公鑰算法 本文簡單介紹了公開密鑰密碼系統(tǒng)的思想和特點,并具體介紹了RSA算法的理論基礎书幕,工作原...
    火狼o閱讀 4,286評論 2 15
  • 姓名:于川皓 學號:16140210089 轉載自:https://baike.baidu.com/item/RS...
    道無涯_cc76閱讀 2,547評論 0 1
  • 必備數(shù)學知識 RSA加密算法中新荤,只用到素數(shù)、互質數(shù)台汇、指數(shù)運算苛骨、模運算等幾個簡單的數(shù)學知識。所以苟呐,我們也需要了解這幾...
    依然飯?zhí)?/span>閱讀 854評論 0 0
  • 家長與孩子溝通通常存在許多問題痒芝,尤其是青春期孩子,不愿意聽家長講道理牵素,也不愿意告訴家長自己的真實想法严衬。 以我多年企...
    繁花塢閱讀 2,071評論 9 20