Keys

密碼和加密密鑰的良好外行類比

  • March 7, 2021

注意:問題已更新。請參閱這篇文章的底部。

我正在寫一些我需要讓某人看起來好像他們知道密碼學的東西。我知道的不夠多,但由於密碼學在我所寫的內容中只扮演非常小的角色,所以我需要知道的很少。

據我了解,密碼是一個(最好是)助記符字元串,它被輸入到一個函式中,該函式生成一個更長更複雜的字元串,包括使用者在內,沒人知道。加密密鑰是實際用於加密和解密文件的密鑰。

同樣,據我了解,如果您想破解加密文件,您可以嘗試暴力破解密碼或加密密鑰(可能還有其他我不知道的方法)。多年前,當我忘記了文件的密碼時,我了解到這一點,而我使用的恢復工具聲稱它不會嘗試破解密碼,而是嘗試破解加密密鑰(它確實有效,以防你想知道) . 我不知道我從哪裡得到的,但多年來我一直堅信暴力破解加密密鑰是破解加密文件的更好選擇,而不是獲取密碼。可能是我使用的軟體聲稱它。

多年後,我意識到我實際上不確定這是不是真的。暴力破解加密密鑰而不是密碼本身實際上通常更快/更有效嗎?考慮到我上面給出的密碼和加密密鑰的定義,你會認為情況正好相反。

另外,您是否會這樣說,如果暴力破解密碼就像嘗試使用數十億把鑰匙來查看哪個打開了一扇門,那麼找到文件的加密密鑰就像從門上取下鎖一樣?我正在尋找一個很好的類比,但我不確定這個類比是否有效——尤其是因為門在鎖上時很少被打亂……

更新

在閱讀下面的 Gilles ‘SO-stop be evil’ 答案後,我意識到我沒有問正確的問題。正確的問題在這裡。可能更多關於資訊安全而不是密碼學本身。

關於你的理解

你大部分事情都是對的,但不是完全正確的。

密碼是一個(最好是)助記符字元串,它被輸入一個函式,該函式生成一個更長更複雜的字元串,包括使用者在內,沒人知道。加密密鑰是實際用於加密和解密文件的密鑰。

這是真的,除了“最好助記符”。密碼是助記符並不是一個優勢:它是一個約束。從密碼學的角度來看,最好將密碼寫在某處(在紙上或電腦文件中),因為這樣可以減少助記符,因此更難破解。但在某些常見情況下,出於非加密原因,不希望寫下密碼。例如,您在工作時的電腦登錄密碼不得寫在您辦公桌上的一張紙上(因為走動的任何人都可能需要它),也不能寫在您電腦中的文件中(因為您不會’登錄前無法閱讀),因此您必須記住它。因此,使用密碼的電腦系統必須能夠使用可記憶的密碼安全地工作。

如果您想破解加密文件,您可以嘗試暴力破解密碼或加密密鑰(可能還有其他我不知道的方法)

使用現代加密方法,這是真的。(這裡的“現代”大致意思是“電腦時代”,我就不贅述了。)

但是請注意,這裡有一個隱藏的假設,即您所擁有的只是加密文件。在實踐中破解加密文件的最簡單方法通常是找到可以解密它的人,然後說服他們解密(通過賄賂或“橡膠軟管密碼分析”)或在他們解密時監視他們。

暴力破解加密密鑰而不是密碼本身實際上通常更快/更有效嗎?考慮到我上面給出的密碼和加密密鑰的定義,你會認為情況正好相反。

對於實踐中使用的幾乎所有密碼,暴力破解密碼比加密密鑰更容易。實際上,由於密碼通常是助記符,因此與可能的加密密鑰相比,合理的密碼要少得多。

如果您遇到聲稱暴力破解密鑰比密碼更快的軟體,則有幾種可能性。索賠可能是錯誤的。加密方法可能設計得很糟糕:它很常見,但如今已不那麼流行了,因為健壯的加密更為普遍。出於法律原因,加密方法可能已被故意阻礙,我將對此進行一些擴展。

數字

今天,您的普通文件加密使用 128 位密鑰,甚至可能使用 256 位密鑰。每個密鑰位使遍歷所有可能的密鑰所需的時間加倍。有 2 128個(2 的 128 次方)可能的密鑰,因此需要 2 128次嘗試才能全部嘗試。需要 2 128 /2 = 2 127次嘗試才能有機會找到正確的密鑰。

2128 是多少?大約是3400億十億。讓我們採取一些數量級:

  • 一台快速的電腦每秒可以執行大約十億次操作。
  • 如果你真的很有錢(比如政府部門的預算),你可能買得起 10 億台電腦。
  • 宇宙大約有 10 億秒的歷史。

因此,如果您擁有龐大的電腦預算,並且在宇宙誕生之初就以某種方式開始執行它們,僅僅為了暴力破解一個密鑰,那麼您現在已經覆蓋了大約 10 億個密鑰。你仍然有不到 1% 的機會找到鑰匙。

實際上,這意味著對密鑰進行暴力破解是不可行的。你必須找到另一種方法。

這並不總是正確的。過去,大多數政府將密碼學限制在任何人只要能買得起昂貴的電腦就可以破解的東西。特別是,直到 2000 年,美國(許多軟體的起源地)都禁止出口能夠使用大於 40 位的密鑰的軟體只有 2 40 個可能的密鑰,即使在預算範圍內,蠻力也是可行的。其他政府也有類似的限制:例如,當時在法國,使用大於 48 位的密鑰導入或使用加密是非法的。

許多軟體將加密限制在如此可笑的小密鑰,以避免落入這些法律的範圍,無論是美國出口法還是其他國家的類似法律。即使在解除限制之後(至少在民主國家),舊軟體和文件格式也需要一段時間才能消失。

現在讓我們將數字與密碼進行比較。假設您的密碼由隨機字母組成。不是助記的、可發音的字母序列:只是字母。只是小寫的 a-z 字母。密碼需要多長時間才能具有與 128 位密鑰等效的強度,這意味著有多少可能的密碼與 128 位密鑰一樣多?答案是 $ \log_{26}(2^{128}) $ (這是數字的數學符號 $ x $ 這樣密碼數= $ 26^x = 2^{128} $ = 鍵數)。這介於 27 和 28 之間:需要 28 個字母的隨機密碼才能與 128 位密鑰一樣強。放置特殊字元有幫助,但作用不大:使用美式鍵盤可訪問的 94 個字元,您需要 $ \log_{94}(2^{128}) \approx 19.5 $ 字元具有 128 位密鑰的強度。

實際上,大多數人的密碼並沒有那麼長,而且大多數人的密碼比隨機的字母序列更容易記憶。使用單詞、可發音的音節或像 l33t 這樣的助記標點符號,大大減少了可能性的數量。一個著名的 XKCD 漫畫估計了兩種常見密碼選擇方法的熵——“熵”是當對手知道該方法如何工作時的可能性數量(例如“取一個字典單詞並用標點符號替換一些字母”),而不是細節特定實例(哪個單詞,哪個替換),對於 l33t 風格的密碼來說,強度只有微不足道的 28 位。這大約是十億分之一的可能性。

推遲不可避免的事情

如果某人有一個加密文件,則無法阻止對手嘗試所有可能的密碼或所有可能的密鑰,並且原則上最終找到正確的。我們已經看到,對於密鑰,有太多的實際操作是不可能的:即使有巨大的預算,您也只能嘗試可能的密鑰中的極小部分,以至於不值得嘗試。但是對於密碼,典型密碼的數量足夠少,您可以全部嘗試。

用於將密碼轉換為密鑰的技術旨在延遲不可避免的情況。從字面上看:將密碼變成密鑰的主要因素是內在的緩慢性。基本技術是重複計算,沒有辦法加速或捷徑。我不會在這裡討論其他復雜情況;如果您想了解更多技術資訊,請閱讀如何安全地散列密碼。這種緩慢轉換的技術名稱是關鍵拉伸

讓我們以我們之前的範例為例,即每秒可以執行十億次操作的昂貴電腦,以及具有十億分之一可能性的弱但常見的密碼選擇技術。假設只需 10 次操作就可以將密碼變成密鑰:那麼電腦可以在幾秒鐘內破解加密。但是假設我們正在使用一種需要 1 億次操作才能將密碼轉換為密鑰的方法——該方法中內置了 1000 萬次慢速因素。對於知道密碼的使用者來說,解密大約需要十分之一秒(1億乘以十億分之一秒),這是可以接受的。成本增加了1000萬,但幾乎沒有引起注意。對於不知道密碼的對手,成本增加了1000萬。現在它’ 破解密碼需要幾個月的時間。這仍然是可行的——表明 l33t 密碼選擇方法很弱——但它已經變得有些昂貴了。使用好的密碼選擇方法,成本可能會變得遙不可及。

順便說一句,我之前寫道,沒有辦法阻止一個不朽的、無限耐心的對手最終找到正確的鑰匙。這不完全正確:有一種方法,稱為一次性墊,這包括使所有可能的解密具有相同的可能性。對手可以嘗試所有的密鑰,但他們不知道何時找到了正確的。然而,這也帶來了一些巨大的缺點。首先,必須有盡可能多的可能的密鑰,因為有可能的文件。所以關鍵是只要文件。其次,密鑰只能使用一次:使用相同的密鑰兩次(“兩次密碼”)會破壞加密。因此,一次性便箋不是很有用:如果您可以儲存僅用於單個文件的密鑰,並且與文件一樣大,那麼您還不如儲存文件本身。因此,它幾乎沒有實際意義,但它可能會出現在一個故事中,因為外行經常淡化重用密鑰的後果(它’

鎖類比

鎖類比可能是一個很好的類比,但您必須接受一些限制。

門和鎖由非常堅固的材料製成。沒有辦法取下鎖或檢查它。你唯一能用鎖做的就是嘗試一把鑰匙,如果它不適合你可以嘗試另一個。嘗試一個鍵並不會為您提供有關正確鍵的任何資訊:您可能完全錯誤或幾乎正確,但您無法區分。要麼你得到它,要麼你沒有。鑰匙上的別針有很多不同的位置,你不可能希望全部嘗試。

人們不喜歡把鑰匙放在錢包裡,所以他們有“萬能”鑰匙和可以移動的別針。當他們需要解鎖一扇門時,他們會拿一把萬能鑰匙並移動銷釘。由於沒有人能記住別針的位置,他們帶著小紙片,上面寫著如何設置別針的說明。但是為了保持紙條簡短,在實踐中,這些是簡單的指令,例如“每三個銷推一次,除了那些也是 5 的倍數的銷”。如果你想開鎖,你不會嘗試所有可能的引腳配置:你會嘗試從簡單模式派生的那些。

關鍵拉伸包括將解碼環(每個人都有,它發表在科普雜誌上)應用於寫在一張紙上的說明。當你有指示時,這是一個小障礙。但是如果沒有說明,每次嘗試都必須重新通過解碼器環,這很乏味。

成本類比

關於加密的密碼和密鑰各自的作用,我上面解釋過,將密碼轉換為密鑰(密鑰拉伸方法)的重要一點是它很慢。這是關於將合法使用者的成本從可忽略不計提高到可接受的成本,同時將對手的成本從小提高到高。

您可以在安全的其他方面找到這一原則。例如,鎖的存在就應用了這個原則。對於房子的主人來說,門上鎖意味著你必須把鑰匙放在錢包裡,回家後多花幾秒鐘開門。對於竊賊來說,鎖意味著他們需要攜帶專門的工具,如果他們被發現攜帶開鎖工具,他們就會受到懷疑。破高檔鎖所需要的工具使用起來需要時間,而且需要電力,而且會發出噪音,所以如果有人在看,竊賊就會很顯眼。即使鎖是可破解的(密碼或鑰匙拉伸方法很弱),與沒有鎖相比,它也是一種威懾。

欺詐檢測是規模發揮主要作用的另一個例子,儘管規模是建立在問題而不是解決方案中的。大多數欺詐檢測方法都無法檢測到是否有人試圖偷走一美元。欺詐檢測批量工作:它是關於防止某人一次封存大量美元,或進行大量小偷小摸。在這裡,對手(小偷)想偷很多錢,系統試圖阻止偷很多錢,同時如果人們只是取款或支付幾美元,也不會打擾他們。

這是關於安全性,而不是密碼學

你的角色真的需要了解密碼學嗎?密碼學是一項非常專業的技能,實際上很少發揮作用。與密碼學相關的原因相比,由於非密碼學相關的原因而出現安全漏洞的頻率要高得多。

日常電腦安全,例如網路安全,確實依賴於密碼學。有些人在 Web 瀏覽器、Web 伺服器以及其他相關軟體和系統中從事密碼學研究。每隔一段時間,安全研究人員就會發現一個漏洞,然後那些從事軟體工作的人會爭先恐後地修復它。

但大多數安全漏洞都是由於操作原因造成的。有人留下未受保護的數據庫。再次有人讓數據庫未受保護。有人給出了一塊巧克力的密碼。有人上當騙子冒充電腦修理工的騙局。有人讓數據庫不受保護嗎?在上一次重大密碼學漏洞之後,供應商分發了他們產品的更正版本,但許多人沒有應用安全修復程序。

如果您的故事描述的是了解密碼學並且從事與密碼學相關的工作的人,例如電腦開發人員、系統管理員或間諜,那麼在任何給定時間,他們很可能實際上並沒有從事密碼學工作或使用密碼學技能。

引用自:https://crypto.stackexchange.com/questions/83552