RSA簡介
- 非對稱加密算法。有一對公私鑰組成。
- 1977年由三位數學家
Rivest
、Shamir
和Adleman
設計了一種算法,沒錯RSA
是三個人名字的首字母。 - 密鑰越長越難破解,1024位目前無法破解,因此1024位的RSA密鑰基本安全,2048位的密鑰極其安全。
- 公私鑰的使用。公鑰是公開的,一般公鑰加密私鑰解密(當然也可以反過來,但不安全),另外,使用私鑰簽名,公鑰驗證簽名。
RSA原理
取一對RSA的公私鑰,需要了解歐拉函數
,歐拉定理
。這部分這裏有詳細介紹。在這我只總結下。
歐拉函數 —— 任意給定正整數n,請問在小於等於n的正整數之中,有多少個與n構成互質關係。
用 φ(n)
表示,例如 φ(8) = 4
(1, 3, 5, 7 與其有互斥關係)
歐拉定理 —— 兩個正整數a和n互質,則n的歐拉函數 φ(n) 可以讓下面的等式成立:
即,a的φ(n)次方 - 1 是 n 整數倍。
RSA公私鑰生成步驟
- 選取兩個質數
p
,q
n=p*q
(n
轉化爲二進制表示,即爲RSA位數,位數越多越難破解)- 計算出n的歐拉函數
φ(n) = (p-1)(q-1)
- 隨機選擇一個整數
e
, 條件是1 < e < φ(n)
, 且e
與φ(n)
互質。 - 計算
e
對於φ(n)
的模反元素d
- 將
n
和e
封裝成公鑰,n
和d
封裝成私鑰
ed ≡ 1 (mod φ(n))
RSA 實現
見github(java,android實現)