確保數據/交易完整性的一次性密碼生成算法?
這是我的案例:
使用者正試圖將錢轉入他朋友的帳戶。他在銀行網站上輸入交易詳情。銀行收到,然後銀行將交易明細(收款人姓名和金額)+一次性密碼發回給使用者(可能通過不同的渠道:手機),以便使用者驗證交易明細(這是為了確保交易的完整性。即。 ,沒有中間人攻擊)並輸入 OTP 以確認交易。
什麼是威脅模型?
中間人攻擊。如果攻擊者(中間)使用攻擊者控制的銀行賬戶修改了接收者的銀行賬戶詳細資訊,但顯示了虛假的交易摘要,那麼與交易詳細資訊一起發送的 OTP 應該會失效。
我應該使用什麼 OTP 生成算法?
someOTPgenAlgo(transaction details) = OTP.
現在,如果攻擊者更改了收款人的銀行賬戶詳細資訊,他還必須為修改後的交易詳細資訊找到匹配的 OTP,這應該是不可能的。我如何實現這一目標?關注夠了嗎?
someOTPgenALgo(交易詳情 + 一些隨機密鑰)= OTP
非常感謝。抱歉,如果這個問題很幼稚,我對此一無所知
你想像的不可能是安全的。
基本上你所描述的是一個消息認證系統,其中消息是 MAC 的,只有 MAC 與實際 MAC 匹配,但不檢查消息是否實際生成此 MAC,因此攻擊者可能只是偽造交易詳情並留下 MAC,使用者將輸入 MAC 並因此接受交易。
現在我要告訴你德國有多少家銀行解決了這個問題。
這假設您已向每位客戶發行了一張帶有晶片的卡並跟踪所有卡。
如果使用者想要進行交易,他使用他的瀏覽器來填寫數據。然後瀏覽器將他帶到一個頁面,在該頁面上,他會看到一個光學程式碼(與 QR 碼不同,但也使用基於時間的模式)或一些數據。
使用者必須掃描程式碼或將數據輸入到物理上獨立的設備中使用者在其中插入卡。數據由金額和收款人帳號的最後幾位數字組成。現在設備將這些數據傳遞給卡,該卡基本上只是執行 HOTP,但也在計算中包含金額和收件人的值。這是在使用者在內置顯示器上驗證交易的正確性之後完成的。現在他看到了一個短程式碼,他必須將其輸入瀏覽器。伺服器確認計算並啟動交易。
以更數學的方式,OTP 看起來像這樣:
$$ \text{OTP}=\operatorname{BytesToCode}(\operatorname{HMAC-SHA256}_{\text{Card-Server-Key}}(\text{amount}||\text{recipient}||\text{counter})) $$
在您的模型中,OTP 可能只是銀行生成的隨機數,與密鑰或交易細節無關。重要的是隨機數是不可預測的。8 位整數是典型的。沒有密鑰是一個很大的優勢,因為它不能被破壞。
銀行接收交易詳細資訊和所謂的發起使用者,生成一個隨機數,通過假設對手無法觀察到的單獨渠道將其發送給所謂的發起使用者;發起使用者檢查詳細資訊,如果批准交易,則在用於發送交易詳細資訊的同一瀏覽器會話中發送 OTP;銀行檢查 OTP 是它為該會話生成的(允許非常少量的錯誤猜測,例如 2),然後才使用該會話的詳細資訊執行交易。
這可能是安全的,即使執行瀏覽器的機器被pwned或瀏覽器的連結不安全,但前提是
- 對手無法攔截與所謂的原始使用者的 OTP 通信;如果通過 SMS 傳輸,弱點包括手機被盜(如果瀏覽器在手機上,尤其擔心,因為我們有單點故障),手機或 SIM 被盜,在 SMS 消息中大量使用弱加密,並損害行動電話運營商的 IT 設備。
- 使用者真正檢查所有交易細節;這遠非確定。
使 OTP 成為交易細節和密鑰的功能是行不通的,除非密鑰不斷變化或時間也混入其中,因為這很容易被重放。