Thuật Toán HASH: Chúng Là Gì, Bảo Mật, Sử Dụng Và Vận Hành | ITIGIC

Hàm băm được sử dụng để làm gì?

Băm mật mã chủ yếu được sử dụng để bảo vệ mật khẩu và không lưu chúng dưới dạng văn bản rõ ràng trong cơ sở dữ liệu . Nếu bạn đã từng đọc bất cứ điều gì về các hàm băm, rất có thể đó là về công dụng chính của chúng, bảo vệ mật khẩu để tránh lưu chúng dưới dạng văn bản rõ ràng. Hãy tưởng tượng rằng tội phạm mạng có khả năng vi phạm một dịch vụ và đánh cắp cơ sở dữ liệu của nó, nếu mật khẩu không được băm, thông tin đăng nhập của chúng sẽ bị lộ ngay lập tức.

Thuật toán HASH

Để xác minh rằng chúng tôi đã nhập chính xác mật khẩu được lưu trữ trong cơ sở dữ liệu (hàm băm của khóa được lưu trữ), việc cần làm là áp dụng thuật toán băm cho mật khẩu đã nhập và so sánh nó với mật khẩu được lưu trữ, nếu đó là giống nhau, chìa khóa là đúng, nếu khác, chìa khóa là sai. Quy trình này được sử dụng trong tất cả các hệ điều hành, trang web có xác thực người dùng / mật khẩu, v.v.

Nếu bạn từng phải khôi phục hoặc lấy lại mật khẩu của mình từ một dịch vụ trực tuyến, bạn sẽ phải đặt lại mật khẩu đó, vì ngay cả bản thân dịch vụ đó cũng sẽ không thể cung cấp cho bạn mật khẩu dưới dạng văn bản rõ ràng, mà sẽ chỉ lưu trữ mật khẩu băm. . Nếu trong bất kỳ dịch vụ nào bạn đã yêu cầu khôi phục mật khẩu và họ cung cấp mật khẩu đó cho bạn dưới dạng văn bản thuần túy, điều đó có nghĩa là chúng được lưu trữ theo cách đó và sẽ không an toàn khi sử dụng dịch vụ đó. Mặc dù mật khẩu 123456 thông thường có các hàm băm nổi tiếng, nhưng ngay khi chúng tôi đặt một khóa mạnh mẽ, nó sẽ không có trong bất kỳ hệ thống băm trực tuyến nào và chúng tôi sẽ phải tự bẻ khóa nó bằng các công cụ như Hashcat và các công cụ khác.

Không phải tất cả việc sử dụng thuật toán băm đều dành cho mật khẩu, hàm băm mật mã cũng được sử dụng để phát hiện phần mềm độc hại, chúng có thể được sử dụng để phát hiện các bài hát hoặc phim khác nhau được bảo vệ bởi bản quyền và tạo danh sách đen. Cũng có danh sách phần mềm độc hại công khai , chúng được gọi là chữ ký phần mềm độc hại, chúng được tạo thành từ các giá trị băm của các phần hoàn chỉnh hoặc các phần nhỏ của phần mềm độc hại. Vì vậy, nếu một mặt, người dùng phát hiện một tệp đáng ngờ, anh ta có thể tham khảo các cơ sở dữ liệu băm công khai này và bằng cách này, biết được đó có phải là tệp độc hại hay không hoặc nếu nó không có bất kỳ nguy hiểm nào, bằng cách Bật mặt khác, chúng cũng phục vụ để chống vi-rút phát hiện và chặn phần mềm độc hại bằng cách so sánh các hàm băm của cơ sở dữ liệu riêng của chúng và cơ sở dữ liệu công khai mà chúng ta đang nói đến.

Một cách sử dụng quan trọng khác của các hàm băm mật mã là đảm bảo tính toàn vẹn của thông điệp . Cách sử dụng chúng cho mục đích này là kiểm tra các hàm băm được tạo trước và sau khi truyền dữ liệu , theo cách này, nếu các hàm băm hoàn toàn giống hệt nhau, điều đó có nghĩa là giao tiếp đã được bảo mật và dữ liệu không bị thay đổi, nếu không, đã xảy ra lỗi và dữ liệu thu được khi kết thúc giao tiếp không giống như những cái đã được phát hành lúc đầu.

Bây giờ chúng ta đã biết mọi thứ về các hàm băm, hãy xem những hàm nào được sử dụng nhiều nhất hiện nay.

SHA2

Ban đầu, thuật toán SHA (Thuật toán băm an toàn hoặc Thuật toán băm an toàn) được tạo ra bởi NSA và NIST với mục đích tạo ra các mã băm hoặc mã duy nhất dựa trên một tiêu chuẩn. Năm 1993 giao thức SHA đầu tiên ra đời, còn được gọi là SHA-0, tuy nhiên nó hầu như không được sử dụng và không có nhiều tác động. Vài năm sau, một biến thể cải tiến mạnh mẽ và an toàn hơn, SHA-1, đã được phát hành và đã được sử dụng trong nhiều năm để ký chứng chỉ số SSL / TLS cho hàng triệu trang web. Một vài năm sau SHA-2 được tạo ra, có bốn biến thể tùy thuộc vào số lượng bit đầu ra, chúng SHA2-224, SHA2-256, SHA2-384 và SHA2-512 . Hiện tại, vì lý do bảo mật, SHA1 không còn được sử dụng nữa, nhưng chúng tôi rất khuyến khích sử dụng SHA2 hoặc SHA3 (trong họ SHA).

Cách SHA2 hoạt động

Các thuật toán băm chỉ hoạt động theo một hướng, chúng ta có thể tạo hàm băm của bất kỳ nội dung nào, hoặc dấu vân tay, nhưng với hàm băm hoặc dấu vân tay thì không có cách nào để tạo nội dung ban đầu. Cách duy nhất để làm điều đó là sử dụng từ điển hoặc brute force, vì vậy chúng ta có thể mất hàng nghìn năm (hiện tại) để có được thông tin ban đầu.

Trong số rất nhiều cách khác nhau để tạo hàm băm, thuật toán SHA2-256 là một trong những cách được sử dụng nhiều nhất nhờ sự cân bằng giữa bảo mật và tốc độ, nó là một thuật toán rất hiệu quả và có khả năng chống va chạm cao, một điều rất quan trọng để duy trì bảo mật. . của thuật toán băm này. Để một thuật toán băm được an toàn, không có xung đột nào phải được biết đến. Ví dụ: phương pháp xác minh Bitcoin dựa trên SHA2-256.

Đặc điểm của các loại SHA2 khác nhau

  • Kích thước đầu ra : nó là kích thước của các ký tự sẽ tạo thành băm.
  • Kích thước trạng thái bên trong : nó là tổng băm bên trong, sau mỗi lần nén một khối dữ liệu.
  • Kích thước khối : là kích thước của khối được xử lý bởi thuật toán.
  • Tin nhắn tối đa kích thước: đó là kích thước tối đa của thông báo mà chúng tôi áp dụng thuật toán.
  • Từ length: là độ dài tính bằng bit của phép toán được áp dụng bởi thuật toán trong mỗi vòng.
  • Tương tác hoặc vòng : nó là số lượng các phép toán mà thuật toán thực hiện để có được hàm băm cuối cùng.
  • Các hoạt động được hỗ trợ : đây là các thao tác được thực hiện bởi thuật toán để thu được hàm băm cuối cùng.

SHA-256

Nó có kích thước đầu ra 256 bit, kích thước trạng thái bên trong 256 bit, kích thước khối 512 bit, kích thước thông báo tối đa mà nó có thể xử lý là 2 64 - 1, độ dài từ là 32 bit và số vòng được áp dụng là 64, cũng như các phép toán áp dụng cho băm là +, và, hoặc, xor, shr và rot. Độ dài của hàm băm luôn bằng nhau, bất kể nội dung bạn sử dụng để tạo hàm băm lớn đến mức nào: cho dù đó chỉ là một chữ cái hay ảnh ISO 4GB, kết quả sẽ luôn là một chuỗi gồm 40 chữ cái và số.

SHA2-384

Thuật toán này khác nhau về đặc điểm, nhưng hoạt động của nó thì giống nhau. Nó có kích thước đầu ra 384 bit, kích thước trạng thái bên trong 512 bit, kích thước khối 1024 bit, kích thước thông báo tối đa mà nó có thể xử lý là 2 128 - 1, độ dài từ là 64 bit và số vòng được áp dụng là 80, cũng như các phép toán áp dụng cho hàm băm là +, và, hoặc, xor, shr và rot. Thuật toán này là một phiên bản an toàn hơn SHA2-256, vì nhiều vòng hoạt động hơn được áp dụng và nó cũng có thể được áp dụng trên nhiều thông tin rộng rãi hơn. Thuật toán băm này thường được sử dụng để xác minh tính toàn vẹn và tính xác thực của thông điệp trong các mạng riêng ảo. Một khía cạnh tiêu cực là nó hơi chậm hơn SHA2-256, nhưng trong một số trường hợp nhất định, nó có thể là một lựa chọn rất tốt để sử dụng điều này.

SHA2-512

Như trong tất cả SHA2, hoạt động giống nhau, chúng chỉ thay đổi một đặc tính. Nó có kích thước đầu ra là 512 bit. Tất cả các tính năng khác giống như SHA2-384. 512 bit kích thước trạng thái bên trong, 1024 bit kích thước khối, 2 128 - 1 cho kích thước tối đa của tin nhắn, độ dài từ 64 bit và 80 là số vòng được áp dụng cho nó. Thuật toán này cũng áp dụng các phép toán tương tự trên mỗi vòng +, và hoặc, xor, shr và rot.

SHA2-224

Chúng tôi không nhận xét về thuật toán này là chính, bởi vì người anh em của nó (SHA2-256) được sử dụng nhiều hơn, vì sự khác biệt tính toán giữa hai thuật toán này là vô lý và SHA2-256 được chuẩn hóa hơn nhiều. Chúng tôi đề cập đến điều này bởi vì, ít nhất cho đến nay, không có va chạm nào được tìm thấy cho thuật toán này, làm cho nó trở thành một lựa chọn an toàn và có thể sử dụng được.

Trong bảng sau, chúng tôi sẽ có thể xác minh tốt hơn nhiều sự khác biệt giữa tất cả các thuật toán dựa trên các đặc điểm của chúng.

Bạn sẽ thấy rằng MD5, SHA-0 và SHA-1 Các thuật toán băm trước đây đã xuất hiện trong bảng, chúng tôi đã loại bỏ chúng vì mặc dù chúng đã được sử dụng từ lâu, va chạm đã được tìm thấy và không còn an toàn để sử dụng chúng , vì vậy trong SHA2, trong tất cả các biến thể của nó và SHA3 hiện đang được sử dụng.

Để làm rõ khái niệm va chạm và hiểu nó một cách chính xác, chúng tôi giải thích rằng, trong máy tính, xung đột băm là một tình huống xảy ra khi hai đầu vào khác nhau của một hàm băm tạo ra cùng một đầu ra.

SHA-3

SHA3 ​​là thuật toán băm họ SHA mới nhất, được NISH công bố vào năm 2015, nhưng nó vẫn chưa được sử dụng rộng rãi. Mặc dù nó là một phần của cùng một gia đình, nhưng cấu trúc bên trong của nó là khá khác nhau. Thuật toán băm mới này dựa trên “Xây dựng bằng bọt biển . ” Cấu tạo của miếng bọt biển này dựa trên một hàm ngẫu nhiên hoặc hoán vị ngẫu nhiên của dữ liệu, nó cho phép nhập bất kỳ lượng dữ liệu nào và tạo ra bất kỳ lượng dữ liệu nào, ngoài ra, chức năng này là giả ngẫu nhiên đối với tất cả các mục nhập trước đó. Điều này cho phép SHA-3 có tính linh hoạt cao, mục tiêu là thay thế SHA2 trong TLS điển hình hoặc VPN giao thức sử dụng thuật toán băm này để xác minh tính toàn vẹn của dữ liệu và tính xác thực của dữ liệu.

SHA-3 cũ là ra đời như một sự thay thế cho SHA2, nhưng không phải vì sử dụng SHA-2 không an toàn, mà vì họ muốn có một kế hoạch B trong trường hợp tấn công thành công SHA2, theo cách này, cả SHA-2 và SHA-3 sẽ cùng tồn tại. Trong nhiều năm, trên thực tế, SHA-3 không được sử dụng đại trà như với SHA-2.

Hoạt động và đặc điểm

SHA-3 sử dụng cấu trúc “bọt biển”, dữ liệu được “hấp thụ” và xử lý để hiển thị đầu ra có độ dài mong muốn. Trong giai đoạn hấp thụ dữ liệu, phép toán XOR được sử dụng và sau đó được chuyển thành hàm hoán vị. SHA-3 cho phép chúng tôi có thêm các bit thông tin, để bảo vệ hàm băm khỏi các cuộc tấn công mở rộng, điều xảy ra với MD5, SHA-1 và SHA-2. Một tính năng quan trọng khác là nó rất linh hoạt, có thể kiểm tra các cuộc tấn công phá mã và sử dụng nó trong các ứng dụng nhẹ. Hiện tại SHA2-512 nhanh gấp đôi so với SHA3-512, nhưng sau này có thể được thực hiện thông qua phần cứng, sau đó có thể nhanh hơn và thậm chí còn nhanh hơn.

Các thuật toán băm KDF

Sự khác biệt giữa KDF (Chức năng lấy lại khóa) và một hàm băm mật khẩu có độ dài với KDF là khác nhau, trong khi một hàm băm mật khẩu sẽ luôn có cùng độ dài đầu ra. Tùy thuộc vào việc chúng ta đang băm khóa mã hóa hoặc mật khẩu được lưu trữ trong cơ sở dữ liệu, bạn nên sử dụng một số thuật toán băm hoặc các thuật toán khác. Ví dụ, trong trường hợp mật khẩu được lưu trữ, người ta khuyến nghị rằng thuật toán băm cần một khoảng thời gian là 5 giây để tính toán, nhưng sau đó nó rất mạnh và rất tốn kém để bẻ khóa.

Các nhà phát triển ít kinh nghiệm hơn, những người không biết tất cả các khả năng của thuật toán băm KDF sẽ nghĩ rằng các hàm băm mật mã một chiều, độ dài cố định và chống va chạm chung chung như SHA2-256 hoặc SHA2-512 là tốt hơn, mà không cần suy nghĩ kỹ về vấn đề có thể xảy ra mà họ có thể có. Vấn đề với các hàm băm có độ dài cố định là chúng rất nhanh, điều này cho phép kẻ tấn công bẻ khóa mật khẩu rất nhanh bằng một máy tính mạnh. Hàm băm có độ dài thay đổi chậm hơn, điều này là lý tưởng cho những người bẻ khóa mật khẩu mất nhiều thời gian hơn để lấy được.

Cộng đồng tiền điện tử đã cùng nhau giới thiệu các hàm băm được thiết kế đặc biệt cho mật khẩu, trong đó 'chi phí' được bao gồm. Các chức năng dẫn xuất chính cũng được thiết kế với một “chi phí”. Xây dựng dựa trên các hàm dẫn xuất khóa dựa trên mật khẩu và các hàm băm được thiết kế riêng cho mật khẩu, cộng đồng đã thiết kế các thuật toán khác nhau để sử dụng trong việc bảo vệ mật khẩu.

Các thuật toán phổ biến nhất để bảo vệ mật khẩu là:

  1. Argon2 (KDF)
  2. mật mã (KDF)
  3. bcrypt
  4. PBKDF2 (KDF)

Sự khác biệt chính giữa KDF và hàm băm mật khẩu là độ dài của KDF là tùy ý và các hàm băm mật khẩu điển hình như MD5, SHA-1, SHA2-256, SHA2-512 có đầu ra có độ dài cố định.

Đối với việc lưu trữ mật khẩu, mối đe dọa là cơ sở dữ liệu khóa bị rò rỉ ra Internet và những kẻ bẻ khóa mật khẩu trên khắp thế giới làm việc trên các hàm băm cơ sở dữ liệu để khôi phục mật khẩu.

Lấy ví dụ về việc lưu trữ mật khẩu trong cơ sở dữ liệu, khi chúng ta đăng nhập để truy cập vào một trang web thì việc băm khóa luôn được thực hiện nhanh chóng, để không phải chờ đợi mà không thể truy cập được, nhưng điều này giả sử có vấn đề là nó có thể bị bẻ khóa nhanh hơn, đặc biệt nếu chúng ta sử dụng sức mạnh của GPU cùng với Hashcat.

bcrypt, sha256crypt, sha512crypt và PBKDF2

Trong bảng sau đây là sự so sánh của một số thuật toán băm được sử dụng rộng rãi, với chi phí tương ứng của chúng trong một bảng. Bạn sẽ thấy rằng hàng màu xanh lá cây được đánh dấu nơi một yếu tố công việc có thể có nghĩa là dành 0.5 giây để băm mật khẩu, đây là một mối quan hệ khá tốt và hàng màu đỏ trong đó một yếu tố công việc có thể có nghĩa là dành đủ 5 giây để tạo mật khẩu -chìa khóa mã hóa dựa trên, có hại cho việc mất hiệu quả.

Lưu ý rằng đối với bcrypt, điều này có nghĩa là đối với băm mật khẩu, hệ số 13 sẽ cung cấp chi phí khoảng 0.5 giây để mã hóa mật khẩu, trong khi hệ số 16 sẽ tốn khoảng 5 giây để tạo mật khẩu dựa trên khóa. Đối với sha256crypt, sha512crypt và PBKDF2, dường như tương ứng là khoảng 640,000 và 5,120,000 lần lặp.

tiền điện tử

Khi chúng tôi nghĩ đến việc chuyển sang scrypt là vì mọi thứ đang trở nên khó khăn hơn một chút. Với bcrypt, sha256crypt, sha512crypt và PBKDF2, chi phí của chúng tôi hoàn toàn là CPU hệ số tải, công suất xử lý càng cao thì hiệu quả thuật toán càng cao. Phần tồi tệ là chúng vẫn trở thành nạn nhân của các FPGA và ASIC theo thuật toán cụ thể. Để chống lại điều này, một chi phí bộ nhớ có thể được bao gồm. Với scrypt, chúng ta sẽ có chi phí cho cả CPU và RAM.

Trong bảng sau, bạn có thể thấy sự so sánh với các giá trị chi phí khác nhau.

Các thử nghiệm này đã được thực hiện với một CPU lõi tứ bộ xử lý đơn, một nỗ lực đã được thực hiện để giới hạn chi phí «p» ở mức 1, 2 và 4. Việc sử dụng RAM cũng đã được hạn chế và do đó không phải làm gián đoạn phần còn lại. các hành động đang được thực hiện. Do đó, chi phí “r” đã được giới hạn ở 4, 8 và 16 nhân với 128 byte (512 byte, 1024 byte và 2048 byte).

Argon2

Argon2 có hai phiên bản khác nhau: Argon2d và Argon2i; thứ nhất phụ thuộc vào dữ liệu (d) và thứ hai là độc lập với dữ liệu (i). Cái trước được cho là có khả năng chống lại GPU bẻ khóa, trong khi cái thứ hai được cho là có khả năng chống lại các cuộc tấn công kênh bên. Nói cách khác, Argon2d sẽ phù hợp để băm mật khẩu , trong khi Argon2i sẽ thích hợp để lấy ra các khóa mã hóa .

Argon2 có chi phí CPU và chi phí RAM, cả hai đều được xử lý riêng biệt. Chi phí CPU được xử lý thông qua các lần lặp tiêu chuẩn, như với bcrypt hoặc PBKDF2, và chi phí RAM được xử lý bằng cách tăng bộ nhớ một cách cụ thể. Khi thử nghiệm với thuật toán này bắt đầu, người ta thấy rằng chỉ cần thao tác lặp lại sẽ trông rất giống bcrypt, nhưng đến lượt nó, tổng thời gian cần để tính toán băm có thể bị ảnh hưởng bằng cách thao tác đơn giản với bộ nhớ. Kết hợp cả hai, các lần lặp lại ảnh hưởng đến chi phí CPU nhiều hơn chi phí RAM, nhưng cả hai đều có tỷ lệ thời gian tính toán đáng kể, như có thể thấy trong bảng dưới đây. Như với scrypt, nó cũng có chi phí song song, xác định số luồng bạn muốn giải quyết vấn đề:

Lưu ý cần tính đến trong quá trình tham số hóa này là chi phí của RAM thay đổi từ 256 KiB đến 16 MiB, ngoài số lần lặp và chi phí đếm bộ xử lý. Khi chúng tôi tăng RAM được sử dụng trong tham số hóa, chúng tôi có thể giảm chi phí lặp lại. Vì chúng ta cần nhiều luồng hơn để hoạt động trên băm, nên chúng ta có thể giảm bớt sự lặp lại đó hơn nữa. Vì vậy, hai khái niệm được đề cập dẫn đến kết quả là, một cách độc lập, bạn đang cố gắng nhắm mục tiêu 0.5 giây cho lần đăng nhập bằng mật khẩu tương tác và 5 giây đầy đủ cho việc tạo ra khóa mã hóa dựa trên mật khẩu.

Kết luận

Chúng ta có thể tóm tắt việc sử dụng các thuật toán băm này như sau: khi băm mật khẩu, để lưu trữ chúng trên đĩa hoặc để tạo khóa mã hóa, nên sử dụng các mã mật mã dựa trên mật khẩu, được thiết kế đặc biệt cho vấn đề đang xử lý. Không nên sử dụng bất kỳ loại hàm băm nào có mục đích chung do tốc độ của chúng. Ngoài ra, họ không nên triển khai thuật toán “kéo dài khóa” của riêng mình, chẳng hạn như băm đệ quy thông báo mật khẩu của họ và đầu ra bổ sung.

Do đó, nếu chúng ta tính đến điều đó, nếu thuật toán được thiết kế đặc biệt để xử lý mật khẩu và chi phí đủ để đáp ứng nhu cầu, mô hình mối đe dọa và đối thủ, thì chúng ta có thể nói, không nghi ngờ gì nữa, rằng chúng ta đang làm tốt. . Trên thực tế, chúng tôi sẽ không sai nếu chúng tôi chọn bất kỳ cái nào trong số chúng, chúng tôi chỉ đơn giản là phải rõ ràng về việc sử dụng chúng tôi sẽ cung cấp nó, để tránh bất kỳ thuật toán nào không được thiết kế đặc biệt cho mật khẩu, điều này sẽ tăng cường bảo mật. của họ.

Bây giờ bạn đã có ý tưởng rõ ràng về những thuật toán nào được sử dụng ngày nay, chúng tôi đã giải thích hoạt động của từng thuật toán và thậm chí cả chi phí xử lý để chúng ta có thể rõ ràng về việc sử dụng thuật toán nào tùy thuộc vào tình huống. Điều đã trở nên rõ ràng là tất cả chúng đều được sử dụng cho một mục tiêu chung rõ ràng, sự bảo vệ của chúng tôi, cả các thuật toán cố định dựa trên băm và các biến đều được sử dụng để bảo vệ thông tin, vì như bạn biết, thông tin là sức mạnh. Nhờ chúng, mật khẩu, tệp và truyền dữ liệu của chúng tôi được an toàn trước bất kỳ tác nhân bên ngoài nào muốn biết chúng.

Từ khóa » Các Thuật Toán Hàm Băm