當前位置:編程學習大全網 - 源碼下載 - 加密基礎知識2非對稱加密RSA算法和對稱加密

加密基礎知識2非對稱加密RSA算法和對稱加密

在上述過程中,出現了公鑰(3233,17)和私鑰(3233,2753)。這兩組數字是怎麽找到的?參考RSA算法的原理(2)

縮略詞描述:E是加密,D是解密)N,N是數字($ NUMBER)。

1.隨機選取兩個不相等的素數p和q。

愛麗絲選了61和53。(在實際應用中,這兩個素數越大,越難破解。)

2.計算p和q的乘積n。

n = 61×53 = 3233

n的長度就是密鑰長度。3233寫成二進制110010001,a * * *有12位,所以這個密鑰是12位。在實際應用中,RSA密鑰壹般是1024位,在重要場合是2048位。

3.計算歐拉函數φ(n)的n .稱為l

根據公式φ(n) = (p-1)(q-1)。

愛麗絲計算出φ(3233)等於60×52,也就是3120。

4.隨機選擇壹個整數e,它是公鑰中用於加密的數字。

條件是1

愛麗絲在1和3120之間,隨機選擇17。(實際應用中,經常選用65537。)

5.計算e對φ(n)的模逆元d。即用於解密的密鑰中的數字。

所謂“模逆元”,就是有壹個整數d,可以使ed的余數除以φ(n) 1。ed ≡ 1 (mod φ(n))

愛麗絲找到2753,即17 * 2753模式3120 = 1。

6.把n和e封裝成公鑰,把n和d封裝成私鑰。

在alice的例子中,n=3233,e=17,d=2753,所以公鑰是(3233,17),私鑰是(3233,2753)。

在上面的故事中,blob使用公鑰進行加密,以便秘密傳輸移動數字6,即6^17模式3233 = 824。愛麗絲收到後解密824,也就是824^2753 mod 3233 = 6。換句話說,alice成功接收了blob使用的移動位數。

讓我們再回顧壹下整個過程:

p=17,q=19

n = 17 19 = 323

L = 16 18 = 144

E = 5(E需要滿足以下兩個條件:1

D = 29(D必須滿足兩個條件,1

假設有人需要通過123,那麽加密後:123^5模式323 = 225。

接收225後,接收方解密,225^ 29模式323 = 123。

回頭看看上面的密鑰生成步驟,六個數字出現在壹個* * *:

p

q

n

l是φ(n)

e

d

這六個數字中,有兩個(N和E)用於公鑰,另外四個數字不公開。最關鍵的是D,因為N和D構成了私鑰。壹旦D泄露,就等於私鑰泄露。那麽,在已知n和e的情況下,有沒有可能推導出d呢?

(1)ed≡1 (mod φ(n))。只有知道E和φ(n)才能算出d。

(2)φ(n)=(p-1)(q-1).只有知道P和Q,才能計算φ(n)。

(3)n=pq .只有分解n因子,才能算出p和q。

結論:如果n可以因式分解,就可以算出D,說明私鑰被破解了。

但是,大整數的因式分解是壹件非常困難的事情。目前除了暴力破解,還沒有找到其他有效的方法。維基百科寫道:“最大整數因式分解的難度決定了RSA算法的可靠性。換句話說,分解最大整數越困難,RSA算法就越可靠。如果有人找到快速因式分解算法,RSA的可靠性就會大打折扣。但是找到這樣算法的可能性很小。今天,只有短RSA密鑰可以被暴力破解。直到2008年,國際上還沒有可靠的攻擊RSA算法的方法。只要密鑰長度足夠長,用RSA加密的信息是無法解密的。”

然而,雖然RSA的安全性依賴於大數的因式分解,但並沒有從理論上證明破譯RSA的難度等同於大數因式分解的難度。即RSA的壹大缺陷是理論上無法把握其保密性能。此外,RSA還有以下缺點:

a)生成密鑰很麻煩,受限於素數生成技術,很難做到壹次壹密。

b)包長太大,為了保證安全,n至少要600bits,這使得運算成本非常高,特別是速度慢,比對稱密碼算法慢幾個數量級;而且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標準化。所以RSA只能加密少量數據,大量數據加密依賴於對稱加密算法。

加密和解密自古就有。經常看偵探電影的橋段。勇敢機智的主角苦惱於壹長串毫無意義的數字。突然,他靈光壹閃,翻出壹本厚厚的書。第壹個數字對應於頁碼,第二個數字對應於行數,第三個數字對應於該行中的壹個單詞。數字變成了壹串非常有意義的單詞:

吃花生豆腐。嘗起來像火腿。

這種加密方式是按照壹定的規律對原始信息進行加擾。某種編碼方式被稱為密碼。發送方根據密鑰對信息進行加密,而接收方使用相同的密鑰對信息進行解密。就像壹個帶鎖的盒子。發送者把信息放在壹個盒子裏,用鑰匙鎖上。收到信息的人用同樣的鑰匙打開它。加密和解密使用相同的密鑰,這稱為對稱加密。

如果是壹對壹,那麽兩個人需要交換壹把鑰匙。壹對多,比如總部和多個代理之間的通信,仍然可以使用同壹套密鑰。但在這種情況下,如果對手偷了壹把鑰匙,他就會知道所有交換的信息。二戰盟軍情報戰的很多結果都來自於破解這種對稱加密密鑰。

為了更加安全,總部需要為每個代理設計不同的密鑰。如果是像美國聯邦調查局這樣龐大的組織,恐怕很難維持這麽多鑰匙。現代社會,每個人的信用卡信息都需要加密。妳設計了鑰匙,銀行就不敢跪了。

對稱加密的弱點在於給了太多人密鑰。只要把特工鎖起來,總部保管鑰匙就好辦了。特工把資料鎖在箱子裏,除非去總部用唯壹的鑰匙打開,否則沒人能打開。只是這樣壹來,特工每次出門都要穿很多鎖,太容易被識破了。總部老板想了想,幹脆把制鎖技術公之於眾。代理商,或者其他任何人,可以就地取材,按圖紙做鎖,但不能按圖紙做鑰匙。鑰匙只有總部的壹把。

上面的重點是鎖和鑰匙的技術不壹樣。知道鎖不等於知道鑰匙。這樣,銀行就可以向所有用戶公布“鎖定”的方法。每個用戶可以使用壹把鎖來加密他的信用卡信息。即使有人竊聽,也不用擔心:只有銀行才有鑰匙!這種加密算法被稱為非對稱加密。非對稱加密的經典算法是RSA算法。它來源於數論和計算機計數的奇妙結合。

1976年,美國兩位計算機科學家惠特菲爾德·迪菲(Whitfield Diffie)和馬丁·赫爾曼(Martin Hellman)提出了壹個全新的想法,不需要直接傳遞密鑰就可以完成解密。這被稱為“Diffie-Hellman密鑰交換算法”。這個算法啟發了其他科學家。公認的是,加密和解密可以使用不同的規則,只要兩個規則之間存在對應關系,從而避免了密鑰的直接傳輸。這種新的加密模式被稱為“非對稱加密算法”。

1977年,Rivest、Shamir、Adleman三位數學家設計了壹種可以實現非對稱加密的算法。這個算法就是以他們三個的名字命名的,叫做RSA算法。從那時到現在,RSA算法壹直是應用最廣泛的“非對稱加密算法”。毫不誇張地說,有計算機網絡的地方就有RSA算法。

1.可以“崩潰”的保險箱(非對稱/公鑰加密系統,非對稱/公鑰加密)。

數據加密和解密與門鎖非常相似。當初人們只想到那種只能用鑰匙“鎖”數據的鎖。如果在自己的電腦上加密數據,當然可以使用門鎖的原始形式,方便快捷,簡單易用。

但是我們現在是在交流的時代。如果雙方都想做安全通信,應該怎麽做?如果也用這種方法,通信就像互相發送密碼……而且雙方都要有密鑰進行加密和解密。換句話說,他們倆都有保險箱的鑰匙。妳把數據放進去,用鑰匙鎖好,發給我。我用同樣的鑰匙打開保險箱,然後把我的數據鎖在保險箱裏發給妳。

好像沒什麽毛病。然而,這裏最大的問題是:我們如何在同壹個保險箱裏得到同樣的鑰匙?看來唯壹的辦法就是我們兩個壹起買個保險箱,然後我們每個人拿壹把鑰匙,以後用這個保險箱。但在現代通信社會,大多數情況下,見面都很難,更別說壹起買保險箱了。我們做什麽呢

於是,人們想到了“撞門”的方法。我有壹個可以“撞見”的保險箱,妳也可以自己買壹個。在通信開始的時候,我打開保險櫃就這樣發給妳了。妳把數據放進去後,就“撞”開保險箱,然後發給我。碰撞後,除了我,沒人能打開保險箱。這是RSA。公共保險箱是公鑰,但我只有拿到私鑰才能打開它。

2.數字簽名

這種鎖看起來很不錯,但是在運輸的過程中有這麽壹個嚴重的問題:妳怎麽確定妳收到的打開的保險櫃是我的?對於壹個聰明人來說,他可以這樣做:

(壹)冒充運輸工人。我正在把我的保險箱運送給另壹方。運輸工人自己做了這麽壹個保險箱,運輸的時候換成了他的。

(二)對方收到保險櫃後,沒有辦法知道是我原來發的,還是運輸工人更換的。對方把數據放進去,打保險箱。

(c)當運輸工人回來時,他們用自己的鑰匙打開保險箱,拿走數據。然後復制或者偽造,做壹個數據,放在我的保險櫃裏,撞開,發給我。

站在我的角度,站在對方的角度,我會覺得這個數據傳輸過程沒有問題。但是,運輸工人已經成功獲取了數據,整個過程仍然不安全。壹般流程如下:

我該怎麽辦?這個問題的本質原因是人們無法知道保險箱是“我”做的還是運輸工人做的。那麽簡單,我們不要做保險箱,讓權威機構做保險箱,然後用專用工具在每個保險箱上刻壹個號碼。當對方收到保險箱時,在權威機構的“公告欄”上核對號碼。如果和保險箱上的號碼壹樣,我就知道保險箱是“我的”,把數據放在安心的地方。壹般流程如下:

怎麽做壹個序列號不能修改的保險箱?這就涉及到公鑰系統中的另壹個問題:數字簽名。

要知道,刻字這種事誰都會做,做壹個只能自己刻字,別人修改不了的保險箱真的有點難。那麽我們該怎麽辦呢?這其實困擾了人們很久。直到有壹天,人們發現:我們不用在保險箱上刻合適的字,我們只要在保險箱上刻上自己的名字就行了。而且,刻字有點麻煩。為什麽我們不拿壹張紙在上面,讓人們直接在上面寫字呢?很簡單也很容易。具體來說,我們在保險箱裏嵌入壹張紙,然後生產出來的每壹個保險箱都有自己的名字,由權威機構的CEO簽名。然後,首席執行官在管理局的“公告欄”上簽名。比如這個CEO叫“學脆”,那麽整個過程差不多是這樣的:

這種方法的基本原理是,每個人都可以看到保險箱上的字是否是蘇雪首席執行官的親筆簽名。然而,這種字體是蘇雪首席執行官的唯壹字體。別人很難模仿。如果我們模仿它,我們可以自己分辨它。如果實在分辨不出來,就請筆跡專家來分辨。這不太好。這是密碼學中的數字簽名。

雖然上面的簽名方法不錯,但是還有壹個問題很傷人。因為簽名的外觀是公開的,所以聰明的人可以把公開簽名復印壹份,自己造壹個保險箱,然後把復印的字嵌入裏面。這樣,聰明人也可以用同樣的簽名造壹個保險箱。解決這個問題的壹個很簡單的方法就是看保險箱上的簽名,不僅僅是字體本身,還要看字體是否和公共字體壹模壹樣。如果完全相同,我們可以考慮這個簽名可能是影印的。甚至,檢查字體是否和其他保險櫃上的字體壹模壹樣。因為為了欺騙大家,聰明人可能不會復制公開簽名,而是復制其他保險箱上的簽名。這個解決方案雖然簡單,但是驗證簽名有點麻煩。麻煩的是,我不僅需要對比保險箱上的簽名是否與公開的筆跡相同,還需要對比獲得的簽名是否與公開的筆跡完全相同,甚至與所有公開的保險箱上的簽名是否完全相同。有沒有更好的辦法?

當然,人們想出了更好的方法。也就是說,當蘇雪的首席執行官簽字時,他不僅要簽上自己的名字,還要帶上簽字日期或這個保險箱的號碼。這樣,每個保險箱上的簽名都是獨壹無二的。這個簽名是蘇雪CEO的簽名+蘇雪CEO寫的時間或數字。這樣,即使有人偽造,也只能偽造用過的保險櫃。這個問題就徹底解決了。這個過程大概是這樣的:

3成本問題(密鑰封裝機制)

要解決上述問題,我們應該考慮成本...這種能“撞”門的保險櫃雖然好,但這種鎖的成本壹般比普通鎖要高,而且鎖的制作時間也會更長。在密碼學中,對於同樣“堅固”的鎖,能“撞”門的鎖的成本壹般是普通鎖的幾千倍。同時,能“撞”門的鎖壹般只能裝在小保險櫃裏。畢竟這麽復雜的鎖安裝起來很麻煩!普通的鎖可以安裝在任何保險箱上。如果兩個人要傳輸大量數據,用壹個大保險箱比壹堆小保險箱傳輸慢好多了。如何解決這個問題?人們想出了另壹個偉大的方法:我們結合了兩種鎖。妳可以“撞”進保險箱,把壹把普通鎖的鑰匙放進去。然後建壹個普通的保險箱鎖很多數據。這樣,我們就相當於送了壹把可以“撞壞”保險櫃的鑰匙。對方收到兩個保險櫃後,先用自己的鑰匙打開小保險櫃,取出鑰匙。然後用這把鑰匙打開大保險箱。這樣更好的是,由於對方拿到了鑰匙,我們以後溝通的時候就不需要“撞”保險箱了,在壹定時間內用普通保險箱就可以了,方便快捷。

以下參考數字簽名、數字證書、SSL和https之間的關系是什麽?

4.數字簽名

當數據在瀏覽器和服務器之間傳輸時,可能會在傳輸過程中被冒充內容的小偷所替代。那麽如何保證數據是真實服務器發送的,沒有被切換,如何保證傳輸的數據不被篡改呢?為了解決這兩個問題,必須使用數字簽名。數字簽名就像日常生活中的簽名壹樣。壹旦在合同上留下名字,就壹定會在法律意義上自己簽字,這是任何人都不可能復制的。那麽電腦裏的數字簽名呢?數字簽名用於驗證傳輸的內容是否是真實服務器發送的數據,以及發送的數據是否被篡改。它做這兩件事,就是不對稱加密的壹個應用場景。但是,他使用私鑰進行加密,使用配對的公鑰進行解密。

第壹步,服務器對消息進行哈希處理,生成摘要信息,摘要信息用私鑰進行加密,然後生成簽名,服務器將簽名和消息壹起發送給客戶端。

步驟2:收到數據後,客戶端提取簽名並用公鑰解密。如果Digest2可以正常解密,就可以確認是對方發的。

步驟3:客戶端提取消息文本並進行相同的哈希處理以獲得Digest1,然後將其與之前解密的Digist2進行比較。如果兩者相等,說明內容沒有被篡改,否則內容被更改。因為只要文本內容稍有變化,就會哈希出壹個完全不同的匯總信息。

5.數字證書頒發機構

數字證書(Digital certificate,簡稱CA)是由權威機構向網站頒發的壹種認可證書。這個證書是大家公認的(瀏覽器)。為什麽需要數字證書?有數字簽名還不夠安全嗎?有這樣壹種情況,瀏覽器無法確定所有真實的服務器是否都是真實的。我們舉個簡單的例子:廠家A在妳家裏裝了壹把鎖,把鑰匙給了妳。只要鑰匙能打開鎖,就可以確定鑰匙和鎖是配對的。如果有人換了鑰匙或者鎖,妳打不開門,妳也知道肯定是被偷了。但是,如果有人把鎖和鑰匙換成另壹套表面看起來差不多,但是質量差很多,雖然鑰匙和鎖是匹配的,但是妳不確定這是不是真的廠家A給妳的,那麽這個時候,妳可以請質檢部門檢查壹下這套鎖是不是真的來自廠家A,質檢部門是權威機構,他說的話是可以得到大眾認可的(呵呵)。

同樣,如果有人(張三)把真實服務器發給瀏覽器的公鑰替換成自己的公鑰,張三執行同樣的步驟用自己的私鑰對文本進行哈希和數字簽名,最後的結果是沒有問題的,但實際上瀏覽器看到的並不是真實服務器給的,而是由內而外(公鑰到私鑰)被張三改變了。那麽如何保證妳現在使用的公鑰是真實的服務器發給妳的呢?我們使用數字證書來解決這個問題。數字證書壹般由認證機構頒發,包含真實服務器的公鑰和網站的壹些其他信息。數字證書頒發機構用自己的私鑰加密並發送給瀏覽器,瀏覽器用數字證書頒發機構的公鑰解密得到真實服務器的公鑰。此過程基於由公認的證書頒發機構獲得的公鑰,因此是壹種安全的方式。

常見的對稱加密算法有DES、3DES、AES、RC5和RC6。非對稱加密算法被廣泛使用,如SSH、

HTTPS、TLS、電子證書、電子簽名、電子身份等。

參考DES/3DES/AES差異

  • 上一篇:MSDOS.SYS的配置參數
  • 下一篇:股票裏面的量化是什麽意思
  • copyright 2024編程學習大全網