Từ băm (hoặc Hashing) đề cập đến quy trình tạo ra đầ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 thông qua việc sử dụng các công thức toán học được gọi là hàm băm (được áp dụng như các thuật toán băm).

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

Cả hàm băm truyền thống và mã hóa đều thuộc tính xác định. Điều này có nghĩa là miễn là đầu vào không thay đổi, thuật toán băm sẽ luôn tạo ra cùng một đầu ra (còn được gọi là Digest hoặc Hash).

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


Các hàm/ chức năng băm hoạt động như thế nào?

Các hàm băm khác nhau tạo ra đầu ra với kích thước khác nhau nhưng kích thước đầu ra khả thi cho mỗi thuật toán băm luôn cố định. Ví dụ, thuật toán SHA-256 chỉ có thể tạo ra đầu ra có kích thước 256 bits, trong khi SHA-1 luôn tạo ra một tóm tắt có kích thước 160 bits.

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

SHA-256

Đầu vào

Đầu ra (256 bits)

Binance

f1624fcc63b615ac0e95daf9ab78434ec2e8ffe402144dc631b055f711225191

binance

59bba357145ca539dcd1ac957abc1ec5833319ddcae7f5e8b5da0c36624784b2


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

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

SHA-1

Đầu vào

Đầu ra (160 bits)

Binance

7f0dc9146570c608ac9d6e0d11f8d409a1ee6ed1

binance

e58605c14a76ff98679322cca0eae7b3c4e08936


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


Tại sao nó lại quan trọng?

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

Sức mạnh thực sự của băm đến khi xử lý một lượng thông tin khổng lồ. Ví dụ, một tệp lớn hoặc tập dữ liệu có thể được chạy qua một hàm băm và sau đó sử dụng đầu ra 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 khả thi nhờ vào tính chất xác định của các hàm băm: đầu vào luôn dẫn đến đầu ra đơn giản và ngắn gọn (băm). Kỹ thuật này loại bỏ nhu cầu lưu trữ và nhớ một lượng lớn dữ liệu.

Băm đặc biệt hữu ích trong bối cảnh công nghệ blockchain. Blockchain Bitcoin chứa nhiều giao dịch liên quan đến băm, phần lớn trong quy trình khai thác. Thực tế, hầu hết các giao thức tiền điện tử đều dựa vào băm để liên kết và cô đặc các tập hợp giao dịch thành các khối. Cũng như để tạo ra các liên kết mã hóa giữa mỗi khối, dẫn đến việc tạo ra blockchain một cách hiệu quả.


Các hàm băm mã hóa

Một lần nữa, hàm băm (băm) sử dụng các kỹ thuật mã hóa có thể được định nghĩa là hàm băm mã hóa. Việc xâm nhập vào một hàm băm mã hóa yêu cầu vô số nỗ lực tấn công brute-force. Để đảo ngược một hàm băm mã hóa, họ phải đoán đầu vào là gì thông qua thử nghiệm và sai sót cho đến khi tạo ra đầu ra tương ứng. Nhưng cũng có thể xảy ra tình huống đầu vào khác nhau tạo ra cùng một đầu ra và trong trường hợp này xảy ra “va chạm”.

Về mặt kỹ thuật, một hàm băm mã hóa cần phải tuân theo ba đặc tính để được coi là an toàn một cách hiệu quả. Chúng ta có thể mô tả các đặc tính đó như sau: kháng va chạm (collision resistance), kháng trước hình ảnh (preimage resistance) và kháng trước hình ảnh thứ hai (second preimage resistance).

Trước khi thảo luận về mỗi đặc tính, hãy tóm tắt logic của chúng trong ba câu ngắn.

  • Kháng va chạm (Collision resistance): Không thể tìm thấy hai đầu vào khác nhau tạo ra cùng một băm (hash) làm đầu ra.

  • Kháng trước hình ảnh (Preimage resistance): Không thể “đảo ngược” hàm băm (tìm đầu vào từ đầu ra nhất định).

  • Kháng trước hình ảnh thứ hai (Second-preimage resistance): Không thể tìm thấy bất kỳ đầu vào thứ hai nào va chạm với một đầu vào cụ thể khác.


Kháng va chạm

Như đã đề cập trước đó, xảy ra va chạm khi đầu vào khác nhau tạo ra cùng một băm chính xác. Do đó, hàm băm được coi là kháng va chạm cho đến khi ai đó tìm thấy một va chạm. Lưu ý rằng va chạm sẽ luôn tồn tại cho bất kỳ hàm băm nào vì đầu vào tiềm năng là vô hạn trong khi đầu ra tiềm năng là hữu hạn.

Nói cách khác, một hàm băm được coi là kháng va chạm khi khả năng tìm thấy một va chạm cực kỳ thấp đến mức yêu cầu hàng triệu năm tính toán. Vì vậy, mặc dù không có hàm băm nào hoàn toàn không có va chạm, nhưng một số hàm đủ mạnh để được coi là kháng (ví dụ SHA-256).

Trong số các thuật toán SHA khác nhau, các tập hợp SHA-0 và SHA-1 không còn an toàn nữa do có các va chạm. Hiện tại, các tập hợp SHA-2 và SHA-3 được coi là kháng va chạm.


Kháng trước hình ảnh

Đặc tính kháng trước hình ảnh liên quan đến khái niệm các hàm một chiều. Một hàm băm được coi là kháng trước hình ảnh khi có khả năng cực kỳ thấp cho ai đó tìm thấy đầu vào tạo ra đầu ra nhất định.

Cần lưu ý rằng đặc tính này khác với đặc tính trước đó vì một kẻ tấn công sẽ cố gắng đoán đầu vào là gì bằng cách nhìn vào đầu ra nhất định. Ngược lại, va chạm xảy ra khi ai đó tìm thấy đầu vào khác nhau tạo ra cùng một đầu ra nhưng không quan trọng đầu vào nào đã được sử dụng.

Đặc tính kháng trước hình ảnh rất có giá trị trong việc bảo vệ dữ liệu vì một 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ộ bất kỳ thông tin nào. Khi áp dụng 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 các băm (hashes) được tạo ra từ mật khẩu thay vì mật khẩu ở dạng văn bản gốc.


Kháng trước hình ảnh thứ hai

Để đơn giản, chúng ta có thể nói rằng kháng trước hình ảnh thứ hai nằm ở đâu đó giữa các đặc tính khác. Cuộc tấn công kháng trước hình ảnh thứ hai xảy ra khi ai đó có thể tìm thấy một đầu vào cụ thể tạo ra cùng một đầu ra của một đầu vào khác mà họ đã biết.

Nói cách khác, cuộc tấn công kháng trước hình ảnh thứ hai bao gồm việc tìm một va chạm, nhưng thay vì tìm hai đầu vào ngẫu nhiên tạo ra cùng một băm làm đầu ra, họ tìm một đầu vào tạo ra cùng một băm đã được tạo ra bởi một đầu vào cụ thể khác.

Vì vậy, bất kỳ hàm băm nào kháng va chạm cũng sẽ kháng lại các cuộc tấn công kháng trước hình ảnh thứ hai, vì cái sau sẽ luôn có nghĩa là xảy ra va chạm. Nhưng kẻ tấn công vẫn có thể thực hiện một cuộc tấn công trước vào một hàm kháng va chạm vì điều đó liên quan đến việc tìm một đầu vào từ một đầu ra.


Khai thác

Có nhiều bước trong quy trình khai thác Bitcoin mà liên quan đến các hàm băm như xác minh số dư, liên kết đầu vào và đầu ra với các giao dịch, và băm các giao dịch bên trong một khối để tạo thành Merkle Tree. Nhưng một trong những lý do chính khiến blockchain Bitcoin an toàn là thực tế rằng những người khai thác cần vô số các phép băm để tìm ra giải pháp hợp lệ cho khối tiếp theo.

Cụ thể hơn, những người khai thác phải thử nhiều đầu vào khác nhau khi tạo giá trị băm cho khối ứng cử của họ. Về cơ bản, họ chỉ có thể xác minh khối của mình nếu họ tạo ra một băm có đầu ra bắt đầu với một số lượng nhất định của các số 0. Số lượng số 0 xác định độ khó khai thác và khác nhau dựa trên tỷ lệ băm được phân bổ cho mạng.

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

Lưu ý rằng những người khai thác không cần phải tìm các va chạm vì có rất nhiều băm mà họ có thể tạo ra như là đầu ra hợp lệ (bắt đầu với một số lượng nhất định của các số 0). Do đó, có nhiều giải pháp khả thi cho một khối nhất định và những người khai thác không cần phải tìm một trong số chúng theo đầu vào mà độ khó khai thác xác định.

Vì quy trình khai thác Bitcoin rất tốn kém, những người khai thác không có lý do đủ để gian lận hệ thống vì điều này sẽ dẫn đến tổn thất tài chính lớn. Càng nhiều người khai thác tham gia vào blockchain, nó sẽ càng mạnh mẽ hơn.


Ý tưởng cuối cùng

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