密碼學 專題 DH密鑰交換算法

注意事項:

  • SSL中密鑰交換算法有6種:無效(沒有密鑰交換)、RSA、匿名Diffie-Hellman、暫時Diffie-Hellman、固定Diffie-Hellman、Fortezza
  • 生成對話密鑰一共需要三個隨機數。(客戶端生成隨機數、服務器生成隨機數、客戶端使用服務器公鑰加密的隨機數);考慮到中間人攻擊,中間人可以獲得客戶端生成隨機數、服務器生成隨機數和對稱加密使用的算法,安全性完全依靠第三個加密的隨機數(客戶端使用服務器公鑰加密的隨機數),盡管只要服務器的公鑰足夠長,破解的難度很大。因此部分 算法使用?DH密鑰交換算法;不需要使用第三個參數,僅僅根據 先前傳遞的隨機數 計算這個 隨機數
  • 迪菲-赫爾曼密鑰交換(Diffie–Hellman key exchange,簡稱“D–H”) 是一種安全協議。它可以讓雙方在完全沒有對方任何預先信息的條件下通過不安全信道建立起一個密鑰。這個密鑰可以在后續的通訊中作為對稱密鑰來加密通訊內容。

算法描述

  • 離散對數的概念:
  • 原根:如果a是素數p的一個原根,那么數值:amodpa^2?modp,…,a^(p-1)?modp?是各不相同的整數,且以某種排列方式組成了從1p-1的所有整數。
  • 離散對數:如果對于一個整數b和素數p的一個原根a,可以找到一個唯一的指數?i,使得:
  • b?=(a的i次方)?modp???其中0i?p-1?那么指數i稱為b的以a為基數的模p的離散對數。
  • Diffie-Hellman?算法的有效性依賴于計算離散對數的難度,其含義是:當已知大素數p和它的一個原根a后,對給定的?b,要計算?i?,被認為是很困難的,而給定?i?計算b?卻相對容易。

Diffie-Hellman算法:

  • 假如用戶A和用戶B希望交換一個密鑰。
  • 取素數p和整數aap的一個原根,公開a和p。
  • A選擇隨機數XA<p,并計算YA=a^XA mod p。
  • B選擇隨機數XB<p,并計算YB=a^XB mod p。
  • 每一方都將X保密而將Y公開讓另一方得到。
  • A計算密鑰的方式是:K=(YB) ^XA modp
  • B計算密鑰的方式是:K=(YA) ^XB modp

證明:

?????????????????????(YB)^ XA mod?p?= (a^XB modp)^ XA mod?p

???????????????????? ?= (a^XB)^ XA mod?p?= (a^XA) ^XB mod?p??? (<-- 密鑰即為 a^(XA*XB) mod?p)

???????????????????? ?= (a^XA modp)^ XB mod?p= (YA) ^XB mod?p

  • 由于XA和XB是保密的,而第三方只有pa、YB、YA可以利用,只有通過取離散對數來確定密鑰,但對于大的素數p,計算離散對數是十分困難的。

例子:

假如用戶Alice和用戶Bob希望交換一個密鑰。

  • 取一個素數p?=97和97的一個原根a=5。

Alice和Bob分別選擇秘密密鑰XA=36和XB=58,并計算各自的公開密鑰:

  • YA=a^XA mod?p=5^36 mod 97=50
  • YB=a^XB mod?p=5^58 mod 97=44

Alice和Bob交換了公開密鑰之后,計算共享密鑰如下:

  • Alice:K=(YB) ^XA mod?p=44^36 mod 97=75
  • Bob:K=(YA) ^XB mod?p=50^58 mod 97=75?

安全性

  • 當然,為了使這個例子變得安全,必須使用非常大的XA,?XB 以及p, 否則可以實驗所有的可能取值。(總共有最多97個這樣的值, 就算XA和XB很大也無濟于事)。
  • 如果?p?是一個至少 300 位的質數,并且XA和XB至少有100位長, 那么即使使用全人類所有的計算資源和當今最好的算法也不可能從a,?p和a^(XA*XB) mod?p?中計算出 XA*XB。
  • 這個問題就是著名的離散對數問題。注意g則不需要很大, 并且在一般的實踐中通常是2或者5。
  • 在最初的描述中,迪菲-赫爾曼密鑰交換本身并沒有提供通訊雙方的身份驗證服務,因此它很容易受到中間人攻擊。
  • 一個中間人在信道的中央進行兩次迪菲-赫爾曼密鑰交換,一次和Alice另一次和Bob,就能夠成功的向Alice假裝自己是Bob,反之亦然。而攻擊者可以解密(讀取和存儲)任何一個人的信息并重新加密信息,然后傳遞給另一個人。因此通常都需要一個能夠驗證通訊雙方身份的機制來防止這類攻擊。有很多種安全身份驗證解決方案使用到了迪菲-赫爾曼密鑰交換。例如當Alice和Bob共有一個公鑰基礎設施時,他們可以將他們的返回密鑰進行簽名。

參考鏈接

  • DH密鑰交換算法_NowOrNever-CSDN博客_dh算法
  • 算法學習筆記(40): 原根 - 知乎

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

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

相關文章

qq瀏覽器網頁翻譯_iOS 14中直接在Safari瀏覽器中翻譯網頁的方法!

在 iOS 14 中&#xff0c;蘋果推出了「翻譯」的應用程序&#xff0c;可以實時翻譯數種不同的語言。同時&#xff0c;Safari 瀏覽器也新增了翻譯功能。借助新的網頁翻譯功能&#xff0c;Safari 會根據設備的首選語言列表自動檢測書否需要翻譯訪問的網頁內容&#xff0c;以便繼續…

java 輸出三位數和n位數的每一位的數

思路 規律&#xff1a;先除以/10^(n-1)再%10 三位數&#xff1a;n 個位&#xff1a;n/1%10 十位&#xff1a;n/10%100 百位&#xff1a;n/100%10 n位數&#xff1a;n 個位&#xff1a;n/10^0%10 十位&#xff1a;n/10^1%10 百位&#xff1a;n/10^2%10n位&#xff1a;n/10^(n…

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

對稱加密算法 對稱加密算法又可以分成流加密算法和塊加密 算法。流加密算法又稱為序列加密算法或序列密碼&#xff0c;它每次只對明文中的單個位或單個字節 進行加密操作。這種算法的優點是能夠實時進行數據傳輸和解密&#xff0c;缺點是抗攻擊能力比 較弱。塊加密算法又稱為分…

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

java 彩票游戲

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

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

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

C++ 左值和右值 的學習

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

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

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

java 結婚問題

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

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

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