程序員之網絡安全系列(二):如何安全保存用戶密碼及哈希算法 咱們保證了數據的完整性html
程序員之網絡安全系列(三):數據加密之對稱加密算法 咱們對數據進行了加密程序員
程序員之網絡安全系列(四):數據加密之非對稱加密算法
咱們使用了非對稱密鑰算法,咱們讓「隔壁王叔叔」傳遞了祕鑰。算法
程序員之網絡安全系列(五):數字證書以及12306的證書問題
咱們使用了數字證書,確保了對方的公鑰身份,也就是互聯網中肯定了要訪問的網站就是你要訪問的網站。安全
可是咱們如何肯定要訪問這個網站的用戶就是要訪問的用戶呢? 對銀行來講須要確保「敏捷的水」登陸銀行時,必須是"敏捷的水" 而不是別人,否則別人就把錢轉走了。服務器
雖然咱們從通訊,數據加密等方式確保用戶密碼不背攻擊者破解,可是若是攻擊者使用鍵盤記錄器等工具知道了用戶密碼,那麼就能夠冒充用戶了。網絡
好比銀行的U盾,由於我對這塊業務不瞭解,我猜銀行爲每一個用戶發放了一個公鑰?( 知道的同窗,能夠幫忙解釋一下銀行的U盾都作了什麼? )工具
咱們用數字證書肯定了銀行的身份,那麼銀行如何肯定咱們的身份呢?網站
那麼什麼是兩步認證呢?兩步認證就是在每次登錄時候填一個手機短信收取的驗證碼或者手機應用生成的驗證碼。固然接收驗證碼的手機號或者應用是須要綁定的,這樣只有拿到這部手機而且知道你賬號密碼的人才能登錄賬號。ui
對有些人來講,盜取密碼比您想象的更簡單加密
如下任意一種常見操做均可能讓您面臨密碼被盜的風險:
想像一下您沒法訪問本身的賬戶及其中的內容,當別有用心的人盜取您的密碼後,他們能讓您沒法訪問本身的賬戶,還能夠執行如下操做:
兩步驗證能夠將別有用心的人阻擋在外,即便他們知道您的密碼也迫不得已。
如今大部分比較危險的操做都須要綁定手機號,由於手機號是你用的惟一的。接收到驗證碼後,咱們再輸入系統作第二次的驗證。
可是因爲咱們這個驗證碼也有可能丟失,那麼咱們只須要讓他在必定時間有效就能夠了,這就是OTP.
動態密碼: 一個OTP(One Time Password) 是一個密碼僅用於一次登陸會話或者交易,使用事後,這個密碼就無效了。
靜態密碼的問題:
使用動態口令主要有2個方面價值:
有兩種方法,生成動態密碼:
基於事件同步的令牌,其原理是經過某一特定的事件次序及相同的種子值做爲輸入,在DES算法中運算出一致的密碼,其運算機理決定了其整個工做流程同時鍾無關,不受時鐘的影響,令牌中不存在時間脈衝晶振。但因爲其算法的一致性,其口令是預先可知的,經過令牌,你能夠預先知道從此的多個密碼,故當令牌遺失且沒有使用PIN碼對令牌進行保護時,存在非法登錄的風險,故使用事件同步的令牌,對PIN碼的保護是十分必要的。一樣,基於事件同步的令牌一樣存在失去同步的風險,例如用戶屢次無目的的生成口令等,對於令牌的失步,事件同步的服務器使用增大偏移量的方式進行再同步,其服務器端會自動向後推算必定次數的密碼,來同步令牌和服務器,當失步狀況已經很是嚴重,大範圍超出正常範圍時,經過連續輸入兩次令牌計算出的密碼,服務器將在較大的範圍內進行令牌同步,通常狀況下,令牌同步所需的次數不會超過3次。但在極端狀況下,不排除失去同步的可能性,例如電力耗盡,在更換電池時操做失誤等。此時,令牌仍可經過手工輸入由管理員生成的一組序列值來實現遠程同步,而無需寄回服務器端從新同步。
基於令牌和服務器的時間同步,經過運算來生成一致的動態口令,基於時間同步的令牌,通常更新率爲60S,每60S產生一個新口令,但因爲其同步的基礎是國際標準時間,則要求其服務器可以十分精確的保持正確的時鐘,同時對其令牌的晶振頻率有嚴格的要求,從而下降系統失去同步的概率,從另外一方面,基於時間同步的令牌在每次進行認證時,服務器端將會檢測令牌的時鐘偏移量,相應不斷的微調本身的時間記錄,從而保證了令牌和服務器的同步,確保平常的使用,但因爲令牌的工做環境不一樣,在磁場,高溫,高壓,震盪,入水等狀況下易發生時鐘脈衝的不肯定偏移和損壞,故對於時間同步的設備進行較好的保護是十分必要的。對於失去時間同步的令牌,目前能夠經過增大偏移量的技術(先後10分鐘)來進行遠程同步,確保其可以繼續使用,下降對應用的影響,但對於超出默認時間(共20分鐘)的同步令牌,將沒法繼續使用或進行遠程同步,必須返廠或送回服務器端另行處理。一樣,對於基於時間同步的服務器,應較好地保護其系統時鐘,不要隨意更改,以避免發生同步問題,從而影響所有基於此服務器進行認證的令牌。
** 以上兩種方式在生成密碼的過程都不須要與服務器通訊,因此極大的保證了密碼的安全。**