1. 程式人生 > >密碼學入門筆記一

密碼學入門筆記一

密碼學入門筆記一

本篇是可汗學院公開課:現代密碼學的筆記

公開密匙學

隨著通訊技術的發展,對資訊加密有了要求。問題是A與B之間的訊息是公開的,可以被C看到,那麼如何做到使C不知道該資訊。

1976年Whitefield和Martin提出了一個基於單向函式的方法,叫做Diffie-Hellman key exchange。單向函式指從一側到另一側過程簡單,反向過程困難的函式。以顏色為例,A,B均有各一種私有顏色a和b,公開傳遞資訊為另一種顏色c與各自私有顏色混合後的顏色,那麼A獲得b+c後,與自己的顏色a混合,得到a+b+c,同樣B也可以得到a+b+c,但C只能獲得a+c和b+c。可以看到,這種方法的前提必須是混合顏色很難反向推匯出組合的顏色。單向函式的強度取決於反向過程的求解時間。

數學上這類稱為離散對數問題(Discrete Logarithm Problem),一個例子是3取冪次後模17這個函式的結果是在0-17上均勻分佈,正向很簡單,反向用餘數求原來的冪次很困難,當數字達幾百位時反向就無法求解了。對於這個例子,還是A和B兩人,假定A的數字是15,B的數字是13,公共資訊是質模數17和生成數3。A給B發的數字是6,B給A發的數字是12,A計算12的15次方模17後的結果為10,同樣B用6的13次方模17後也為10。兩者均是計算3的15*13次方模17。

RSA加密

前面所說的Diffie-Hellman key exchange需要雙方都知道質模數和生成數,會造成很大的額外資訊開銷。1970年James Elite提出一種公開密匙加密的思路(non secret encryption),不需要密匙交換。還是以顏色為例,假定每種顏色都有互補色,即兩者混合後成白色。假設A手中為顏色a1,發給B的是a1的互補色a2,B希望發給A為顏色b,只需要將b與a2混合後得到c發回給A,那麼A通過將c與手中的a1混合,便能還原出顏色b。這種方法相當於將密匙分為了兩個部分,加密密匙和解密密匙,只需要將加密密匙傳送給他人,他人將加密後的資訊傳送回來即可,而不需要額外發送資訊來得到一個公有的密匙。

Cocks發明了一種單向函式(trap door one way function),這種函式正向計算很簡單,但反向解碼很困難除非有特殊的資訊,即trap door。加密方法是將手中數字m取e次方後模N得到c,c、e、N是公開的資訊,反推m是很困難的。那麼我們需要一個特殊資訊d來使得c的d次方模N後可以得到m,即 m e

d   m o d   N = m {m^{e*d} \ mod \ N=m}

為了構造d,我們利用一個函式 ϕ ( n ) {\phi(n)} 為小於等於n的正整數中與n沒有公共質因數的數字的數目,以8為例,1,3,5,7與8無公共質因數,所以 ϕ ( 8 ) = 4 {\phi(8) = 4} ϕ ( n ) {\phi(n)} 有個性質 ϕ ( A B ) = ϕ ( A ) × ϕ ( B ) {\phi(AB)=\phi(A) \times \phi(B)} ,且對於質數m來說 ϕ ( m ) = m 1 {\phi(m) = m -1} 。我們只需要取N為兩個數百位質數m1和m2的乘積,那麼這個只有A知道,可以簡單計算出 ϕ ( N ) = ( m 1 1 ) ( m 2 2 ) {\phi(N)= (m1-1)(m2-2)} 。這個即為我們想要構造的trap door。

尤拉定理表示 m ϕ ( n )   m o d   n = 1 {m^{\phi(n)} \ mod \ n = 1} ,其中m與n不能有公共質因數。這等價於 m k ϕ ( n ) + 1   m o d   n = m {m^{k\phi(n)+1} \ mod \ n = m} ,那麼就可以得到d的表示式為 d = k ϕ ( n ) + 1 e {d = \frac{k\phi(n)+1}{e}} 。當其他人不知道N的因數分解時,反向推導 ϕ ( N ) {\phi(N)} 非常困難。

可以看到這種方法的強度取決於質因數分解的難度。

數字簽名和數字證書

前面提到了兩種加密的方式,第一種是對稱加密演算法,加密和解密使用相同的密匙,常見的是DES等,優點是加密速度很快,但安全性很差,第二種是非對稱加密演算法,加密和解密用不同的密匙,即公匙和私匙,優點是安全性高,缺點是加密速度慢。還有第三種加密演算法,是雜湊雜湊演算法,將一篇明文印射到固定長度的雜湊碼h,生成其獨有的摘要,碰撞概率一般來說非常低,並且這種雜湊演算法是公開的,常用的有MD4,MD5,SHA等。

如果用私匙加密後,就生成了數字簽名,將原文和數字簽名一起發給對方,對方收到後用公匙解開數字簽名,與通過信件hash之後的結果對比,如果一致,表示信件內容未被修改。

那麼如果你的資訊被人篡改,收到的是一個偽造的公匙,那麼他就可以隨意偽造信件內容。因此就誕生了數字證書,公證公司用自己的私匙對信件和數字簽名一起加密,對方收到後用公證公司的公匙先進行解密核對自己拿到的公匙是不是正確。