Hashing (băm) là gì?
Trang chủ
Bài viết
Hashing (băm) là gì?

Hashing (băm) là gì?

Nâng cao
Đã đăng Jul 29, 2019Đã cập nhật Jan 31, 2023
7m
Băm là quá trình chuyển đổi đầu vào gồm các chữ cái và ký tự có kích thước không cố định để tạo đầu ra có kích thước cố định. Quá trình này được thực hiện bằng cách sử dụng các công thức toán học như các hàm băm (được thực hiện dưới dạng các thuật toán băm). 
Mặc dù không phải hàm băm nào cũng sử dụng mật mã hóa, nhưng cái gọi là hàm băm mật mã hóa chính là cốt lõi của tiền mã hóa. Nhờ chúng, blockchain và các hệ thống phân tán khác có thể đạt được  tính toàn vẹn và bảo mật của dữ liệu ở mức độ cao.

Các hàm băm truyền thống cũng các hàm băm mật mã hóa đều mang tính tất định. Tính tất định nghĩa là, miễn là đầu vào không đổi, thì thuật toán băm luôn đưa ra cùng một đầu ra (còn gọi là đại diện hoặc băm).

Thông thường, các thuật toán băm của tiền mã hóa được thiết kế như các hàm băm một chiều, nghĩa là chúng không thể chuyển đổi trở lại một cách dễ dàng mà không phải mất nhiều thời gian tính toán và tài nguyên. Nói cách khác, có thể dễ dàng tạo kết quả đầu ra từ dữ liệu đầu vào, nhưng không thể chuyển đổi theo hướng ngược lại (tìm được dữ liệu đầu vào từ duy nhất kết quả đầu ra). Nói chung, việc tìm được dữ liệu đầu vào càng khó khăn, thì tính bảo mật của thuật toán băm đó càng cao.


Hàm băm hoạt động như thế nào?

Các hàm băm khác nhau sẽ tạo ra các kết quả đầu ra có kích thước khác nhau, nhưng kích thước của các kết quả đầu ra có thể nhận được luôn cố định, không đổi. Ví dụ, thuật toán SHA-256 chỉ có thể tạo ra các kết quả đầu ra có kích thước 256 bit, trong khi thuật toán SHA-1 sẽ luôn tạo ra một kết quả đại diện có kích thước 160-bit.

Để minh họa, hãy chạy các từ “Binance” và “binance” qua thuật toán băm SHA-256 (thuật toán được sử dụng trong Bitcoin).

SHA-256

Đầu vào

Đầu vào (256 bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Có thể thấy một thay đổi nhỏ (viết hoa chữ cái đầu tiên) dẫn đến một giá trị băm hoàn toàn khác. Tuy nhiên, do chúng ta đang sử dụng SHA-256, các kết quả đầu ra luôn có kích thước cố định là 256-bit (hoặc 64 ký tự) - cho dù kích thước dữ liệu đầu vào là bao nhiêu. Hai kết quả đầu ra này vẫn giữ nguyên cho dù chúng ta chạy hai từ này qua thuật toán này bao nhiêu lần.

Ngược lại, khi chúng ta chạy các dữ liệu đầu vào này qua thuật toán băm SHA-1, chúng ta sẽ thu được các kết quả sau:

SHA-1

Đầu vào

Đầu ra (160 bit)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


SHA là từ viết tắt của Secure Hash Algorithms (Thuật toán Băm Bảo mật). Đây là một tập hợp các hàm băm mật mã hóa, bao gồm các hàm băm SHA-0, SHA-1 và các nhóm hàm băm SHA-2 và SHA-3. SHA-256, cùng với SHA-512 và các hàm băm khác, thuộc về nhóm hàm băm SHA-2. Hiện nay, chỉ các nhóm SHA-2 và SHA-3 được xem là các nhóm hàm băm bảo mật.


Tầm quan trọng của hàm băm?

Các hàm băm truyền thống có nhiều trường hợp sử dụng, bao gồm tra cứu cơ sở dữ liệu, phân tích tệp lớn và quản lý dữ liệu. Mặt khác, các hàm băm mật mã còn được sử dụng rộng rãi trong các ứng dụng bảo mật thông tin, chẳng hạn như xác thực thông điệp và dấu vân tay kỹ thuật số. Khi được sử dụng trong Bitcoin, các hàm băm mật mã là một phần thiết yếu của quá trình đào và cũng góp phần tạo ra các địa chỉ và khóa mới.

Băm thật sự là một công cụ mạnh mẽ khi cần xử lý một lượng thông tin lớn. Ví dụ, chúng ta có thể chạy một tệp hoặc tập dữ liệu lớn thông qua hàm băm và sau đó sử dụng kết quả đầu ra từ của nó để nhanh chóng xác minh tính chính xác và tính toàn vẹn của dữ liệu. Điều này là có thể bởi vì tính chất tất định của các hàm băm: đầu vào sẽ luôn dẫn đến một đầu ra ngắn gọn, đơn giản hóa (băm). Nhờ vào kỹ thuật này, sẽ không còn phải lưu trữ và “ghi nhớ” một lượng thông tin lớn nữa.

Băm là quy trình đặc biệt hữu ích trong công nghệ blockchain. Blockchain Bitcoin có một số hoạt động sử dụng quy trình băm, hầu hết các hoạt động đó là trong quá trình đào. Trên thực tế, gần như tất cả các giao thức tiền mã hóa đều dựa vào băm để liên kết và rút gọn các nhóm giao dịch thành các khối và cũng để tạo ra các liên kết mật mã giữa mỗi khối, tạo ra một blockchain một cách hiệu quả.


Các hàm băm mật mã

Một lần nữa, một hàm băm triển khai các kỹ thuật mã hóa có thể được định nghĩa là hàm băm mật mã. Nhìn chung, để phá vỡ một hàm băm mật mã đòi hỏi thực hiện nhiều nỗ lực mạnh mẽ. Để một người có thể “khôi phục” một hàm băm mật mã, họ sẽ cần đoán đầu vào là gì theo quy trình thử và sai cho đến khi tạo được kết quả đầu ra tương ứng. Tuy nhiên, cũng có khả năng các đầu vào khác nhau tạo ra cùng một đầu ra, trường hợp này được gọi là “xung đột”.

Về mặt kỹ thuật, một hàm băm mật mã cần có ba thuộc tính sau để được coi là bảo mật. Ba thuộc tính đó là chống xung đột, chống nghịch ảnh, và chống nghịch ảnh thứ hai.

Trước khi nói về từng thuộc tính, chúng ta hãy tóm tắt những thuộc tính này.

  • Chống xung đột: hai dữ liệu đầu vào khác nhau không thể tạo ra cùng một mã băm.

  • Chống nghịch ảnh: không thể “khôi phục” hàm băm (không thể xác định được dữ liệu đầu vào dựa trên kết quả đầu ra).

  • Chống nghịch ảnh thứ hai: không thể tìm dữ liệu đầu vào thứ hai xung đột với một dữ liệu đầu vào cho trước.


Chống xung đột

Như đã mô tả, xung đột xảy ra khi các dữ liệu đầu vào khác nhau tạo ra một mã băm giống nhau. Bởi vậy, một hàm băm được xem là chống xung đột cho đến khi ai đó tìm thấy sự xung đột. Lưu ý rằng các xung đột sẽ luôn tồn tại ở một hàm băm nào đó, vì các dữ liệu đầu vào là vô hạn, trong khi đó các kết quả đầu ra có thể có là hữu hạn.

Hay nói cách khác, một hàm băm được coi là chống xung đột khi khả năng tìm thấy sự xung đột rất thấp và có thể mất hàng triệu năm tính toán để tìm thấy xung đột. Bởi vậy, mặc dù không có hàm băm nào là hoàn toàn tránh được xung đột, nhưng một số hàm đủ mạnh để được xem là chống xung đột (ví dụ, SHA-256).

Trong số nhiều thuật toán SHA, các nhóm SHA-0 và SHA-1 không còn bảo mật nữa vì người ta đã tìm thấy các xung đột ở nhóm này. Hiện tại, các nhóm SHA-2 và SHA-3 được xem là chống xung đột.


Chống nghịch ảnh

Thuộc tính chống nghịch ảnh có liên quan đến khái niệm các hàm một chiều. Hàm băm được xem là chống ngược ảnh khi khả năng tìm được dữ liệu đầu vào từ một kết quả đầu ra nào đó là rất thấp.

Thuộc tính này khác với thuộc tính thứ nhất, kẻ tấn công sẽ sử dụng thuộc tính này để cố đoán được dữ liệu đầu vào dựa trên kết quả đầu ra đã biết. Trong khi đó, xung đột xảy ra khi tìm được hai dữ liệu đầu vào khác nhau nhưng lại tạo ra cùng một kết quả đầu ra, nhưng việc dữ liệu đầu vào nào đã được sử dụng là không quan trọng.

Thuộc tính chống nghịch ảnh rất quan trọng để bảo vệ dữ liệu, vì chỉ cần mã băm của một thông điệp để chứng minh tính xác thực của nó, mà không cần tiết lộ thông tin. Trên thực tế, nhiều nhà cung cấp dịch vụ và ứng dụng web lưu trữ và sử dụng mật khẩu dưới dạng các mã băm thay vì dưới dạng văn bản gốc.


Chống nghịch ảnh thứ hai

Nói một cách đơn giản, chống nghịch ảnh thứ hai nằm giữa hai thuộc tính đầu tiên. Tấn công nghịch ảnh thứ hai xảy ra khi ai đó tìm thấy một dữ liệu đầu vào cụ thể mà tạo ra một kết quả đầu ra giống với kết quả đầu ra của một dữ liệu đầu vào khác mà họ đã biết.

Nói cách khác, tấn công nghịch ảnh thứ hai là việc tìm một xung đột, nhưng thay vì tìm hai dữ liệu đầu vào ngẫu nhiên tạo ra cùng một mã băm, thì họ tìm một dữ liệu đầu vào mà tạo ra một mã băm giống với mã băm của một dữ liệu đầu vào mà họ đã biết.

Do vậy, hàm băm nào tránh được xung đột cũng đồng thời tránh được các tấn công nghịch ảnh thứ hai, vì nghịch ảnh thứ hai cũng có nghĩa là xung đột sẽ xảy ra. Tuy nhiên, vẫn có thể thực hiện tấn công nghịch ảnh đối với một hàm chống nghịch ảnh, vì điều đó có nghĩa là tìm một dữ liệu đầu vào duy nhất dựa trên một kết quả đầu ra duy nhất.


Đào

Trong Bitcoin có rất nhiều bước sử dụng mining các hàm băm, chẳng hạn kiểm tra số dư, liên kết các dữ liệu đầu vào và kết quả đầu ra của giao dịch, và các băm các giao dịch trong một khối để tạo thành một Merkle Tree. Nhưng một trong lý do khiến blockchain Bitcoin là một blockchain bảo mật là các thợ đào phải tạo vô số các thao tác băm để cuối cùng tìm được một giải pháp hợp lệ cho khối tiếp theo.
Cụ thể là, một thợ đào phải thử một số dữ liệu đầu vào khác nhau khi tạo một giá trị băm cho khối tiềm năng của họ. Về bản chất, các thợ đào chỉ có thể xác thực được khối của họ nếu họ tạo được một mã băm đầu ra mà bắt đầu bằng một vài số 0. Số lượng các số 0 xác định độ khó của việc đào, và độ khó này thay đổi theo tốc độ băm của mạng.

Trong trường hợp này, tốc độ băm đại diện cho lượng sức mạnh máy tính được sử dụng để đào Bitcoin. Nếu tốc độ băm của mạng tăng lên, giao thức Bitcoin sẽ tự động điều chỉnh độ khó của việc đào để thời gian trung bình cần thiết để đào được một khối sẽ duy trì ở mức 10 phút. Ngược lại, nếu một số thợ đào ngừng đào, khiến tốc độ băm giảm đáng kể, thì độ khó của việc đào sẽ được điều chỉnh, khiến việc đào trở nên dễ dàng hơn (cho đến khi thời gian trung bình để đào được một khối trở lại mức 10 phút).

Chú ý rằng các thợ đào không cần tìm ra các xung đột bởi vì có nhiều mã băm để họ có thể tạo ra như là các đầu ra hợp lệ (bắt đầu bằng một vài số 0 nhất định). Bởi vậy có một số giải pháp để đào một khối cụ thể, và các thợ đào chỉ cần tìm ra một trong số đó - theo ngưỡng được xác định từ độ khó của việc đào. 

Bởi vì đào Bitcoin là một nhiệm vụ tiêu tốn nhiều chi phí, nên các thợ đào không có lý do gì để lừa gạt hệ thống vì điều đó sẽ dẫn đến các tổn thất tài chính đáng kể. Càng có nhiều thợ đào tham gia một blockchain thì blockchain đó càng lớn mạnh.


Kết luận

Có thể khẳng định rằng các hàm băm là các công cụ thiết yếu trong khoa học máy tính, đặc biệt khi xử lý khối dữ liệu khổng lồ. Khi được kết hợp với mật mã hóa, các thuật toán băm có thể được sử dụng linh hoạt, mang lại khả năng bảo mật và xác thực theo nhiều cách khác nhau. Bởi vậy, các hàm băm mật mã đóng vai trò thiết yếu đối với hầu hết các mạng tiền mã hóa, vì vậy việc hiểu được các thuộc tính và cơ chế hoạt động của chính chắc chắn sẽ có ích cho những người quan tâm đến công nghệ blockchain.