2014-01-06 118 views
2

感謝您在百忙之中閱讀本文時,我是一個年輕的開發人員,在web項目和服務器端編碼一些專業的經驗,但現在我建立我的第一個移動應用程序和在深入研究網絡之後,我無法澄清一些關於保護移動應用程序數據傳輸的問題。保護移動連接 - 存儲的祕密和密鑰

以下是我認爲我正確理解的內容: 通過實施SSL證書(以及可選的SSL固定在客戶端上),您可以在很大程度上防止在開放網絡上嗅探用戶信息,以及模擬其他用戶(中間人等)。任何進一步的安全層旨在保護服務器並防止某人獲得對交易結構和細節的見解。 安全的另外的層包括消息認證(HMAC例如)處理它之前認證的消息,以及加密「隱藏」的消息的內容。

我想實施一個加密然後HMAC過程來進一步確保交易,這是我關於這個過程的問題:你如何在客戶端存儲密鑰/祕密? 我意識到這將取決於應用程序的具體情況各不相同,和安全的程度也希望實現。出於這個原因,我包括一些細節:有存儲或傳輸(SSN,銀行等)對用戶沒有高度敏感的信息,但應用程序並處理付款,因此成本高,可以發生,如果有人開始與服務器搞亂和支付系統。因此,我希望實現客戶端和服務器之間的安全傳輸,而不是做一些不尋常或不相稱的工作。

我已經閱讀了很多關於該主題的內容,並且從我可以收集的內容中瞭解到,不管以哪種方式導出密鑰或祕密,在某些時候它將以明文形式呈現給加密/哈希邏輯,因此有人會能夠調試應用程序,斷點這一步,並妥協的關鍵/祕密。你如何解決這個問題(你可以)? 怎樣纔算「適當」(硬編碼?從表結構或其他要素獲得?其他?)。

這個問題實際上意味着高層次和概念性,所以我不認爲它關係到我討論的是哪個平臺,但無論如何,現在我編寫iOS應用程序,而後端是.NET

非常感謝您的寶貴時間,任何幫助或洞察力將不勝感激。如果我能澄清應用程序的任何方面,我會很樂意去做。 Best, Michel

+0

如果您正在開發ios應用程序,請參閱此鏈接... https://developer.apple.com/library/ios/samplecode/CryptoExercise/Listings/Classes_SecKeyWrapper_m.html – jailani

+0

非常感謝,非常有用。 – user3165053

回答

1

你已經做好了識別處理密鑰實際上是最難的部分。

有一個錯誤,它是可能有一個系統,從來沒有公開鑰匙,這是銀行業所做的。這是因爲加密/解密是由硬件在每個階段完成的。硬件內部的密鑰不能從設備中提取。一個簡單的例子就是歐洲手機和信用卡/借記卡中的智能卡。另一種情況是銀行和通信鏈中其他金融實體使用的HSM(硬件安全模塊)。即使ATM上的密碼鍵盤也在鍵盤本身的硬件中執行加密。我提到所有這些是因爲您聲明申請涉及貨幣交易。

如果客戶端是iOS設備,您可以將密鑰存儲在keychain中,這是TPM(Trusted Platform Module)等效硬件的密碼安全部分。它受PIN碼保護,請注意PIN碼可以設置爲缺省的四位數。設備上的攻擊,即使是在監獄中的手機上,也必須使用鑰匙串,並且嘗試每次嘗試都有一個最小時間(按設計),從而確保基於PIN複雜度的最小平均攻擊時間。關閉設備唯一可用的攻擊是不可行的蠻力。

不足之處是密鑰在加密和解密過程中會明確。如果密鑰永遠存在於Foundation對象中(例如:NSString/NSData),它有可能會在使用後存活下來,所以最好使用「c」字符數組並在使用後清除它們。

好的,實際的解決方案:僱用一個加密領域的專家,如果你真的想要安全。我至少僱用一個人來建議和審查設計和實施。尋找具有CISSP認證和加密領域經驗的人。 CISSP要求在實地直接監督下工作至少5年,每次工作時間爲6小時,一般約需160小時的考試學習時間和40小時的繼續教育。

+0

謝謝您的回答,它讓我深入瞭解我的研究。考慮聘請CISSP,我會謹記你的建議。 – user3165053

+0

瞭解,僅僅因爲某人沒有CISSP並不意味着他們無法建立安全的系統。五年100%的要求將排除許多。此外,CISSP涵蓋10個領域,因此有人可能沒有足夠的知識來滿足特定需求。我知道一個CISSP在獲得CISSP之前已經有超過10年的時間,並且這個人不寫代碼。 – zaph