1. 程式人生 > >程式設計師之網路安全系列(六):動態密碼

程式設計師之網路安全系列(六):動態密碼

系列目錄

前文回顧

程式設計師之網路安全系列(五):數字證書以及12306的證書問題
我們使用了數字證書,確保了對方的公鑰身份,也就是網際網路中確定了要訪問的網站就是你要訪問的網站。

但是我們如何確定要訪問這個網站的使用者就是要訪問的使用者呢? 對銀行來說需要確保“敏捷的水”登入銀行時,必須是"敏捷的水" 而不是別人,不然別人就把錢轉走了。

雖然我們從通訊,資料加密等方式確保使用者密碼不背攻擊者破解,但是如果攻擊者使用鍵盤記錄器等工具知道了使用者密碼,那麼就可以冒充使用者了。

比如銀行的U盾,因為我對這塊業務不瞭解,我猜銀行為每個使用者發放了一個公鑰?( 知道的同學,可以幫忙解釋一下銀行的U盾都做了什麼?

)

我們用數字證書確定了銀行的身份,那麼銀行如何確定我們的身份呢?

兩步驗證

那麼什麼是兩步認證呢?兩步認證就是在每次登陸時候填一個手機簡訊收取的驗證碼或者手機應用生成的驗證碼。當然接收驗證碼的手機號或者應用是需要繫結的,這樣只有拿到這部手機並且知道你帳號密碼的人才能登陸帳號。

為什麼需要它?

對有些人來說,盜取密碼比您想象的更簡單

以下任意一種常見操作都可能讓您面臨密碼被盜的風險:

  • 在多個網站上使用同一密碼
  • 從網際網路上下載軟體
  • 點選電子郵件中的連結

想像一下您無法訪問自己的帳戶及其中的內容,當別有用心的人盜取您的密碼後,他們能讓您無法訪問自己的帳戶,還可以執行以下操作:

  • 翻看(甚至刪除)您所有的電子郵件、聯絡人、照片等
  • 冒充您給您的聯絡人傳送垃圾郵件或有害的電子郵件
  • 使用您的帳戶重置您其他帳戶(銀行帳戶、購物帳戶等)的密碼

兩步驗證可以將別有用心的人阻擋在外,即使他們知道您的密碼也無可奈何。

如何工作?

現在大部分比較危險的操作都需要繫結手機號,因為手機號是你用的唯一的。接收到驗證碼後,我們再輸入系統做第二次的驗證。

但是由於我們這個驗證碼也有可能丟失,那麼我們只需要讓他在一定時間有效就可以了,這就是OTP.

動態口令 (One Time Password)

動態密碼: 一個OTP(One Time Password) 是一個密碼僅用於一次登入會話或者交易,使用過後,這個密碼就無效了。

靜態密碼的問題:

  • 容易被破解
  • 容易被猜測
  • 容易被盜劫
  • 針對不同的網站,使用者需要記憶大量的密碼。

使用動態口令主要有2個方面價值:

  • 防止由於盜號而產生的財產損失。
  • 採用動態口令的單位無需忍受定期修改各種應用系統登入密碼的煩惱。

有兩種方法,生成動態密碼:

Event-based OTP (EOTP)

基於事件同步的令牌,其原理是通過某一特定的事件次序及相同的種子值作為輸入,在DES演算法中運算出一致的密碼,其運算機理決定了其整個工作流程同時鍾無關,不受時鐘的影響,令牌中不存在時間脈衝晶振。但由於其演算法的一致性,其口令是預先可知的,通過令牌,你可以預先知道今後的多個密碼,故當令牌遺失且沒有使用PIN碼對令牌進行保護時,存在非法登陸的風險,故使用事件同步的令牌,對PIN碼的保護是十分必要的。同樣,基於事件同步的令牌同樣存在失去同步的風險,例如使用者多次無目的的生成口令等,對於令牌的失步,事件同步的伺服器使用增大偏移量的方式進行再同步,其伺服器端會自動向後推算一定次數的密碼,來同步令牌和伺服器,當失步情況已經非常嚴重,大範圍超出正常範圍時,通過連續輸入兩次令牌計算出的密碼,伺服器將在較大的範圍內進行令牌同步,一般情況下,令牌同步所需的次數不會超過3次。但在極端情況下,不排除失去同步的可能性,例如電力耗盡,在更換電池時操作失誤等。此時,令牌仍可通過手工輸入由管理員生成的一組序列值來實現遠端同步,而無需寄回伺服器端重新同步。

Time based OTP (TOTP)

基於令牌和伺服器的時間同步,通過運算來生成一致的動態口令,基於時間同步的令牌,一般更新率為60S,每60S產生一個新口令,但由於其同步的基礎是國際標準時間,則要求其伺服器能夠十分精確的保持正確的時鐘,同時對其令牌的晶振頻率有嚴格的要求,從而降低系統失去同步的機率,從另一方面,基於時間同步的令牌在每次進行認證時,伺服器端將會檢測令牌的時鐘偏移量,相應不斷的微調自己的時間記錄,從而保證了令牌和伺服器的同步,確保日常的使用,但由於令牌的工作環境不同,在磁場,高溫,高壓,震盪,入水等情況下易發生時鐘脈衝的不確定偏移和損壞,故對於時間同步的裝置進行較好的保護是十分必要的。對於失去時間同步的令牌,目前可以通過增大偏移量的技術(前後10分鐘)來進行遠端同步,確保其能夠繼續使用,降低對應用的影響,但對於超出預設時間(共20分鐘)的同步令牌,將無法繼續使用或進行遠端同步,必須返廠或送回伺服器端另行處理。同樣,對於基於時間同步的伺服器,應較好地保護其系統時鐘,不要隨意更改,以免發生同步問題,從而影響全部基於此伺服器進行認證的令牌。

** 以上兩種方式在生成密碼的過程都不需要與伺服器通訊,所以極大的保證了密碼的安全。**

演算法的實現

相關推薦

程式設計師網路安全系列動態密碼

系列目錄 前文回顧 程式設計師之網路安全系列(五):數字證書以及12306的證書問題 我們使用了數字證書,確保了對方的公鑰身份,也就是網際網路中確定了要訪問的網站就是你要訪問的網站。 但是我們如何確定要訪問這個網站的使用者就是要訪問的使用者呢? 對銀行來說需要確保“敏捷的水”登入銀行時,必須是"敏捷

程式設計師網路安全系列為什麼要關注網路安全

系列目錄: 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 前言 大家都知道最近幾年鬧的沸

程式設計師網路安全系列數字證書以及12306的證書問題

系列目錄: 前文回顧 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 中間人攻擊 上面

程式設計師網路安全系列資料加密非對稱祕鑰

系列目錄: 前文回顧 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 但是上面的問題是明

程式設計師網路安全系列如何安全儲存使用者密碼及雜湊演算法

系列目錄: 前言 在很多網站的早期,甚至是現在仍然有一些網站,當你點選忘記密碼功能時,你的郵箱會收到一封郵件,然後裡面赫然寫著你的密碼,很多普通使用者還會覺得慶幸,總算是找回來了,殊不知,這是多麼可怕地一件事,說明了網站是“幾乎是”明文儲存你的密碼,一旦資料使用者資料洩露或者被拖庫,那麼使用者密碼將赤裸裸

程式設計師網路安全系列資料加密對稱加密演算法

系列目錄: 前文回顧 假如,明明和麗麗相互不認識,明明想給麗麗寫一封情書,讓隔壁老王送去 如何保證隔壁老王不能看到情書內容?(保密性) 如何保證隔壁老王不修改情書的內容?(完整性) 如何保證隔壁老王不冒充明明?(身份認證) 如何保證明明不能否認情書是自己寫的?(來源的不可否認) 上一節,我們使用了Ha

物聯網平臺構架系列 Amazon, Microsoft, IBM IoT 解決方案導論 結語

物聯網; iot; aws; 亞馬遜; greengrass;microsoft; azure;ibm; watson; bluemix最近研究了一些物聯網平臺技術資料,以做選型參考。腦子裏積累大量信息,便想寫出來做一些普及。作為科普文章,力爭通俗易懂,不確保概念嚴謹性。我會給考據癖者提供相關英文鏈接,以便深

Scala入門系列面向對象object

所有 name 應用 eight lac box dfa port clas object Person { private var eyeNum = 2 println("this Person object") def getEyeNum = eyeNum

生成對抗網路GAN系列--- CycleGAN---文末附程式碼

Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks Jun-Yan Zhu      Taesung Park          Phillip Isola   

程式設計師必會技能系列2git中merge和rebase比較-3

git中有兩個合併分支的方法,一個是git merge,另一個是git rebase。 一、git merge 講解 1、畫圖講解git merge 用merge合併分支時不會改變歷史(通俗的說就是commit號不會變)。在git中merge會創造一個

程式設計師 一路走來1

在程式設計師這條路上累了你就聽聽歌吧送給自己一首默默忍淚向上遊幸運不肯輕招手我要艱苦奮鬥努力不會有極限若遇失敗再重頭現實欺弄不擔憂我要跟它決鬥挺著胸對抗命運用力握實我拳頭成功不會驟然降喝采聲不想白白承受求能用心求能用功求能做好鼓手像怒海的小孤舟冷雨悽風繼續有我願那苦痛變力量默

前端程式設計師學好算法系列陣列

前端程式設計師怎麼才能學好演算法呢?目前演算法優秀的視訊集中在c++,java,python,本人通過幾個月專心看c++的視訊掌握了演算法的基本思路,都翻譯成前端程式碼一一寫出來,從真題到思維全面提升演算法思維面對演算法面試,不畏懼 二分查詢法O(logn)尋找陣列中的最大/最小值O(N)歸併排序演算法 O(

web安全系列XSS 攻擊基礎及原理

跨站指令碼攻擊(XSS)是客戶端指令碼安全的頭號大敵。本文章深入探討 XSS 攻擊原理,下一章(XSS 攻擊進階)將深入討論 XSS 進階攻擊方式。 本系列將持續更新。 XSS 簡介 XSS(Cross Site Script),全稱跨站指令碼攻擊,為了與 CSS(Cascading Style Sheet)

STM32開發筆記52STM32F4+DP83848乙太網通訊指南系列Wireshark使用

本章為系列指南的第六章,這一章我們暫時離開Keil,離開STM32,離開C語言,這一章我們要去了解一些乙太網相關的知識,特別是學習使用大名鼎鼎的除錯乙太網通訊程式的利器:WireShark。 幀結構 我們從小就聽說過計算機中全都是二進位制的0和1,這個道理幾乎連考不上三本的文科生都懂,但是很

Web安全系列XSS 攻擊進階初探 XSS Payload

什麼是 XSS Payload 上一章我談到了 XSS 攻擊的幾種分類以及形成的攻擊的原理,並舉了一些淺顯的例子,接下來,我就闡述什麼叫做 XSS Payload 以及從攻擊者的角度來初探 XSS 攻擊的威力。 在黑客 XSS 攻擊成功之後,攻擊者能夠對使用者當前瀏覽的頁面植入各種惡意指令碼,通過惡意指令碼來

Web安全系列XSS 攻擊進階挖掘漏洞

前言 目前來說,XSS 的漏洞型別主要分為三類:反射型、儲存型、DOM型,在本篇文章當中會以permeate生態測試系統為例,分析網站功能,引導攻擊思路,幫助讀者能夠快速找出網站可能存在的漏洞。 反射型 XSS 挖掘 現在筆者需要進行手工XSS漏洞挖掘,在手工挖掘之前筆者需要先逛逛網站有哪些功能點,如下圖是

爬蟲入門系列正則表示式完全指南

爬蟲入門系列目錄: 正則表示式是一種更為強大的字串匹配、字串查詢、字串替換等操作工具。上篇講解了正則表示式的基本概念和語法以及re模組的基本使用方式,這節來詳細說說 re 模組作為 Python 正則表示式引擎提供了哪些便利性操作。 >>> import re

Web安全系列XSS 的防禦

簡介 XSS 的防禦很複雜,並不是一套防禦機制就能就解決的問題,它需要具體業務具體實現。 目前來說,流行的瀏覽器內都內建了一些 XSS 過濾器,但是這隻能防禦一部分常見的 XSS,而對於網站來說,也應該一直尋求優秀的解決方案,保護網站及使用者的安全,我將闡述一下網站在設計上該如何避免 XSS 的攻擊。 H

前端安全系列如何防止XSS攻擊?

前端安全 隨著網際網路的高速發展,資訊保安問題已經成為企業最為關注的焦點之一,而前端又是引發企業安全問題的高危據點。在移動網際網路時代,前端人員除了傳統的 XSS、CSRF 等安全問題之外,又時常遭遇網路劫持、非法呼叫 Hybrid API 等新型安全問題。當然

程式設計師練級攻略2018前端基礎和底層原理

這個是我訂閱 陳皓老師在極客上的專欄《左耳聽風》,我整理出來是為了自己方便學習,同時也分享給你們一起學習,當然如果有興趣,可以去訂閱,為了避免廣告嫌疑,我這就不多說了!以下第一人稱是指陳皓老師。 對於前端的學習和提高,我的基本思路是這樣的。首先,前端的三個最基本的