2016-12-04 24 views
1

我是一個桌面應用程序的作者,該應用程序具有可以通過互聯網下載應用程序的新版本的集成更新程序。我想認證下載的文件,以便下載者可以確定新文件是由我創建的,並且未被其他人修改。基於SSL的服務器身份驗證不是一種選擇,因爲這些文件託管在我不十分信任的第三方服務上。在基於定製Qt的更新程序中下載驗證

我已經想好了以下程序:

在我身邊:

  • 哈希使用SHA512
  • 加密使用RSA私鑰
  • 哈希使加密哈希公衆下載以及新版本公告

客戶端上的更新程序ñ執行以下操作:

  • 下載文件(杜)
  • 使用硬編碼的公共密鑰匹配我的私單
  • 比較解密的哈希用的真正的一個解密自新的更新公告哈希下載的文件

假設我最初可以向客戶端發送帶公鑰的未修改版本的更新程序,這個工作流程中是否存在任何缺陷?

回答

0

你最好使用傳統的代碼簽名,它已經檢查你想要的框。儘管您的家庭釀造解決方案可能會起作用,但未經審覈就不能防彈。成熟的密碼學幾乎總是更好的方式來做事情。

你有使用公鑰加密技術的正確思想。這是我建議的:

通過CA購買代碼簽名證書(如果您還想滿足Windows SmartScreen要求,則可以使用)或自行生成公鑰 - 私鑰對。如果您是自簽名的,請將程序隨身攜帶公鑰。使用私鑰簽署任何新的安裝程序。升級時,讓updater在解壓新版本之前使用公鑰驗證簽名。如果您的應用程序是基於Windows的,則可以使用WinVerifyTrust進行驗證。

或者,您提出的解決方案已通過PGP signing實施,該解決方案已經經受了幾十年的安全審查。您只需發佈帶有新版本的.sig,更新程序即可驗證。使用digital signatures也可以解決這個問題,只需通過OpenSSL即可實現。

相關問題