Tìm hiểu về SHA và các phiên bản SHA thường dùng

SHA-1, SHA-2, SHA-256, SHA-384 – Điều đó có nghĩa là gì? Và chúng khác nhau như thế nào?

Nếu bạn đã nghe nói về “SHA” khi tìm hiểu về SSL và muốn tìm hiểu xem SHA là gì? Hãy đọc bài viết dưới đây. Chúng ta sẽ bắt đầu bằng cách giải thích hash là gì, sau đó các chứng chỉ SSL sử dụng các hash để tạo thành chữ ký số như thế nào. Đây là nền tảng quan trọng để hiểu SHA-1 và SHA-2 là gì.

Hãy bắt đầu nào.

Hash là gì?

Một thuật toán hash (hàm băm) là một hàm toán học mà sinh ra các khối dữ liệu tương ứng với hàm băm đó. Vì vậy, ví dụ, nếu chúng ta lấy câu “The Quick Brown Fox Jumps Over The Lazy Dog” và chạy nó thông qua một thuật toán băm cụ thể được gọi là CRC32 chúng tôi sẽ nhận được “07606bb6” – kết quả này được gọi là băm.

Các dấu gạch ngang thuận tiện cho các tình huống mà máy tính có thể muốn xác định, so sánh hoặc chạy các phép tính đối với các tệp và chuỗi dữ liệu. Nó dễ dàng hơn cho máy tính để tính toán một băm và sau đó so sánh chúng hơn nó sẽ là để so sánh các tập tin gốc.

Một trong những thuộc tính chính của thuật toán băm là tính xác định . Bất kỳ máy tính nào trên thế giới hiểu thuật toán băm mà bạn đã chọn đều có thể tính toán hàm băm cục bộ của câu ví dụ của chúng tôi và nhận được cùng một câu trả lời.

Các thuật toán bẻ khóa được sử dụng theo mọi cách – chúng được sử dụng để lưu trữ mật khẩu, trong vison máy tính, trong cơ sở dữ liệu.

Có hàng trăm thuật toán băm ra khỏi đó và tất cả chúng đều có mục đích cụ thể – một số được tối ưu hóa cho một số loại dữ liệu nhất định, một số khác là tốc độ, bảo mật, v.v.

Hôm nay, tất cả chúng ta quan tâm là các thuật toán SHA. SHA là viết tắt của Secure Hashing Algorithm – tên của nó đá nói lên công việc của nó- nó dành cho bảo mật mật mã.

Các yếu tố quan trọng nhất đối với thuật toán băm mật mã là chúng tạo ra băm không thể đảo ngược và độc đáo . Không thể đảo ngược nếu bạn chỉ có dữ liệu băm mà bạn không thể sử dụng để tìm ra phần dữ liệu ban đầu là gì, do đó cho phép dữ liệu gốc vẫn an toàn và không xác định. Duy nhất để hai phần dữ liệu khác nhau không thể tạo ra cùng một giá trị băm – phần tiếp theo giải thích tại sao điều này lại quan trọng như vậy.

Lưu ý : Để dễ đọc và hiểu bài viết này, tôi đang sử dụng một chuỗi dữ liệu ví dụ và thuật toán băm ngắn hơn đáng kể so với những gì thực sự sẽ được sử dụng. Các băm bạn đã thấy cho đến nay là không SHA băm của bất kỳ loại nào.

Chữ ký số

Bây giờ chúng ta đã biết băm là gì, chúng ta có thể giải thích cách chúng được sử dụng trong Chứng chỉ SSL.

Giao thức SSL / TLS được sử dụng để cho phép truyền tải dữ liệu an toàn từ thiết bị này sang thiết bị khác trên internet. Đối với tính ngắn gọn, có vẻ như SSL thường được giải thích là “mã hóa”. Nhưng đừng quên rằng SSL cũng cung cấp xác thực . Tệp chứng chỉ SSL được giao nhiệm vụ cung cấp các thông tin cần thiết cần thiết để xác thực, đặc biệt, chứng chỉ SSL kết nối một khóa công khai cụ thể với một danh tính.

Hãy nhớ rằng giao thức SSL / TLS đóng một kết nối bằng cách sử dụng mã hóa không đối xứng. Điều này có nghĩa là có hai khóa mã hóa, mỗi khóa xử lý một nửa quy trình: khóa công khai để mã hóa và khóa riêng để giải mã. Mỗi chứng chỉ SSL chứa khóa công khai có thể được khách hàng sử dụng để mã hóa dữ liệu và chủ sở hữu chứng chỉ SSL bảo mật lưu trữ khóa cá nhân trên máy chủ của họ mà họ sử dụng để giải mã dữ liệu đó và làm cho dữ liệu có thể đọc được.

Xác thực là cực kỳ quan trọng để đảm bảo SSL / TLS thực sự cung cấp bảo mật có ý nghĩa. Hãy tưởng tượng nếu máy tính của bạn không có cách nào đáng tin cậy để biết ai sở hữu khóa mã hóa bạn đang sử dụng? Mã hóa dữ liệu của bạn với khóa đó sẽ không hữu ích vì bạn sẽ không biết ai có khóa riêng tương ứng giải mã nó. Sau khi tất cả, mã hóa dữ liệu là ít sử dụng nếu bạn đang gửi nó trực tiếp đến một kẻ tấn công man-in-the-middle.

Chữ ký số là một phần quan trọng trong cách chứng chỉ SSL cung cấp xác thực. Khi một chứng chỉ được phát hành, nó được ký bằng kỹ thuật số bởi Certificate Authority (CA) mà bạn đã chọn làm nhà cung cấp chứng chỉ của bạn (ví dụ, Symantec, Comodo, DigiCert, vv). Chữ ký này cung cấp bằng chứng mật mã rằng CA đã ký chứng chỉ SSL và chứng chỉ chưa được sửa đổi hoặc sao chép.

Các khóa bất đối xứng mà chúng tôi đã đề cập trước đây được sử dụng lại, nhưng với mục đích ký không mã hóa. Về mặt toán học, việc ký kết liên quan đến việc xoay quanh cách dữ liệu và các khóa được kết hợp (Chúng tôi sẽ không giải thích chi tiết về cách thức tạo chữ ký vì nó hơi phức tạp ). Để làm cho nó dễ dàng hơn cho các máy tính, nhưng vẫn an toàn trong việc tạo và kiểm tra các chữ ký này, CA đầu tiên băm tệp chứng chỉ và ký vào kết quả băm. Điều này hiệu quả hơn việc ký toàn bộ chứng chỉ.

Đó là chữ ký số sau đó cung cấp bằng chứng cần thiết rằng chứng chỉ bạn đã cung cấp là chứng chỉ chính xác do CA đáng tin cậy gửi đến trang web được đề cập. Không bịp bợm. Không giả mạo. Không có thao tác man-in-the-middle của tập tin chứng chỉ.

Chữ ký số cực kỳ nhạy cảm – bất kỳ thay đổi nào đối với tệp sẽ khiến chữ ký thay đổi. Nếu chúng ta lấy câu ví dụ của chúng ta từ phần trước và làm cho nó hoàn toàn bằng chữ thường (“the quick brown fox jumps over the lazy dog”), băm kết quả sẽ hoàn toàn khác. Điều đó có nghĩa là chữ ký kết quả của băm đó cũng sẽ khác nhau. Thậm chí thay đổi một chút của một tài liệu nhiều nghìn gigabyte sẽ dẫn đến một băm hoàn toàn khác.

Điều này khiến cho kẻ tấn công không thể sửa đổi chứng chỉ hợp pháp hoặc tạo chứng chỉ gian lận có vẻ hợp pháp. Một băm khác có nghĩa là chữ ký sẽ không còn hợp lệ nữa và máy tính của bạn sẽ biết điều này khi nó xác thực chứng chỉ SSL. Nếu máy tính của bạn gặp phải chữ ký không hợp lệ, nó sẽ kích hoạt lỗi và ngăn chặn hoàn toàn kết nối an toàn.

SHA-1 và SHA-2

Bây giờ bạn đã có nền tảng phù hợp, chúng tôi có thể tiếp cận tới vấn đề chính.

Như tôi đã nói trước đó, SHA là viết tắt của Secure Hashing Algorithm. SHA-1 và SHA-2 là hai phiên bản khác nhau của thuật toán đó. Chúng khác nhau trong cả hai công trình xây dựng (cách băm kết quả được tạo ra từ dữ liệu gốc) và độ dài bit của chữ ký. Bạn nên nghĩ rằng SHA-2 là người kế thừa SHA-1, vì nó là một sự cải tiến tổng thể.

Chủ yếu, mọi người tập trung vào chiều dài bit là sự khác biệt quan trọng. SHA-1 là băm 160 bit. SHA-2 thực sự là một “gia đình” của băm và có nhiều độ dài, phổ biến nhất là 256-bit.

Sự đa dạng của các băm SHA-2 có thể dẫn đến một chút nhầm lẫn, vì các trang web và tác giả thể hiện chúng khác nhau. Nếu bạn thấy “SHA-2,” “SHA-256” hoặc “SHA-256 bit”, những tên đó cũng chỉ là một. Nếu bạn thấy “SHA-224,” “SHA-384,” hoặc “SHA-512,” chúng đề cập đến độ dài bit thay thế của SHA-2. Bạn cũng có thể thấy một số trang web rõ ràng hơn và viết ra cả thuật toán và độ dài bit, chẳng hạn như “SHA-2 384.”

Ngành công nghiệp SSL đã chọn SHA làm thuật toán băm cho chữ ký số. Từ năm 2011 đến năm 2015, SHA-1 là thuật toán chính. Một nghiên cứu ngày càng tăng cho thấy những điểm yếu của SHA-1 đã thúc đẩy sự đánh giá lại. Từ năm 2016 trở đi, SHA-2 là tiêu chuẩn mới. Nếu bạn đang nhận được chứng chỉ hôm nay, nó phải sử dụng chữ ký đó ở mức tối thiểu.

Thỉnh thoảng bạn sẽ thấy các chứng chỉ sử dụng SHA-2 384-bit. Bạn sẽ hiếm khi thấy định dạng 224-bit, không được chấp thuận để sử dụng với các chứng chỉ được tin cậy công khai, hoặc giống 512 bit mà phần mềm ít được hỗ trợ rộng rãi hơn.

SHA-2 có thể sẽ vẫn được sử dụng trong ít nhất năm năm. Tuy nhiên, một số cuộc tấn công bất ngờ chống lại các thuật toán có thể được phát hiện mà sẽ nhắc nhở một quá trình chuyển đổi trước đó.

Các dữ liệu băm bit lớn hơn có thể cung cấp bảo mật hơn vì có nhiều kết hợp có thể hơn. Hãy nhớ rằng một trong những hàm quan trọng của thuật toán băm mật mã là tạo ra các băm duy nhất . Nếu hai giá trị hoặc tệp khác nhau có thể tạo ra cùng một băm, bạn tạo ra cái mà chúng ta gọi là xung đột .

Bảo mật của chữ ký số chỉ có thể được đảm bảo miễn là va chạm không xảy ra. Va chạm cực kỳ nguy hiểm vì chúng cho phép hai tệp tạo cùng một chữ ký, do đó, khi máy tính kiểm tra chữ ký, nó có vẻ hợp lệ mặc dù tệp đó chưa bao giờ thực sự được ký.

Bao nhiêu hàm băm?

Nếu một thuật toán băm được cho là tạo ra các dữ liệu băm duy nhất cho mọi đầu vào có thể, thì có bao nhiêu dữ liệu băm có thể có?

Một bit có hai giá trị có thể: 0 và 1. Số lượng băm duy nhất có thể được biểu thị bằng số lượng giá trị có thể được nâng lên số bit. Đối với SHA-256 có 2 256 kết hợp có thể.

Vì vậy, 2 256 kết hợp. Bao nhiêu vậy? Vâng, đó là một con số khổng lồ. Nghiêm túc rằng nó vượt xa bao nhiêu hạt cát trên thế giới.

Số lượng băm có thể càng lớn, cơ hội càng nhỏ thì hai giá trị sẽ tạo ra cùng một giá trị băm.

Có (về mặt kỹ thuật) một số lượng đầu vào có thể có vô hạn [1] , nhưng một số lượng đầu ra hạn chế. Vì vậy, cuối cùng, mọi thuật toán băm, bao gồm cả thuật toán an toàn, tạo ra xung đột. Nhưng chúng tôi chủ yếu quan tâm đến việc dễ dàng như thế nào. SHA-1 được coi là không an toàn bởi vì do cả kích thước và cấu trúc của nó có thể tạo ra những sự va chạm.

Lưu ý rằng một chiều dài bit lớn không tự động có nghĩa là thuật toán băm tạo ra các băm an toàn. Việc xây dựng thuật toán cũng vô cùng quan trọng – đó là lý do tại sao ngành công nghiệp SSL sử dụng các thuật toán băm được thiết kế đặc biệt cho bảo mật mã hóa.

Mã hóa SHA-2

Năm 2016, ngành công nghiệp SSL đã trải qua “SHA-2 Transition.” Nó liên quan đến việc phát hành lại hàng ngàn chứng chỉ hiện có để các tệp mới có thể được tạo và ký với SHA-2. Nó cũng liên quan đến các cập nhật lớn cho phần mềm phát hành mà CA đáng tin cậy công khai hoạt động (có hàng tá trong số đó). Đúng như dự đoán, có một số trục trặc.

Thời hạn cấp giấy chứng nhận SSL mới với SHA-1 băm là ngày 31 tháng 12 st năm 2015. Đối với hầu hết các phần, ngành công nghiệp đã bị mắc kẹt bởi thời hạn đó. Kể từ đó, một vài sai lầm đã được thực hiện, và một vài trường hợp đặc biệt đã được cấp.

Nhưng trong vòng một hoặc hai năm tới, chúng ta sẽ thấy phần lớn các chứng chỉ SHA-1 đáng tin cậy đều chết. Hiện nay, có khoảng 500.000 chứng chỉ SHA-1 vẫn còn tồn tại. Nếu bạn gặp chứng chỉ SHA-1, bạn sẽ thấy chỉ báo bảo mật bị suy giảm. Trong Google Chrome, tất cả chứng chỉ SHA-1 hết hạn vào năm 2016 sẽ không hiển thị móc khóa màu xanh lá cây trong kết nối an toàn và thay vào đó hiển thị biểu tượng giống như kết nối HTTP không an toàn. Bạn có thể nhấp vào biểu tượng để có thêm thông tin cụ thể về lý do tại sao nó được hiển thị, vì có những lý do khác không liên quan đến chữ ký.

Nếu bạn đã thấy chứng chỉ SHA-1 trong trình duyệt của mình hôm nay, thì đây là chứng chỉ của nó (trong Google Chrome). Để xem trang này trông như thế nào trong trình duyệt của bạn, hãy truy cập https://sha1-2016.badssl.com

Các trình duyệt xử lý chứng chỉ đã ký SHA-1 hết hạn vào năm 2017 với cảnh báo mạnh hơn . Điều này là do bảo mật của chữ ký có liên quan trực tiếp đến thời gian hợp lệ.

Giữ chữ ký an toàn

Theo thời gian, các cuộc tấn công chống lại mật mã sẽ cải thiện, và sức mạnh xử lý máy tính sẽ trở nên rẻ hơn. Điều này làm cho chữ ký SHA-2 hợp lệ kém an toàn hơn vào năm 2020 so với năm 2016. Vì lý do này, việc lựa chọn thuật toán sẽ mạnh hơn nhiều so với cần thiết ngay để cải thiện ngắn hạn không dẫn đến sự xâm phạm bảo mật. Nó không phải là không thực tế cho một thuật toán băm cụ thể để duy trì an toàn trong một thập kỷ.

Các chuyên gia trong ngành và các nhà nghiên cứu bảo mật trên toàn thế giới đang liên tục phân tích SHA-2 và các thuật toán băm mật mã khác, vì vậy hãy yên tâm rằng các chứng chỉ SSL hiện tại sẽ có chữ ký số đáng tin cậy và an toàn trong một thời gian.

Điều đó không có nghĩa là các nhà mật mã sẽ chỉ ngồi xung quanh và đợi cho đến khi có vấn đề. Người kế nhiệm SHA-2, thuận tiện có tên SHA-3 , đã được hoàn thành. Khi đến lúc thực hiện một công tắc khác, ngành công nghiệp SSL có thể sử dụng SHA-3 làm lựa chọn tiếp theo của họ hoặc họ có thể xem xét một thuật toán hoàn toàn khác.

Phải mất nhiều năm để nghiên cứu và đánh giá đúng các tiêu chuẩn mật mã mới, và sau đó phát triển phần mềm hỗ trợ chúng. Hy vọng rằng nó là yên tâm để biết ngành công nghiệp luôn luôn đi trước ít nhất một bước.

bình luận

Leave a Comment