簡體   English   中英

保護Qt應用程序中的私鑰

[英]Protect private key in Qt application

我有一個用C ++編寫的Qt應用程序,它使用SSL連接(QSslSocket)和另一個應用程序來提高安全性。 但是,應用程序中嵌入了一個私鑰。

使用Process Explorer之類的應用程序,可以很容易地刪除私鑰。 (文件屬性 - >字符串)

安全性對我的應用程序來說並不是很重要,但是從我的應用程序中獲取私鑰會更加困難。 有什么辦法嗎?

“strings”只查找實際的Ascii / UTF8 / Unicode字符串。 如果將密鑰作為二進制緩沖區保留,則沒有任何東西可以將它與字符串通常忽略的隨機二進制數據區分開來。

除此之外,還有更多聰明的程序,如IDA和OllyDebug,它們使用戶能夠完全反匯編甚至反編譯您的程序,無論您嘗試什么,都可以獲得密鑰。

用一些簡單的對稱算法加密它。 例如,定義數組cryptedDatacryptedDataKey以便通過cryptedData[cryptedDataKey[n]]獲取私鑰的第n個字節。 它將使您免於使用文本編輯器查看二進制可執行文件但無法幫助更多或更少經驗的人的人。

此外,如果您與QSslSocket持續連接運行時,則私鑰很可能按原樣存儲在內存中。 因此,僅修改QT庫是一種在內存中修改關鍵表示的方法。

您可能需要從不同角度解決問題。

我同意Shoosh的回答,無論你做什么,擁有合適工具和知識的人都能夠破解你的密碼並找出你的私鑰。

您需要做的是外部化數據或在發現私鑰時降低風險。

外部化任何私有數據的最佳方法是使用用戶提供的密碼對其進行加密,該密碼必須由用戶輸入才能使用。 不幸的是,這對大多數應用來說並不合理。

為了降低風險,我通常會嘗試確保在安全性被破壞時只有一個“安裝”受到威脅。

例如,在安裝時隨機生成私鑰數據。

對於客戶端/服務器應用程序,您可以遵循https模型並使用公鑰/私鑰通信來交換隨機生成的加密密鑰。

如果每個客戶端安裝都有自己的公鑰/私鑰集,那么服務器可以告訴客戶端連接的是什么,如果有問題,他們可以取消客戶端。

希望有所幫助。

另一種常見技術是將秘密數據放入二進制資源,例如圖標圖像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM