數據與通訊安全保證

涉及到敏感數據的項目都會面臨數據加密的問題,下面說一下我們項目中的一些選擇和實現

  • 傳輸加密
    我們平時碰到的最多的場景可能會是傳輸過程中的加密,這種加密保證的是傳輸過程中的信息的私密性避免敏感信息被截獲,如用戶註冊過程中是的私人信息、或是我們在使用即時通訊工具傳輸的私人信息等。
    如果信息過於敏感和重要如涉及身份證通訊地址和手機號碼等我們採用RSA+AES結合的方式來保證安全性,這種場景下信息是從用戶端產生傳輸到服務器端的我們要保證的是傳輸的安全,用戶端已經獲得了RSA的公鑰,用戶端需要產生AES的密碼,爲了安全性可以在每次與服務器端交互時都產生一個不同的密碼,生成密碼後將關鍵數據使用AES+密碼來進行加密,然後再將剛纔生成的密碼使用RSA公鑰進行加密,然後一起組裝成請求體發送給服務器端。
    如果此時消息在中間被攔截,因爲消息使用了AES加密且密碼是通過RSA公鑰加密的,AES密碼沒有RSA私鑰無法解密,所以攔截者無法破解消息內容。
    服務器端擁有RSA的私鑰,因此在接收到消息後,服務器端進行RSA私鑰解密獲取AES密碼,然後根據密碼再來通過AES解密獲得請求體中的明文,從而完成整個消息的保密傳輸。
  • 驗籤
    對比上面的場景,驗籤所需要擔心的不是消息被攔截後破解的問題,而是擔心用戶請求的身份識別問題,比如在一個支付場景中,用戶要從自己賬戶中轉賬給其它用戶,這時候我們最需要確認的是請求的確是用戶自己發出的,這種場景下就要用到我們常說的驗籤,通常驗籤是通過RSA算法來進行保證。
    一般實現是這樣將用戶的消息體用RSA公鑰來簽名,將簽名內容附加在請求體中傳給服務端,服務端通過私鑰來驗證簽名,簽名驗證通過即認爲請求是真實用戶發出的。
  • 存儲加密
    除了傳輸時的加密,在數據庫中的數據在等保中也要求對自然人信息進行加密,這樣防止的是數據庫級別的泄漏。這時我們會採用AES加密,mysql中也提供了相應的加密解密函數方便我們直接使用: AES_ENCRYPT() AES_DECRYPT(),但加密後的數據存儲空間爲增加,性能會有一定的損耗,而且做模糊搜索可能會很麻煩。

很多場景可能我們使用AES和RSA都可以或是需求結合使用才能滿足安全需求,這時我們要做適當的選擇,因爲AES的性能比較高,RSA性能較差,所以如果沒有特別高的要求儘可能使用AES來滿足需求。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章