it-swarm-vi.com

Sự khác biệt giữa MD5, SHA và RSA là gì?

Công cụ MD5 xuất giá trị thập lục phân. Theo cách tương tự, do SHA và RSA cùng tạo ra một đầu ra thập lục phân (hoặc bất kỳ thứ gì khác)?

Sự khác biệt giữa các thuật toán MD5, SHA và RSA là gì?

43
Kars

Đây không phải là loại đầu ra. Hex chỉ là cách dữ liệu được định dạng - vì tất cả chúng đều hoạt động trên dữ liệu nhị phân, hex có ý nghĩa rất lớn.

Phần quan trọng là những gì họ làm và cách họ làm điều đó:

  • MD5 và SHA là các hàm băm (SHA thực sự là một nhóm các hàm băm) - chúng lấy một phần dữ liệu, nén nó và tạo ra một đầu ra duy nhất phù hợp rất khó để mô phỏng với một khác Họ không mã hóa bất cứ thứ gì - bạn không thể lấy MD5 hoặc SHA đầu ra và "hủy bỏ" nó để quay lại điểm xuất phát của bạn. Sự khác biệt giữa hai điều nằm ở chỗ thuật toán họ sử dụng để tạo hàm băm. Cũng lưu ý rằng MD5 hiện đã bị hỏng do một cách được phát hiện để dễ dàng tạo ra va chạm và không nên được sử dụng cũng như không đáng tin cậy nữa.

  • RSA là một thuật toán mã hóa giả định. Bạn có hai khóa (riêng tư và công khai) và bạn có thể thực hiện một chức năng với một khóa (mã hóa hoặc giải mã) và đảo ngược với khóa kia. Khóa nào bạn sử dụng tùy thuộc vào việc bạn đang cố gắng thực hiện chữ ký số hay mã hóa.

57
bethlakshmi

MD5 là một hàm băm mật mã. "SHA" là tên của một họ hàm băm; đầu tiên là "SHA" tồn tại trong thời gian ngắn được đổi tên thành "SHA-0", sau đó "SHA-1" được xác định (một sản phẩm bán chạy nhất). Sau đó, các thành viên mới của gia đình đã được thêm vào, được chỉ định chung là "SHA-2", và bao gồm SHA-224, SHA-256, SHA-384 và SHA-512. Gần đây, một thế hệ SHA mới được thiết kế, được gọi là "SHA-3" nhưng cũng là "Keccak" (đây là một cuộc thi mở, Keccak là mật danh của một trong những ứng cử viên, người cuối cùng đã giành chiến thắng) .

Hàm băm mật mã là một hàm xác định, xác định đầy đủ, không sử dụng khóa bí mật. Nó nhận đầu vào là một thông báo có độ dài tùy ý (một luồng bit, any bit) và tạo ra đầu ra có kích thước cố định. Kích thước đầu ra phụ thuộc vào chức năng; đó là 128 bit cho MD5, 160 bit cho SHA-1, 256 bit cho SHA-256 ... Mọi người đều có thể tính toán hàm băm nhất định trên một đầu vào nhất định và tất cả đều nhận được kết quả như nhau. Các hàm băm cũng được gọi là digests bởi vì chúng bằng cách nào đó tạo ra một loại "tổng kiểm tra" hoặc "tóm tắt" của đầu vào. Các hàm băm mạnh mẽ phải sao cho không ai biết cách "đảo ngược" chúng hoặc thậm chí tìm thấy hai đầu vào riêng biệt mang lại cùng một đầu ra. Cái sau được gọi là a va chạm và đó là một sự cần thiết về mặt toán học tồn tại (vì hàm có thể chấp nhận nhiều đầu vào khác biệt hơn so với nó có thể tạo ra đầu ra riêng biệt), nhưng chúng tôi yêu cầu rằng nó không khả thi tìm chẵn một va chạm.

MD5 hóa ra rất dễ hỏng do va chạm (chúng ta có thể tạo ra va chạm trong vài giây làm việc trên PC) và SHA-0 cũng bị phá vỡ theo khía cạnh đó; SHA-1 là một chút dễ vỡ; Phần còn lại của gia đình SHA dường như rất mạnh mẽ. Làm thế nào một hàm băm đạt được khả năng chống va chạm là một điều kỳ diệu vì toàn bộ chức năng được biết đến hoàn toàn, không có giá trị bí mật; trộn dữ liệu quá nhiều cho các nhà mật mã tốt nhất để làm sáng tỏ quá trình.

RSA là hai thuật toán: an mã hóa bất đối xứng thuật toán và thuật toán chữ ký số thuật toán . Mặc dù cả hai thuật toán đều xây dựng trên cùng một loại toán học, nhưng chúng khá khác biệt (rất nhiều người mô tả chữ ký là "mã hóa bằng khóa riêng", đây là một sự tương tự không hoàn hảo và khó hiểu nhất, vì vậy đừng làm vậy). Cả hai thuật toán đều sử dụng khóa, tức là các phần dữ liệu phải được giữ bí mật. Thực tế là đối với chữ ký RSA, những gì được ký không trực tiếp là một thông điệp nhất định (một chuỗi bit) mà là a hash của tin nhắn: thông điệp được xử lý trước tiên bằng hàm băm mật mã như SHA-256 và giá trị băm sau đó được sử dụng. Điều này được thực hiện theo cách đó bởi vì toán học của RSA chỉ có thể xử lý các giá trị có kích thước vừa phải, tốt nhất là vài trăm bit. Các hàm băm mật mã là như vậy việc ký băm cũng tốt như ký dữ liệu gốc.

Theo cách đó, RSA và các hàm băm mật mã thường được sử dụng cùng nhau; nhưng chúng không giống nhau chút nào.

Hệ thập lục phân là cách biểu diễn chuỗi bit thành chuỗi ký tự: thập lục phân sử dụng chữ số và chữ cái từ ' A 'đến' F '; mỗi ký tự mã hóa chính xác bốn bit ('0' mã hóa '0000', '7' mã hóa '0111', 'D' mã hóa '1101' ...). Any chuỗi bit (và đặc biệt là đầu ra của hàm băm) có thể được chuyển đổi thành thập lục phân và ngược lại. Hệ thập lục phân là phổ biến vì mắt và não của con người rất giỏi đọc các ký tự, và không đọc các bit. Các công cụ dòng lệnh tính toán các hàm băm mật mã trên các tệp theo cách truyền thống xuất các ký tự thập lục phân vì lý do đó. Tuy nhiên, về bản chất không có gì liên kết các hàm băm với hệ thập lục phân: mọi thứ phù hợp với máy tính theo cách này hay cách khác là một chuỗi các bit, và do đó có thể tuân theo hệ thập lục phân; và đầu ra của hàm băm chỉ là một chuỗi các bit, có thể được mã hóa theo nhiều cách khác nhau, thập lục phân chỉ là cách "truyền thống" (mặc dù Base64 cũng thường gặp phải, đặc biệt là khi xử lý cơ sở dữ liệu).

35
Thomas Pornin