SHA-256 thực sự là gì Cuadernos Lacre · Khái niệm · Ngày 19 tháng 5 năm 2026 https://solo2.net/vi/so-tay/articulos/sha-256-thuc-su-la-gi.html Một dấu vân tay toán học gói gọn trong sáu mươi bốn ký tự và sẽ thay đổi hoàn toàn nếu chỉ một dấu phẩy trong văn bản gốc bị dịch chuyển. Tại sao chúng tôi gọi nó là con dấu sáp niêm phong kỹ thuật số. --- Ý tưởng đơn giản đằng sau cái tên kỹ thuật Hãy tưởng tượng có một chiếc máy chỉ có một khe cắm và một màn hình. Bạn đưa một văn bản vào khe cắm: một từ, một câu, hoặc cả một cuốn tiểu thuyết. Trên màn hình xuất hiện, chỉ tích tắc sau đó, một chuỗi ký tự chính xác gồm sáu mươi bốn ký tự. Chuỗi đó, đối với người đọc chuyên nghiệp, chúng tôi gọi là hash hoặc tóm tắt mật mã; còn với người đọc phổ thông, hiện tại chúng ta có thể gọi nó là dấu vân tay toán học của văn bản, giống như dấu vân tay đối với một con người. Nếu bạn đưa cùng một văn bản hai lần, máy sẽ hiển thị cùng một dấu vân tay cả hai lần. Nếu bạn đưa một văn bản hơi khác một chút — một dấu phẩy bị dịch chuyển, một chữ hoa chuyển thành chữ thường — máy sẽ hiển thị một dấu vân tay hoàn toàn khác với dấu đầu tiên. Không phải tương tự: mà là khác biệt hoàn toàn. Hai đặc tính này đi cùng nhau — tính tất định và tính nhạy cảm — chính là ý tưởng đơn giản đó. Mọi thứ khác của SHA-256 là bộ máy giúp thực thi chúng một cách hiệu quả. Cần phải nói ngay từ đầu những gì chiếc máy không làm. Nó không mã hóa văn bản. Nó không che giấu nó. Nó không lưu trữ nó. Chiếc máy nhìn vào văn bản, tính toán dấu vân tay, và quên luôn văn bản đó. Dấu vân tay không cho phép khôi phục lại văn bản đã tạo ra nó; nó chỉ cho phép, với một văn bản ứng viên, kiểm tra xem có khớp với bản gốc hay không. Đó là lý do tại sao chúng tôi nói rằng đó là một bản tóm tắt một chiều: đi mà không có đường về. Hash không giống với mã hóa Sự nhầm lẫn này rất phổ biến và cần được làm rõ: mã hóa (cifrar) và băm (hashear) là những thao tác khác nhau. Mã hóa bao gồm việc biến đổi một văn bản sao cho chỉ người có khóa mới có thể đưa nó về dạng ban đầu. Băm bao gồm việc tạo ra một dấu vân tay của văn bản mà từ đó văn bản gốc không bao giờ có thể phục hồi được, dù có khóa hay không. Thao tác thứ nhất có thể đảo ngược theo thiết kế; thao tác thứ hai là không thể đảo ngược theo thiết kế. Hệ quả thực tế rất quan trọng. Khi một ứng dụng nói «chúng tôi lưu trữ mật khẩu của bạn dưới dạng mã hóa», có ai đó có khóa để giải mã nó — chính ứng dụng đó, trong bất kỳ trường hợp nào. Khi một ứng dụng nói «chúng tôi lưu trữ mật khẩu của bạn dưới dạng hash», chính ứng dụng đó cũng không thể đọc được mật khẩu gốc ngay cả khi họ muốn; họ chỉ có thể kiểm tra xem mật khẩu bạn nhập có tạo ra cùng một dấu vân tay hay không. Mô hình thứ hai, nếu được thực hiện đúng cách, sẽ ưu việt hơn nhiều so với mô hình thứ nhất để lưu trữ mật khẩu. Sau này chúng ta sẽ thấy tại sao «thực hiện đúng cách» đòi hỏi nhiều hơn là chỉ dùng SHA-256 thuần túy. Bốn đặc tính làm nên sự hữu ích của một hàm băm mật mã Một hàm băm xứng đáng với tính từ mật mã phải đáp ứng bốn đặc tính sau: 1. Tính tất định. Cùng một đầu vào luôn tạo ra cùng một dấu vân tay. 2. Hiệu ứng thác đổ (Avalanche effect). Một thay đổi nhỏ ở đầu vào sẽ tạo ra một dấu vân tay hoàn toàn khác, không có điểm tương đồng rõ ràng với dấu trước đó. 3. Kháng nghịch ảnh. Với một dấu vân tay cho trước, việc tìm ra văn bản đã tạo ra nó là không khả thi về mặt tính toán. 4. Kháng va chạm. Việc tìm ra hai văn bản khác nhau tạo ra cùng một dấu vân tay là không khả thi về mặt tính toán. «Không khả thi về mặt tính toán» không có nghĩa là «về mặt toán học là không thể». Nó có nghĩa là chi phí về thời gian, năng lượng và tiền bạc để đạt được điều đó vượt xa tổng năng lực tính toán hiện có một cách hợp lý. Đối với SHA-256, giới hạn đó được đo bằng hàng nghìn tỷ năm ngay cả với những giả định lạc quan nhất với phần cứng chuyên dụng. Điều này, đối với mục đích thực tế của người đọc, tương đương với việc «không thể làm được». SHA-256, một cách cụ thể Cái tên đã nói lên tất cả. SHA là viết tắt của Secure Hash Algorithm: thuật toán băm an toàn. Con số 256 chỉ kích thước của dấu vân tay tính bằng bit: hai trăm năm mươi sáu bit, tức là ba mươi hai byte, khi hiển thị dưới dạng thập lục phân sẽ là sáu mươi bốn ký tự mà người đọc đã nhận ra. Tiêu chuẩn này được NIST của Hoa Kỳ công bố, cơ quan bình thường hóa các loại hàm này, vào năm 2001 như một phần của họ SHA-2; phiên bản hiện hành của tiêu chuẩn, FIPS 180-4, là từ năm 2015. Các chiều không gian này đáng để chúng ta dừng lại một chút. Hai trăm năm mươi sáu bit cho phép hai mũ hai trăm năm mươi sáu giá trị khác nhau: một con số với bảy mươi tám chữ số thập phân, lớn hơn nhiều bậc so với số lượng nguyên tử ước tính trong vũ trụ có thể quan sát được. Mỗi văn bản trên thế giới — mỗi cuốn sách, mỗi email, mỗi tin nhắn — đều rơi vào một trong những giá trị đó. Xác suất để hai văn bản khác nhau trùng khớp ngẫu nhiên, trên thực tế, là không thể phân biệt được với số không. Cách hiển thị trong mã nguồn Tại sao chúng tôi gọi nó là con dấu sáp niêm phong Trong thư từ châu Âu từ thế kỷ 15 đến thế kỷ 19, sáp niêm phong (lacre) dùng để đóng kín lá thư. Một giọt sáp nóng chảy, một con dấu ấn lên trên, và lá thư được đánh dấu một cách không thể lặp lại. Nó không bảo vệ nội dung khỏi những kẻ tò mò quyết tâm — giấy có thể đọc được dưới ánh sáng, sáp có thể bị phá vỡ — nhưng nó đã chứng thực điều đó. Bất kỳ sự thay đổi nào đối với dấu niêm phong đều có thể nhìn thấy được đối với người nhận ngay cả trước khi mở giấy. Sáp niêm phong không ngăn cản hư hại; nó tuyên cáo điều đó. SHA-256 của nội dung mỗi Cuaderno thực hiện chức năng tương tự trong phiên bản kỹ thuật số của nó. Nếu chỉ một từ trong bài viết thay đổi giữa thời điểm nó được xuất bản và thời điểm bạn đọc nó, con dấu thập lục phân ở cuối văn bản sẽ không còn khớp với SHA-256 của văn bản trước mặt bạn. Bất kỳ người đọc nào với năm dòng mã đều có thể kiểm tra điều đó. Ấn phẩm không thể viết lại lịch sử của nó mà không bị con dấu tố cáo. Nó không bảo vệ chống lại hư hại; nó làm cho hư hại có thể xác minh được. Những gì một hàm băm không phải là Đôi khi người ta yêu cầu SHA-256 thực hiện bốn việc không thuộc về nó: 1. Mã hóa. Một hàm băm tóm tắt; nó không che giấu. Nếu bạn muốn văn bản không thể đọc được, bạn cần mã hóa nó, chứ không phải băm nó. 2. Xác thực tác giả. Một hàm băm không cho biết ai đã viết văn bản, nó chỉ cho biết văn bản nào đã được băm. Để liên kết quyền tác giả, cần có một chữ ký mật mã trên mã băm đó, chứ không phải chỉ mình mã băm. 3. Lưu trữ mật khẩu. Ở đây có một cái bẫy cần phải hiểu rõ. SHA-256 được thiết kế để hoạt động rất nhanh — điều này tốt cho nhiều việc, nhưng lại tệ cho việc này. Một kẻ tấn công với phần cứng chuyên dụng có thể thử hàng tỷ mật khẩu mỗi giây với một mã băm SHA-256 cho đến khi tìm thấy mật khẩu của bạn. Để lưu trữ mật khẩu, phải sử dụng các hàm dẫn xuất khóa chậm một cách cố ý như Argon2, scrypt hoặc bcrypt, kết hợp với một 'muối' (salt - một dữ liệu ngẫu nhiên duy nhất cho mỗi người dùng, giúp ngăn chặn việc hai người có cùng mật khẩu có cùng một mã hash). 4. Đọc mã băm như định danh của tác giả. Nó không phải vậy. Một mã băm định danh nội dung. Nếu hai người băm từ hola bằng SHA-256, cả hai đều nhận được cùng một tóm tắt — và đó là đặc tính trung tâm, không phải là một lỗi: nếu chúng là các tóm tắt khác nhau, chúng ta sẽ không thể kiểm tra sự trùng khớp giữa những gì đã xuất bản và những gì đã nhận được. SHA-256 xuất hiện ở đâu trong đời sống hàng ngày của bạn Mặc dù bạn không nhìn thấy, nhưng SHA-256 hỗ trợ phần lớn những gì bạn sử dụng hàng ngày trên internet. Chuỗi khối của Bitcoin được xây dựng bằng cách liên kết SHA-256 của mỗi khối với khối tiếp theo; việc thay đổi một khối trong quá khứ buộc phải tính toán lại toàn bộ chuỗi sau đó. Git, hệ thống quản lý phiên bản mã nguồn của một nửa thế giới, định danh mỗi lần commit bằng SHA-256 (trong các phiên bản gần đây) hoặc bằng tiền thân của nó là SHA-1 (trong các phiên bản cũ hơn) của toàn bộ nội dung của nó. Chứng chỉ HTTPS xác minh danh tính của một trang web khi bạn truy cập có liên kết với một dấu vân tay SHA-256. Các bản tải xuống phần mềm thường đi kèm với một SHA-256 do nhà phát triển công bố để bạn xác minh rằng tệp không bị thay đổi trên đường đi. Và như chúng tôi đã nói, ở cuối mỗi Cuaderno Lacre. Dành cho người đọc chuyên nghiệp Bốn lời nhắc nhở vận hành cho những người quyết định hoặc kiểm định hệ thống: 1. Hash không phải là mã hóa. Nếu một nhà cung cấp nhầm lẫn hai thuật ngữ này trong tài liệu kỹ thuật của họ, bạn nên hỏi chính xác ý của họ là gì. 2. Để lưu trữ mật khẩu, không bao giờ được sử dụng SHA-256 thuần túy. SHA-256 quá nhanh cho nhiệm vụ này (xem điểm 3 của mục Những gì một hàm băm không phải là). Tiêu chuẩn hiện tại là Argon2id: chậm theo thiết kế, có thể cấu hình theo năng lực của máy chủ, kết hợp với một 'muối' ngẫu nhiên khác nhau cho mỗi người dùng. 3. Đối với tính toàn vẹn của tài liệu — hợp đồng, hồ sơ, tệp tin — SHA-256 vẫn là tiêu chuẩn tham chiếu. Đây là tiêu chuẩn được các nhà cung cấp dịch vụ đóng dấu thời gian đủ điều kiện ở EU sử dụng. 4. Để bảo tồn lâu dài (nhiều thập kỷ), bạn nên tính toán và lưu trữ thêm một SHA-3 hoặc SHA-512 cùng với SHA-256; sự thận trọng về mật mã khuyến nghị không nên chỉ dựa vào một hàm duy nhất cho các kho lưu trữ kéo dài hàng thế kỷ. Hãy tưởng tượng bạn đã lắp đặt một mạch domino tinh vi nhất thế giới: hàng nghìn quân domino, hàng chục nhánh rẽ, cầu cơ khí và đường dốc chạy khắp phòng, được đặt cẩn thận từng mảnh một. Nếu bạn chạm vào quân đầu tiên, chuỗi sẽ đổ theo một trình tự chính xác và lặp lại. Cùng cách lắp đặt, cùng cú chạm đầu tiên → cùng một mẫu quân domino đổ cuối cùng, lặp đi lặp lại. Đây là điểm thú vị: hãy di chuyển chỉ một quân domino sang bên cạnh nửa cm trước khi bắt đầu và chạm lại. Một đường dốc đáng lẽ phải hoạt động sẽ đứng yên, một cây cầu không đổ, một nhánh rẽ khác được kích hoạt. Mẫu quân domino cuối cùng trên sàn sẽ hoàn toàn không thể nhận ra so với mẫu đầu tiên. SHA-256 về mặt toán học chính là mạch điện này. Văn bản bạn viết là vị trí ban đầu của các quân domino. Thuật toán là cú chạm giải phóng chuỗi đổ. Và kết quả cuối cùng — cái mà chúng ta gọi là hash (mã băm) — là bức ảnh chụp cố định mặt sàn khi mọi thứ đã dừng lại. Chỉ cần thay đổi một dấu phẩy trong văn bản gốc và bức ảnh sẽ khác biệt hoàn toàn. Đơn giản vậy thôi, nhưng vô cùng mạnh mẽ. --- Nếu bạn quay lại cuối bài viết này, bạn sẽ thấy một con dấu thập lục phân gồm sáu mươi bốn ký tự. Đó là SHA-256 của văn bản bạn vừa đọc, bằng ngôn ngữ này. Nếu chúng tôi dịch bài viết, con dấu sẽ khác; nếu một từ trong phiên bản tiếng Tây Ban Nha thay đổi, con dấu tiếng Tây Ban Nha sẽ thay đổi. Con dấu không bảo vệ nội dung — đã có các công cụ khác cho việc đó — mà nó định danh nội dung một cách duy nhất. Và điều đó, dù nghe có vẻ khiêm tốn, cũng đủ để không một bước nào trong chuỗi biên tập có thể thay đổi những gì đã nói mà không bị phát hiện. Những thứ còn lại — mã hóa, ký tên, định danh — đều được xây dựng dựa trên ý tưởng đơn giản này. Nguồn tham khảo và đọc thêm - NIST — FIPS PUB 180-4: Secure Hash Standard (SHS), tháng 8 năm 2015. Đặc tả chính thức của họ SHA-2, bao gồm SHA-256. - RFC 6234 — US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF), IETF, tháng 5 năm 2011. Phiên bản quy chuẩn cho những người triển khai. - Ferguson, N.; Schneier, B.; Kohno, T. — Cryptography Engineering: Design Principles and Practical Applications (Wiley, 2010). Chương 5 và 6 đề cập đến các hàm băm và các cách sử dụng hợp pháp và bất hợp pháp của chúng. - Nakamoto, S. — Bitcoin: A Peer-to-Peer Electronic Cash System (2008). Ví dụ thực tế về việc sử dụng SHA-256 để liên kết các khối trong một cấu trúc bất biến theo thiết kế. - Quy định (EU) 910/2014 (eIDAS) — khung pháp lý cho các nhà cung cấp dịch vụ đóng dấu thời gian đủ điều kiện. SHA-256 là hàm tham chiếu cho các chữ ký và dấu điện tử đủ điều kiện được cấp tại EU. - Triển khai tham chiếu trong Zig: std.crypto.hash.sha2.Sha256 trong kho lưu trữ chính thức của ngôn ngữ (github.com/ziglang/zig → lib/std/crypto/sha2.zig). Đây là phiên bản tối ưu hóa và kiểm định mà thực tế Solo2 đang sử dụng. Hữu ích để đối chiếu với triển khai giáo khoa trong phụ lục. --- Cuadernos Lacre · Một ấn phẩm của Menzuri Gestión S.L. · viết bởi R.Eugenio · được biên tập bởi đội ngũ Solo2. https://solo2.net/vi/so-tay/