1976年以前,所有的加密方法都是同一種模式:
> (1)甲方選擇某一種加密規則,對信息進行加密;
>
> (2)乙方使用同一種規則,對信息進行解密。
由于加密和解密使用同樣規則(簡稱"密鑰"),這被稱為["對稱加密算法"](http://zh.wikipedia.org/zh-cn/%E5%AF%B9%E7%AD%89%E5%8A%A0%E5%AF%86)(Symmetric-key algorithm)。
這種加密模式有一個最大弱點:甲方必須把加密規則告訴乙方,否則無法解密。保存和傳遞密鑰,就成了最頭疼的問題。

1976年,兩位美國計算機學家Whitfield Diffie 和 Martin Hellman,提出了一種嶄新構思,可以在不直接傳遞密鑰的情況下,完成解密。這被稱為["Diffie-Hellman密鑰交換算法"](http://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange)。這個算法啟發了其他科學家。人們認識到,加密和解密可以使用不同的規則,只要這兩種規則之間存在某種對應關系即可,這樣就避免了直接傳遞密鑰。
這種新的加密模式被稱為"非對稱加密算法"。
> (1)乙方生成兩把密鑰(公鑰和私鑰)。公鑰是公開的,任何人都可以獲得,私鑰則是保密的。
>
> (2)甲方獲取乙方的公鑰,然后用它對信息加密。
>
> (3)乙方得到加密后的信息,用私鑰解密。
如果公鑰加密的信息只有私鑰解得開,那么只要私鑰不泄漏,通信就是安全的。

1977年,三位數學家Rivest、Shamir 和 Adleman 設計了一種算法,可以實現非對稱加密。這種算法用他們三個人的名字命名,叫做[RSA算法](http://zh.wikipedia.org/zh-cn/RSA%E5%8A%A0%E5%AF%86%E7%AE%97%E6%B3%95)。從那時直到現在,RSA算法一直是最廣為使用的"非對稱加密算法"。毫不夸張地說,只要有計算機網絡的地方,就有RSA算法。
這種算法非常[可靠](http://en.wikipedia.org/wiki/RSA_Factoring_Challenge),密鑰越長,它就越難破解。根據已經披露的文獻,目前被破解的最長RSA密鑰是768個二進制位。也就是說,長度超過768位的密鑰,還無法破解(至少沒人公開宣布)。因此可以認為,1024位的RSA密鑰基本安全,2048位的密鑰極其安全。
下面,我就進入正題,解釋RSA算法的原理。文章共分成兩部分,今天是第一部分,介紹要用到的四個數學概念。你可以看到,RSA算法并不難,只需要一點[數論知識](http://jeremykun.com/2011/07/30/number-theory-a-primer/)就可以理解。