RSA入門
RSA演算法涉及到生成引數Gen,加密Enc、解密Dec三個函式.
生成引數
生成引數輸入指令並且輸出兩個足夠大的素數p和q,不妨令N=pq.
實際過程中輸出素數是通過構造大整數然後利用已知素性測試實驗比如Miller rabin或者AKS(通常前者)判斷是否素數,不是就重新構造大整數,這是很簡單的.
- 求尤拉函式
計算也就是N的尤拉函式,必須強調由於已知N的質數分解這個計算十分容易,同時如果不知道N的質因數,或者說不能分解N,計算是不可行的.
找出一個e,利用擴充套件歐幾里得乘法extended Euclidean algorithm保證e與互素,確保了有足夠多個e.
需要強調的是,實際過程中e往往取e為3(需要填充系統的幫助)或者已知最大費馬素數,最新的協議都要求e取65537(快速平方法只需要4次乘法一次加法),各位可以自行搜尋相關安全性分析(https://crypto.stackexchange.com/questions/3110/impacts-of-not-using-rsa-exponent-of-65537),e取這兩者的安全性有一定的差別.
- 求逆
利用擴充套件歐幾里得乘法extended Euclidean algorithm計算e模的逆,不妨將之記為d,也即是說e和d滿足 mod .
我們將N 和e作為公鑰對,將d設為私鑰,整個RSA的安全性可以說基於第三者對d的不瞭解,或者說第三者不能高效進行大數分解.
素數定理
對於足夠大的x,我們有:
素數定理用來估計素數個數,具體來說當我們考慮找一個1024bit也就是300位左右的素數時,我們自然想知道這樣的素數大約有多少個:
也即是說我們隨機選取的一個1024位數有大約0.04%的概率直接是素數.這其實是我們生成大素數的一個很重要的理論依據:如果素數足夠少,那生成素數就會非常困難.
我們考慮Alice和Bob在一個不安全通道上進行通訊,Eve是一個惡意的第三者,Eve可能監聽資訊,甚至可能篡改資訊,製造偽公鑰(active attack)等.
加密過程
Bob選擇明文,將明文m表示成適當的進位制(比如ASCII碼).
- 加密
其中c為密文.
事實上計算密文所需大數求模也有諸如Barrett的化簡演算法,或者快速平方法.
解密過程
Alice 通過不安全通道接收到密文c,進行如下運算:
- 解密
其中c為密文,d為私鑰,也就是e的模逆元.該計算仍可運用諸如Barrett或者快速平方法的化簡演算法,.
安全性分析
考慮到密碼學的任務就是“在非安全的通道上安全的通訊”,那麼一個惡意的第三者Eve就不可避免的出現.
我們進行最簡單的分析,假設Eve只能竊取到密文,也就是,此外加上Eve 也可以得到的公鑰資訊,也就是N和e,Eve要解決的問題就是已知,如何計算m.
這個問題可以歸約到大數分解問題,這裡僅給出一個例子:
我們計算x滿足
計算過程如下:
可以看出當我們知道模N的質數分解後,這就是一個簡單的中國剩餘定理問題,3和7互素必有解,解為
一點小問題
為什麼p,q要足夠大?
為什麼N是兩個素數的乘積而不是一個或者三個或者更多?
Eve還可以進行說明操作來影響Alice和Bob之間的通訊?
擴充套件
事實上更多的內容值得我們去深究,比如素數的選取除了大還需要滿足什麼才能抵抗足夠多的攻擊?(比如要求仍是素數)又或者RSA還有那些其他性質?(比如乘法同態)RSA安全性是否足夠可靠?(能否抵擋CCA,CPA等攻擊)這點都需要討論.
相關文章
- 經典加密演算法入門-RSA加密演算法
- GitHub/GitLab配置SSH Key,以及RSA入門GithubGitlab
- 58同城的登入(RSA演算法)演算法
- 入門入門入門 MySQL命名行MySql
- python中rsa的RSAPython
- 新浪微博動態 RSA 分析圖文+登入
- 如何入CTF的“門”?——所謂入門就是入門
- 何入CTF的“門”?——所謂入門就是入門
- scala 從入門到入門+
- makefile從入門到入門
- ACM入門之新手入門ACM
- RSA加密加密
- linux中ssh使用rsa免密碼登入方法Linux密碼
- 【小入門】react極簡入門React
- gRPC(二)入門:Protobuf入門RPC
- 《Flutter 入門經典》之“Flutter 入門 ”Flutter
- 新手入門,webpack入門詳細教程Web
- Android入門教程 | RecyclerView使用入門AndroidView
- linux新手入門――shell入門(轉)Linux
- java RSA 解密Java解密
- javascript RSA 加密JavaScript加密
- LUC_RSA
- MyBatis從入門到精通(一):MyBatis入門MyBatis
- SqlSugar ORM 入門到精通【一】入門篇SqlSugarORM
- Storm入門指南第二章 入門ORM
- VUE入門Vue
- MyBatis 入門MyBatis
- CSS 入門CSS
- JavaScript 入門JavaScript
- Nginx 入門Nginx
- RabbitMQ入門MQ
- GitHub入門Github
- Redis 入門Redis
- PostgreSQL 入門SQL
- Prometheus 入門Prometheus
- VuePress 入門Vue
- Tableau入門
- WebSocket 入門Web