作者john0312 (Chen John L)
看板Soft_Job
标题Re: [请益] 关於加密网页的制作(https)
时间Mon Aug 3 22:05:58 2009
※ 引述《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)
1F:推 nobody1:推~ 08/03 22:26
2F:推 leicheong:没要求的话也可以用self signed cert.啊... 早前一堆 08/04 00:08
3F:→ leicheong:FOSS下的网站都是这样用的... :P 08/04 00:09
4F:推 luciferii:冏.前提是client你要自己写,还得强迫使用者用才可以... 08/04 01:57
5F:推 luciferii:我是指CRAM 08/04 02:07
6F:推 whitedanube:谢谢~提供方法~ 08/04 08:14
7F:推 LCHENAN:看了大大的文章,有学到东西的感觉 08/04 09:29
8F:推 hukhuk:这是CHAP的protocol的做法 08/20 21:44