Skip to content

[Blockchain Fundamentals][Bài 3] Hash function

Posted on:April 18, 2022 at 12:00 AM (10 min read)

Chuỗi bài viết Blockchain Fundamentals của mình sẽ góp cho bạn những góc nhìn sơ khởi về mặt kỹ thuật của công nghệ blockchain, các yếu tố công nghệ của các loại cryptocurrency như Bitcoin hay Ethereum,… và mình hoàn toàn không khuyến nghị hay gợi ý cho người đọc về việc đầu tư bất kỳ loại cryptocurrency nào. Vậy nên bạn hãy chỉ đọc những bài viết của mình dưới góc nhìn kỹ thuật, và tự chịu trách nhiệm cho quyết định của mình nhé.

Những thông tin trong bài viết của mình được trích từ khóa học cùng tên Blockchain Fundamentals của tác giả Bill Laboon, Web3 Foundation. Nếu có hứng thú với lĩnh vực này, hãy học khóa học và trao đổi thêm với mình về những suy nghĩ của bạn nhé.

Ở bài viết trước, mình đã giới thiệu cho các bạn về các hình thức mã hóa thông tin được sử dụng phổ biến, các đặc điểm và ứng dụng của chúng. Ở bài viết này, mình sẽ đưa ra những khái niệm cơ bản nhất về cryptographic hash function (hàm băm mật mã), những tính chất cần có của một hash function và ứng dụng của những tính chất đó trong thực tế.

Table of Contents

Open Table of Contents

Hash function là cái chi chi?

Hash function là một hàm toán học, nhận giá trị đầu vào tùy ý (mà ta gọi là message) và trả về một giá trị có độ dài cố định, gọi là hash value (hay hash, message digest…). Hash value có thể được sử dụng cho nhiều mục đích khác nhau: hash maps, data distribution, nearest neighbor search, …

Mỗi hàm hash khác nhau sẽ có những tính chất đặc trưng khác nhau, ví dụ như continuous hash function sẽ tốt khi được dùng trong thuật toán nearest neighbor search, nhưng lại rất tệ khi dùng với data distribution,… Trong bài viết này, mình sẽ đề cập chủ yếu đến cryptographic hash function (hàm băm mật mã).

Cryptographic Hash Function

Cryptographic Hash Function. Nguồn: Wikipedia

Hash function là một one-way function, nghĩa là chúng ta không thể đảo ngược phép tính, suy ra giá trị đầu vào ban đầu từ hash value. Nói một cách khác, một hàm hash function đủ tốt là hàm mà để tìm ra message truyền vào từ một hash value, cách duy nhất ta có thể làm là brute-force (vét cạn) tất cả các message có thể có, truyền vào hash function và so sánh hash value trả về với hash value mà ta đang có, từ đó tìm ra message (Đây là việc rất khó, gần như bạn không thể tìm được tất cả các message có thể có trong thực tế). Để tìm hiểu về one-way function, bạn hãy đọc bài viết [Blockchain Fundamentals][Bài 2] Public-key cryptography và One-way function.

Những đặc tính của một hash function

Hash function sẽ có những đặc tính cơ bản:

  1. Collision-free (Collision resistant): Hash function là một one-way function. Vì vậy, hash function cũng không thể trả về cùng một giá trị hash value $y$ với các giá trị đầu vào $x$ khác nhau.
  1. Hiding: Một đặc tính quan trọng khác của one-way function là độ khó của việc truy ngược giá trị truyền vào. Nghĩa là với hash function $y=f(x):$
  1. Puzzle-friendliness: Nếu ta muốn tìm giá trị $x$ sao cho khi truyền vào hash function $y=f(x)$ ta sẽ nhận được giá trị $y$ theo ý muốn thì cách tốt nhất là ta phải thử tất cả các giá trị có thể có của $x$ cho đến khi tìm được $y$ ta mong muốn (brute-force).

Dựa vào những tính chất cơ bản trên, một hash function được coi là “không đủ tốt” nếu vi phạm một trong ba (hoặc cả ba) tính chất cơ bản trên:

Dù ta có thể dựa vào các tính chất cơ bản của hash function để đánh giá độ tốt của chúng, nhưng nên nhớ rằng mỗi hash function đều có nhược điểm, việc quan trọng là chọn lựa hash function phù hợp với mục đích sử dụng chứ không phải là tìm ra hash function tốt nhất.

Ứng dụng các tính chất của hash function trong thực tế

Trong phần này chúng ta sẽ nhìn qua một vài ví dụ ứng dụng các tính chất của hash function trong thực tế có thể áp dụng. Đương nhiên phần này mình chỉ nhắc đến một vài ví dụ nổi bật và dễ hiểu, còn thực tế bạn có thể suy nghĩ ra thêm hằng hà sa số cách ứng dụng hash function và những tính chất để giải quyết những vấn đề trong cuộc sống khác.

com = commit(message, nonce);
verify(com, message, nonce);

Alice đưa ra dự đoán của mình trước, gọi là message, kèm thêm một giá trị ngẫu nhiên vô nghĩa, gọi là nonce (number used once) (chỉ Alice mới có thể biết được hai giá trị message và nonce này). Dùng một hash function làm hàm commit(), ví dụ như SHA-256, để hash giá trị message kèm nonce của Alice đã có, trả về một giá trị hash value, là com. Sau đó, Alice có thể đưa cho Bob giá trị com này như một dự đoán của mình. Do hash function có tính hiding, dù Bob có biết được hash value cũng không thể truy ngược ra Alice đã dự đoán gì, nên Alice vẫn không lo ngại rằng kết quả của mình đưa ra trước có thể làm ảnh hưởng đến dự đoán của Bob, và Bob có thể thực hiện quá trình tương tự, đưa ra dự đoán của mình một cách khách quan và công bằng nhất, gần như không bị tác động ảnh hưởng bởi bất kỳ yếu tố nào (như kết quả của Alice, hay bên thứ ba) mà vẫn giữ được tính minh bạch của các kết quả. Sau khi biết được kết quả học tập của Caroll, cả hai có thể dùng hàm verify() cùng với giá trị com, message và nonce của mình để kiểm tra kết quả của cuộc cá cược. Hash function dùng trong Bitcoin blockchain: SHA-256, RIPEMD-160.

Trên đây là những kiến thức khá cơ bản về cryptographic hash function mà mình tổng hợp được qua khóa học và hành trình tìm kiếm thông tin của mình. Mong mọi người đã có những cái nhìn đầu tiên rõ ràng hơn về hash function nói riêng và blockchain nói chung. Thực tế còn rất nhiều kiến thức về hash function mà hiện tại mình chưa thể khái quát được trong khuôn khổ bài viết này. Mình sẽ đưa đến bạn đọc những phần kiến thức này ở trong những bài viết khác trong tương lai . Ở bài viết sau, mình sẽ viết về một cấu trúc dữ liệu cơ bản được sử dụng trong blockchain - hash pointer. Nếu bạn thấy bài viết này hay, đừng ngần ngại chia sẽ cho những người có cùng sự quan tâm với chúng ta nhé.

Disclamer: Mình chưa phải là một chuyên gia về lập trình hay blockchain nên trong bài viết có thể còn nhiều thiếu sót hoặc nhầm lẫn. Mọi ý kiến đóng góp vui lòng mang tính lịch sự và cùng nhau phát triển. Chúc mọi người ngày càng phát triển hơn trên con đường của mình đã chọn.