Tại sao các giá trị băm MD5 không thể đảo ngược?


91

Một khái niệm mà tôi luôn thắc mắc là việc sử dụng các hàm và giá trị băm mật mã. Tôi hiểu rằng các hàm này có thể tạo ra một giá trị băm duy nhất và hầu như không thể đảo ngược, nhưng đây là điều tôi luôn tự hỏi:

Nếu trên máy chủ của tôi, bằng PHP, tôi tạo:

md5("stackoverflow.com") = "d0cc85b26f2ceb8714b978e07def4f6e"

Khi bạn chạy cùng một chuỗi đó thông qua một hàm MD5, bạn sẽ nhận được kết quả tương tự khi cài đặt PHP của mình. Một quy trình đang được sử dụng để tạo ra một số giá trị, từ một số giá trị ban đầu.

Điều này không có nghĩa là có một số cách để giải cấu trúc những gì đang xảy ra và đảo ngược giá trị băm?

Điều gì về các hàm này khiến các chuỗi kết quả không thể truy xuất lại?


54
Một ví dụ đơn giản về giá trị không thể đảo ngược là modulo. Ví dụ 10% 3 = 1, nhưng bạn không thể đảo ngược 1-10 vì nó cũng có thể là 4
Gab Royer

57
Nếu bạn có thể tái tạo lại dữ liệu bạn muốn có các thuật toán nhất lossless hiệu quả nén bao giờ :)
Dan Diplo

Câu trả lời:


204

Vật liệu đầu vào có thể có độ dài vô hạn, trong đó đầu ra luôn có độ dài 128 bit. Điều này có nghĩa là vô số chuỗi đầu vào sẽ tạo ra cùng một đầu ra.

Nếu bạn chọn một số ngẫu nhiên và chia nó cho 2 nhưng chỉ viết ra phần còn lại, bạn sẽ nhận được 0 hoặc 1 - chẵn hoặc lẻ, tương ứng. Có thể lấy 0 hoặc 1 đó và lấy số ban đầu được không?


4
Có nghĩa là, cả số -> phần dư cũng như chuỗi -> md5 đều không phải là "hàm sai".
Federico A. Ramponi

Federico, chắc chắn bạn muốn nói rằng cả hai đều không phải là các hàm lưỡng tính? Cả hai đều bị thương.
Mihai Limbășan

10
moocha: Injective có nghĩa là 1 đến 1. MD5 chắc chắn không phải là 1 đến 1, vì miền lớn hơn phạm vi. Một điểm đáng chú ý khác là với tổng kiểm tra MD5, rất khó để tìm thấy ngay cả một chuỗi băm cho nó. Có thể có giá trị thêm vào câu trả lời để làm rõ.
biozinc

4
Không thể có một hàm băm tạo ra các giá trị duy nhất. Bạn đang ánh xạ một số lượng giá trị vô hạn thành một số lượng giá trị hữu hạn, điều này đảm bảo sự va chạm.
Cody Brocious

4
Tôi đề nghị rằng câu trả lời của bạn không đề cập đến điểm mấu chốt. Như biozinc đã đề cập, điều quan trọng đối với băm mật khẩu an toàn là bạn không thể tìm thấy bất kỳ đầu vào nào tạo ra đầu ra, không phải là bạn không thể tìm thấy đầu vào ban đầu. Lưu ý rằng, MD5 không nhất thiết phải an toàn như nó có thể được ( en.wikipedia.org/wiki/MD5#Collision_vulnerabilities ).
Mike Pelley

53

Nếu các hàm băm như MD5 có thể đảo ngược thì đó sẽ là một sự kiện đầu nguồn trong lịch sử của các thuật toán nén dữ liệu! Dễ dàng nhận thấy rằng nếu MD5 có thể đảo ngược thì các phần dữ liệu tùy ý có kích thước tùy ý có thể được biểu diễn bằng 128 bit mà không bị mất thông tin. Vì vậy, bạn sẽ có thể tạo lại thông điệp ban đầu từ một số 128 bit bất kể kích thước của thông báo gốc.


9
Hãy nghĩ xem sẽ nhanh như thế nào để tải xuống các bản phân phối linux nếu bạn chỉ có thể lấy md5 để thay thế :)
Colin Pickard

15
@Colin Pickard: chúng tôi sẽ không tải xuống các bản phân phối linux nữa, chúng tôi sẽ viết chúng ra . :)
tzot

29

Trái ngược với những gì mà các câu trả lời được ủng hộ nhiều nhất ở đây nhấn mạnh, tính không sai lệch (nghĩa là có một số chuỗi băm thành cùng một giá trị) của một hàm băm mật mã gây ra bởi sự khác biệt giữa kích thước đầu vào lớn (có thể là vô hạn) và kích thước đầu ra cố định không điểm quan trọng - thực ra, chúng tôi thích các hàm băm mà ở đó những va chạm đó hiếm khi xảy ra nhất có thể.

Hãy xem xét hàm này (trong ký hiệu PHP, như câu hỏi):

function simple_hash($input) {
     return bin2hex(substr(str_pad($input, 16), 0, 16));
}

Điều này thêm vào một số khoảng trắng, nếu chuỗi quá ngắn và sau đó lấy 16 byte đầu tiên của chuỗi, sau đó mã hóa nó dưới dạng thập lục phân. Nó có cùng kích thước đầu ra như một băm MD5 (32 ký tự thập lục phân hoặc 16 byte nếu chúng ta bỏ qua phần bin2hex).

print simple_hash("stackoverflow.com");

Điều này sẽ xuất ra:

737461636b6f766572666c6f772e636f6d

Hàm này cũng có cùng thuộc tính không gây ô nhiễm như được đánh dấu bởi câu trả lời của Cody cho MD5: Chúng ta có thể chuyển các chuỗi có kích thước bất kỳ (miễn là chúng vừa với máy tính của chúng ta) và nó sẽ chỉ xuất ra 32 chữ số hex. Tất nhiên nó không thể bị thương.

Nhưng trong trường hợp này, việc tìm một chuỗi ánh xạ tới cùng một hàm băm là rất nhỏ (chỉ cần áp dụng hex2bincho hàm băm của bạn và bạn có nó). Nếu chuỗi ban đầu của bạn có độ dài 16 (như ví dụ của chúng tôi), bạn thậm chí sẽ nhận được chuỗi gốc này. Không điều gì thuộc loại này có thể xảy ra đối với MD5, ngay cả khi bạn biết độ dài của đầu vào là khá ngắn (ngoại trừ việc thử tất cả các đầu vào có thể cho đến khi chúng tôi tìm thấy một đầu vào phù hợp, ví dụ như một cuộc tấn công bạo lực).

Các giả định quan trọng cho một hàm băm mật mã là:

  • thật khó để tìm thấy bất kỳ chuỗi nào tạo ra một hàm băm nhất định (kháng trước hình ảnh)
  • khó có thể tìm thấy bất kỳ chuỗi nào khác tạo ra cùng một hàm băm như một chuỗi đã cho (khả năng kháng preimage thứ hai)
  • khó có thể tìm thấy bất kỳ cặp chuỗi nào có cùng hàm băm (khả năng chống va chạm)

Rõ ràng là simple_hashhàm của tôi không đáp ứng các điều kiện này. (Trên thực tế, nếu chúng ta hạn chế không gian đầu vào thành "chuỗi 16 byte", thì hàm của tôi sẽ bị ảnh hưởng và do đó, thậm chí có thể cung cấp khả năng chống va chạm và kháng tiền hình ảnh thứ hai.)

Hiện đã tồn tại các cuộc tấn công xung đột chống lại MD5 (ví dụ: có thể tạo ra một cặp chuỗi, ngay cả với cùng một tiền tố đã cho, có cùng một hàm băm, với khá nhiều công việc, nhưng không phải là không thể thực hiện được), vì vậy bạn không nên sử dụng MD5 cho bất kỳ điều gì quan trọng. Vẫn chưa có một cuộc tấn công preimage, nhưng các cuộc tấn công sẽ tốt hơn.

Để trả lời câu hỏi thực tế:

Điều gì về các hàm này khiến các chuỗi kết quả không thể truy xuất lại?

Điều mà MD5 (và các hàm băm khác được xây dựng dựa trên cấu trúc Merkle-Damgard) thực hiện một cách hiệu quả là áp dụng một thuật toán mã hóa với thông báo là khóa và một số giá trị cố định là "văn bản thuần túy", sử dụng bản mã kết quả làm mã băm. (Trước đó, đầu vào được đệm và chia thành các khối, mỗi khối này được sử dụng để mã hóa đầu ra của khối trước đó, XORed với đầu vào của nó để ngăn các tính toán ngược lại.)

Các thuật toán mã hóa hiện đại (bao gồm cả các thuật toán được sử dụng trong các hàm băm) được thực hiện theo cách khó khôi phục khóa, ngay cả khi cung cấp cả bản rõ và bản mã (hoặc ngay cả khi đối thủ chọn một trong số chúng). Họ thực hiện điều này nói chung bằng cách thực hiện nhiều thao tác xáo trộn bit theo cách mà mỗi bit đầu ra được xác định bởi từng bit khóa (nhiều lần) và cả từng bit đầu vào. Bằng cách đó, bạn chỉ có thể dễ dàng truy xuất lại những gì xảy ra bên trong nếu bạn biết khóa đầy đủ và cả đầu vào hoặc đầu ra.

Đối với các hàm băm giống như MD5 và một cuộc tấn công preimage (với một chuỗi băm đơn khối, để làm cho mọi thứ dễ dàng hơn), bạn chỉ có đầu vào và đầu ra của hàm mã hóa chứ không có khóa (đây là những gì bạn đang tìm kiếm).


4
Vâng, tôi biết rằng đây là một câu trả lời khá muộn, nhưng không nên để câu trả lời được chấp nhận theo cách này.
Paŭlo Ebermann

Tôi nghĩ rằng những lời chỉ trích của bạn có phần xứng đáng nhưng bạn đã không trả lời được câu hỏi thực tế "Điều gì về các hàm này khiến các chuỗi kết quả không thể truy xuất lại?" Câu trả lời của bạn tập trung vào những phẩm chất mà một băm mật mã phải có nhưng không có lời giải thích nào về cách chúng được thực hiện bởi md5. Bạn có thể nêu thuật toán chính xác để tính tổng MD5 ở đây để chỉ ra cách nó không thể đảo ngược nhưng các câu trả lời khác cung cấp một lời giải thích đơn giản hơn mà không đi sâu vào vấn đề.
Autodidact

(tt ...) 2. Những giải thích này sử dụng "Toán học" để chỉ ra một vấn đề cơ bản do đó các phép toán đó làm mất thông tin và trở nên không thể thay đổi được.
Autodidact

1
@SandeepDatta Tôi đã thêm một số đoạn về điều này.
Paŭlo Ebermann

1
Trong khi câu trả lời khác trong chủ đề này đúng hơn về mặt kỹ thuật, câu trả lời này là hữu ích nhất. Hàm bất biến f (x) = 1 là không khả nghịch nhưng không thú vị. Tính hữu ích của băm nằm ở khả năng kháng trước khi rất khó tìm thấy bất kỳ đầu vào nào mang lại đầu ra cụ thể.
Justin J Stark

18

Câu trả lời của Cody Brocious là đúng. Nói một cách chính xác, bạn không thể "đảo ngược" một hàm băm vì nhiều chuỗi được ánh xạ tới cùng một hàm băm. Tuy nhiên, hãy lưu ý rằng việc tìm kiếm một chuỗi được ánh xạ tới một hàm băm nhất định hoặc tìm hai chuỗi được ánh xạ tới cùng một hàm băm (tức là xung đột ), sẽ là những bước đột phá lớn đối với một nhà phân tích mật mã. Khó khăn lớn của cả hai vấn đề này là lý do tại sao các hàm băm tốt lại hữu ích trong mật mã.


12

MD5 không tạo giá trị băm duy nhất; mục tiêu của MD5 là nhanh chóng tạo ra một giá trị thay đổi đáng kể dựa trên một thay đổi nhỏ đối với nguồn.

Ví dụ,

"hello" -> "1ab53"
"Hello" -> "993LB"
"ZR#!RELSIEKF" -> "1ab53"

(Rõ ràng đó không phải là mã hóa MD5 thực tế)

Hầu hết các hàm băm (nếu không phải tất cả) cũng không phải là duy nhất; đúng hơn, chúng đủ độc đáo , vì vậy một vụ va chạm là rất khó xảy ra, nhưng vẫn có thể xảy ra.


8

Một cách hay để nghĩ ra thuật toán băm là nghĩ đến việc thay đổi kích thước hình ảnh trong Photoshop ... giả sử bạn có một hình ảnh có kích thước 5000x5000 pixel và sau đó bạn thay đổi kích thước nó thành chỉ 32x32. Những gì bạn có vẫn là một hình đại diện của hình ảnh gốc nhưng nó nhỏ hơn nhiều và đã "loại bỏ" một cách hiệu quả một số phần dữ liệu hình ảnh để làm cho nó vừa với kích thước nhỏ hơn. Vì vậy, nếu bạn thay đổi kích thước hình ảnh 32x32 đó lên đến 5000x5000, tất cả những gì bạn nhận được chỉ là một mớ hỗn độn mờ. Tuy nhiên, vì hình ảnh 32x32 không lớn như vậy nên về mặt lý thuyết có thể hình dung rằng một hình ảnh khác có thể được giảm kích thước để tạo ra các pixel giống hệt nhau!

Đó chỉ là một phép loại suy nhưng nó giúp hiểu được hàm băm đang làm gì.


3
Mặc dù thay đổi kích thước hình ảnh là một quá trình mất mát, nhưng vẫn khá dễ dàng để tạo ra một hình ảnh ở kích thước 5000 × 5000 ban đầu sẽ (khi áp dụng lại chức năng thu nhỏ) sẽ giảm xuống cùng một hình ảnh 32 × 32. Việc tìm một preimage như vậy sẽ khó đối với một hàm băm tốt.
Paŭlo Ebermann

4

Có nhiều khả năng xảy ra va chạm băm hơn bạn nghĩ. Hãy xem nghịch lý ngày sinh để hiểu rõ hơn tại sao lại như vậy.


1
Có 365 giá trị sinh nhật có thể có, giá trị này nằm trong khoảng từ 2 ^ 8 đến 2 ^ 9. Một băm 128 bit có 2 ^ 128 giá trị có thể - gấp 2 ^ 120 lần. Đúng, các vụ va chạm có nhiều khả năng xảy ra hơn bạn có thể xảy ra, nhưng chúng vẫn khó xảy ra về mặt thiên văn học.
Tim Keating

Bạn sẽ cần khoảng 2 ^ 64 giá trị khác nhau để có cơ hội tốt trong một cuộc xung đột băm. Vẫn còn một số.
Paŭlo Ebermann

4

Vì số lượng tệp đầu vào có thể lớn hơn số lượng đầu ra 128 bit, nên không thể chỉ định duy nhất một băm MD5 cho mỗi tệp có thể.

Các hàm băm mật mã được sử dụng để kiểm tra tính toàn vẹn của dữ liệu hoặc chữ ký số (hàm băm được ký hiệu quả). Do đó, việc thay đổi tài liệu gốc có nghĩa là hàm băm ban đầu không khớp với tài liệu đã thay đổi.

Các tiêu chí này đôi khi được sử dụng:

  1. Kháng trước: đối với một hàm băm nhất định và hàm băm đã cho, sẽ rất khó để tìm đầu vào có hàm băm đã cho cho hàm đó.
  2. Kháng trước thứ hai: đối với một hàm băm và đầu vào nhất định, sẽ khó tìm thấy đầu vào thứ hai, khác, với cùng một hàm băm.
  3. Khả năng chống va chạm: đối với một hàm có sẵn, sẽ khó tìm thấy hai đầu vào khác nhau có cùng một hàm băm.

Các tiêu chí này được chọn để gây khó khăn cho việc tìm tài liệu khớp với một hàm băm nhất định, nếu không, có thể giả mạo tài liệu bằng cách thay thế tài liệu gốc bằng một tài liệu khớp với hàm băm. (Ngay cả khi bản thay thế là vô nghĩa, việc thay thế bản gốc chỉ có thể gây ra gián đoạn.)

Số 3 bao hàm số 2.

Riêng đối với MD5, nó đã được chỉ ra là thiếu sót: Làm thế nào để phá vỡ MD5 và các hàm băm khác .


2

Nhưng đây là lúc bàn cầu vồng phát huy tác dụng. Về cơ bản, nó chỉ là một lượng lớn giá trị được băm riêng biệt và sau đó kết quả được lưu vào đĩa. Sau đó, bit đảo ngược "chỉ" để thực hiện tra cứu trong một bảng rất lớn.

Rõ ràng là điều này chỉ khả thi đối với một tập hợp con của tất cả các giá trị đầu vào có thể có nhưng nếu bạn biết giới hạn của giá trị đầu vào thì có thể tính toán nó.


À vâng. Tôi rất thích đọc bài đăng của Jeff trên Hash Tables ( codinghorror.com/blog/archives/000949.html ) và chủ đề này đã giúp hiểu khái niệm này.
barfoon


1

Như hầu hết đã nói MD5 được thiết kế để các luồng dữ liệu có độ dài thay đổi được băm thành một đoạn dữ liệu có độ dài cố định, do đó, một hàm băm duy nhất được chia sẻ bởi nhiều luồng dữ liệu đầu vào.

Tuy nhiên, nếu bạn đã từng cần tìm ra dữ liệu gốc từ tổng kiểm tra, chẳng hạn như nếu bạn có mã băm của mật khẩu và cần tìm ra mật khẩu ban đầu, thì thường nhanh hơn chỉ cần google (hoặc bất kỳ người tìm kiếm nào bạn thích) băm. để có câu trả lời hơn là cưỡng bức nó. Tôi đã tìm ra thành công một vài mật khẩu bằng phương pháp này.


1

Cách tốt nhất để hiểu tất cả các câu trả lời được bình chọn nhiều nhất có nghĩa là gì là thực sự cố gắng hoàn nguyên thuật toán MD5. Tôi nhớ rằng tôi đã cố gắng hoàn nguyên thuật toán MD5crypt cách đây vài năm, không phải để khôi phục thông báo ban đầu vì rõ ràng là không thể, mà chỉ để tạo một thông báo sẽ tạo ra cùng một hàm băm như mã băm ban đầu. Điều này, ít nhất về mặt lý thuyết, sẽ cung cấp cho tôi cách đăng nhập vào thiết bị Linux đã lưu trữ user: password trong tệp / etc / passwd bằng cách sử dụng thông báo (mật khẩu) được tạo thay vì sử dụng mật khẩu ban đầu. Vì cả hai thông báo sẽ có cùng một hàm băm kết quả, hệ thống sẽ nhận dạng mật khẩu của tôi (được tạo từ hàm băm ban đầu) là hợp lệ. Điều đó đã không hoạt động ở tất cả. Sau vài tuần, nếu tôi nhớ không nhầm, việc sử dụng muốitrong tin nhắn ban đầu đã giết tôi. Tôi không chỉ phải tạo ra một tin nhắn ban đầu hợp lệ, mà còn một tin nhắn ban đầu hợp lệ có muối, điều mà tôi không bao giờ có thể làm được. Nhưng kiến ​​thức mà tôi có được từ thí nghiệm này thật tuyệt.


Nếu bạn có thể tạo đầu vào tạo ra giá trị băm MD5 đã cho theo bất kỳ cách nào hiệu quả hợp lý, thì đó sẽ là một vấn đề lớn đối với cộng đồng tiền điện tử và nên được xuất bản. Điều đó hoàn toàn độc lập với việc liệu một đầu vào cụ thể có bị ướp muối hay không.
Dave L.

0

theo định nghĩa Hàm băm (Hash mật mã): không thể đảo ngược; không nên có xung đột (ít nhất có thể).

regd câu hỏi của bạn: nó là một cách băm. đầu vào (bất kể độ dài) sẽ tạo ra đầu ra có kích thước cố định. (nó sẽ được đệm dựa trên thuật toán (ranh giới 512 bit cho MD5)). Thông tin được nén (bị mất) và thực tế không thể tạo ra từ các phép biến đổi ngược.

thông tin bổ sung về MD5: nó dễ bị va chạm. gần đây đã xem qua bài viết này, http://www.win.tue.nl/hashclash/Nostradamus/

mã nguồn mở cho các triển khai băm tiền điện tử (MD5 và SHA) có thể được tìm thấy tại mã Mozilla. (thư viện freebl).


0

Bây giờ một ngày các băm MD5 hoặc bất kỳ băm nào khác cho vấn đề đó được tính toán trước cho tất cả các chuỗi có thể có và được lưu trữ để dễ dàng truy cập. Mặc dù về lý thuyết MD5 không thể đảo ngược nhưng sử dụng cơ sở dữ liệu như vậy, bạn có thể tìm ra văn bản nào dẫn đến một giá trị băm cụ thể.

Ví dụ: hãy thử mã băm sau tại http://gdataonline.com/seekhash.php để tìm hiểu văn bản tôi đã sử dụng để tính toán băm

aea23489ce3aa9b6406ebb28e0cda430

À, vâng, băm của một từ gồm 7 chữ cái phổ biến. Bây giờ, hãy sử dụng nó để tìm ra lời bài hát 11 từ này với khoảng trắng và dấu câu: 9f2c08d4e6158bd4854b15be50c8daa8. Hẹn gặp lại trong vài thiên niên kỷ.
Tim Keating

6fba2bbab8a8366309bf67c7df12c622? Gợi ý: nó có thể là phiên bản OEM của một phiên bản cụ thể của Mac OS X!
scherand

@Tim Keating, @scherand: Chỉ chỉ ra điểm yếu của thuật toán băm, bởi vì hàm băm của một chuỗi luôn giống nhau nên chúng ta không nhất thiết phải bẻ khóa thuật toán để tìm ra chuỗi thực.
Babar

2
Nhưng đó không phải là những gì bạn nói. Bạn đã nói rằng hàm băm được "tính toán trước cho tất cả các chuỗi có thể có và được lưu trữ để dễ truy cập" là sai nghiêm trọng (tập hợp "tất cả các chuỗi có thể có" là vô hạn ... và thậm chí tập hợp "tất cả các chuỗi hợp lý" thực sự rất lớn ). IMHO điều này trình bày sai cách dễ dàng thực hiện một cuộc tấn công từ điển đối với một cụm mật khẩu hợp lý.
Tim Keating

0

f (x) = 1 là không khả nghịch. Hàm băm không thể thay đổi được.

Điều này thực sự được yêu cầu để họ thực hiện chức năng xác định xem ai đó có sở hữu bản sao dữ liệu băm không bị gián đoạn hay không. Điều này dẫn đến khả năng dễ bị tấn công bạo lực, những cuộc tấn công khá mạnh hiện nay, đặc biệt là chống lại MD5.

Cũng có sự nhầm lẫn ở đây và nơi khác giữa những người có kiến ​​thức toán học nhưng ít kiến ​​thức về mật mã. Một số mật mã chỉ cần XOR dữ liệu với dòng khóa, và vì vậy bạn có thể nói rằng một bản mã tương ứng với tất cả các bản rõ có độ dài đó vì bạn có thể đã sử dụng bất kỳ dòng khóa nào.

Tuy nhiên, điều này bỏ qua rằng một bản rõ hợp lý được tạo ra từ hạt giống passwordcó khả năng cao hơn nhiều so với một bản rõ khác được tạo ra bởi hạt giống Wsg5Nm^bkI4EgxUOhpAjTmTjO0F!VkWvysS6EEMsIJiTZcvsh@WI$IH$TYqiWvK!%&Ue&nk55ak%BX%9!NnG%32ftud%YkBO$U6ođến mức bất kỳ ai cho rằng bản thứ hai là một khả năng sẽ bị cười nhạo.

Theo cách tương tự, nếu bạn đang cố gắng quyết định giữa hai mật khẩu tiềm năng passwordWsg5Nm^bkI4EgxUO, điều đó không khó thực hiện như một số nhà toán học cho rằng bạn sẽ tin.


Bạn lấy Hầu hết các mật mã của mình ở đâu chỉ đơn giản là XOR dữ liệu với kiến thức dòng khóa? Điều này đúng với mật mã luồng, nhưng cũng có những mật mã khối và chúng không hoạt động theo cách này.
Paŭlo Ebermann

-5

Tôi thích tất cả các lập luận khác nhau. Rõ ràng giá trị thực của các giá trị được băm chỉ đơn giản là cung cấp các trình giữ chỗ mà con người không thể đọc được cho các chuỗi như mật khẩu. Nó không có lợi ích bảo mật nâng cao cụ thể. Giả sử kẻ tấn công có quyền truy cập vào bảng có mật khẩu được băm, anh ta / cô ta có thể:

  • Băm mật khẩu do chính anh ấy / cô ấy lựa chọn và đặt kết quả vào bên trong bảng mật khẩu nếu anh ấy / cô ấy có quyền ghi / chỉnh sửa bảng.
  • Tạo giá trị băm của mật khẩu phổ biến và kiểm tra sự tồn tại của các giá trị băm tương tự trong bảng mật khẩu.

Trong trường hợp này, mật khẩu yếu không thể được bảo vệ bởi thực tế là chúng đã được băm.


Giá trị thực của "giá trị băm" không phải để cung cấp các trình giữ chỗ mà con người không thể đọc được. Nếu 'password1' được băm thành 'newval', điều đó vẫn không ẩn giá trị theo cách tương tự, mặc dù hash có thể đọc được và có ý nghĩa? Hơn nữa, mật khẩu là một ví dụ XẤU, bởi vì chúng KHÔNG BAO GIỜ được băm. Giả sử kẻ tấn công có quyền ghi vào cơ sở dữ liệu nói trên, đó chắc chắn là một khả năng. Tuy nhiên, có vẻ như bạn chỉ đang loại bỏ cách sử dụng thích hợp cho các hàm băm như vậy, một ví dụ được nêu trong nhiều câu trả lời ở trên - tính toàn vẹn của thông báo. Đó thực sự là lý do tôi viết chủ đề này hôm nay.
Shane
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.