2013-12-21 55 views
2

我有兩臺運行相同應用的Android設備使用SSL自簽名證書和使用openssl生成並存儲在密鑰庫中的密鑰。 問題是私鑰庫必須以某種方式嵌入到應用程序包中,因此可供任何攻擊者使用。我相信這會讓攻擊者在會話中窺探並解密兩部手機之間的數據。兩個移動設備之間的安全連接:SSL密鑰不是'私人的'

我沒有使用或需要任何PKI的其他功能,我只是提供兩個密鑰庫,因爲SSL連接設置需要它們。

是否有一個安全的SSL密碼,不需要預定義的PKI並在運行時即時生成其自己的密鑰?

我調查了在運行時生成我自己的密鑰 - 創建密鑰很容易在Java中完成,但KeyStore.setEntry()需要一個X509證書鏈,而不僅僅是公鑰,並且Android不包含JCE代碼生成X509。我可以通過包含BouncyCastle(Android兼容版本稱爲SpongyCastle)庫來實現這一目標,但是這會增加我的應用程序包大小的開銷。

無法訪問互聯網上的第三方信任服務器,這兩個電話可能位於沒有互聯網接入的專用WLAN上。

作爲一個很好的獎金,我希望能夠相信應用程序正在與自己進行通信,而不是從PC上嗅探協議的人,但我認爲這不會成爲可能,因爲應用程序包內容將始終可用。

回答

0

爲了確保您正在與某個您信任的對象通話,您需要一種認證對方身份的機制。我不知道的方式來實現這一點沒有一塊剩餘的祕密數據:

  • 非對稱認證(即當前的實現),需要私有密鑰的數據保持私密。

  • 對稱身份驗證要求共享密鑰保持私密。

將來,TrustZone將允許應用程序將祕密數據存儲在手機的安全元件中。但是,直到那個時候,您的設備上始終存在惡意軟件的風險。將密碼添加到密鑰庫(用戶知道,而不是應用程序)可能會爲攻擊者添加額外的障礙,但是一旦手機受到感染,就可以竊聽密碼。

爲了最大限度地降低風險,您應該生產每個設備的密鑰,而不是將單個證書/密鑰對組合應用到您的應用中。當然,這將增加添加新用戶所需的努力,因爲需要某種形式的註冊(例如,證明他們的密鑰)。或者,您可以將問題推送給您的用戶,讓他們決定由誰來信任,PGP風格。

相關問題