Hash

s2k 在 gpg 中究竟做了什麼

  • September 7, 2019

所以我最近--s2kgpg. 可悲的是,它沒有很好的記錄。我的意思是,s2k甚至應該是什麼意思?

有人可以向我解釋一下的目的和詳細功能s2k嗎?

  1. --s2k-cipher-algo在您單獨定義密碼的對稱加密場景中甚至是必要的嗎?
  2. 具體是 做什麼--s2k-count的?
  3. 後面的數字有什麼作用--s2k-count?它表明了什麼?為什麼 6500 萬是最高數字?6500萬是什麼?什麼做了這麼多次?

“s2k”選項對應於String-to-Key specifiers。s2k 轉換將人類兼容的對稱秘密(密碼或密碼)轉換為適用於對稱加密或 MAC 算法的對稱密鑰。

將密碼轉換為密鑰是一項棘手的工作,因為人類可以記住並接受輸入的密碼在窮舉搜尋方面往往很弱(在這種情況下通常稱為“字典攻擊”,因為我們正在談論單詞)。因此,我們需要一個“強化”過程,通常稱為“密碼散列”或“基於密碼的密鑰派生”。簡而言之,一個好的密碼散列過程必須:

  1. 每個案例都是獨一無二的,以防止預先計算和成本分攤;
  2. 以可配置的方式非常昂貴。

閱讀此答案以了解密碼散列的相關概念。


s2k-count參數僅在 s2k 方法為“3”時使用,即OpenPGP 術語中的Iterated and Salted S2K。這種密碼雜湊方法基本上將鹽和密碼的多個副本連接在一起,直到總字節數達到指定值。使用最大值 (65011712),大約 65 MB 的數據被散列;現代機器(即使是像智能手機這樣的“小型”機器)應該能夠在幾分之一秒(例如,不到半秒)內完成這項工作,因此從使用者界面的角度來看,這是可以容忍的。但是,攻擊者需要對潛在密碼的每次嘗試進行大量雜湊處理;對他來說,有一個巨大的半秒和百萬分之一秒之間的差異,因為他有許多潛在的密碼要嘗試。

現在 S2K 並不是最好的,因為聰明的攻擊者會通過使用一些 GPU 來大幅提升他們的攻擊(GPU非常擅長執行像 SHA-1 這樣的雜湊函式)。但這是迄今為止以 OpenPGP 格式定義的最好的一個。

--s2k-cipher-algo是關於通知 S2K 轉換它必須生成的密鑰類型:雖然對稱密鑰主要是比特串,但它們的長度仍然取決於預期的算法(例如,AES-256 的密鑰長度必須為 256 位)。

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