Key-Generation

創建舊式安裝密鑰的最佳實踐

  • January 14, 2022

我發現的有關創建和使用加密密鑰的所有目前最佳實踐,都是指從原始數據中創建加密數據。但是,有一種做法(或至少在幾十年前),密鑰不用於解密或驗證任何內容,它僅在本地用作(非常週)所有權證明。

在網際網路出現之前的時代,當您購買軟體時,您會在物理媒體(磁片或 CD)上獲得它,並且上面印有物理上的“密鑰”,您必須在安裝過程中輸入該密鑰。不需要網際網路連接,沒有伺服器可以驗證任何內容或檢查密鑰是否已被使用。安裝程序只檢查密鑰是否符合一些可以區分有效密鑰和無效密鑰的規則。

任何人都可以從合法所有者那裡複製密鑰並在未經授權的情況下安裝軟體,沒有什麼可以阻止這種做法,但是仍然使用這些密鑰,因為不是每個人都在這樣做,因此它至少阻止了部分使用者群盜版它.

如果今天完成,在完全離線的環境中,應該如何理想地創建這樣的密鑰?它不應該太長,以便在安裝過程中手動輸入,並且應該仍然有數百萬種可能的組合。然而,一個有效密鑰的一個小的隨機變化應該不太可能導致另一個有效密鑰。

一種天真的方法是密鑰的一半是預定的秘密常數,另一半是隨機的,但是它們根據某種邏輯混合在一起,並且還混合了校驗和。仍然適用於預期目的,並且很可能被廣泛使用。但是,是否有任何現代、更好的方法來創建這種“離線安裝密鑰”?

但是,是否有任何現代、更好的方法來創建這種“離線安裝密鑰”?

有兩種明顯的方法:

  • 一種是使用消息驗證碼(MAC);這是一種加密算法,它接受一個字元串和一個密鑰,並生成一個“標籤”;這個想法是,在不知道密鑰的情況下,很難生成另一個驗證的字元串/標籤對。

因此,作為製造商,您要做的是選擇一個隨機密鑰(您將插入到您的產品中)。要生成“產品密鑰”(附加到產品的標籤),您將獲取一個序列號,通過 MAC 執行它以生成一個標籤,並將序列號和標籤作為產品密鑰。

然後,在安裝產品時,使用者輸入產品密鑰;軟體分離出序列號和標籤;然後它通過 MAC 執行序列號(使用製造商插入的密鑰),並將計算出的標籤與產品密鑰中的標籤進行比較——如果它們匹配,則繼續安裝。

好處是這很容易,並且可以輕鬆控制產品密鑰的長度(使用良好的 MAC,例如 HMAC,20 位標籤將使每次猜測的隨機猜測機率小於百萬分之一 - 如果這還不夠低,只需選擇更長的標籤)。

這樣做的缺點是,如果一個好的黑客拆開你的產品,他們可以提取密鑰,然後繼續生成自己的產品密鑰。已經嘗試設計抵抗這種情況的實現(“白盒密碼學”);那些已被發現令人失望。但是,如果攻擊者所涉及的努力不僅僅是分發已知良好的產品密鑰的努力,那麼它可能是可以接受的。

  • 另一種方法是使用公鑰簽名算法(帶有短簽名)。

這個想法是類似的,只是製造商生成了一個公鑰/私鑰對,並將公鑰插入到設備上。

製造商使用私鑰生成“產品密鑰”;安裝時,該軟體使用其公鑰副本來驗證產品密鑰。

好處是我們不再需要擔心黑客獲得創建新產品密鑰的能力 - 為此,他需要私鑰,而這不在設備上。

缺點是標籤的長度——即使簽名最短的算法(我相信是 BLS)仍然具有中等長度的簽名(例如 256 位用於 100 位安全性);並且與 MAC 案例不同,它們不能被截斷。

有些公司使用簽名作為他們的產品密鑰——我希望他們是少數。

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