Trang chủ Security

Hash - Hàm băm là gì? Các dạng Hash code

Hash là gì?

Hash hay Hashing là hàm chuyển đổi một giá trị sang giá trị khác. Việc băm dữ liệu là một thực tế phổ biến trong khoa học máy tính và được sử dụng cho nhiều mục đích khác nhau. Bao gồm mật mã (cryptography), nén (compression), tạo tổng kiểm tra (checksum generation) và lập chỉ mục dữ liệu (data indexing).

Hashing là một sự phù hợp tự nhiên đối với cryptography vì nó che dấu dữ liệu gốc với một giá trị khác. Một hàm băm có thể được sử dụng để tạo ra một giá trị chỉ có thể được giải mã bằng cách tìm kiếm giá trị từ một bảng băm (hash table). Bảng có thể là một mảng, cơ sở dữ liệu hoặc cấu trúc dữ liệu khác. Một cryptographic hash tốt tức là không thể đảo ngược, tức nó không thể đảo ngược được thiết kế.

Vì các giá trị băm thường nhỏ hơn bản gốc, điều này có thể làm hàm băm tạo ra các giá trị băm trùng lặp. Chúng được gọi là "collisions" (va chạm) và xảy ra khi các giá trị giống nhau được tạo ra từ các dữ liệu nguồn khác nhau. Các collisions có thể được giải quyết bằng cách sử dụng nhiều hàm băm hoặc bằng cách tạo ra một overflow table khi các giá trị băm trùng lặp xảy ra. Các collisions có thể tránh được bằng cách sử dụng giá trị băm lớn hơn.

Các loại nén (compression) khác nhau, chẳng hạn như lossy image compression và media compression, có thể kết hợp các hàm băm để giảm kích thước tệp. Bằng cách băm dữ liệu thành các giá trị nhỏ hơn, các media files có thể được nén thành các phần nhỏ hơn. Kiểu băm một chiều này không thể đảo ngược, nhưng nó có thể tạo ra dữ liệu giống như dữ liệu ban đầu nhưng đòi hỏi không gian đĩa ít hơn.

Hash - Hàm băm là gì? Các dạng Hash code - Ảnh 1.

Hash - Hàm băm là gì? Các dạng Hash code - Ảnh 2.

Hashes cũng được sử dụng để tạo checksums, xác thực tính toàn vẹn của tệp. Checksum là một giá trị nhỏ được tạo dựa trên các bit trong một tệp hoặc khối dữ liệu chẳng hạn như disk image. Khi chức năng kiểm tra được chạy trên một bản sao của tệp (chẳng hạn như tệp được tải xuống từ Internet), nó sẽ tạo ra giá trị băm giống như tệp gốc. Nếu tập tin không tạo ra cùng một checksum, một điều gì đó trong tập tin đã được thay đổi.

Cuối cùng, hashes được sử dụng để index data. Các giá trị băm có thể được sử dụng để ánh xạ dữ liệu tới các "nhóm" riêng lẻ trong một bảng băm. Mỗi nhóm có một ID duy nhất phục vụ như một con trỏ đến dữ liệu gốc. Điều này tạo ra một chỉ số nhỏ hơn đáng kể so với dữ liệu gốc, cho phép các giá trị được tìm kiếm và truy cập hiệu quả hơn.

Hiện nay có rất nhiều dạng Hash code khác nhau, nhưng phổ biến nhất có 3 loại:

- CRC32: chứa 8 ký tự, dựa trên thuật toán Cyclic Redundancy Check. Ưu điểm là tính toán nhanh và độ dài ngắn.

- MD5: dài 32 kí tự, sử dụng thuật toán Message Digest. Hiện nay được sử dụng khá phổ biến vì tính chính xác cao và không quá nhiều thao tác xử lý.

- SHA-1: gồm 40 kí tự, dùng thuật toán Secure Hash Algorithm. Rất chính xác nhưng thời gian tính toán khá lâu.

Kết luận

Hashing sở hữu những đặc trưng nổi bật sau:

- Với mỗi một đầu vào ngẫu nhiên, hashing phải tạo ra được một giá trị băm tương ứng.

- Không thể dịch ngược từ giá trị băm quay trở lại chuỗi ký tự ban đầu.

- Đầu vào khác nhau phải xuất ra được các giá trị băm khác nhau.

Tóm lại, hàm băm sản xuất ra các giá trị băm ngẫu nhiên giúp nâng cao tính bảo mật trong liên lạc. Băm còn được ứng dụng rộng rãi trong tìm kiếm dữ liệu, là thuật toán trong Encryption. Hashing được ứng dụng rộng rãi từ lưu mật khẩu, xác định tính toàn vẹn dữ liệu, đồ họa máy tính, điện tử, viễn thông…

Nguồn: Tech.vccloud.vn

>> Có thể bạn quan tâm: RSA cảnh báo: Hãy coi chừng các điểm mù bảo mật blockchain