Hash so với mã hóa? Giá trị băm là gì, mã hóa băm là gì, giải mã băm là gì

Hash và mã hóa

Có một quan niệm sai lầm phổ biến rằng hashing và mã hóa là cùng một điều. Họ không phải. Hash là không thể đảo ngược. Lấy ví dụ sau đây làm ví dụ:

$ echo-n Password123 | md5sum
42f749ade7f9e195bf475f37a44cafcb-

Chúng tôi chuyển chuỗi "Password123" cho thuật toán MD5 (algo), nó thực hiện các thao tác toán học và trả về băm mã hóa lục phân được tạo ra. Cách duy nhất để có được cùng một giá trị đầu ra băm là nhập algo thô. Có mâu thuẫn, nhưng chúng ta có thể thảo luận về nó sau.

Đầu ra của hầu hết các thuật toán băm là một chuỗi nhị phân có độ dài cố định được mã hóa lục phân. Những người khác, chẳng hạn như ví dụ này, sử dụng chuỗi được mã hóa base64 làm đầu ra. Lưu ý rằng chiều dài luôn giống nhau:

{SHA} uNF8eZRJ8jmr8WTjyocRJPVpe7w =
{SHA} lqdu/Zr6o2dgIER8Up1/7lcUtgw =
{SHA} qYUOwLMlDEuukA5HCT4LR1kQzco =
{SHA} MXZBCpyWJ7TTs1w2kgGJslwNwTg =
{SHA} 2sAPLaUh9Mz0bI + XxKEg7qyABe8=

TL; Tiến sĩ

Mã hóa có thể đảo ngược, băm không phải


Tôi không muốn nói quá nhiều về mã hóa (vì những thứ đó dành cho sách), nhưng điều quan trọng là có thể phân biệt các chuỗi băm và các chuỗi được mã hóa. Mã hóa thường điền chuỗi để đáp ứng một độ dài cụ thể trước khi mã hóa xảy ra. Nó cũng cần một khóa (hoặc mật khẩu) để giải mã. Nếu bạn đang sử dụng mật khẩu được mã hóa, chuỗi sẽ thay đổi tùy thuộc vào độ dài đầu vào. Nếu bạn thấy một loạt mật khẩu văn bản mật mã có độ dài khác nhau, bạn có thể đang làm việc với mã hóa thay vì băm. AES-256-CBC Ví dụ mã hóa chuỗi và văn bản đơn liên quan (khóa là "ASDF"):

 foobar                           |   U2FsdGVkX19G + KtytNHdj6yH2AVvX26pEmtunS/PRnU = 
foobarfoobar               |   U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog = 
foobarfoobarfoobar   |   U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX ldatuqv2xexeaeoww0xg/EXJUe9aSUz 

$   cat   mật mạnh_được mã hóa 
U2FsdGVkX19G KtytNHdj6yH2AVvX26pEmtunS/PRnU = 
U2FsdGVkX18sPpIvN6nVh68lOUCcb3gR2fKbCCnBxog = 
U2FsdGVkX1/EOnUt57TCW4Rh0EdNnWX lDatuQv2xEXXeAeowW0XG/EXJUe9aSUz 

$   cho   i   trong   `cat   encrypted_passwords`;   do   echo   $i   |   openssl   enc   -base64   -d   -aes-256-cbc   -pass   pass:asdf;   tiếng vang; Đã xong 
foobar 
foobarfoobar 
foobarfoobarfoobar 

Bây giờ bạn có thể nghĩ: Có thể bạn đã đúng. Tuy nhiên, việc tài liệu quan trọng phải có sẵn cho hệ thống có nghĩa là về cơ bản là một mật khẩu chính văn bản đơn giản nằm ở đâu đó-cho dù đó là dưới dạng khóa RSA hoặc mật khẩu hoặc mật khẩu trong tệp, được nhúng trong cơ sở dữ liệu, được mã hóa cứng trong ứng dụng hoặc mật khẩu ở đâu đó trong bộ nhớ. pfft, không ai ' sẽ sử dụng asdf làm chìa khóa để mã hóa mật khẩu của người dùng '

Sử dụng cùng một chuỗi của MD5:

 foobar                           |   3858f62230ac3c915f300c664312c63f 
foobarfoobar               |   59faa421729e846dd800dce59943bfc0 
foobarfoobarfoobar   |   1352aadab322d1a033c27964be0965db 

Mật khẩu băm không hoàn hảo, trên thực tế nó hơi tệ, nhưng nó tệ hơn mã hóa vì những gì nó đang cố gắng đạt được. Người dùng chọn yêu cầu tối thiểu tuyệt đối thường xuyên hơn not và có thể sử dụng nó trên nhiều trang web. Nhiều "hack" thực sự không gì khác hơn là các cuộc tấn công tái sử dụng thông tin xác thực. Nếu sự thỏa hiệp ban đầu là sử dụng mã hóa, thì nỗ lực duy nhất mà kẻ tấn công phải thực hiện là tìm khóa để giải mã tất cả các mật khẩu. Đối với hash, ít nhất họ cần phải nỗ lực để bẻ khóa chúng. Khi được sử dụng với các thuật toán hiện đại như sha512crypt, bcrypt, scrypt hoặc argon2, các giá trị băm có thể đòi hỏi rất nhiều nỗ lực để bẻ khóa.



Muối

Thêm muối là thêm một chuỗi vào mật khẩu trước khi băm. Muối của mỗi băm phải là duy nhất và thường được chọn ngẫu nhiên, vì trọng tâm là làm cho cùng một băm "mật khẩu" văn bản rõ ràng có giá trị khác nhau mỗi lần. Điều này khiến cuộc sống của những kẻ bẻ khóa mật khẩu trở nên khó khăn, bởi để kiểm tra từ "mật khẩu" của mỗi người dùng trong 1.000 người dùng, mỗi người dùng có một SALT duy nhất, họ phải làm việc này 1.000 lần-mỗi người dùng/SALT một lần. Điều này cũng có nghĩa là họ không thể sử dụng từ điển hoặc bảng cầu vồng được biên dịch sẵn một cách hiệu quả (thường là...) vì họ yêu cầu mỗi muối tùy chỉnh.

Các trang web đôi khi làm hỏng điều này và sử dụng muối phổ quát cho tất cả người dùng; Điều này đi ngược lại mục đích.

Sau đây là băm SHA1 với muối:


 b353977827f67a4ae0318f3a9447fae1c13d9d90:b8d18ca 
|___________________________________________| 
                                    băm                                     |     muối 
                                        | 
                                                                        separator 

Văn bản rõ ràng của hash này là "mật khẩu". Giá trị muối của nó là "b8d18ca" và sử dụng SHA1 ($salt.$pass) trong API. Điều này có nghĩa là thuật toán lấy văn bản rõ ràng của mật khẩu, tạo ra muối và thêm nó vào trước văn bản rõ ràng. Khi một trang web hoặc ứng dụng cố gắng xác minh mật khẩu của bạn trong tương lai, nó sẽ lấy mật khẩu văn bản rõ ràng của bạn làm đầu vào, đọc giá trị muối trong băm được lưu trữ, thêm nó vào trước mật khẩu bạn đã chọn và so sánh giá trị băm được tạo ra với giá trị băm được lưu trữ. Nếu bạn không biết rằng một phần của nó là muối, băm sẽ tạo ra văn bản đơn giản sau:

b8d18capassword

Vì thuật toán thực hiện đầu vào văn bản đơn giản, muối và các giá trị băm được tạo có thể được giữ minh bạch cho người dùng. Khi crack, nếu thuật toán là muối, chúng ta cần biết muối để chúng ta có thể cung cấp nó khi tạo plaintext ứng cử viên.

Nếu được thực hiện đúng cách, muối có thể làm cho việc nứt nẻ mất nhiều thời gian hơn. Với muối ngẫu nhiên, bạn buộc Cracker phải lãng phí thời gian khi cố gắng bẻ khóa các giá trị băm mà muối không khớp. Điều này gần như hoàn thành nỗ lực cần thiết cho device_speed/number_of_salts, vì chúng ta cần tạo một ứng cử viên cho mỗi loại muối. Nếu muối là tĩnh thì toán học là giống nhau... speed_of_device/1. Một cách khác để xem điều này:

 của chúng tôi   GTX   980   cracks   SHA1 ($salt.$pass)   tại   3576,8   MH/s   hoặc   3,5   tỷ   ứng viên   mỗi   giây 
  hashlist   của chúng tôi chứa   1000     muối độc đáo 

3.500.000.000   /   1000   =   3.500.000   ứng viên   mỗi   giây 

Điều này chậm hơn ba bậc độ lớn, mất 99,9%. Khi sử dụng muối tĩnh, nó trông như sau:

 của chúng tôi   GTX   980   cracks   SHA1 ($salt.$pass)   tại   3576,8   MH/s   hoặc   3,5   tỷ   ứng viên   mỗi   giây 
Danh sách băm   của chúng tôi   chứa   1   muối   duy nhất 
               
3.500.000.000   /   1   =   3.500.000.000   ứng viên   mỗi   giây 

Nếu điều này không có ý nghĩa, hãy đọc tiếp, chúng ta sẽ có biểu đồ đẹp sau...


lặp lại

Một cải tiến phổ biến khác so với việc đơn giản "băm văn bản đơn giản này" là, "băm văn bản đơn giản này, sau đó băm kết quả đó, sau đó băm kết quả đó" được lặp lại hàng nghìn lần. Điều này cho phép thử một mật khẩu ứng viên duy nhất khi chương trình bẻ khóa mật khẩu phải thực hiện hàng nghìn lần. Điều này được gọi là lặp, vòng lặp hoặc chi phí thay đổi. Một số thuật toán băm mật khẩu sử dụng các vòng lặp được mã hóa cứng; Git khác. Sau đó làm cho nó có thể định cấu hình trong một phần của bản thân Hash. Ví dụ, md5crypt () sử dụng MD5, bao gồm cả muối, và lặp lại chính xác 1000 lần. sha512crypt () sử dụng sha512, bao gồm một muối và vòng lặp có thể định cấu hình được (mặc định là 5.000).

Lặp lại chủ yếu ảnh hưởng đến chi phí chu kỳ tính toán của thuật toán băm chứ không phải sử dụng bộ nhớ của nó hoặc các yếu tố khác. Đây cũng là những cuộc tấn công quan trọng khi thiết kế được tối ưu hóa để chống lại một số loại băm nhất định, nhưng điều này quá cỏ dại để thảo luận ở đây.


Ảnh hưởng của loại băm đến tốc độ bẻ khóa

Chúng ta hãy xem xét một số ví dụ để chứng minh tác động của việc lựa chọn thuật toán băm, cho dù đó là muối, sử dụng nhiều lần lặp, v.v. Giả sử kẻ tấn công thu thập 1.000 hash của người dùng từ một trang web bị nhiễm bệnh nào đó và họ chỉ muốn thực hiện một cuộc tấn công đơn giản, kiểm tra mỗi hash mật khẩu-143 triệu mật khẩu ứng cử viên.

Loại băm được sử dụng bởi các trang web bị nhiễm sẽ có tác động rất lớn đến thời gian mà kẻ tấn công cần thông qua cuộc tấn công này. Đây là biểu đồ (tương đối, đại khái) bao nhiêu giây để hoàn thành cuộc tấn công này, tùy thuộc vào loại băm được sử dụng, trong đó card đồ họa tiêu chuẩn:

Vâng, điều đó vô ích! Các loại băm mạnh nhất chậm hơn nhiều, nhưng các loại nhanh hơn chỉ bị đè bẹp đến mức không có gì. Chúng ta hãy thử lại với cùng một kích thước dữ liệu bằng cách sử dụng thời gian trục X logarit. Khi các thanh di chuyển từ trái sang phải, chúng sẽ tăng lũy thừa 10:

Vì vậy, một số điểm chính là: Khi bạn muốn bẻ khóa một số hash mật khẩu, một vòng sẽ dễ dàng hơn nhiều vòng và không có muối hơn là thêm muối. Ngược lại, khi một số công ty hoặc trang web thông báo vi phạm dữ liệu chứa dữ liệu người dùng, a) tốt nhất là mật khẩu đã được băm, không chỉ là văn bản đơn giản; b) Chúng tốt nhất là được muối chứ không chỉ băm; c) Tốt hơn là họ phải luôn sử dụng nhiều vòng muối băm mạnh mẽ hơn là chỉ một vòng.



Xác định loại băm

Trước khi cố gắng bẻ khóa một băm mật khẩu nhất định, người bẻ khóa sẽ tìm ra thuật toán băm nào được sử dụng để thực hiện nó. Xác định kiểu băm thường rất đơn giản, nhưng không phải lúc nào cũng vậy. Crackers thường đưa ra những phỏng đoán có cơ sở dựa trên các manh mối như độ dài băm và định dạng. Cuối cùng, cách duy nhất để chắc chắn rằng dự đoán kiểu băm là chính xác là liệu băm có bị bẻ khóa hay không.

Một số tài nguyên tuyệt vời cho nhiệm vụ này được cung cấp ở đây và ở đây, tất cả đều cho thấy các giá trị băm phổ biến trông như thế nào.

Gói phần mềm "hash-identifier" (có sẵn tại đây) có sẵn trong Kali Linux, giúp xác định các loại hash chưa biết.



Va chạm

Xung đột xảy ra khi hai đầu vào khác nhau dẫn đến cùng một đầu ra băm. Điều này rất tệ (rõ ràng). Đối với mật khẩu, điều này có thể có nghĩa là tôi có thể không bẻ khóa mật khẩu thực tế của bạn, nhưng vì tôi đã tìm thấy một đầu vào tạo ra cùng một giá trị băm, tôi có thể sử dụng giá trị văn bản đơn giản để lừa dối hệ thống cho rằng mật khẩu là hợp pháp.

Microsoft Office đã sử dụng một thuật toán dễ xung đột trong nhiều năm trong bảo vệ tài liệu. Không phải là hiếm khi tìm thấy nhiều xung đột cho một hash duy nhất, tất cả đều mở khóa tài liệu.

Một khi xung đột được tìm thấy, thuật toán thực sự bị phá hủy. Nếu nó xảy ra một lần, về mặt thống kê, rất có thể nó sẽ xảy ra một lần nữa. Điều duy nhất cản trở chúng ta là thời gian và khả năng xử lý. Khi các thuật toán trở nên mạnh mẽ hơn, việc tạo các thuật toán ứng cử viên và so sánh các đầu ra băm để tìm kiếm chúng sẽ mất nhiều khả năng và thời gian hơn. Do đó, các nhà thiết kế ngày càng trở nên giỏi hơn trong việc tạo ra các thuật toán ít xung đột hơn.


Trước:Phần cứng bẻ khóa mật khẩu Hashcat
Tiếp theo:Hashcat là gì? Bước đầu tiên của việc bẻ khóa mật khẩu [Giới thiệu cơ bản]
  • Word/Excel/Pdf/PPT/RAR/zip/7z在线密码破解
  • offfice、PDF、压缩文件、WPS、在线密码恢复
  • hashcatonline.com在线密码破解版权所有2010-2025