2013-06-12 47 views
4

我在這裏發現了一個類似的問題Saving passwords inside an application但它並沒有真正回答我的問題。如何在您的應用程序中安全地處理密碼

我正在處理將從用戶接收密碼(安全)的應用程序。一旦我收到密碼,我需要將其存儲在某個變量中,並通過事務將其發送到其他系統(此邏輯安全可靠並已實施)。

我擔心的是我不希望看到的密碼核心轉儲,所以我想它保存到一個變量之前加密任何密碼。

問題:

  • 是將其保存到一個變量足夠之前加密呢?或者我錯過了一些安全漏洞?

  • 是否有一個簡單的標題只有庫可以做加密?你能引導我到哪裏開始尋找?

注意回答評議:

  • 的密碼不會被長期儲存;僅用於交易的生命週期。

  • 不幸的是,交易參與者無法解密密碼,因此我需要在將密碼發送給他們之前將其解密。

  • 我主要關心現在的問題是找到一種方法來加密和解密本地密碼 - 以簡單的方式...

  • 我發現了OpenSSL庫和加密+ +,但它接縫,我需要鏈接和他們在一起,我不能只包括並呼籲他們(即不僅有頭庫)...

感謝,

+0

那麼,如果加密程序失敗,你*將會*看到密碼:)然而,有些平臺具體的方法可以真正地消除內存,所以你可以使用它們來清除內存中的密碼不再需要它......雖然當然如果你願意,你可能會獲得必要的資源來解密它。 –

+0

您打算將密碼「長期」還是「短期」存儲(長期來看,將其存儲在磁盤上的某個文件中,短期內,您會收到該密碼,然後將其發送給其他服務器只要您需要發送密碼,就可以持有密碼)?任何「長期」存儲都是易碎的。這就是爲什麼「正確」的密碼存儲是在「單向加密」中完成的,所以你永遠不能「反向加密」[當然,仍然有可能「在很多可能的猜測上運行加密」直到它匹配)。 –

+2

如果有人可以在轉儲和加密/解密中訪問加密密碼,那麼他們解密您的加密密碼相當簡單。保持密碼安全和受保護的最佳方式是不保留密碼。所以你必須決定你能夠合理地讓snopers找到並反向處理你對密碼的保護是多麼困難。 – StarPilot

回答

1

(注:我敢肯定有嚴格的清單和有關官方指南如何在安全軟件中處理密碼從那些真正瞭解安全問題的人和權威人士那T購買。這是不是其中之一!)

我不認爲有一個密碼安全的方式來在您的進程內存中有密碼,能夠使用它們,但不能將其訪問給用戶可以在調試器下運行您的應用程序或檢查您的核心轉儲。

你可以做的是掩蓋密碼。這裏有一些技巧,你可以使用:

  • 跟不上密碼爲簡單的字符串在你的記憶的任何地方(約散射字符等)
  • 磨砂的密碼後,他們存儲在所有變量(例如,如果將密碼傳遞給某個函數,則應在完成該操作後將該變量的所有字符都設置爲NUL。
  • 加密密碼。
  • 改變在應用程序的每個運行中的加密密鑰(或週期性地,如果它是一個長期運行的應用程序。)
  • 生成加密密鑰程序上基於系統/硬件的某些方面和存儲加密密鑰爲您的進程內存中的任何地方提供密碼。
  • 使用像可信平臺模塊(TPM)這樣的硬件(如果可用)。

一致有效地實現上述過程非常困難,並且影響了所有處理密碼的代碼。有時你甚至不得不故意讓你的代碼更加模糊,並且作爲程序員違揹你的所有本能(例如,不把密碼作爲參數傳遞給函數,而是在函數內部使用硬編碼地址。)

I,再一次,必須強調,當對手完全訪問物理機器時,僅在軟件中保護您的密碼可能是不可能的。

至於你的問題的第二部分,我不知道任何頭只有加密庫,但加密密碼可能只需要一個密碼,可能是一個哈希。所有最好的算法都有公有領域或其他免費的實現。您可以獲得其中一個並複製/粘貼到您自己的應用程序中。不要忘記認真測試它!

相關問題