Java專案經驗之交易密碼安全機制

2021-08-23 14:31:14 字數 1328 閱讀 1076

設定密碼主要驗證流程:

1: 密碼md5生成摘要

2  入庫

交易密碼驗證主要流程:

1 把使用者輸入的密碼生成md5摘要

2 md5串與資料庫中設定的比較,是否相等

除了md5,也可以利用sha1,sha256,sha512等hash演算法

123456→sha-512→ba3253876aed6b

優點:簡單易用,hash效率高

缺點:採用暴力破解或者彩虹表,很容易攻破,尤其是密碼是簡單等六位數字,可以通過hash值反向查詢密碼。

也可以窺探哪些相同的hash值,因為不同的使用者交易密碼可能一樣,更久

為了解決摘要加密的缺點,最常見的就是加salt。加salt後,不同使用者即使相同的密碼,相同的摘要,存入資料庫也是不同的摘要。

而且,加鹽後,如果每個使用者都是不同的隨機slat,對於黑客攻克批量客戶增加了成本。

123456 + 0x23f22(salt)→sha-512→bc22711a45e73e5e50f8...

每個使用者有乙個固定的salt值,salt值不會每次發生變化,否則沒有辦法驗證密碼。固定salt如果洩漏會不會影響安全性?

優點:一定程度防禦彩虹表的攻擊,因為黑客構造出來的彩虹表跟你資料庫的hash值不一樣。增加破解成本。

缺點:如果salt值和md5值洩漏,還是可以破解的,當然需要一定的成本。

增強版本可以使用兩次md5,由於目前彩虹表大多針對一次md5,所以可以增加破解成本

通過迭代計算的方式增加計算密碼的成本。迭代的週期控制在使用者可以接受範圍內,這樣攻擊者的計算和時間成本就會大大增加。

123456 + 0x23f22(salt)→sha-512 (500000 times)→bc6567567a45e73...

目前我使用的就是bcrypt方式,可以設定cost factor,預設是10,增加計算成本,從而提高破解難度。

但是缺點是,如果併發量大,要注意factor的設定,如果太大,影響系統效能。

金鑰(encryption key) + bcript的結果→aes 256→ox2c78a32f...

利用aes加密演算法加密bcrypt的密文,或者md5的結果,增加破解難度。

需要注意的是金鑰的管理,aes是對稱加密,前端和後台共享乙個金鑰,前端的金鑰如何儲存?

可以選擇金鑰儲存在不同的資料來源,比如amanzon提供的hms服務。這樣密碼和密文不在一起,增加攻擊難度。

參考文章

方法四通過金鑰加密增加了安全性,但是金鑰的儲存需要特別注意,經常更換金鑰,或者把金鑰儲存在其它資料庫,增加破解難度。

還有一種是我比較推薦的,通過其它雲服務提供的金鑰管理服務,進行金鑰管理,比如amanzon的hsm。

專案經驗小結

專案內容 專案目的 傳統的日誌,記錄的是系統訊息流,控制流或資料流方面的資訊,尤其關注出錯狀態。從而為我們分析問題提供現場,得以知道問題發生的前因後果。分析日誌之後,可以知道整個故事的情節 時間 地點 事件等等。但我們不太容易從海量的日誌中提取重要的系統效能指標或引數,以實現垂直衡量系統效能和評估系...

專案經驗分享

這是我經歷的第二個專案,這個專案相對於第乙個專案dzpay相對較簡單,介紹 第乙個專案名稱 dzpay。大宗商品交易,類似某寶 這次主要總結我測試billbank的一些個人經歷 測試第一要義就是要詳讀產品需求,產品需求中有哪些模組,每個模組中又有哪些子模組,每個模組以及子模組對應的需求點都要搞清楚。...

專案經驗1

在一開始學前端的時候,都是從模仿別人的 開始做起。基本上寫的都是純前端介面,也就是沒有和後台進行互動的介面。雖然現在已經能夠熟練的寫需求裡面各種奇奇怪怪的html文件結構,js jquery動態元素也能寫的不錯 當然了還是需要繼續學習的 但是到最近真正開始接觸大專案,前端後台分工合作的時候才發現乙個...