# VIII. Hash Functions

## 1. What are Hash and Hash Functions?

Hash functions (hàm băm) là một loại hàm đặc biệt thực hiện các phép toán nhất định về mặt toán học và trong khoa học máy tính, hoạt động trên các bit.

Hàm băm không phải là thuật toán encryption/decryption. Vì vậy, hàm băm không cần khóa để thực hiện các phép toán.

Hàm băm là hàm hoạt động nhanh và có tính năng tính toán dễ dàng. Bằng cách này, nó có thể hoạt động trong thời gian ngắn ngay cả trên các tệp lớn.&#x20;

Hàm băm lấy đầu vào và tạo ra đầu ra là kết quả của các phép tính trong thuật toán. Đầu ra này được gọi là "Hash".

Độ dài của đầu vào có thể thay đổi trong khi độ dài của đầu ra có độ dài cố định. Một trong những tính năng quan trọng của hàm băm là chúng tạo ra một hàm băm khác nhau cho mỗi đầu vào khác nhau.

Ví dụ: hàm băm của chuỗi bit "00110101" và hàm băm của chuỗi bit "00110100" là khác nhau. Sự khác biệt dù chỉ một bit cũng ảnh hưởng đến kết quả do hàm băm tạo ra, nghĩa là nó làm cho giá trị của hàm băm khác nhau.&#x20;

Độ tin cậy của hàm băm phụ thuộc vào việc tạo ra các giá trị băm khác nhau cho các đầu vào khác nhau.&#x20;

Ví dụ: nếu hai đầu vào khác nhau tạo ra cùng một hàm băm, như trong hình bên dưới, thì hàm băm sẽ mất độ tin cậy. Tình huống trong đó hai đầu vào khác nhau tạo ra cùng một hàm băm được gọi là "collision" (va chạm).

<figure><img src="/files/py7GhfNlq9nGicuRBulz" alt=""><figcaption></figcaption></figure>

## 2. What are the Purposes of using it?

Có nhiều cách sử dụng hàm Hash. Hàm băm chuyển các đầu vào hoặc tệp rất lớn thông qua các hoạt động dựa trên bit, dẫn đến hàm băm ngắn và duy nhất nhờ thuật toán.&#x20;

Hash được tạo ra từ hash function có thể được sử dụng làm **digital identity** của dữ liệu.

Ví dụ: hash values được sử dụng để phân biệt phần mềm độc hại.&#x20;

Bạn có thể lấy thông tin về phần mềm độc hại khi truy vấn hash của phần mềm độc hại trong kho lưu trữ phần mềm độc hại quy mô lớn đã biết.

Ví dụ: bằng cách tìm kiếm hash trên "virustotal.com", bạn có thể truy cập các phân tích phần mềm độc hại được thực hiện trước đó về phần mềm độc hại có liên quan bằng thông tin hash.

<figure><img src="/files/sEQbkTmGPAgBQRjxP2X2" alt=""><figcaption></figcaption></figure>

Một mục đích khác của việc sử dụng hash functions là **kiểm tra tính toàn vẹn**.&#x20;

Nếu xảy ra sự cố trong quá trình truyền dữ liệu hoặc tệp và có sự thay đổi về bit của tệp/dữ liệu, thì hashs được sử dụng để hiểu điều này.&#x20;

Đôi khi những kẻ tấn công có thể thay thế các tệp thật bằng tệp giả một cách cụ thể. Trong trường hợp này cần xác minh xem file đó có phải là file gốc hay không.&#x20;

Một cách để biết tệp còn nguyên vẹn hay không là sử dụng hash functions.

Ví dụ: giả sử chúng tôi có một tệp có phần mở rộng "iso" được tải xuống từ Internet: "linuxmint-20.3-cinnamon-64bit.iso".

Đầu tiên, chúng ta cần tải xuống tệp. Sau đó, chúng ta hãy nhấp vào phần bên dưới để xem các hash values của tệp:

<figure><img src="/files/EOVcjHyL7Y0PqkjZBqJ5" alt=""><figcaption></figcaption></figure>

The hash values của các tệp cài đặt Linux mint như sau:

<figure><img src="/files/qER5v36XPTRwc0OLad6d" alt=""><figcaption></figcaption></figure>

The hash của tệp iso mà chúng tôi tải xuống từ trang web như trên.

Lệnh "**sha256sum**" có thể được sử dụng trong bất kỳ thiết bị đầu cuối Linux nào để tính toán hàm băm loại sha256 của tệp đã tải xuống:

<figure><img src="/files/tbSyZ1xN56ticr3qqHGk" alt=""><figcaption></figcaption></figure>

Như có thể thấy trong hình trên, lệnh "**sha256sum**" đã đạt được cùng một giá trị băm được đưa ra trên trang web. Nếu các giá trị băm giống nhau thì chứng tỏ file chưa bị sửa đổi và là file gốc.

## 3. The Role of Hash Functions in Cyber ​​Security

Hash functions rất quan trọng về mặt an ninh mạng.&#x20;

Trên hệ thống Linux và Windows, thông tin mật khẩu của người dùng không được lưu dưới dạng văn bản rõ ràng trên hệ thống.&#x20;

Đó sẽ là một phương pháp rất không an toàn. Mật khẩu được lưu giữ ở dạng hashs trên hệ thống.&#x20;

Hash functions khác với các thuật toán mật mã khác.&#x20;

Một trong những khác biệt này, có lẽ là một trong những khác biệt quan trọng nhất, là hash functions có **tính một chiều**. Là một chiều có nghĩa là đầu vào được cung cấp cho hash function không thể lấy được qua hash.

<figure><img src="/files/0V2l2yo3ZN7yx9TBI4Nv" alt=""><figcaption></figcaption></figure>

### An Example of Hash Function: MD5

Mặc dù hash functions là các thuật toán chung hoạt động với logic tương tự nhưng vẫn có một số khác biệt giữa chúng.

Ví dụ: độ dài của hàm băm được tạo bởi mỗi hash function là một giá trị cố định và khác nhau.&#x20;

Ví dụ về MD5 hash function được đưa ra trong hình ảnh bên dưới:

<figure><img src="/files/XxN5X2VEQC4tRezYqFtc" alt=""><figcaption></figcaption></figure>

The MD5 hash function tạo ra a "128 bit" hash.&#x20;

Có nhiều cách để tìm hash của đầu vào:

#### Using online services

Ví dụ: bạn có thể nhập dữ liệu đầu vào mà bạn muốn tạo MD5 hash trên trang web sau: <https://www.miraclesalad.com/webtools/md5.php>

<figure><img src="/files/nCGBS6BgtAtfZSq7PIvI" alt=""><figcaption></figcaption></figure>

#### Leveraging the Linux command line

The MD5 hash của đầu vào mong muốn có thể được tạo thông qua dòng lệnh Linux. Đối với điều này, các lệnh "**echo**" và "**md5sum**" được sử dụng cùng nhau:

<figure><img src="/files/EMCT6O5v3R41Ef5OEQuN" alt=""><figcaption></figcaption></figure>

LƯU Ý: Bạn có thể sử dụng lệnh "**md5sum filename**" để tính hàm băm MD5 của tệp trên dòng lệnh Linux.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://viettaliii.gitbook.io/home/self-learning/introduction-to-cryptology/viii.-hash-functions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
