標籤:sha1 安全 article 通過 SHA256 手機 無法 傳輸過程 mod
如今移動互連網應用一般都會採用使用者注冊登入機制以便增強使用者粘性。
那麼為了安全設計。使用者的password應該怎樣傳輸?在雲端又怎樣儲存?這個問題我思考過許久。總結下面一些思路。主要涉及到無法復原加密的使用原則。
如果使用者的注冊/登入過程均是在全然安全的環境下進行,你能夠地設計得非常easy: 注冊就是把設定的password直接儲存起來,登入就是直接比較password。
這過程不涉及到不論什麼加密技術。
然而在實際應用中。整個過程可能是在不安全的環境下進行,比如儲存password的系統可能被駭客攻擊,password的傳輸可能被駭客截獲。。。
。這樣的環境下,你怎樣能保證你的登入過程不會被其它別實用心的人冒充?password怎樣不泄露?
下面是注冊和登入過程中password及由它推匯出來的資訊(我稱之為信任資訊)的傳遞:
注冊:
手機應用 雲端server
password---->傳輸---->持久儲存
登入:
手機應用 雲端server
password---->傳輸---->與持久儲存的資訊比較
因為傳遞過程的不安全性,每多一次資訊的傳遞步驟。就多一次資訊泄露的可能性。為了保證信任資訊的安全,應該保證信任資訊的傳遞過程是無法復原的。比如雜湊密碼編譯演算法(比如md5,sha1,sha256, PBKDF2, bcrypt等)可達到這一目的。
這些演算法可保證無法通過下遊的資訊推算出上遊的資訊(比如password)。另外這類演算法還可保證同樣的輸入和參數經過計算可得到同樣的輸出,這樣雲端就能夠比較兩方的結果就可以判斷出原始的資訊(如password)是否同樣的。以達到使用者認證的效果。
那麼就上述的情境而言。怎樣在各環節(如傳輸/儲存)對password進行加密處理?
簡單地說,使用者在注冊時輸入了password。能夠先做一次雜湊加密。再進行網路傳輸,雲端server收到後,再做一次雜湊加密。然後儲存起來。登入時的過程類似,雲端server所得到或使用的資訊是經過了多次(這裡是2)雜湊加密後的結果。
相比之下,眼下有非常多文章關注的不過password做雜湊處理後儲存到雲端server這一過程。
其實,一個複雜的系統可能存在多個泄露風險的環節, 因此需一一識別出來,並添加必要的雜湊加密步驟。
詳細而言,比如上述的注冊或登入過程, 假設只做一級雜湊加密。 雖然達到保護原始password的效果。但仍存在安全風險的:假設不過雲端儲存前做雜湊加密,那麼傳輸過程仍使用password明文。存在泄露風險。
反之假設不過傳輸前做雜湊加密,一旦該雜湊值泄露了。則easy被偽造登入: 。
總結一下:
在信任資訊由高信任域向低信任域傳遞的過程中,無法復原雜湊加密處理能夠有效控制高信任層級的資訊直接擴散到較低信任域。假設在一個系統中存在多級這樣的情境。那就應該多次使用無法復原加密處理。
註:
1) 上述提到的一次無法復原加密處理不代表僅僅能是一次雜湊密碼編譯演算法迭代。其實為了加大演算法強度,有時可能是使用非常多次雜湊密碼編譯演算法的迭代。
2)在無法復原加密處理中,往往還須要加入鹽值。以抵抗彩虹表攻擊,這裡不做具體闡述。
談談移動互連網應用的使用者注冊登入安全考慮之無法復原加密的應用原則