Băm đề cập đến quá trình tạo đầu ra có kích thước cố định từ đầu vào có kích thước thay đổi. Điều này được thực hiện bằng cách sử dụng các công thức toán học được gọi là hàm băm (được triển khai dưới dạng thuật toán băm). 

Mặc dù không phải tất cả các hàm băm đều liên quan đến việc sử dụng mật mã, nhưng cái gọi là hàm băm mật mã lại là trọng tâm của tiền điện tử. Nhờ chúng, chuỗi khối và các hệ thống phân tán khác có thể đạt được mức độ toàn vẹn và bảo mật dữ liệu đáng kể.

Cả hàm băm thông thường và hàm băm mật mã đều mang tính xác định. Tính tất định có nghĩa là miễn là dữ liệu đầu vào không thay đổi thì thuật toán băm sẽ luôn tạo ra cùng một kết quả (còn được gọi là tóm tắt hoặc hàm băm).

Các thuật toán băm tiền điện tử thường được thiết kế dưới dạng hàm một chiều, có nghĩa là chúng không thể đảo ngược nếu không tốn nhiều thời gian và tài nguyên tính toán. Nói cách khác, việc tạo đầu ra từ đầu vào khá dễ dàng, nhưng lại tương đối khó để làm ngược lại (chỉ tạo đầu vào từ đầu ra). Nói chung, càng khó tìm đầu vào thì thuật toán băm càng được coi là an toàn.


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

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

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

SHA-256

Lối ra

Đầu ra (256bit)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


Lưu ý rằng một thay đổi nhỏ (trường hợp của chữ cái đầu tiên) sẽ dẫn đến giá trị hàm băm hoàn toàn khác. Nhưng vì chúng tôi đang sử dụng SHA-256 nên đầu ra sẽ luôn có kích thước cố định là 256 bit (hoặc 64 ký tự) bất kể kích thước của đầu vào. Ngoài ra, không quan trọng chúng ta chạy hai từ đó bao nhiêu lần trong thuật toán, hai kết quả đầu ra sẽ không đổi.

Và nếu chúng ta chuyển các đầu vào tương tự thông qua thuật toán băm SHA-1, chúng ta sẽ nhận được kết quả sau:

SHA-1

Lối ra

Đầu ra (160bit)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


Điều thú vị là chữ viết tắt SHA là viết tắt của Secure Hash Algorithms (thuật toán mã hóa an toàn). Nó là một tập hợp các hàm băm mật mã bao gồm các thuật toán SHA-0 và SHA-1, cũng như các nhóm SHA-2 và SHA-3. SHA-256 là một phần của họ SHA-2, cùng với SHA-512 và các biến thể khác. Hiện tại, chỉ có nhóm SHA-2 và SHA-3 được coi là an toàn.


Tầm quan trọng của công nghệ này là gì?

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

Sức mạnh thực sự của việc băm được bộc lộ khi làm việc với lượng thông tin khổng lồ. Ví dụ: bạn có thể chạy một tệp hoặc tập dữ liệu lớn thông qua hàm băm, sau đó sử dụng kết quả đầu ra của nó để nhanh chóng kiểm tra tính chính xác và tính toàn vẹn của dữ liệu. Điều này có thể thực hiện được do tính chất xác định của hàm băm: đầu vào luôn dẫn đến đầu ra được nén, đơn giản hóa (hàm băm). Phương pháp này giúp loại bỏ nhu cầu lưu trữ và "ghi nhớ" khối lượng lớn dữ liệu.

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


Hàm băm mật mã

Một lần nữa, hàm băm sử dụng kỹ thuật mã hóa có thể được định nghĩa là hàm băm mật mã. Nói chung, việc bẻ khóa hàm băm mật mã đòi hỏi nhiều nỗ lực mạnh mẽ. Để "mở ra" hàm băm mật mã, bạn cần chọn đầu vào bằng cách thử và sai cho đến khi thu được đầu ra phù hợp. Tuy nhiên, cũng có khả năng các đầu vào khác nhau sẽ tạo ra cùng một kết quả, trong trường hợp đó sẽ xảy ra "va chạm".

Về mặt kỹ thuật, hàm băm mật mã phải đáp ứng ba thuộc tính để được coi là bảo mật tốt. Chúng ta có thể mô tả chúng như: khả năng chống va chạm và khả năng chống lại sự tấn công của việc tìm kiếm nguyên mẫu thứ nhất và thứ hai.

Trước khi mô tả từng thuộc tính, hãy tóm tắt logic của chúng trong ba câu ngắn.

  • Khả năng chống va chạm: không thể tìm thấy hai đầu vào khác nhau tạo ra cùng một hàm băm.

  • Tính chắc chắn khi tìm bản xem trước đầu tiên: Không thể "đảo ngược" hàm băm (tìm đầu vào thông qua một đầu ra nhất định).

  • Khó tìm được ví dụ thứ hai: Không thể tìm thấy bất kỳ đầu vào thứ hai nào có cùng hàm băm với đầu vào đầu tiên.


Chống va chạm

Như đã đề cập trước đó, xung đột xảy ra khi các đầu vào khác nhau tạo ra cùng một hàm băm. Hàm băm sau đó được coi là có khả năng chống va chạm cho đến khi ai đó phát hiện ra xung đột đó. Lưu ý rằng xung đột sẽ luôn tồn tại đối với bất kỳ hàm băm nào do số lượng đầu vào là vô hạn và số lượng đầu ra là hữu hạn.

Do đó, hàm băm có khả năng chống va chạm khi xác suất phát hiện va chạm nhỏ đến mức phải mất hàng triệu năm tính toán. Vì lý do này, mặc dù không có hàm băm không xung đột nhưng một số hàm mạnh đến mức có thể được coi là ổn định (ví dụ: SHA-256).

Trong số các thuật toán SHA khác nhau, nhóm SHA-0 và SHA-1 không còn an toàn vì đã phát hiện xung đột. Hiện tại chỉ có nhóm SHA-2 và SHA-3 được coi là có khả năng chống va chạm.


Chống lại việc tìm kiếm nguyên mẫu đầu tiên

Tính chất này liên quan chặt chẽ đến khái niệm hàm một phía. Hàm băm được coi là mạnh mẽ trong việc tìm bản xem trước đầu tiên miễn là có xác suất rất thấp để ai đó có thể tìm thấy đầu vào bằng cách sử dụng đầu ra được tạo.

Lưu ý rằng thuộc tính này khác với thuộc tính trước vì kẻ tấn công cần đoán đầu vào dựa trên một đầu ra cụ thể. Loại xung đột này xảy ra khi ai đó tìm thấy hai đầu vào khác nhau tạo ra cùng một đầu ra, bất kể đầu vào cụ thể nào được sử dụng.

Thuộc tính bằng chứng về cái nhìn đầu tiên rất có giá trị đối với bảo mật dữ liệu vì một hàm băm đơn giản của tin nhắn có thể chứng minh tính xác thực của nó mà không cần tiết lộ thêm thông tin. Trong thực tế, nhiều nhà cung cấp dịch vụ và ứng dụng web lưu trữ và sử dụng hàm băm được tạo từ mật khẩu thay vì sử dụng chúng ở định dạng văn bản.


Chống lại việc tìm kiếm nguyên mẫu thứ hai

Kiểu ổn định này nằm ở đâu đó giữa hai thuộc tính trước đó. Cuộc tấn công tìm kiếm nguyên mẫu thứ hai bao gồm việc tìm kiếm một đầu vào cụ thể để có thể tạo ra đầu ra như vậy đã được tạo bằng cách sử dụng một đầu vào khác đã biết trước đó.

Nói cách khác, một cuộc tấn công nhìn trước liên quan đến việc phát hiện xung đột, nhưng thay vì tìm hai đầu vào ngẫu nhiên tạo ra cùng một hàm băm, cuộc tấn công nhằm mục đích tìm một đầu vào có thể tái tạo hàm băm đã được tạo bởi một đầu vào khác.

Do đó, bất kỳ hàm băm nào có khả năng chống va chạm cũng có khả năng chống lại sự tấn công của việc tìm số nguyên tố thứ hai, vì số nguyên tố thứ hai luôn cần va chạm. Tuy nhiên, vẫn có thể thực hiện cuộc tấn công tra cứu đầu tiên trong chức năng chịu va chạm, vì điều này liên quan đến việc tìm một đầu vào bằng một đầu ra.


Khai thác mỏ

Có nhiều bước trong quá trình khai thác Bitcoin được thực hiện bằng cách sử dụng hàm băm. Đây là kiểm tra số dư, liên kết đầu vào và đầu ra của giao dịch và băm tất cả các giao dịch trong một khối để tạo thành cây Merkle. Nhưng một trong những lý do chính khiến chuỗi khối Bitcoin an toàn là vì thợ đào phải thực hiện càng nhiều thao tác băm càng tốt để cuối cùng tìm ra giải pháp chính xác cho khối tiếp theo.

Người khai thác phải sử dụng một số đầu vào khác nhau khi tạo hàm băm cho khối ứng viên của mình. Chỉ có thể xác minh khối nếu đầu ra được tạo chính xác dưới dạng hàm băm bắt đầu bằng một số số 0 nhất định. Số lượng số 0 xác định độ khó của việc khai thác và thay đổi tùy thuộc vào tốc độ băm của mạng.

Trong trường hợp này, hashrate là thước đo sức mạnh máy tính mà bạn đầu tư vào việc khai thác Bitcoin. Nếu tốc độ băm bắt đầu tăng, giao thức Bitcoin sẽ tự động điều chỉnh độ khó khai thác để thời gian trung bình cần thiết để khai thác một khối là khoảng 10 phút. Nếu một số thợ mỏ quyết định ngừng khai thác, dẫn đến tốc độ băm giảm đáng kể, thì độ khó khai thác sẽ được điều chỉnh để tạm thời giảm bớt việc tính toán (cho đến khi thời gian hình thành khối trung bình trở về 10 phút).

Lưu ý rằng người khai thác không cần tìm kiếm xung đột vì có một số giá trị băm mà họ có thể tạo dưới dạng đầu ra hợp lệ (bắt đầu bằng một số số 0 nhất định). Do đó, có một số giải pháp khả thi cho một khối nhất định và người khai thác chỉ phải tìm một trong số đó - theo ngưỡng được xác định bởi độ khó khai thác. 

Vì khai thác Bitcoin là một nhiệm vụ tốn kém nên những người khai thác không có động cơ để gian lận hệ thống vì nó sẽ dẫn đến tổn thất tài chính đáng kể. Theo đó, càng có nhiều thợ mỏ tham gia blockchain thì nó càng lớn và mạnh hơn.


Kết quả

Không còn nghi ngờ gì nữa, hàm băm là một trong những công cụ chính của khoa học máy tính, đặc biệt là khi làm việc với lượng dữ liệu khổng lồ. Khi kết hợp với mật mã, thuật toán băm có thể rất hữu ích, cung cấp tính bảo mật và xác thực theo nhiều cách khác nhau. Do đó, các hàm băm mật mã rất quan trọng đối với hầu hết các mạng tiền điện tử và việc hiểu các thuộc tính cũng như cơ chế hoạt động của chúng chắc chắn hữu ích cho bất kỳ ai quan tâm đến công nghệ blockchain.