Re: [請益] 關於加密網頁的製作(https)
※ 引述《whitedanube (white)》之銘言:
: 想請問有相關工作經驗的網頁程式設計師,針對加密性網頁的編寫有特殊規則嗎?
: 還是只是一般的網頁在SSL傳遞而已,所以沒有在用特別編碼去加密?
: 最近上課老師分享最近很紅的X浪社群網站,帳號密碼透過封包擷取軟體看的到!!
: 感覺很扯,但是真的看的到...
: 所以想請問除了用https還有什麼方法能有效防止帳號密碼外流,網頁+演算法?
: 謝謝
SSL Certificate好貴... 如果只是拿來擋密碼洩漏大概是大才小用了. 當然, 如果只是
要檔密碼洩漏的話, 可以用以下的方法.
( 以下Assume你資料庫裡面的密碼是已經Hash過的, 當然沒有Hash也可以, 只是細節要改
一下而已 )
有一種方法叫做Challenge-Response Authentication, 他的做法就是, 在載入登入
畫面的時候, 附加一個Challenge. 而對方那邊, 密碼打進來的時候, 你先將他的密碼
Hash一遍, 再將Challenge跟之前的Hash加在一起, 然後整個再Hash一遍. 最後的結果,
連帶Challenge傳回給伺服器. 伺服器端, 將Hash過的密碼從資料庫讀出, 跟之前的
Challenge加在一起, 然後Hash一遍看一不一樣.
我們來個範例, 假設Hash用md5...
伺服器丟出的Challenge: "CHALLENGEASDFASDF1234"
密碼: "Pass"
密碼的Hash = md5( "Pass" ) = "b9b57aae83585e17ede4570dcede353c"
丟給伺服器的資料 = md5( "CHALLENGEASDFASDF1234" +
"b9b57aae83585e17ede4570dcede353c" ) =
md5( "CHALLENGEASDFASDF1234b9b57aae83585e17ede4570dcede353c" ) =
"6cdd6d97a6a562246b64a071c84a43d1"
這時客戶端將Challenge跟md5一起丟回給伺服器, 伺服器重做一遍, 看結果一不一樣.
這個方法裡面的Challenge需要伺服器來產生. 產生的過程需要注意的是, 不要讓駭客
將偷到的Challenge跟Hash組合重複丟給伺服器讓他認證. 要避免這個, 我建議使用這個
Challenge產生方法:
Challenge = blowfish( SomePrivateKey, CurrentDateTimeUpToMillisecond );
然後, 每收到一個Challenge, 就用Blowfish解碼他, 然後看時間過了多久, 另外檢查,
這個Challenge是否已經被用來登入過了. 當然, 以上的Blowfish用AES之類的也可以.
--- EDIT ---
有關Challenge Response Authentication也可以看Wikipedia:
http://en.wikipedia.org/wiki/CRAM-MD5
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.76.65
※ 編輯: john0312 來自: 220.133.76.65 (08/03 22:09)
推
08/03 22:26, , 1F
08/03 22:26, 1F
推
08/04 00:08, , 2F
08/04 00:08, 2F
→
08/04 00:09, , 3F
08/04 00:09, 3F
推
08/04 01:57, , 4F
08/04 01:57, 4F
推
08/04 02:07, , 5F
08/04 02:07, 5F
推
08/04 08:14, , 6F
08/04 08:14, 6F
推
08/04 09:29, , 7F
08/04 09:29, 7F
推
08/20 21:44, , 8F
08/20 21:44, 8F