台灣深藍vBulletin技術論壇  

返回   台灣深藍vBulletin技術論壇 > 深藍官方整理發表區 > 教學文件深藍官方整理區 > vBulletin3

回覆
 
主題工具
舊 2006-11-12, 01:24 AM   #1
論壇站長
 
註冊日期: 2004-10-06
住址: http://www.twvbb.com
文章: 1,574
預設 【教學】MD5 演算法原理與用途簡介

以下文章由台灣深藍vBulletin技術論壇站長 ckmarkhsu 撰寫

如要轉載請附上完整文字 http://www.twvbb.com/vbb/thread/15/1070

===========================================================

一、簡介
md5 是基於 md4 修改而來的雜湊演算法

其主要用途是將一個輸入值運算後輸出一個固定長度(32字元)的雜湊值(反正就是一個字串)

目的是來將原始的輸入資料做摘要,這在檔案比對、密碼學、檔案加密上非常重要

它具有幾個特性

1 .由於 md5 是將任何輸入值對應到有限長度的字串,因此他是一個不可逆的單向函數

因此在數學上你找不到他的反函數(就是你沒辦法寫出一個程式單純用運算將 md5 後的值轉回原始值)

2. md5 演算後的值非常的分散,因此只要小小的改變輸入值,md5 後的值就會巨幅的改變,例如以下的例子只改變了一個 c

MD5("The quick brown fox jumps over the lazy dog")
= 9e107d9d372bb6826bd81d3542a419d6

MD5("The quick brown fox jumps over the lazy cog")
= 1055d3e698d289f2af8663725127bd4b

二、用途
那這有三小錄用呢? 當然是有用才重要阿XD 以下是目前常用的幾個例子

1. 檔案完整性的比對
當你從一個網站下載檔案後,你可能會懷疑下載過程中有無出錯,或者有沒有被人竄改

但你也沒辦法跟伺服器上的檔案做比對,總不能傳兩次看看一不一樣XD,這樣很愚蠢

因此他們會在釋出時公佈該檔案的 MD5 值,你下載後亦將該檔案 MD5 後比對值是否相同即可判斷
2. 密碼儲存
各位是否想過,如果今天密碼以明碼存在網站資料庫中,那是多麼危險的行為

若被入侵,幾十萬人的帳號與密碼將直接被盜用,若不被入侵,站長也可能會自己盜用

因此目前成熟具有會員系統的程式均會將密碼做不可還原的加密

vBulletin phpBB Discuz! 等 CMS 當然也不例外

在你註冊時,他會將你的密碼 MD5值儲存起來,每次你登入時,便將你輸入的密碼MD5後比對資料庫內的值

這樣就可以在理論上確保原始密碼不外洩
3. 加密演算法(這部分太深奧,我也只懂概念,有興趣的就自己 G 吧XD)

三、目前已知的弱點
那有沒有演算弱點呢? 當然有,如果沒有弱點就不會從 MD4 變成 MD5 了:P

在 2005 年 MD5 的碰撞已經被山東大學的教授找到,意即你可以找到兩個值丟進去產生相同的 MD5 值(當然是用電腦算)

這是非常嚴重的問題,不過其實 MD4 時代已經發生過,當時只要用紙筆就可以找出碰撞

不過值得慶幸的是目前仍就沒辦法單純以演算法將 MD5 值直階還原

四、慣用破解方式
不過雖然單純以演算法無法還原,但我們可以用暴力的方式破解:P

首先,請先建立 1 ~ N (N 隨便你)字元的 md5值 資料庫,然後再將 md5 hash 直丟進去搜尋

只要 md5 前的原始字串字元數 < n 且組合包括在內就可以找出原始字串為何

舉例來說,雖然我們無法得知 9e107d9d372bb6826bd81d3542a419d6 意味著什麼意思

但如果你的資料庫中「碰巧」已經將 The quick brown fox jumps over the lazy dog 的 MD5 值算出來

那你就可以透過搜尋比對的方式找到該 MD5 值就是對應到那句英文

那資料表很難建立嗎? 不一點也不,只要簡單的幾行程式碼,一台不要太慢的電腦,幾GB的硬碟

輕易的就可以把 8 字元以下的字串 MD5 建表,所需時間應該不用幾小時,各位可以想想你的密碼有沒有超過 8 字元

如果沒超過,你的密碼幾乎肯定可以瞬間解出來,但如果超過也不用太高興,因為目前已經有人用了 1TB 資料庫建到 1X 字元的資料表

那難道沒有防堵方式嗎? 當然有,那就是 MD5 salt (講到這就不得不提一下,vBulletin 是目前唯一使用 md5 salt 的 CMS XD)

其原理就是在每個使用者的密碼中加入不同的鹽巴(salt)

大概來說,例如你的密碼是 dog 他在 md5 時會加入一特定字串(例如:#4%,此值在註冊時產生,每個人均不同)以特殊的方式一起 MD5

這有什麼好處呢? 這樣建表破解就破功了,因為表僅能針對沒有 salt 的 md5 值搜尋

除非他針對你的 salt 值去跑數十 GB 的資料庫,但這就非常沒有效益了,因為每個帳號的 salt 均不同


以上大概就是敝人對 MD5 所做的簡介,如有錯誤還請各位先進指證^^"


PS. 雖然 WinNT 不是使用 md5 編碼儲存,但其實他使用的演算方式也存在致命的弱點(7 字元一小節)

只要是 14 字元以下的 WinNT 帳號密碼都可以在取得加密值後瞬間解出來,不過超過 14 字元就不行了^^"


以上文章為 ckmarkhsu 撰寫,請勿任意轉載
__________________
vBulletin 問題請在論壇討論,請勿私下詢問我,以利後人參考
ckmarkhsu 目前離線   回覆時引用此篇文章
舊 2006-11-12, 03:09 AM   #2
Junior Member
 
註冊日期: 2006-02-03
住址: http://math.pro/
文章: 11
預設

有一個網站 MD5 Password Repair ,美其名叫做 Repair ,

實際上是建構一個特大號的網路版 MD5 及 SHA1 的反查資料庫,

幾乎一些常見簡單片語的 MD5/SHA1 編碼資料他都有紀錄,可以給你反查。

此篇文章於 2006-11-12 03:11 AM 被 weiye 編輯.
weiye 目前離線   回覆時引用此篇文章
舊 2006-11-12, 09:01 AM   #3
Member
 
註冊日期: 2006-04-13
住址: http://eool.net
文章: 82
發送 MSN 訊息給 Eddie
預設

VBB现在是双重md5的…
他那边没有登记的…
还好还好vbb的开发人员们想到了这个…
Eddie 目前離線   回覆時引用此篇文章
舊 2006-11-14, 02:54 PM   #4
Senior Member
 
註冊日期: 2005-05-29
住址: http://mamba.zapto.org/bbs/
文章: 119
預設

引用:
作者: weiye
有一個網站 MD5 Password Repair ,美其名叫做 Repair ,

實際上是建構一個特大號的網路版 MD5 及 SHA1 的反查資料庫,

幾乎一些常見簡單片語的 MD5/SHA1 編碼資料他都有紀錄,可以給你反查。

這網站還滿有意思的

如果把密碼設的很奇怪
應該不容易被反查到吧?
陳醉欣 目前離線   回覆時引用此篇文章
回覆

書籤

主題工具

發文規則
不可以發表新主題
不可以發表回覆
不可以上傳附件
不可以編輯自己的文章

啟用 BB 代碼
論壇啟用 表情符號
論壇啟用 [IMG] 代碼
論壇禁用 HTML 代碼
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 禁用


所有時間均為北京時間。現在的時間是 12:54 AM


Powered by vBulletin® 版本 3.7.3
版權所有 ©2000 - 2008,Jelsoft Enterprises Ltd.
Ad Management by RedTyger