[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
19/03/2013 07:14:47 (+0700) | #1 | 274184 |
Tôi định dùng hash MD5 để kiểm tra sự giống nhau và khác nhau của các string. Nếu MD5(str) khác nhau và len(str) khác nhau thì string khác nhau. Về lý thuyết khi số lượng string rất lớn thì vẫn có thể xảy ra collision.
Không biết người ta đã chứng minh được là trong tất cả những chuỗi có cùng độ dài thì không bao giờ xảy ra MD5 collision ?
Ngoài ra tôi còn thấy người ta dùng kết hợp kiểm tra MD5 lẫn SHA1. Như vậy người ta đã chứng minh được khi xảy ra MD5 collision thì không thể xảy ra SHA1 collision ?
Ngoài ra xin hỏi có những phương pháp đảm bảo nào khác để tránh collision trong bài toán này ? |
|
Spam thêm một bài là góp một viên gạch xây diễn đàn lớn mạnh |
|
|
|
[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
20/03/2013 13:58:00 (+0700) | #2 | 274229 |
breakoflove
Member
|
0 |
|
|
Joined: 07/03/2012 18:55:52
Messages: 24
Offline
|
|
Bắt cái vô hạn nằm trong cái hữu hạn thì làm sao được . |
|
|
|
|
[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
21/03/2013 07:30:05 (+0700) | #3 | 274257 |
breakoflove wrote:
Bắt cái vô hạn nằm trong cái hữu hạn thì làm sao được .
Không hiểu lắm ? |
|
Spam thêm một bài là góp một viên gạch xây diễn đàn lớn mạnh |
|
|
|
[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
21/03/2013 09:34:27 (+0700) | #4 | 274263 |
n2tforever
Member
|
0 |
|
|
Joined: 01/07/2011 15:39:51
Messages: 92
Offline
|
|
invalid-password wrote:
breakoflove wrote:
Bắt cái vô hạn nằm trong cái hữu hạn thì làm sao được .
Không hiểu lắm ?
số lượng các string là vô hạn, số lượng các giá trị hash là có hạn nên tất yếu có hai string cùng hash |
|
|
|
|
[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
21/03/2013 09:49:30 (+0700) | #5 | 274264 |
n2tforever wrote:
số lượng các string là vô hạn, số lượng các giá trị hash là có hạn nên tất yếu có hai string cùng hash
Các bác chẳng hiểu em hỏi gì cả !
Em xin nói lại cho rõ hơn:
Câu 1: Có tồn tại 2 chuỗi s1 và s2 nào có chiều dài bằng nhau và hash MD5 giống nhau ? (MD5 giống nhau nhưng chiều dài khác nhau thì em biết là có rồi). Nếu điều này không tồn tại thì em chỉ cần kiểm tra vừa hash vừa chiều dài thì đảm bảo tránh được collision, nếu điều này tồn tại thì không thể dùng cách này.
Câu 2: (Giả sử không thể thực hiện theo câu 1) Có tồn tại 2 chuỗi s1 và s2 nào mà MD5 giống nhau và SHA1 cũng giống nhau nốt ? Nếu không tồn tại thì em chỉ cần dùng đồng thời MD5 và SHA1 là đảm bảo tránh được collision, còn không thì không thể dùng cách này.
Câu 3: (Giả sử không thể thực hiện theo câu 2) Có 2 phương pháp hash nào có thể sử dụng đồng thời để hoàn toàn tránh được collision ?
|
|
Spam thêm một bài là góp một viên gạch xây diễn đàn lớn mạnh |
|
|
|
[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
21/03/2013 11:34:27 (+0700) | #6 | 274269 |
n2tforever
Member
|
0 |
|
|
Joined: 01/07/2011 15:39:51
Messages: 92
Offline
|
|
vẫn quy về vô hạn và hữu hạn thôi bác. nếu bác để ý thì số lượng hash md5 tối đa bằng 2^128 và số các string có thể có phụ thuộc vào chiều dài xâu, khi chiều dài xâu tăng lên thì số lượng các xâu có thể có cũng tăng lên theo, đến một độ dài nào đó ví dụ n chẳng hạn thì số lượng các xâu có chiều dài n sẽ vượt quá 2^128 và tất nhiên khi đó sẽ có 2 xâu chiều dài n có cùng hash.
=> câu trả lời cho câu 1 là có thể.
tương tự cho câu 2, nếu bác dùng kêt hợp md5 và sha thì do md5 và sha đều có chiều dài cố định nên chắc chắn số lượng các giá trị hash kết hợp sẽ bị giới hạn còn số lượng string sẽ là vô hạn => chắc chắn cũng có đụng độ.
câu 3 : để hoàn toàn tránh được collision theo em thì số lượng hash có thể phải là vô hạn => chiều dài xâu hash phải là vô hạn => bất khả thi.
|
|
|
|
|
[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
21/03/2013 12:12:55 (+0700) | #7 | 274272 |
n2tforever wrote:
vẫn quy về vô hạn và hữu hạn thôi bác. nếu bác để ý thì số lượng hash md5 tối đa bằng 2^128 và số các string có thể có phụ thuộc vào chiều dài xâu, khi chiều dài xâu tăng lên thì số lượng các xâu có thể có cũng tăng lên theo, đến một độ dài nào đó ví dụ n chẳng hạn thì số lượng các xâu có chiều dài n sẽ vượt quá 2^128 và tất nhiên khi đó sẽ có 2 xâu chiều dài n có cùng hash.
=> câu trả lời cho câu 1 là có thể.
Hiểu rồi. Nguyên lý lồng chim
n2tforever wrote:
tương tự cho câu 2, nếu bác dùng kêt hợp md5 và sha thì do md5 và sha đều có chiều dài cố định nên chắc chắn số lượng các giá trị hash kết hợp sẽ bị giới hạn còn số lượng string sẽ là vô hạn => chắc chắn cũng có đụng độ.
Hiểu luôn. Nếu chuỗi đạt đến độ dài n, ta lấy ra 2^128+1 chuỗi thì sẽ có ít nhất 1 cặp bị collision MD5. Sau khi trừ cặp đó ra và thêm 2 chuỗi nữa thì lại bị collision tiếp. Nếu lấy ra 2^128+1+2k chuỗi thì sẽ có k+1 lần bị collision. Và nếu k+1 mà lớn hơn 2^160 nữa thì trong số các MD5 collision sẽ có 1 cặp bị SHA collision.
Tuy nhiên cách dùng MD5 và SHA1 sẽ giảm khả năng collision rất nhiều.
Trên bài toán thực tế chắc không có bài toán mà số chuỗi lại dài vô hạn, mình phải dựa vào số lượng các chuỗi có thể có và tính được xác suất collision, từ đó quyết định nên dùng hash nào và mấy hash kết hợp. |
|
Spam thêm một bài là góp một viên gạch xây diễn đàn lớn mạnh |
|
|
|
[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
26/03/2013 08:04:41 (+0700) | #8 | 274396 |
vutrongtandng
Member
|
0 |
|
|
Joined: 21/03/2013 02:07:34
Messages: 1
Offline
|
|
Bài toán này la quy từ dãy vô hạn các string về tập hữu hạn hash, cho nên chắc chắn sẽ xảy ra collition, tuy nhiên xác xuất không cao, bạn yên tâm sử dụng md5 nhé
|
|
|
[Question] Khi xảy ra MD5 collision thì mã hash nào khác không bị collision ? |
26/03/2013 21:57:08 (+0700) | #9 | 274421 |
Mr.Khoai
Moderator
|
Joined: 27/06/2006 01:55:07
Messages: 954
Offline
|
|
vutrongtandng wrote:
Bài toán này la quy từ dãy vô hạn các string về tập hữu hạn hash, cho nên chắc chắn sẽ xảy ra collition, tuy nhiên xác xuất không cao, bạn yên tâm sử dụng md5 nhé
'
Trúng, sát xuất không cao thì không nên lo. Hàm băm nào cũng có collision. Tuy nhiên, cụ thể cho MD5 thì đã có nhiều paper hướng dẫn cách tính collision. Từ string s1 có thể tính ra string s2 khác mà có cùng md5 hash. Vậy thì việc bị collision không còn là ngẫu nhiên nữa. Khoai thấy bạn nên sử dụng một hàm hash khác (SHA-1 chẳng hạn).
khoai |
|
|
|