Checksum là gì?
Checksum là một giá trị ngắn được tính từ một khối dữ liệu, chẳng hạn một tệp hay một gói tin mạng, rồi được lưu hoặc gửi kèm theo dữ liệu đó. Tính lại nó về sau và so sánh hai giá trị sẽ cho biết dữ liệu có bị thay đổi do hư hỏng hay lỗi truyền hay không.
Cập nhật 24 tháng 9, 2026
| Checksum | Đã gửi | Nhận được | Kết quả |
|---|---|---|---|
| Tổng các byte (mod 256) | 08 | 08 | Khớp |
| CRC-32 | A5A84C1F | A5A84C1F | Khớp |
Đảo một bit, cả hai checksum đều thay đổi. Đổi chỗ hai ký tự, các byte vẫn còn đủ nên tổng của chúng không đổi: chỉ CRC-32, vốn phụ thuộc vào thứ tự, mới nhận ra.
Các bản phân phối Linux như Ubuntu và Debian công bố một tệp tên SHA256SUMS bên cạnh các ảnh cài đặt. Mỗi dòng chứa một chuỗi 64 ký tự và một tên tệp. Tải xong, bạn chạy một lệnh trên tệp nhận được. Nếu nó in ra đúng chuỗi đó, toàn bộ hàng tỷ byte của tệp đã đến nơi nguyên vẹn. Nếu chỉ một bit bị đảo trên đường đi, chuỗi in ra sẽ khác hoàn toàn.
Chuỗi đó là checksum: một bản tóm tắt nhỏ sẽ thay đổi khi dữ liệu thay đổi.
Checksum hoạt động thế nào, từng bước
- Bên gửi chạy một thuật toán checksum trên dữ liệu, từng byte một, và được một kết quả ngắn.
- Kết quả được gửi đi hoặc lưu cùng dữ liệu: trong phần header của gói tin mạng, bên trong tệp ZIP cạnh mỗi tệp nén, hoặc trên trang tải về.
- Bên nhận chạy cùng thuật toán đó trên dữ liệu thực sự nhận được.
- Hai kết quả được so sánh. Nếu bằng nhau, dữ liệu gần như chắc chắn không đổi. Nếu khác nhau, dữ liệu đã bị hỏng, và bên nhận từ chối nó, yêu cầu gửi lại hoặc báo lỗi checksum.
Checksum chỉ phát hiện hư hỏng; nó không cho biết byte nào đã thay đổi và cũng không sửa được. Muốn sửa cần một mã sửa lỗi, chẳng hạn mã Reed-Solomon trên đĩa CD và mã QR.
Checksum đơn giản nhất cộng tất cả các byte lại và giữ 8 bit cuối của tổng. Chạy đoạn code này để xem ý tưởng đó đúng ở đâu và sai ở đâu:
original sum= 78 crc32=a1628836
flipped sum= 80 crc32=a597580b
swapped sum= 78 crc32=59dbf74b
Đổi một ký tự thì tổng thay đổi. Đổi chỗ hai ký tự thì không, vì phép cộng không quan tâm đến thứ tự, nên tổng byte chấp nhận khoản thanh toán 10 thay vì 100. CRC-32 (cyclic redundancy check) coi dữ liệu là một số nhị phân rất dài và chia nó cho một đa thức 33 bit cố định; phần dư 32 bit phụ thuộc vào vị trí của từng bit, nên phép đổi chỗ bị phát hiện. Bản demo ở trên cho bạn thử điều này với văn bản của mình. CRC-32 phát hiện được mọi chuỗi lỗi liên tiếp dài tối đa 32 bit.
Các thuật toán checksum phổ biến
| Thuật toán | Kích thước | Nơi bạn gặp nó |
|---|---|---|
| Bit chẵn lẻ | 1 bit | Kết nối nối tiếp, bộ nhớ có parity |
| Chữ số kiểm tra Luhn | 1 chữ số | Số thẻ tín dụng, số IMEI |
| Internet checksum | 16 bit | Header của IPv4, TCP và UDP |
| Adler-32 | 32 bit | Định dạng nén zlib |
| CRC-32 | 32 bit | ZIP, gzip, PNG, khung Ethernet |
| MD5 | 128 bit | Các trang tải về cũ, công cụ tìm tệp trùng lặp |
| SHA-256 | 256 bit | Tải phần mềm, ảnh cài đặt Linux, Bitcoin |
Năm thuật toán đầu bắt được lỗi vô tình, không bắt được kẻ tấn công. Ai đó sửa một tệp có thể chỉnh vài byte để CRC-32 khớp trở lại. MD5 và SHA-256 là hàm băm mật mã, được thiết kế để việc tìm ra hai đầu vào có cùng đầu ra là bất khả thi trên thực tế. Về sau MD5 đã bị phá (các xung đột được công bố năm 2004), SHA-1 cũng vậy (2017), nên những bản tải về cần bảo mật dùng SHA-256 hoặc mạnh hơn. MD5 vẫn phát hiện hư hỏng vô tình rất tốt.
Cách kiểm tra checksum
Trên máy tính của bạn, mỗi hệ điều hành đều có sẵn một lệnh:
# Windows (PowerShell)
Get-FileHash ubuntu.iso -Algorithm SHA256
# macOS
shasum -a 256 ubuntu.iso
# Linux
sha256sum ubuntu.iso
So sánh kết quả với giá trị trên trang tải về chính thức; chữ hoa hay chữ thường không quan trọng. Trong Python, hashlib làm cùng việc kiểm tra đó, đọc tệp theo từng phần để một tệp 6 GB không bao giờ phải nằm trọn trong bộ nhớ:
a948904f2f0f479b8f8197694b30184b0d2ed1c1cd2a1ec0fb85d299a192a447
OK
Đổi hello world thành hello World rồi chạy lại: mọi ký tự của checksum đều thay đổi, và dòng cuối báo Checksum mismatch.
Lỗi checksum là gì?
Lỗi checksum nghĩa là phép kiểm tra thất bại: giá trị tính từ dữ liệu bạn đang có không khớp với giá trị được lưu hoặc gửi kèm. Hoặc dữ liệu đã thay đổi, hoặc chính checksum được lưu đã bị hỏng. Thông báo lỗi và cách sửa tùy vào nơi nó xuất hiện.
Lỗi checksum CMOS hoặc BIOS khi khởi động
Firmware của PC (BIOS hoặc UEFI) giữ các thiết lập, chẳng hạn thứ tự khởi động và đồng hồ, trong một bộ nhớ nhỏ được nuôi bằng một viên pin đồng xu, thường là CR2032, khi máy tính rút điện. Một checksum của các thiết lập đó được lưu ngay bên cạnh. Mỗi lần khởi động, firmware tính lại nó, và nếu hai giá trị khác nhau, nó hiện thông báo như CMOS Checksum Error - Defaults Loaded rồi quay về thiết lập gốc.
Nguyên nhân thường gặp là pin yếu hoặc hết pin, nhất là khi đồng hồ cũng bị đặt lại. Mất điện khi đang lưu thiết lập, hoặc xóa CMOS bằng jumper, cũng gây ra hậu quả tương tự. Cách sửa:
- Mở màn hình thiết lập (thường nhấn Delete hoặc F2 khi PC khởi động), đặt ngày, giờ và mọi thiết lập bạn đã thay đổi, rồi lưu và thoát (thường là F10). Nếu thông báo không xuất hiện lại, đó chỉ là sự cố một lần.
- Nếu nó quay lại sau mỗi lần khởi động nguội, hãy tắt máy, rút điện và thay pin CR2032.
- Nếu thông báo nhắc đến chính firmware, như
BIOS ROM checksum errorhoặcMain BIOS checksum error, thì bản firmware đã bị hỏng. Bo mạch có chip BIOS dự phòng sẽ tự khôi phục; với các bo mạch khác, dùng tính năng khôi phục BIOS của bo mạch hoặc nạp lại firmware từ trang của nhà sản xuất, và không được ngắt điện trong khi cập nhật.
Checksum không khớp sau khi tải về
SHA-256 của tệp bạn có không khớp với giá trị trên trang tải về. Tệp có thể chưa tải xong hoặc bị hỏng (kết nối bị ngắt, ổ đĩa đầy), có thể bạn đang so với checksum của một tệp khác (phiên bản hoặc kiến trúc CPU khác), hoặc đang so hai thuật toán khác nhau: giá trị MD5 dài 32 ký tự hex, còn SHA-256 dài 64. Hiếm hơn, tệp đã bị can thiệp.
Kiểm tra thuật toán và tên tệp, rồi tải lại tệp từ trang chính thức. Nếu bản mới tải từ nguồn chính thức vẫn không khớp, đừng chạy nó. Trình quản lý package làm bước kiểm tra này thay bạn: pip dừng lại với thông báo THESE PACKAGES DO NOT MATCH THE HASHES khi một package tải về khác với hash đã ghim.
Lỗi checksum trong tệp nén ZIP, RAR hoặc 7z
Các định dạng nén lưu CRC-32 của nội dung gốc của từng tệp. Khi giải nén, công cụ tính lại giá trị này; WinRAR báo không khớp là Checksum error, còn 7-Zip báo CRC Failed. Với tệp nén được mã hóa, nhập sai mật khẩu cũng cho ra đúng thông báo đó, vì mật khẩu sai sẽ giải mã ra dữ liệu rác. Hãy tải lại tệp nén, đảm bảo mọi phần của tệp nén chia nhỏ (.part1.rar, .part2.rar) đều có đủ và đến từ cùng một lần tải lên, rồi gõ lại mật khẩu. Lệnh Repair archive của WinRAR hiệu quả nhất với tệp nén được tạo kèm recovery record, còn tùy chọn "Keep broken files" giữ lại những gì đã giải nén đúng.
Lỗi checksum trong game và công cụ mạng
Game so sánh checksum các tệp của chúng, nên một bản cập nhật dở dang hoặc một tệp bị sửa sẽ không qua được bước kiểm tra. Trong Steam, "Verify integrity of game files" tải lại mọi tệp có checksum không khớp. Trong Wireshark, cảnh báo checksum trên các gói tin do chính máy bạn gửi đi thường không phải lỗi thật: card mạng điền checksum vào sau khi Wireshark đã bắt gói tin.
Những hiểu lầm thường gặp
- "Checksum khớp chứng tỏ tệp an toàn." Nó chỉ chứng tỏ tệp khớp với giá trị đã công bố. Nếu kẻ tấn công kiểm soát trang web, họ có thể đổi cả hai, vì thế các dự án còn ký tệp checksum của họ bằng một khóa.
- "Checksum có thể sửa tệp bị hỏng." Nó chỉ phát hiện hư hỏng. Cách sửa là lấy một bản sao tốt.
- "Checksum và hash là hai thứ khác nhau." Checksum mô tả công việc; một hàm băm như SHA-256 là một công cụ làm được việc đó.
Học tiếp ở đâu
Tính giá trị MD5, SHA-1 và SHA-256 của bất kỳ đoạn văn bản nào bằng công cụ tạo hash. Checksum làm việc trên dữ liệu thô, nên byte là gì và bit là gì giải thích thứ thực sự được cộng lại. Cơ sở dữ liệu dùng checksum trang để phát hiện hư hỏng trên ổ đĩa, còn mô phỏng bảng băm cho thấy một cách dùng khác của một giá trị ngắn được tính từ dữ liệu.
Câu hỏi thường gặp
SHA-256 có phải là checksum không?
Có, khi nó được dùng để xác minh dữ liệu. SHA-256 là một hàm băm mật mã, và giá trị 64 ký tự nó tạo ra cho một tệp thường được gọi là checksum SHA-256 của tệp đó. Nó chậm hơn CRC-32, nhưng còn bảo vệ được trước những thay đổi cố ý, vì trên thực tế không ai tạo được một tệp khác có cùng giá trị SHA-256.
Sửa lỗi checksum thế nào?
Tùy vào nơi lỗi xuất hiện. Khi khởi động, mở phần thiết lập BIOS, kiểm tra ngày giờ và các thiết lập, lưu rồi thoát, và thay pin CMOS dạng đồng xu nếu lỗi quay lại. Sau khi tải về hoặc trong tệp nén, tải lại tệp từ nguồn chính thức và đảm bảo mọi phần của tệp nén chia nhỏ đều có đủ và mật khẩu đúng.
Nguyên nhân gây lỗi checksum là gì?
Dữ liệu đã thay đổi trong khoảng từ lúc checksum được tính đến lúc được kiểm tra. Các nguyên nhân thường gặp là tải về bị gián đoạn, ổ đĩa hoặc USB sắp hỏng, pin CMOS yếu, mất điện khi đang ghi thiết lập hoặc firmware, và nhập sai mật khẩu của tệp nén được mã hóa.
Vì sao cần checksum?
Bộ nhớ lưu trữ và mạng không hoàn hảo. Bit bị đảo do nhiễu điện, nhiễu sóng vô tuyến, bộ nhớ flash bị mòn hoặc ổ đĩa sắp hỏng, và nếu không kiểm tra thì dữ liệu hỏng sẽ bị dùng mà không ai hay. Checksum là một cách rẻ để phát hiện hư hỏng, nhờ đó dữ liệu được gửi lại hoặc bị từ chối.
Tạo checksum như thế nào?
sha256sum file trên Linux, shasum -a 256 file trên macOS hoặc Get-FileHash file trong Windows PowerShell. Trong Python, hashlib.sha256(data).hexdigest() cho ra checksum SHA-256 và zlib.crc32(data) cho ra CRC-32.