題:
普通英語“ Diffie-Hellman密鑰交換”
user15119
2013-11-24 07:10:08 UTC
view on stackexchange narkive permalink

有人可以向我解釋什麼 Diffie-Hellman密鑰交換是純英語的嗎?我在一個非技術新聞頁面上讀到,Twitter剛剛實現了這項技術,該技術允許兩個人在非安全通道的頂部交換加密消息。怎麼樣(如果這是真的)?

維基百科具有[圖片說明](https://en.wikipedia.org/wiki/Diffie%E2%80%93Hellman_key_exchange#Description)。
YouTube有一個(簡單易用的)[視頻說明](https://www.youtube.com/watch?v=YEBfamv-_do&list=PL87386AD236727A1B&index=8):)
我發現該視頻有助於理解-https://www.youtube.com/watch?v=YEBfamv-_do
我最喜歡的DH視頻:https://www.youtube.com/watch?v = NmM9HA2MQGI
我發現顏色比喻有缺陷(維基百科和youtube)。將“私人”顏色與另一方的顏色混合不會呈現相同的秘密顏色。我實際上做了混合。
十一 答案:
tylerl
2013-11-24 13:28:12 UTC
view on stackexchange narkive permalink

Diffie-Hellman是在兩個人之間生成共享秘密的一種方式,這種秘密無法通過觀察通信來看到。這是一個重要的區別:您不是在密鑰交換期間共享信息,而是一起創建密鑰

這特別有用,因為您可以使用此技術與某人創建一個加密密鑰,然後開始使用該密鑰加密您的流量。即使記錄了流量並在以後進行了分析,也絕對沒有辦法弄清楚密鑰是什麼,即使創建密鑰的交換可能已經可見。這就是完美的前向機密的來源。以後再分析流量的人都不會闖入,因為該密鑰從未保存,從未傳輸過,也從未在任何地方公開。

它的工作方式相當簡單。很多數學與您在公鑰加密中看到的相同,因為使用了活板門功能。而且,雖然傳統上使用離散對數問題( x y sup> mod p 業務),但一般過程也可以修改為使用橢圓曲線密碼學

但是,儘管它使用了與公鑰密碼學相同的基本原理,但這並不是非對稱密碼學,因為在交換過程中沒有任何加密或解密的內容。但是,它是必不可少的組成部分,實際上是後來建立不對稱加密的基礎。

基本思想如下:

  1. I拿出一個素數 p 和一個數字 g ,它與 p-1 互質,並告訴你它們是什麼。
  2. 然後您選擇一個秘密號碼( a ),但您不會告訴任何人。取而代之的是計算 g a sup> mod p 並將結果發送給我。 (我們將其稱為 A ,因為它來自 a )。
  3. 我也做同樣的事情,但是我們將我的秘密號碼稱為 b 和計算出的數字 B 。因此,我計算了 g b sup> mod p 並將結果發送給您(稱為“ B “)
  4. 現在,請使用我發送給您的電話號碼,並使用 it 進行完全相同的操作。這就是 B a sup> mod p
  5. 我對您發送給我的結果進行相同的操作,因此: A b sup> mod p
  6. ol>

    這裡的“魔法”是,我在第5步中得到的答案與在第4步中得到的答案相同。魔術,這只是數學,它歸結為模指數的奇特屬性。具體來說:

    (g a sup> mod p) b sup> mod p = g ab sup> mod p
    (g b sup> mod p) a sup> mod p = g ba sup> mod p

    這其中,如果您仔細研究,則意味著無論以什麼順序進行冪運算,都將得到相同的答案。因此,我以一種順序進行,而以另一種順序進行。我不知道您用來獲得結果的秘密號碼,您也不知道我使用了什麼秘密,但是我們仍然得出相同的結果。

    這個結果,就是我們在第4步和第5步中偶然發現的那個數字,就是我們的共享密鑰。我們可以將其用作AES或Blowfish或任何其他使用共享機密的算法的密碼。而且我們可以肯定,除了我們以外,沒有其他人知道我們共同創建的密鑰。

DH是公鑰/非對稱* crypto *,但不是* encryption *。
我認為值得一提的是,這種安全性的原因在於,與普通log(x)不同,模塊化log(x)被認為很難計算。否則,我們可以只做log_g(A)和log_g(B)來得到a和b。
我想您可能還想補充一點,**`g` **不僅是任何素數,而且是**`p` **的生成器(或原始根)。
@TheRookierLearner這個答案是DH的“簡化解釋”;為了簡單起見,省略了很多重要的細節。這不應被視為實現教程。
但是假設這是一個不安全的網絡,我是否不能僅找到“ A”的根,也就是“ a”的根。和瞧!對不起我的業餘問題,但我必須學習:p
@Mero55您不僅要找到A的根,還要找到A,A + p,A + 2p,A + 3p等的根,直到結果為整數。
精彩解釋!非常感謝您的明確答案:D。
為什麼這是不對稱加密的基礎?如果發現和使用的任一側的密鑰相同,這些不是對稱密鑰嗎?
為什麼$ g $必須是素數?例如,如果$ g \ neq2 $有效,則$ p-g $也有效(甚至不是素數)。肯定地規定$ g $是質數會減少您的選擇...(並因此使鍵“更容易”猜出)。
非常感謝您對DH的清晰解釋:)
出於安全原因,素數** a **和** b **都應該是合理的*高*數字,並且彼此之間應有一定距離。
@whytheq是的,在DH程序之後,雙方都獲得了相同的密鑰。然後可以使用對稱算法(通常是使用該密鑰)對消息進行加密。由於非對稱加密比對稱加密慢得多,因此通常會這樣做。此外,DH被認為是非對稱加密的基礎,因為它與RSA(稍後開發)非常相似,並且可以從DH導出成熟的加密算法。
如果有人使用我們的秘密密鑰欺騙我們有關其身份的信息,將會發生什麼。如果有人知道這個秘密,他可以用它來掩飾自己的身份
-1
-1
@Makif DH使PFS成為可能,但是ECDH(不是臨時的)存儲並重新使用密鑰,如果PFS是您的目標,那麼這有點違反了目的。
我認為表達方程的一種不太混亂的方法是“(g ^ a)^ b = g ^ ab”和“(g ^ b)^ a = g ^ ba”,所有這些均以模p完成。這樣一來,到處都是更少的“ mod”。
Duncan Jones
2014-06-09 19:30:29 UTC
view on stackexchange narkive permalink

其他答案在解釋密鑰交換背後的數學方面做得很好。如果您想要更多的圖片表示形式,那麼 Diffie-Hellman密鑰交換 Wikipedia條目上顯示的出色的繪畫類比沒有什麼比這更好的了:


DH key exchange image

圖片在公共領域 sub>

此圖像非常適合於解釋其功能。我唯一的問題是“如果攻擊者知道普通塗料並且知道最終的混合物,他為什麼不能弄清楚原始顏色?”。答案當然是,這不是他需要知道的顏色,而是實際的原始混合物,並且正如您所提到的,混合物分離非常昂貴。 簡短地知道這一點的實際數學也將是非常棒的。
數學的解釋已經在其他地方進行了介紹,但您可以這樣想:假設“繪畫混合函數”為f(a,b)=(a + b)%1000。您和我宣布“共享的秘密是793”。然後我告訴你f(my_secret,793)=172。我的秘密是什麼?注意f(a,f(b,793))== f(b,f(a,793))。DH使用的實際功能並不是那麼簡單,但是重要的是信息丟失了,並且這個交換屬性成立。
顏色示例僅用於說明。顯然,計算顏色混合是微不足道的。DH使用的離散日誌問題不是。參見https://en.wikipedia.org/wiki/Discrete_logarithm。
這是使其他人了解基本原理的非常聰明和容易的方法。
鮑勃或愛麗絲是通過公開向其他人發送普通塗料而開始的嗎?
@LightCC常見的油漆通常是標準化的,因此他們都提前知道了對方在使用什麼。無需他們發送。在DH中,這種通用顏色稱為“生成器”或_g_,通常是數字2或5。在實際DH中,“ +”運算是對公共素數_p_取冪的取冪(可能事先知道也可能不知道)交換,具體取決於實施方式)。那就是混合油漆所指的。取消此模冪運算很困難,這就是確保DH安全的原因。
@forest那麼,世界可能知道“普通塗料”是什麼的事實,仍然使他們無法弄清個體秘密塗料是什麼?或者,如果以這種方式實施,是否需要每次選擇隨機的秘密油漆顏色?我的假設是,如果您始終保持通用和秘密塗料的顏色不變,則它很容易受到黑客攻擊(通過堅定的長期努力),並且隨機改變其中一個(或兩者)並偶爾重新建立會話將能夠解決該問題。問題。
@LightCC不需要更改常見的繪畫,並且保持相同不會有安全性問題。類比涉及混合,但實際上,它是模冪。它計算“ g ^ x mod p”,其中_g_是普通繪畫,_x_是秘密繪畫,_p_是使混合操作不可逆所必需的質數。儘管確實如此,但反複使用相同的_p_可能_潛在地導致在經過確定的長期努力之後,系統很容易崩潰。[weakdh網站](https://weakdh.org/)解釋了更多。
在密碼學中,有時直觀並不必然是正確的。以拉賓密碼系統為例,該密碼系統通過為秘密素數_p_和_q_計算“ m ^ 2 mod pq”來使用消息_m_進行加密。這個數字2是一個常數,永遠不會改變,但是Rabin系統已經被證明與整數分解一樣困難。沒錯,不過秘密塗料需要經常更換。對於標準的“臨時” DH(在TLS套件中通常稱為DHE),它在每次密鑰交換時都會更改。
user10211
2013-11-24 08:35:19 UTC
view on stackexchange narkive permalink

Diffie-Hellman是一種用於在兩方之間建立共享機密的算法。它主要用作交換密碼密鑰的方法,以用於AES等對稱加密算法。

該算法本身非常簡單。假設愛麗絲想與鮑勃建立一個共享秘密。

  1. 愛麗絲和鮑勃同意素數 p 和底數 g 。對於我們的示例,假設 p = 23 g = 5
  2. Alice選擇一個秘密整數 a 值為6併計算 A = g ^ a mod p 。在此示例中,A的值為8。
  3. Bob選擇一個值為15的秘密整數b併計算 B = g ^ b mod p 。在此示例中,B的值為19。
  4. Alice將 A 發送給Bob,Bob將 B 發送給Alice。
  5. 為了獲取共享機密,Alice計算了 s = B ^ a mod p 。在此示例中,愛麗絲獲取 s = 2
  6. 的值。要獲取共享機密,鮑勃計算 s = A ^ b mod p 。在此示例中,Bob獲得 s = 2 的值。
  7. ol>

    該算法是安全的,因為 a s 所需的> b 根本不會通過電線傳輸。

很好,但是您也可以引用它,它來自[Wikipedia](https://en.wikipedia.org/wiki/Diffie–Hellman_key_exchange#Cryptographic_explanation)。
Dan Is Fiddling By Firelight
2013-11-24 21:41:47 UTC
view on stackexchange narkive permalink

如果您想要簡單的英文DH解釋,即使是非技術人員也可以輕鬆理解,那就有雙重鎖框的類比。

  1. Alice提出了一個秘密放在一個盒子裡,並用掛鎖將其鎖上,因為只有她才能打開。然後,她將盒子寄給了鮑勃。

  2. 鮑勃收到了盒子,放了另一個只有他有鑰匙的掛鎖,然後又把它寄回了愛麗絲。 b> p>

  3. Alice移除了她的鎖,並將盒子再次寄給了Bob。

  4. Bob移除了他的鎖,打開了盒子,然後可以訪問愛麗絲發送給他的秘密。

  5. ol>

    由於箱子在運輸過程中始終至少有一個鎖,所以夏娃從沒有機會看到裡面的東西並竊取了機密:在此密鑰中,該密鑰將用於加密Alice和Bob的其餘通信內容。

現在,這就是我所說的簡單的英語解釋。愛你的男人。
雖然是普通英語,但這並未描述Diffie-Hellman。它描述了[DH-pass協議](http://en.wikipedia.org/wiki/Three-pass_protocol),它與DH具有明顯不同的屬性。例如,它需要三遍,而DH僅需要單遍。
我認為CodesInChaos會因故意簡化的類比而期望很多準確性。這有助於我更好地理解塗料的類比,也有助於我更好地理解更精確的塗料。(請注意,盒子上的解鎖孔太小,無法將餅乾從最裡面的盒子中取出。這就是我一開始的想法。
這不是“很多準確性”的問題。上鎖的盒子比喻完全不同於Diffie Hellman。
這至少表明是可能的。最初,有人認為原則上不能創建可觀察通道上的共享密鑰。
@NanbanJim它根本不代表Diffie Hellman,僅顯示了另一種交換秘密的方法。
DH不會像這樣交換秘密,而是生成秘密,但這很有趣
謝謝!這是一個非常好的和明智的類比!(儘管沒有解釋DHE)
如果您沒有第二次閱讀就無法在腦海中想像出這個簡單的解釋(我讀過),那麼這是一段很棒的皇家機構公共科學講座系列的視頻,解釋了它https://youtu.be/U62S8SchxX4?t=85可以清楚地算出@CodesInChaos提到的三遍。
aiao
2015-12-16 05:54:51 UTC
view on stackexchange narkive permalink

密鑰交換問題

安全連接需要交換密鑰。但是密鑰本身需要在安全連接上進行傳輸。

有兩種可能的解決方案:

  1. 通過物理方式會見和共享密鑰來交換密鑰。
  2. 以某種方式在公共不安全通道上建立了共享秘密。這說起來容易做起來難,而且第一個這樣的實現是Diffie-Hellman方案。
  3. ol>

    屬性

    Diffie-Hellman利用數學函數以下屬性:

    1. x 計算 f [x] (從 x 開始)很容易
    2. 難於將 f [x] 反轉為 x
    3. A f [B]
    4. B f [ A]
    5. 很難在沒有 A B 的情況下計算 S (即使使用 > f [A] f [B]
    6. ol>

      DH方案如何工作

      1. 愛麗絲問世帶有隨機數 A 。她計算 f [A] ,然後將 f [A] 發送給Bob。愛麗絲從未公開過她的 A ,甚至沒有向Bob公開。
      2. Bob出現了另一個隨機數 B 。他計算 f [B] ,然後將 f [B] 發送給Alice。鮑勃從未公開自己的 B ,甚至沒有向愛麗絲公開。
      3. 愛麗絲使用 A f [ B] 。 Bob使用 B f [A]
      4. Mallory來計算 S [A] 和 f [B] ,所以她很難計算 S
      5. Alice和Bob現在共享可以用作(或提出)建立安全連接的密鑰的常見機密。
      6. ol>

        旁注:

        Diffie-Hellman計劃不提供任何形式的身份驗證。它僅允許2個匿名方共享一個公共秘密。但就愛麗絲所知,她可能正在與魔鬼(而不是鮑勃)握手。這就是為什麼我們需要至少一方進行身份驗證的原因。

        例如:SSL(https),使用PKI(公鑰基礎結構)對Web服務器進行身份驗證,然後建立安全連接(DH)在網站和客戶之間。由於網站已通過身份驗證,因此客戶端可以信任該網站,但是該網站不能信任該客戶端。現在,客戶端可以在網頁上提供自己的身份驗證詳細信息。

我真的很感謝這裡的旁注,它回答了我一個but的問題,但無法完全闡明。
Eddie
2018-10-27 00:59:11 UTC
view on stackexchange narkive permalink

保護數據通過互聯網的安全通常需要以兩種方式對其進行保護:

  • 機密 預期的收件人可以讀取數據
  • 完整性 -確保沒有人可以修改或篡改傳輸中的數據

使用對稱加密提供機密性,並使用消息認證代碼(MAC)提供完整性。

對稱加密和MAC都要求雙方都具有相同秘密密鑰(在這種意義上,“密鑰”只是一個數字,轉換為

然後出現的問題是雙方如何在互聯網上建立相同秘密密鑰?(或任何其他不安全的媒體)。這就是所謂的“ 密鑰交換問題”。

該問題的一種解決方案是Diffie-Hellman算法。


Diffie-Hellman允許兩個方在不安全的介質上建立共享秘密。或者,更簡單地說。...

想像一下,您和您的朋友站在擁擠的房間裡,周圍都是可疑的人。假設您和您的朋友需要同意相同的號碼,但不希望房間中的其他任何人知道該號碼是多少。 Diffie-Hellman允許您和您的朋友巧妙地交換一些數字,然後根據這些數字計算出相同的另一個數字。即使房間中的每個人都聽到了正在交換的號碼,他們也無法確定您和您的朋友到達的最終號碼。

我們可以在下圖中看到一個發生這種情況的示例。愛麗絲和鮑勃將使用Diffie-Hellman密鑰交換來建立共享機密。

Diffie-Hellman Key Exchange -- pracnet.net/crypto

任何在對話中“聽”的人只會“聽到”中間交換的數字: 13 6 2 9 。沒有一致的方法來組合這四個數字來獲得最終的共享密鑰: 3 ,而又不知道Alice或Bob的Private值( 5 4 ),但從未共享。

這是Diffie-Hellman的美麗。

上面的示例中使用的數字較小,以使數學保持簡單。實際上,現代Diffie-Hellman交換中使用的數字(或應該是)至少為 2048位長-寫出大約需要 617位


完成Diffie-Hellman密鑰交換後,雙方現在具有相同的值,只有雙方都知道。

此值成為“起點”,從此開始可以生成其他密鑰。

之前,我們提到了對稱加密和消息身份驗證代碼,每個代碼都需要一個秘密密鑰。好吧,將您的DH共享密鑰與其他一些值組合起來,現在您便擁有了所需的加密和MAC密鑰。

將值組合起來以創建密鑰的額外好處很容易...它可以

實際上,許多安全協議(SSL / TLS,IPsec等)會生成一組密鑰來保護每個方向上的流量 總共四個密鑰(一個方向上的MAC +加密,另一個方向上的MAC +加密)。所有四個鍵都是從Diffie-Hellman派生的相同初始起始值生成的。

+1為插圖樣本!你畫了這個還是在其他地方選了?如果是這樣,您能張貼這張圖片的來源嗎?
@F.Hauri我畫了它=)。它最初發佈在我的博客上:https://www.practicalnetworking.net/series/cryptography/diffie-hellman/
幹得好,做得好!我對進行翻譯的消息來源很感興趣!
Lucas Kauffman
2013-11-24 07:20:00 UTC
view on stackexchange narkive permalink

Diffie-Hellman是一種數學算法,用於在兩方之間交換共享的秘密。此共享機密可用於加密這兩方之間的消息。請注意,Diffie-Hellman算法不提供這兩方之間的身份驗證。

它缺少解釋,希望您能多解釋一些...
您想要沒有數學的英語解釋。
對於HTTPS連接,身份驗證由SSL證書框架處理。您可以確定(正在盡可能)通過驗證和信任與目標方進行通信。 SSL連接的握手/協商在開銷方面很昂貴。 DH算法允許雙方安全地協商對稱密鑰,以提高加密效率。
securityOrange
2018-10-27 06:27:53 UTC
view on stackexchange narkive permalink

Computerphile的Diffie-Hellman視頻在解釋這種密鑰交換時絕對令人讚嘆。他們的視頻“ 秘密密鑰交換(Diffie-Hellman)”相當詳盡,但是他們對DH背後的數學解釋是我迄今為止在任何媒介中遇到的最好的(當然比我個人可以在這里為您寫的內容)。 在這裡觀看

Stanislav Bashkyrtsev
2019-12-09 00:51:17 UTC
view on stackexchange narkive permalink

Diffie-Hellman的目標:通過公開渠道在兩方之間秘密共享一個號碼。

首先從學校召回這些取冪規則:(xᵃ)ᵇ=xᵃᵇ=xᵇᵃ例如(2³)⁴=(2⁴)³= 4096 。這個想法是,如果愛麗絲將 x xᵃ發送給Bob,則Bob和其他任何人都無法計算 a 。很難說2³是什麼,但是給定8很難說要獲得8的2的冪。所以歸結為:

  1. Alice和Bob同意一個數字所有人都可以知道的 x ,例如 2
  2. Alice生成 a = 3 並發送2³ = 8 發送給Bob
  3. Bob生成數字 b = 4 並將2⁴= 16 發送給Alice
  4. Alice因此計算16³= 4096 ,而鮑勃計算8⁴= 4096
  5. ol>

    因此,愛麗絲·阿里福克科普(Alice & Bob)都知道4096,但沒人知道 > a 和 b ,因此無法計算xᵃᵇ。

    實際上,計算對數並不那麼複雜。但是一旦包含模塊化算術,就會變得很複雜。

eigenfield
2019-12-19 15:51:10 UTC
view on stackexchange narkive permalink

Diffie和Hellman發明了 Diffie-Hellman密鑰交換,以通俗易懂的英語而不使用上面的答案中的任何數學表達式。

本發明是關於兩個人在同一號碼上達成一致的一種方式。然後,這個共同商定的號碼將用於兩個人的任何目的。例如,遵循 DH Key Exchange 步驟之後,最終結果是兩個人現在到達的號碼相同。兩個人都無法控制這個公用號碼。 DH Key Exchange (DH密鑰交換)發明僅保證兩個人都能到達一個共同的號碼。一旦達到該通用數字,示例用法就是使用該數字轉發字母。例如,如果公用數字為5,則在發送消息時字母A變為F,字母B變為G,依此類推。然後,接收消息的其他人將向後退消息的每個字母以進行閱讀。

Person-A person-B 不能大聲說話以約定一個公用號碼,因為第三個 person-C 會聽到。如果 person-C 知道商定的號碼,那麼他也可以閱讀該秘密消息。 DH密鑰交換始終要求總是有 第三個人 person-C 可以收聽 person-A person-B 以及這種三人場景是本發明的全部目的,即如何使 person-C 無法閱讀 person-A person-B 之間的秘密編碼消息。

DH密鑰交換的第一步中, person-A person-B 將來回發送一些數字。這個早期的 person-C 可以讀取這些第一條消息。在第二階段中, person-A person-B 將發送加密的消息,而 person-C 無法再讀取。儘管 person-C 在最初的步驟中可以聽到初始消息,但 person-C 無法到達商定的編號,即 person-A person-B 現在有了。

Diffie和Hellman曾因這項發明在2015年獲得 Turing Award

Luc
2020-01-20 03:14:14 UTC
view on stackexchange narkive permalink

我寫這篇文章只是一次我從未講過的演講的概念。

由於它是作為談話內容而寫的,所以這是Diffie-Hellman用普通的英語!

嘿!讓我們設置一個加密通道。我將把您的鑰匙寄給您,然後您將您的鑰匙寄給我,然後我們就可以進行私人交談。

您說了什麼?每個人都能聽到我們的聲音嗎?是的,那沒問題!

我們可以使用Diffie-Hellman。只需考慮一個隨機數,並將該隨機數的冪提高5。將結果除以23,然後取餘數。給我原來的隨機數,您應該保密,其他數字均為公眾知識。

您的餘數是8?好的。我的餘數是10。現在,將我的餘數再次提高到您的秘密隨機數的冪,再除以23,得到餘數。同樣的事情,輕鬆自在。我將用您的號碼和我的秘密隨機數做同樣的事情。

您得到了結果嗎?太好了,我也是!我知道您和我一樣有6歲,但這個房間裡沒有其他人能算出這個。他們可以嘗試所有可能的組合,直到找到與所聽到的聲音相匹配的隨機數(您身邊的8個,我身邊的10個),但是沒有比嘗試所有可能性更有效的方法了。我們可以將結果6用作密碼。儘管聽到了交流,但沒人知道我們使用的密碼。但這是一個非常弱的密碼。下次,我們應該選擇更大的數字,並使用計算器來創建更長,更強的密碼。

請注意,這種方法有效,因為我們可以彼此看到對方。我知道當您告訴我您的電話號碼是8時,不是在別人說話,因為我可以看到您的嘴唇在動。在互聯網上,有人可以偽裝成對方並為我們提供假號碼,從而對此設置攻擊。另一天我們將如何防止這些攻擊。



該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 3.0許可。
Loading...