RSA演算法詳解

2022-07-04 19:33:10 字數 2889 閱讀 1994

相濡以沫。到底需要愛淡如水。

之前寫過一篇文章ssl協議之資料加密過程,裡面詳細講述了資料加密的過程以及需要的演算法。ssl協議很巧妙的利用對稱加密和非對稱加密兩種演算法來對資料進行加密。這篇文章主要是針對一種最常見的非對稱加密演算法——rsa演算法進行講解。其實也就是對私鑰和公鑰產生的一種方式進行描述。首先先來了解下這個演算法的歷史:

rsa是2023年由羅納德·李維斯特(ron rivest)、阿迪·薩莫爾(adi shamir)和倫納德·阿德曼(leonard adleman)一起提出的。當時他們三人都在麻省理工學院工作。rsa就是他們三人姓氏開頭字母拼在一起組成的。

但實際上,在2023年,在英國**通訊總部工作的數學家克利福德·柯克斯(clifford cocks)在乙個內部檔案中提出了乙個相同的演算法,但他的發現被列入機密,一直到2023年才被發表。

rsa演算法用到的數學知識特別多,所以在中間介紹這個演算法生成私鑰和公鑰的過程中會穿插一些數學知識。生成步驟如下:

1. 尋找兩個不相同的質數

隨意選擇兩個大的質數p和q,p不等於q,計算n=p*q;

什麼是質數?我想可能會有一部分人已經忘記了,定義如下:

除了1和該數自身外,無法被其他自然數整除的數(也可定義為只有1該數本身兩個正因數]的數)。

比如2,3,5,7這些都是質數,9就不是了,因為3*3=9了

2. 根據尤拉函式獲取r

r = φ(n) = φ(p)φ(q) = (p-1)(q-1)。

這裡的數學概念就是什麼是尤拉函式了,什麼是尤拉函式呢?

尤拉函式的定義:

尤拉函式φ(n)是小於或等於n的正整數中與n互質的數的數目。

互質的定義:

如果兩個或兩個以上的整數的最大公約數是 1,則稱它們為互質

例如:φ(8) = 4,因為1,3,5,7均和8互質。

推導尤拉函式:

(1)如果n = 1, φ(1) = 1;(小於等於1的正整數中唯一和1互質的數就是1本身);

(2)如果n為質數,φ(n) = n - 1;因為質數和每乙個比它小的數字都互質。比如5,比它小的正整數1,2,3,4都和他互質;

(3) 如果n是a的k次冪,則 φ(n) = φ(a^k) = a^k - a^(k-1) = (a-1)a^(k-1);

(4) 若m,n互質,則φ(mn) = φ(m)φ(n)

證明:設a, b, c是跟m, n, mn互質的數的集,據中國剩餘定理(經常看數學典故的童鞋應該了解,剩餘定理又叫韓信點兵,也叫孫子定理),a*b和c可建立雙射一一對應)的關係。(或者也可以從初等代數角度給出尤拉函式積性的簡單證明) 因此的φ(n)值使用算術基本定理便知。(來自維基百科)

3. 選擇乙個小於r並與r互質的整數e

選擇乙個小於r並與r互質的整數e,求得e關於r的模反元素,命名為d(ed = 1(mod r)模反元素存在,當且僅當e與r互質),e我們通常取65537。

模反元素:

如果兩個正整數a和n互質,那麼一定可以找到整數b,使得 ab-1 被n整除,或者說ab被n除的餘數是1。

比如3和5互質,3關於5的模反元素就可能是2,因為3*2-1=5可以被5整除。所以很明顯模反元素不止乙個,2加減5的整數倍都是3關於5的模反元素 放在公式裡就是3*2 = 1 (mod 5)

上面所提到的尤拉函式用處實際上在於尤拉定理:

尤拉定理:

如果兩個正整數a和n互質,則n的尤拉函式 φ(n) 可以讓下面的等式成立:

a^φ(n) = 1(mod n)

由此可得:a的φ(n - 1)次方肯定是a關於n的模反元素。

尤拉定理就可以用來證明模反元素必然存在。

由模反元素的定義和尤拉定理我們知道,a的φ(n)次方減去1,可以被n整除。比如,3和5互質,而5的尤拉函式φ(5)等於4,所以3的4次方(81)減去1,可以被5整除(80/5=16)。

小費馬定理:

假設正整數a與質數p互質,因為質數p的φ(p)等於p-1,則尤拉定理可以寫成

a^(p-1) = 1 (mod p)

這其實是尤拉定理的乙個特例。

4. 銷毀p和q

此時我們的(n , e)是公鑰,(n, d)為私鑰,愛麗絲會把公鑰(n, e)傳給鮑勃,然後將(n, d)自己藏起來。一對公鑰和私鑰就產生了,然後具體的使用方法呢?請看:ssl協議之資料加密過程詳解

我們知道像rsa這種非對稱加密演算法很安全,那麼到底為啥子安全呢?

我們來看看上面這幾個過程產生的幾個數字:

n和e我們都會公開使用,最為重要的就是私鑰中的d,d一旦洩露,加密也就失去了意義。那麼得到d的過程是如何的呢?如下:

比如知道e和r,因為d是e關於r的模反元素;r是φ(n) 的值

而φ(n)=(p-1)(q-1),所以知道p和q我們就能得到d;

n = pq,從公開的資料中我們只知道n和e,所以問題的關鍵就是對n做因式分解能不能得出p和q

所以得出了在上篇部落格說到的結論,非對稱加密的原理:

將a和b相乘得出乘積c很容易,但要是想要通過乘積c推導出a和b極難。即對乙個大數進行因式分解極難

目前公開破譯的位數是768位,實際使用一般是1024位或是2048位,所以理論上特別的安全。

rsa演算法的核心就是尤拉定理,根據它我們才能得到私鑰,從而保證整個通訊的安全。

RSA演算法詳解與舉例

一 基礎 rsa演算法非常簡單,概述如下 找兩素數p和q 取n p q 取t p 1 q 1 取任何乙個數e,要求滿足e 取d e t 1 這樣最終得到三個數 n d e 設訊息為數m m 設c m d n就得到了加密後的訊息c 設m c e n則 m m,從而完成對c的解密。注 表示次方,上面兩式...

安全體系(二) RSA演算法詳解

正文 本文主要講述rsa演算法使用的基本數學知識 秘鑰的計算過程以及加密和解密的過程。安全體系 零 加解密演算法 訊息摘要 訊息認證技術 數字簽名與公鑰證書 安全體系 一 des演算法詳解 安全體系 三 sha1演算法詳解 回到頂部 rsa公鑰加密演算法是1977年由羅納德 李維斯特 ron riv...

RSA非對稱加密演算法詳解

rsa加密演算法是最常用的非對稱加密演算法,由羅納德 李維斯特 ron rivest 阿迪 薩莫爾 adi shamir 和倫納德 阿德曼 leonard adleman 於1977年一起提出,rsa就是他們三人姓氏開頭字母拼在一起組成的。非對稱加密演算法的特點就是加密秘鑰和解密秘鑰不同,秘鑰分為公...