Bạn đã từng nghe về “SHA” khi tìm hiểu về SSL và muốn hiểu rõ hơn về nó? Bài viết này sẽ giúp bạn khám phá SHA là gì, cách chứng chỉ SSL sử dụng hàm băm (hash) để tạo chữ ký số, và sự khác biệt giữa SHA-1 và SHA-2.
Mục Lục
Hàm Băm (Hash) là Gì?
Một thuật toán hàm băm (hash function) là một hàm toán học tạo ra các khối dữ liệu tương ứng với hàm băm đó. Ví dụ, nếu chúng ta lấy câu “The Quick Brown Fox Jumps Over The Lazy Dog” và sử dụng thuật toán băm CRC32, chúng ta sẽ nhận được “07606bb6” – đây chính là hàm băm.
Các hàm băm rất hữu ích trong các tình huống mà máy tính cần xác định, so sánh hoặc thực hiện các phép tính trên các tệp và chuỗi dữ liệu. Việc tính toán và so sánh các hàm băm dễ dàng hơn so với việc so sánh trực tiếp các tệp gốc.
Một thuộc tính quan trọng của thuật toán hàm băm là tính xác định. Bất kỳ máy tính nào hiểu thuật toán hàm băm đã chọn đều có thể tính toán hàm băm cục bộ của câu ví dụ và nhận được kết quả tương tự.
Các thuật toán hàm băm được sử dụng rộng rãi, từ lưu trữ mật khẩu, thị giác máy tính đến cơ sở dữ liệu.
Có rất nhiều thuật toán hàm băm khác nhau, mỗi thuật toán được tối ưu hóa cho các mục đích cụ thể như loại dữ liệu, tốc độ, bảo mật, v.v.
Trong bài viết này, chúng ta sẽ tập trung vào các thuật toán SHA (Secure Hashing Algorithm) – thuật toán băm an toàn, được thiết kế 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 hàm băm mật mã là khả năng tạo ra các hàm băm không thể đảo ngược và duy nhất. Không thể đảo ngược nghĩa là không thể tìm ra dữ liệu ban đầu từ dữ liệu băm. Duy nhất nghĩa là hai phần dữ liệu khác nhau không thể tạo ra cùng một giá trị băm.
Lưu ý: Để dễ hiểu, bài viết này sử dụng các ví dụ đơn giản và thuật toán hàm băm ngắn hơn so với thực tế. Các hàm băm được sử dụng trong thực tế phức tạp hơn nhiều.
So sánh SHA-1 và SHA-2
Chữ Ký Số
Sau khi hiểu về hàm băm, chúng ta có thể tìm hiểu cách chúng được sử dụng trong chứng chỉ SSL.
Giao thức SSL/TLS được sử dụng để đảm bảo truyền tải dữ liệu an toàn giữa các thiết bị trên internet. SSL thường được mô tả đơn giản là “mã hóa”, nhưng nó còn cung cấp xác thực. Chứng chỉ SSL chứa thông tin cần thiết để xác thực, đặc biệt là liên kết khóa công khai với một danh tính cụ thể.
Giao thức SSL/TLS thiết lập kết nối bằng mã hóa bất đối xứng, sử dụng hai khóa mã hóa: khóa công khai để mã hóa và khóa riêng để giải mã. Chứng chỉ SSL chứa khóa công khai để khách hàng mã hóa dữ liệu, còn chủ sở hữu chứng chỉ SSL lưu trữ khóa riêng trên máy chủ để giải mã dữ liệu.
Xác thực rất quan trọng để đảm bảo SSL/TLS thực sự an toàn. Nếu máy tính không có cách nào đáng tin cậy để xác định ai sở hữu khóa mã hóa, việc mã hóa dữ liệu sẽ trở nên vô nghĩa.
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 (ví dụ: Symantec, Comodo, DigiCert, v.v.). Chữ ký này cung cấp bằng chứng mật mã rằng CA đã ký chứng chỉ và chứng chỉ chưa bị sửa đổi hoặc sao chép.
Các khóa bất đối xứng được sử dụng lại, nhưng cho mục đích ký thay vì mã hóa. Về mặt toán học, việc ký liên quan đến việc kết hợp dữ liệu và các khóa (chi tiết về cách tạo chữ ký khá phức tạp). Để đơn giản hóa, CA sẽ 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 so với việc ký toàn bộ chứng chỉ.
Chữ ký số cung cấp bằng chứng rằng chứng chỉ bạn nhận được là chứng chỉ chính xác do CA đáng tin cậy gửi đến trang web. Điều này đảm bảo tính xác thực, ngăn chặn giả mạo và các cuộc tấn công man-in-the-middle.
Chữ ký số rất nhạy cảm. Bất kỳ thay đổi nào đối với tệp sẽ làm thay đổi chữ ký. Ví dụ, nếu chúng ta thay đổi câu “The Quick Brown Fox Jumps Over The Lazy Dog” thành chữ thường (“the quick brown fox jumps over the lazy dog”), hàm băm kết quả sẽ hoàn toàn khác. Điều này có nghĩa là chữ ký kết quả cũng sẽ khác. Thậm chí một thay đổi nhỏ trong một tài liệu lớn cũng sẽ dẫn đến một hàm băm hoàn toàn khác.
Điều này ngăn chặn kẻ tấn công 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 hàm băm khác có nghĩa là chữ ký không còn hợp lệ và máy tính của bạn sẽ phát hiện ra điều này khi 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ẽ báo lỗi và ngăn chặn kết nối an toàn.
SHA-1 và SHA-2
SHA (Secure Hashing Algorithm) là thuật toán băm an toàn. SHA-1 và SHA-2 là hai phiên bản khác nhau của thuật toán này. Chúng khác nhau về cấu trúc (cách tạo hàm băm từ dữ liệu gốc) và độ dài bit của chữ ký. SHA-2 được coi là phiên bản kế thừa và cải tiến của SHA-1.
Sự khác biệt quan trọng nhất là độ dài bit. SHA-1 là hàm băm 160 bit. SHA-2 là một “gia đình” các hàm băm với nhiều độ dài khác nhau, phổ biến nhất là 256 bit.
Sự đa dạng của các hàm băm SHA-2 có thể gây nhầm lẫn, vì chúng được biểu diễn khác nhau trên các trang web. “SHA-2,” “SHA-256” hoặc “SHA-256 bit” đều chỉ cùng một thuật toán. “SHA-224,” “SHA-384,” hoặc “SHA-512” đề cập đến độ dài bit khác của SHA-2. Một số trang web có thể ghi rõ cả thuật toán và độ dài bit, ví dụ “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. Tuy nhiên, các nghiên cứu cho thấy những điểm yếu của SHA-1, dẫn đến việc đánh giá lại. Từ năm 2016 trở đi, SHA-2 trở thành tiêu chuẩn mới. Chứng chỉ SSL hiện nay bắt buộc phải sử dụng SHA-2.
Thỉnh thoảng, bạn sẽ thấy các chứng chỉ sử dụng SHA-2 384 bit. Định dạng 224 bit hiếm khi được sử dụng và không được chấp thuận cho các chứng chỉ được tin cậy công khai. Định dạng 512 bit ít được phần mềm hỗ trợ rộng rãi hơn.
SHA-2 dự kiến sẽ tiếp tục được sử dụng trong ít nhất 5 năm tới. Tuy nhiên, các cuộc tấn công bất ngờ chống lại các thuật toán có thể xảy ra, dẫn đến quá trình chuyển đổi sớm hơn.
Các hàm băm bit lớn hơn có thể cung cấp bảo mật tốt hơn vì có nhiều kết hợp có thể hơn. Một trong những chức năng quan trọng của thuật toán hàm băm mật mã là tạo ra các hàm 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 hàm băm, chúng ta gọi đó là xung đột.
Bảo mật của chữ ký số chỉ được đảm bảo khi không có xung đột xảy ra. Xung đột rất nguy hiểm vì chúng cho phép hai tệp tạo cùng một chữ ký. 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ý.
Có Bao Nhiêu Hàm Băm?
Nếu một thuật toán hàm băm được cho là tạo ra các hàm băm duy nhất cho mọi đầu vào, thì có bao nhiêu hàm băm có thể có?
Một bit có hai giá trị có thể: 0 và 1. Số lượng hàm 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ó 2256 kết hợp có thể.
2256 là một con số khổng lồ, vượt xa số lượng hạt cát trên thế giới.
Số lượng hàm băm có thể càng lớn, cơ hội để hai giá trị tạo ra cùng một hàm băm càng nhỏ.
Về mặt kỹ thuật, có 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ế. Do đó, mọi thuật toán hàm băm, bao gồm cả thuật toán an toàn, đều có thể tạo ra xung đột. Tuy nhiên, chúng ta quan tâm đến việc xung đột có dễ xảy ra hay không. SHA-1 được coi là không an toàn vì kích thước và cấu trúc của nó có thể tạo ra các xung đột.
Lưu ý rằng độ dài bit lớn không tự động đảm bảo rằng thuật toán hàm băm tạo ra các hàm băm an toàn. Cấu trúc của thuật toán cũng rất 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 hàm băm được thiết kế đặc biệt cho bảo mật mật mã.
Chuyển Đổi SHA-2
Năm 2016, ngành công nghiệp SSL đã trải qua quá trình “Chuyển đổi SHA-2.” Quá trình này bao gồm 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ó một số trục trặc xảy ra như dự đoán.
Thời hạn cấp chứng chỉ SSL mới với hàm băm SHA-1 là ngày 31 tháng 12 năm 2015. Phần lớn ngành công nghiệp đã tuân thủ thời hạn này. Tuy nhiên, một vài sai sót đã xảy ra và một số trường hợp ngoại lệ đã được cấp.
Trong một hoặc hai năm tới, phần lớn các chứng chỉ SHA-1 đáng tin cậy sẽ hết hạn. 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 mà 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 để biết thêm thông tin 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ý.
Cảnh báo SHA-1 trên trình duyệt
Nếu bạn thấy chứng chỉ SHA-1 trong trình duyệt của mình, đây là chứng chỉ của trang web đó (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 sentayho.com.vn. 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 mạnh hơn nhiều so với nhu cầu hiện tại sẽ giúp cải thiện ngắn hạn mà không dẫn đến sự xâm phạm bảo mật. Một thuật toán hàm 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 hàm băm mật mã khác. 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.
Các nhà mật mã không chỉ ngồi chờ đợi vấn đề xảy ra. Người kế nhiệm SHA-2, có tên là 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 hoặc xem xét một thuật toán hoàn toàn khác.
Việc nghiên cứu và đánh giá đúng các tiêu chuẩn mật mã mới, sau đó phát triển phần mềm hỗ trợ chúng cần nhiều năm. Ngành công nghiệp luôn đi trước ít nhất một bước.
[1] Để hiểu rõ hơn về khái niệm này, bạn có thể tìm hiểu thêm về nguyên lý Dirichlet trong toán học.