客戶端防重放設計

需求概述

客戶端信道早在1.1版本中便實現了服務器防重放攻擊功能,但始終沒有實現客戶端防重放攻擊。這樣會使得客戶端存在被重放攻擊的危險,如用戶在轉賬時被重放了轉賬失敗頁面,導致用戶重複轉賬。 爲此,我們需要在客戶端信道中實現客戶端防重放功能。

功能需求

我們需要實現以下需求:

  1. 在服務器響應中增加序列號,實現客戶端防重放功能
  2. 兼容之前版本的信道通信,以便在升級服務器後,可以兼容舊客戶端。

設計

爲兼容舊版本信道協議,我們需要新增1.5版本協議來實現客戶端防重放功能。1.5信道協議在1.4協議基礎上進行升級。

防重放邏輯

  • 在服務器響應報文的前面增加組別和防重放序列號。
  • 格式與請求序列號格式相同,即組別(1位byte) + 序列號(8位byte) + 響應內容。
  • 由於從1.4版本後摘要值添加在響應內容前,因此1.5版本需要將摘要值添加在序列號之前,即摘要 + 組別 + 序列號 + 響應內容。
  • 客戶端收到響應後先解析組別和序列號,並與本地同組別的請求序列號進行比較,驗證序列號合法性。如果請求序列號與響應序列號相同則視爲合法,合法再處理校驗摘要值及響應內容,如果非法則提示網絡錯誤。其中網絡錯誤提示信息可配置。
  • 會話超時時,服務器統一返回20位byte(全是0)數據,不分國密非國密。

序列號生成邏輯

  • 響應序列號生成的規則爲:與本次客戶端請求序列號相同。
  • 由於服務器本地可以獲取到當前請求對應的請求序列號,因此響應序列號只需使用該值即可。

響應hamc校驗摘要值計算

  • 由於序列號作爲響應內容的一部分,因此摘要需要以加入序列號之後的響應內容來計算。即摘要值 = 對(組別 + 序列號 + 響應內容)做hamc加密。
  • 國密加密模式下摘要值爲32位byte,非國密模式下摘要值爲20位byte。

HTTP防重放邏輯

修改接口ewp_ssl:ssl_sign/2處理邏輯:

  • 修改摘要值的計算方法
  • 響應報文修改爲:摘要 + 組別 + 序列號 + 響應內容

TCP防重放邏輯

修改接口ewp_ssl:ssl_sign/2處理邏輯:

  • 修改摘要值的計算方法
  • 響應報文修改爲:{tcp, 摘要, 組別 + 序列號, 響應內容}
  • 根據TCP設計文檔 4.1.2 TCP接口,服務器響應格式的ResponseMessages,追加Type類型3,表示 組別(1位byte) + 序列號(8位byte),格式爲:Type(1 byte) + Length(4 bytes) + Content(Length bytes)。如:<
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章