密碼學專題 相關概念的解析 對稱算法|算法的安全性|非對稱算法存在的問題|單向散列函數|數字簽名的弊端|密鑰交換

對稱加密算法

  • 對稱加密算法又可以分成流加密算法和塊加密 算法。
  • 流加密算法又稱為序列加密算法或序列密碼,它每次只對明文中的單個位或單個字節 進行加密操作。這種算法的優點是能夠實時進行數據傳輸和解密,缺點是抗攻擊能力比 較弱。
  • 塊加密算法又稱為分組加密算法或分組密碼,它每次對明文中的一組數據位進行加密 操作。現在使用的分組加密算法典型的分組長度是64位,因為經過密碼學家們證明,這 個長度大到足以防止破譯攻擊,而又小到足以方便使用。塊加密算法的優點是抗攻擊能力 好,但是實時性稍微差一點。

算法的安全性

  • 唯密文攻擊。密碼分析者通過各種途徑得到了使用同一算法加密的密文,密碼分 析者通過分析這些密文得出部分或全部明文消息,有時候也能夠得到加密密鑰,這樣就可 以用來解密別的密文。這種情況下一般要求有較多的密文作為攻擊資料

  • 已知明文攻擊。密碼分析者在幸運的情況下,不但得到了密文,而且得到了這些 密文相應的明文。他們通過密文和明文的對照推導出加密的密鑰或者設計一種新的算法, 使得使用相同密鑰和算法加密的信息都能夠被解密。

  • 選擇明文攻擊。密碼分析者不但可以得到密文和相應的明文,并且在必要的時候 可以選擇被加密的明文,這樣,密碼分析者能夠獲取更多的信息用來獲得加密的密鑰或者 設計一種新的算法,使得使用相同密鑰和算法加密的信息都能夠被解密。

  • 選擇密文攻擊。密碼分析者可以選擇不同的被加密的密文,而且能夠得到相應的 明文,從而從這些信息中推導出密鑰或設計新的解密算法。

  • 選擇密鑰攻擊。事實上密碼分析者并不能選擇加密密鑰,這里指他可能具有各種 密鑰之間相互關系的一些專業知識,從而用這些專業知識達到破譯目的。

  • 社會工程。事實上,很多情況下這是最有效的方法,就是通過欺騙、威脅、賄賂、 監視和其他非法手段對密鑰持有人進行攻擊,直到得到密鑰為止。

上述的所有攻擊手段 (除了最后一個)都可以作為我們評估一個算法安全性的參考依 據。事實上,沒有一個算法可以宣稱是絕對安全的,各種算法有不同層次的安全性。對算 法安全性的評估沒有統一的標準,但基本上可以從以下幾個方面考慮。

  • 價值代價。如果破譯算法的代價大于加密數據的價值,算法可以算是安全的。
  • 時間代價。如果破譯算法所需要的時間比加密數據需要保密的時間更長,算法可 以算是安全的
  • 可能性。如果使用該密鑰加密的數據量遠遠小于破譯該算法需要的數據量,算法 可以算是安全的。

根據破譯算法程度的不同,可以將算法安全性分為五個等級,下面的安全性由低到高 列出。

  • 全部破譯。能得到密鑰,使得所有使用該密鑰加密的密文都能被恢復成明文。
  • 全盤推導。通過分析,可以找到一個替代算法,在不知道密鑰的情況下恢復出所 有該密鑰加密的明文。
  • 局部推導。能夠從得到的密文中計算出相應的明文。 信息推導。通過分析可以得到部分有關密鑰或明文的信息。 不能破譯。無論給出多少密文信息,都不能恢復出明文信息。事實上,只要使用蠻力攻擊,幾乎所有實際的算法都是可以破譯的 (除了一次一亂密碼)。 在實際使用中,我們只要考慮一個算法在計算上的安全性就可以了。也就是說,當一 個算法用當前所能得到的所有資源都不能破譯的時候,就可以說這個算法是安全的。破譯 算法的難易程度可以用攻擊算法的復雜性來衡量。

攻擊算法的復雜性從下面三個方面衡量。

  • 數據復雜性。即攻擊時需要的數據量。
  • 計算復雜性。完成攻擊計算所需要的時間或計算量。
  • 存儲量需求。進行攻擊所需要的最大存儲空間。

一般來說,攻擊的復雜性值等同于這三個因素中最小的值。

  • 復雜性一般用數量級來表示,比如一個算法的計算復雜性是2^128,那么破譯這個算法 就需要2128次運算。這可能用最好的計算機也要花費1015年以上的時間才能完成計算,這 在實際中是不可行的,那么該算法也就是安全的。當然,現在的計算機速度快速發展,目 前看起來不可能破解的算法過幾年或幾十年可能就能輕而易舉地被破解。但是沒有必要擔 心,只要你使用的算法在最近的幾年或幾十年是安全的,那么就是一個計算上安全的算 法。以后計算能力增強了,自然會出現更強大的加密算法

非對稱算法的存在的問題

  • 公開密鑰算法比對稱加密算法慢
  • 公開密鑰算法抵抗選擇明文攻擊的能力較低。這是因為公開密鑰算法的加密密鑰 是公開的,攻擊者可以嘗試加密各種明文以跟獲取的密文相對照來確定明文。如果明文的 取值范圍是有限的,這種攻擊就很有效。而對稱加密算法因為密鑰都是秘密的,所以不容 易受到這種攻擊。

單向散列函數

  • 單向散列函數結合了單向函數和散列函數的特點,是指在一個方向上工作的散列函 數。也就是說,從輸入值得到散列值很容易,但使散列值等于某一個值卻是非常困難的事 情。好的單向散列函數應該具備無沖突的特點。所謂無沖突,并非真正意義上的無沖突, 它實際上是指兩個不同的輸入產生相同散列值的可能性非常小。一般來說,一個好的單向 散列函數如果其輸入值有一位改變,那么將引起其散列值一半數據位的改變。所以,已知 一個散列值,要找到一個輸入值,使得其散列值等于已知散列值在計算上是不可能的。
  • 單向散列函數在密碼學中的應用非常廣泛,基本上來說可以分為不加密散列值和加密 散列值的應用。不加密的散列值一般用作文件指紋或數據指紋。
  • 加密的散列值一般稱為消息鑒別碼 (MAC),它的功能跟單向散列函數基本一樣,只有擁有解密密鑰的人才能驗證該信息。單向散列函數還應用在數字簽名中以提高運算 的速度。

數字簽名的弊端

  • 數字簽名的抗抵賴功能時,基于一個隱性前提,即私鑰跟簽名者個人是 絕對等同的,但是私鑰和其使用者是兩個不可以等同的實體,因此 使用者完全可以聲明私鑰丟失造成數據的泄露。
  • 增加限制的措施,比如將私鑰隱藏在不能讀出的硬件模塊 中,用于密碼用途的智能卡就是這樣的設備。
  • 采用時間標記也可以一定程度上限制這種抵 賴行為,至少可以確保以前舊的簽名依然有效。事實上,時間標記在實際的數字簽名應用 中經常采用,它可以防止簽名重用和信息重放等攻擊。

多重簽名

  • 多重簽名也是實際應用中可能經常遇到的問題,一般都使用單向散列函數,多個簽名 者可以分別對文件的散列值進行簽名,然后再一起發給接收者。如果不使用單向散列函 數,問題會麻煩得多。一種可能的方案是簽名者分別對原來的文件簽名,這樣得到的簽名 文件內容將是原來的n倍,n等于簽名者的個數;另一種可能方案是后一個簽名者在前一 個簽名者的簽名基礎上繼續進行簽名,直到所有簽名者都完成簽名,但是這樣同樣帶來一 個問題,即驗證的時候必須先驗證最后一個簽名者的簽名,然后往前類推,這帶來了應用 上的限制。

高級密鑰交換協議

連鎖密鑰交換協議

  • 連鎖密鑰交換協議是解決中間人攻擊的一個巧妙的協議,當然不是一個能夠完全防止 中間人攻擊的協議,只是增加了中間人攻擊的難度。它基于這樣一種技術,即擁有加密消息的一半是沒有意義的,不能進行解密。這種技術是存在的,最簡單的例子就是分組加密算法,因為分組加密算法中消息的解密依賴初始向量,后面部分消息的解密要依靠前面的 消息,所以可以先發送后面部分的消息,然后再發送前面部分的消息,這樣,即使先得到 消息的后面部分也是不能解密信息的。
  • 連鎖密鑰交換協議的基本步驟如下。

  • 連鎖協議最重要的特點是,雙方發送消息的時候是相互連鎖的,也就是說,通信一方只有收到另一方發送的消息的一部分后才會繼續協議,否則就會等待或終止協議。這樣的 信息發送連鎖,使得中間的攻擊者沒有辦法進行竊聽式的中間人攻擊。
  • 攻擊者可以在通信中截獲通信雙方的公鑰,并用自己的公鑰替代通信雙方的公開密 鑰。但是當攻擊者在第2步截獲到消息的時候,雖然該消息是用他的公鑰加密的,但是因 為只有一半,所以至少暫時沒有辦法解密,同時因為協議是連鎖的,所以他這時候只有兩 個選擇,要么偽造一個假消息給Jim,要么終止攻擊行為,我們假設他有勇氣繼續碰運 氣。在第3步的時候,他存在同樣的困難選擇,只好再偽造一個假消息。這樣,當他在后 續的兩步收到可以解密的全部消息時,他已經沒有辦法修改以前偽造的消息。當然,這樣 他還可以用偽造的消息假裝跟通信雙方繼續進行交談,但是這樣顯然比竊聽獲取有用的信 息更加困難。因為 他不使用自己的公鑰替換通信雙方的公鑰,一旦分組第一塊成功之后,就沒有機會解密雙方通信的內容;但是一旦替換了,就只能一直替換下去,就無法完成竊聽的功能。

使用證書的密鑰交換協議

  • 基于公鑰算法的密鑰交換協議 之所以被中間人進行攻擊是因為無法將公鑰和個人的身份證明相互關聯。所以攻擊者可以隨意地用任何公開密鑰替代通 信雙方的公開密鑰。假設我們使得公開密鑰跟身份證明是緊緊聯系在一起的,那么攻擊者 就難以通過簡單的替換公開密鑰的方式冒充通信任一方。數字證書或者說數字簽名技術可 以將公開密鑰跟某個人的身份證明關聯在一起。
  • 在這種高級密鑰交換協議中,需要一個可信任的第三方,這個第三方能夠驗證任何想 通過驗證的用戶,他是絕對可信的。他用自己的私鑰對一個用戶的公鑰和用戶個人信息進 行簽名,形成一個數字證書。可信任的第三方自己的公鑰是任何用戶都可以取得的,這樣 任何用戶都可以通過驗證這個第三方的數字簽名來確定通信對方發送過來的公鑰是不是真 的是他自己的公鑰。這樣,攻擊者想要冒充第三方就很困難,因為他沒有可信任的第三方 的私鑰,沒有辦法偽造他的簽名。
  • 當然,這種使用證書的密鑰交換協議很依賴可信任的第三方,如果可信任的第三方受 到攻擊,整個通信系統的安全性將面臨威脅,但是這種攻擊顯然比中間人攻擊難得多。事實上,即便攻擊者取得了對第三方私鑰的控制權,也難以對以前簽發的公鑰證書進行更方便的攻擊。

?不需要密鑰交換協議的安全通信

?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446344.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446344.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446344.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java 交換兩個數的值(臨時變量,加減,異或)

臨時變量 開發中一般使用此方式 加減 第二種寫法: //3.使用加減d1d1d2;d2d1-d2;d1d1-d2;System.out.println("d1"d1"\td2"d2);異或(位運算符) 原理 ^異或:相同為0,不同為1 總代碼 class ExchangeNumber {public st…

ipython安裝-IPython的安裝及問題解決

IPython是python的一個第三方庫,本來使用pip(類似于linux的yum)工具是很容易安裝的,但是因為版本原因有時會出些問題,比如2.7.x版本的不能安裝IPython的最新版本,會報錯: 報錯如下: [rootiZ2ze7qh6q0di3qkv…

51單片機下載完程序后不亮_程序如何下載到單片機中?單片機常用的四種燒寫程序方式介紹...

單片機是一種可編程控制器,搭好硬件電路后,可以利用程序實現很多非常復雜的邏輯功能,與純硬件電路相比,簡化了硬件外圍的設計、方便了邏輯的設計、豐富了邏輯的輸出。不同廠家的單片機需要不同編程IDE來實現編程。在學習單片機之前…

java 使用三元運算符和if-else獲取兩個和三個數中的最大值

三元運算符格式 三元運算符:獲取兩個數中最大值 三元運算符:獲取三個數中最大值 三元運算符:總代碼 //案例1:獲取兩個數中最大的數int num178;int num256;int max1(num1>num2)?num1:num2;System.out.println("max1"max1);//max178//案例2:…

密碼學專題 鑒別協議|實際應用的混合協議

鑒別是指確定一個人的身份,即確定一個人是否是他所宣稱的身份 基于口令的鑒別協議 口令是最常用和最常見的鑒別協議。當登錄一臺重要的計算機時,它會要求輸入用戶 名和密碼,用戶名代表你的身份,口令起鑒別作用,如果你…

如何用texstudio下載ctex_公眾號素材庫視頻如何下載,用這種方法就可以哦

隨著微信的不斷崛起,它現在不僅僅是一個交流軟件還包含著很多功能,其中里面就有各種微信公眾號,我們可以在公眾號上找到許多有用的視頻,今天拓途數據就告訴大家公眾號素材庫視頻如何下載吧。 如何下載微信公眾號里的視頻文件 復制…

java 進制轉換 十進制轉二,八,十六進制

十進制轉其他進制 因為在java中位運算符是直接對數值的二進制數進行操作的 并且 寫的是二進制數在輸出和操作時是以十進制數的形式; 所以十進制轉二,八,十六進制;就已經實現了二進制,八進制,十進制&#x…

密碼學專題 密鑰生成|分組加密的模式 ECB|CBC|CFB|OFB

密鑰生成 如何安全地生成密鑰。即如何生成可信任的密鑰,保證用戶得到的密鑰是安全的, 生成密鑰的機器或程序是可信的。如何生成安全的密鑰。安全的密鑰沒有統一準確的定義,但一般來說是指密鑰抗 猜測和抗窮舉等針對密鑰攻擊的能力。涉及密鑰…

java 狗的年齡轉換為對應的人的年齡

題目 我家的狗5歲了,5歲的狗相當于人類多大呢? 其實,狗的前兩年每 一年相當于人類的10.5歲,之后每增加一年就增加四歲。 那么5歲的狗相當于人類多少年齡呢?應該是:10.5 10.5 4 4 4 33歲。 編寫一個程序…

excel高級篩選怎么用_Excel表格中高級篩選的優點以及常用方法介紹

在Excel表格中普通的數據篩選只能滿足一些基本的篩選要求,這篇文章為朋友們總結一下高級篩選的優點以及常用方法。一.與普通篩選相比,高級篩選可以使用比較運算符。在下圖中要篩選性別為男并且評分大于90的人員。如果使用普通篩選需要一個個的勾選成績大…

STL源碼剖析 第二次溫習 細節審核

臨時對象的產生 臨時對象也叫做 無名對象,(使用pass by value的方式會引發copy的操作,于是產生一個臨時的對象),造成效率的負擔,但是可以可以制造一些臨時對象在型別的后面 直接加上() 并可以指定初始數值,相當于調用…

java 彩票游戲

題目 Math.random()獲取隨機數 Math.random()返回的是一個[0.0,1.0)的doule類型的數 所以,獲取0-9:(int)Math.random()*10–> [0,10) 獲取0-10:(int)Math.random()*101–> [0,11) 獲取10-99:(int)Math.random()9010–> […

python異常處理_Python入門 斷言與異常處理

一、斷言斷言,可以理解為判斷是否斷開的預言。assert 表達式 , 描述表達式為我們的預期結果,當表達式的結果為False時,拋出 AssertionError 異常,如無異常捕獲程序遇到異常時直接結束運行。反之,表達式結果為True 程序…

C++ 左值和右值 的學習

引用是一個變量,它引用其他變量的內存位置 int x 34; int &lRef x; 標識符 IRef 就是一個引用。在聲明中,引用是通過 & 來指示的,出現在類型與變量的標識符之間,這種類型的引用稱為左值引用左值看作是一個關聯了名稱的…

百度關鍵詞排名查詢源碼_章丘百度霸屏總部,關鍵詞排名騰沃云

上海保沃騰沃云為您詳細解讀URiIr章丘百度霸屏總部的相關知識與詳情,做網站SEO優化文章內容優化效果已經十分明顯。內容的量量關于網站的整體量量很重要。通過關鍵字闡發,陳某們曉得需要環繞關鍵字編寫網頁。使您的內容的重要根底是您對網頁籌算描述的賣…

java 結婚問題

題目 大家都知道,男大當婚,女大當嫁。那么女方家長要嫁女兒,當然要提出 一定的條件:高:180cm以上;富:財富1千萬以上;帥:是。 如果這三個條件同時滿足,則&…

密碼學專題 數據填充的方式|序列加密的方式

電子密碼本模式和加密分組鏈接模式的分組算法都要求加密輸入的分組是固定長度 的,但是大多數輸入明文可能都不是分組長度的整數倍,也就是說,最后一個分組一般來 說是不足一個分組長度的。為了使分組加密算法能夠正常工作,通常使用…

win10此電腦不見了_教程 | win10總提示“你要允許此應用對電腦的修改嗎”,如何關閉?...

在使用電腦的時候,你是否曾遇到過這樣的情況,點擊打開軟件的時候,系統總是提示我們“你要允許此應用對你的設備進行修改嗎?”難道是軟件中病毒了嗎?,這其實上并沒有什么用處,只是系統無法判斷軟…

java 小時轉換為xx天xx小時

題目 為抵抗洪水,戰士連續作戰89小時,編程計算共多少天零多少小時? 代碼 使用/與% class ExchangeTime {public static void main(String[] args) {/*為抵抗洪水,戰士連續作戰89小時,編程計算共多少天零多少小時&a…

密碼學專題 加密模式的選擇|傳輸數據加密

分組加密模式和序列加密模式。它們之間最大的區 別在于分組加密模式每次對一組數據進行加密運算處理,而序列加密模式則逐位對數據進 行加密運算處理。事實上,在實際設計應用的算法中,并沒有那么嚴格的區別,它們有可能是相互結合的…