公鑰與金鑰的產生
假設alice想要通過乙個不可靠的**接收bob的一條私人訊息。她可以用以下的方式來產生乙個公鑰和乙個私鑰:
(n,e)是公鑰,(n,d)是私鑰。alice將她的公鑰(n,e)傳給bob,而將她的私鑰(n,d)藏起來。隨意選擇兩個大的質數p和q,p不等於q,計算n=pq。
根據尤拉函式,求得r = (p-1)(q-1)
選擇乙個小於 r 的整數 e,求得 e 關於模 r 的模反元素,命名為d。(模反元素存在,當且僅當e與r互質)
將 p 和 q 的記錄銷毀。
加密訊息
假設bob想給alice送乙個訊息m,他知道alice產生的n和e。他使用起先與alice約好的格式將m轉換為乙個小於n的整數n,比如他可以將每乙個字轉換為這個字的unicode碼,然後將這些數字連在一起組成乙個數字。假如他的資訊非常長的話,他可以將這個資訊分為幾段,然後將每一段轉換為n。用下面這個公式他可以將n加密為c:
ne ≡ c (mod n)
計算c並不複雜。bob算出c後就可以將它傳遞給alice。
解密訊息
alice得到bob的訊息c後就可以利用她的金鑰d來解碼。她可以用以下這個公式來將c轉換為n:
cd ≡ n (mod n)
得到n後,她可以將原來的資訊m重新復原。
解碼的原理是:
cd ≡ n e·d(mod n)
以及ed ≡ 1 (mod p-1)和ed ≡ 1 (mod q-1)。由費馬小定理可證明(因為p和q是質數)
n e·d ≡ n (mod p) 和 n e·d ≡ n (mod q)
這說明(因為p和q是不同的質數,所以p和q互質)
n e·d ≡ n (mod pq)
簽名訊息
rsa也可以用來為乙個訊息署名。假如甲想給乙傳遞乙個署名的訊息的話,那麼她可以為她的訊息計算乙個雜湊值(message digest),然後用她的金鑰(private key)加密這個雜湊值並將這個「署名」加在訊息的後面。這個訊息只有用她的公鑰才能被解密。乙獲得這個訊息後可以用甲的公鑰解密這個雜湊值,然後將這個資料與他自己為這個訊息計算的雜湊值相比較。假如兩者相符的話,那麼他就可以知道發信人持有甲的金鑰,以及這個訊息在傳播路徑上沒有被篡改過。
RSA加密演算法
素數是這樣的整數,它除了能表示為它自己和1的乘積以外,不能表示為任何其它兩個整數的乘積。例如,15 3 5,所以15不是素數 又如,12 6 2 4 3,所以12也不是素數。另一方面,13除了等於13 1以外,不能表示為其它任何兩個整數的乘積,所以13是乙個素數。素數也稱為 質數 二 什麼是 互質數...
RSA加密演算法
演算法的描述 1.選取兩個素數p,q 2.計算n p q,fn p 1 q 1 3.選擇乙個整數e,使得e與fn的最大公約數為1,e將會用於對資料進行加密。4.計算出乙個整數d,使得d e除fn的餘數為1。d用於對密文進行解密,還原出明文。5.假設明文為m,密文為c。如果需要對原文進行加密,則進行如...
RSA加密演算法
一 rsa是公鑰加密演算法之一,該演算法的數學基礎是 1 初等數論的euler定理,即 若整數a與整數n互素,則a n 1 mod n 其中,n 為尤拉函式。2 大整數分解很困難,即給定乙個大整數n,將其分解為n p q,兩個素數乘積十分困難。二 rsa基本原理 1 金鑰的生成。選擇大素數p,q,計...