過去很常用MD5做訊息摘要,近來發現某些地方會用SHA做摘要
google了一下,發現MD5因hash不夠強而被破解了,能夠偽造相同的訊息摘要
大致問題如下
PHP寫法
SHA有5種演算法,SHA-0 ~ SHA-5
目前 SHA-0 及 SHA-1 也都被破了
SHA-2 以上還沒出現有效的攻擊,SHA256 及 SHA512 即為 SHA-2
過去上密碼學時,都沒注意到原來SHA是Secure Hash Algorithm 縮寫
都說是Secure了,還在用MD5玩~ (羞)
難怪之前用 facebook 金流時,人家也用sha256
References
google了一下,發現MD5因hash不夠強而被破解了,能夠偽造相同的訊息摘要
大致問題如下
- MD5的hash值,google就會找到了,
本來沒在意這點,不過有時會用在儲存密碼上
這就容易被反推,記得幾年前也有朋友用google MD5去找密碼... - 相同的訊息摘要
MD5本來就不以安全為出發點,只是做摘要用,因此hash不夠強,會發生兩個不同的message,但產生相同的hash碼 - 利用MD5做檔案特徵碼也有相同的問題
SHA的訊息摘要的長度更長,因此較不會發生碰撞,也更為安全
不過相對MD5,運算也相對較慢,所以適合用在摘要小段訊息
檔案還是用MD5比較快
PHP寫法
$data = "魚乾的筆記本"; $key = "fishjerk"; $sig = md5($data, true); // = hash('md5', $data); //Output 32個字元特徵碼: 9fc745260dedf115ec7b62fa811f0698 $sig = hash_hmac('sha256', $data, $key ); //跟hash('sha256')的差別是多了$salt改變特徵碼 //Output 64個字元特徵碼: 7b8ddbde1cc031945d23d82af786a83048e40efff7c1194ed9ea6c6f0fae39b2 $sig = hash_hmac('sha512', $data, $key ); //Output 128個字元特徵碼: 8cb44d44e52b443fa3095a06668dd6e31b8ce973f3b4f353d40ca35b47605dc41ff3ab003f375aee5ed1a14456e2b783d1f98543cc111822ea63d26d1427ea61
SHA有5種演算法,SHA-0 ~ SHA-5
目前 SHA-0 及 SHA-1 也都被破了
SHA-2 以上還沒出現有效的攻擊,SHA256 及 SHA512 即為 SHA-2
過去上密碼學時,都沒注意到原來SHA是Secure Hash Algorithm 縮寫
都說是Secure了,還在用MD5玩~ (羞)
難怪之前用 facebook 金流時,人家也用sha256
References
1 則留言:
這篇寫得好有幫助!太棒了
張貼留言