Hash (hàm băm) là gì? Cách hoạt động và ứng dụng của Hash

Việc quản lý Blockchain trong tiền điện tử rất cần tới hàm băm. Vậy Hash (Hasing) là gì? Cách thức hoạt động, phân loại và ứng dụng của hash là gì? Cùng theo dõi bài viết này của Exchange Script nhé.

thiết kế sàn giao dịch tiền ảo

Hash (Hasing – Hàm băm) là gì?

Hàm băm (hash function) là giải thuật nhằm sinh ra các giá trị băm tương ứng với mỗi khối dữ liệu (có thể là một chuỗi ký tự, một đối tượng trong lập trình hướng đối tượng, v.v…). Giá trị băm đóng vai gần như một khóa để phân biệt các khối dữ liệu, tuy nhiên, người ta chấp hiện tượng trùng khóa hay còn gọi là đụng độ và cố gắng cải thiện giải thuật để giảm thiểu sự đụng độ đó. Hàm băm thường được dùng trong bảng băm nhằm giảm chi phí tính toán khi tìm một khối dữ liệu trong một tập hợp (nhờ việc so sánh các giá trị băm nhanh hơn việc so sánh những khối dữ liệu có kích thước lớn).

Vì tính thông dụng của bảng băm, ngày nay, đa số ngôn ngữ lập trình đều cung cấp thư viện ứng dụng bảng băm, thường gọi là thư viện collection trong đó có các vấn đề như: tập hợp (collection), danh sách (list), bảng(table), ánh xạ (mapping), từ điển (dictionary). Thông thường, các lập trình viên chỉ cần viết hàm băm cho các đối tượng nhằm tích hợp với thư viện bảng băm đã được xây dựng sẵn.

Điều kiện của 1 hàm băm tốt: 

  • Tính toán nhanh.
  • Các khoá được phân bố đều trong bảng.
  • Ít xảy ra đụng độ.
  • Xử lý được các loại khóa có kiểu dữ liệu khác nhau.

== Lightning Network là gì?

hash-ham-bam-la-gi-cach-hoat-dong-va-ung-dung-cua-hash

Cách hoạt động của Hash

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.

Khai thác Bitcoin

Để giữ cho mạng lưới hoạt động công bằng, Bitcoin có một sân chơi công bằng cho những người tham gia để tự kiếm cho mình quyền tạo khối tiếp theo. Nó sử dụng một cuộc đua khả năng tính toán được bắt đầu lại mỗi khi một khối được xuất bản.

Để giành chiến thắng trong cuộc đua, mỗi người khai thác thu thập một tập hợp các giao dịch, bao gồm một tham chiếu đến khối trước đó và sử dụng nó như một phần dữ liệu để đưa vào hàm băm. Để giành chiến thắng trong cuộc đua, hàm băm kết quả phải bắt đầu bằng một số không nhất định tùy thuộc vào độ khó hiện tại của mạng. Số không càng cao thì càng khó.

Liên kết khối

Nếu các khối trong blockchain không được liên kết, hacker có thể dễ dàng chèn một block giả mạo. Bitcoin tránh điều này bằng cách liên kết từng khối với khối trước đó. Nó làm như vậy bằng cách sử dụng một con trỏ băm (hash pointer).

Một hash pointer là kết quả được thực hiện từ việc băm khối trước đó trong chuỗi. Điều này có nghĩa là bất kỳ ai cũng có thể kiểm tra xem các giao dịch trong khối có được tiếp tục từ giao dịch trước hay không. Điều này thực sự cho phép các thợ đào đảm bảo toàn bộ chuỗi là hợp pháp và không một khối nào được thêm vào bởi một công cụ khai thác chứa mã độc.

Điều này cũng có nghĩa là mọi lịch sử một đồng coin có thể được truy nguyên từ khi nó được khai thác.

Hash dùng để làm gì?

Hash được ứng dụng rộng dãi trong tìm kiếm và truy xuất dữ liệu trên Database kích thước lớn, và làm giảm chi phí tính toán trong tập dữ liệu lớn. Ngoài ra, nó còn dùng để xác thực tính toàn vẹn của dữ liệu.

Các dạng Hash code phổ biến:

  • CRC32: Chứa 8 ký tự, dựa trên thuật toán Cyclic Redundancy Check. Ưu điểm là tính toán nhanh và độ dài ngắn.
  • MD5: Dài 32 kí tự, sử dụng thuật toán Message Digest. Hiện nay được sử dụng khá phổ biến vì tính chính xác cao và không quá nhiều thao tác xử lý.
  • SHA-1: Gồm 40 kí tự, dùng thuật toán Secure Hash Algorithm. Rất chính xác nhưng thời gian tính toán khá lâu.

Ứng dụng của Hash 

Các hàm băm được ứng dụng trong nhiều lĩnh vực, chúng thường được thiết kế phù hợp với từng ứng dụng. Ví dụ, các hàm băm mật mã học giả thiết sự tồn tại của một đối phương – người có thể cố tình tìm các dữ liệu vào với cùng một giá trị băm. Một hàm băm tốt là một phép biến đổi “một chiều”, nghĩa là không có một phương pháp thực tiễn để tính toán được dữ liệu vào nào đó tương ứng với giá trị băm mong muốn, khi đó việc giả mạo sẽ rất khó khăn. Một hàm một chiều mật mã học điển hình không có tính chất hàm đơn ánh và tạo nên một hàm băm hiệu quả; một hàm trapdoor mật mã học điển hình là hàm đơn ánh và tạo nên một hàm ngẫu nhiên hiệu quả.

Bảng băm, một ứng dụng quan trọng của các hàm băm, cho phép tra cứu nhanh một bản ghi dữ liệu nếu cho trước khóa của bản ghi đó (Lưu ý: các khóa này thường không bí mật như trong mật mã học, nhưng cả hai đều được dùng để “mở khóa” hoặc để truy nhập thông tin.) Ví dụ, các khóa trong một từ điển điện tử Anh-Anh có thể là các từ tiếng Anh, các bản ghi tương ứng với chúng chứa các định nghĩa. Trong trường hợp này, hàm băm phải ánh xạ các xâu chữ cái tới các chỉ mục của mảng nội bộ của bảng băm.

hash-ham-bam-la-gi-cach-hoat-dong-va-ung-dung-cua-hash-3

Các hàm băm dành cho việc phát hiện và sửa lỗi tập trung phân biệt các trường hợp mà dữ liệu đã bị làm nhiễu bởi các quá trình ngẫu nhiên. Khi các hàm băm được dùng cho các giá trị tổng kiểm, giá trị băm tương đối nhỏ có thể được dùng để kiểm chứng rằng một file dữ liệu có kích thước tùy ý chưa bị sửa đổi. Hàm băm được dùng để phát hiện lỗi truyền dữ liệu. Tại nơi gửi, hàm băm được tính cho dữ liệu được gửi, giá trị băm này được gửi cùng dữ liệu. Tại đầu nhận, hàm băm lại được tính lần nữa, nếu các giá trị băm không trùng nhau thì lỗi đã xảy ra ở đâu đó trong quá trình truyền. Việc này được gọi là kiểm tra dư (redundancy check).

Các hàm băm còn được ứng dụng trong việc nhận dạng âm thanh, chẳng hạn như xác định xem một file MP3 có khớp với một file trong danh sách một loại các file khác hay không.

Thuật toán tìm kiếm xâu Rabin-Karp là một thuật toán tìm kiếm xâu ký tự tương đối nhanh, với thời gian chạy trung bình O(n). Thuật toán này dựa trên việc sử dụng băm để so sánh xâu.

Đặc trưng của Hash là gì?

  • Với mỗi đầu vào ngẫu nhiên, hash tạo ra một giá trị băm tương ứng
  • Giá trị băm không thể dịch ngược lại giá trị ban đầu
  • Đầu vào khác nhau sẽ cho ra giá trị băm khác nhau

Ý nghĩa của Hash trong Blockchain

Xương sống của một loại tiền điện tử là blockchain của nó, là một sổ cái toàn cầu được hình thành bằng cách liên kết các khối dữ liệu giao dịch riêng lẻ với nhau. Blockchain chỉ chứa các giao dịch được xác thực, giúp ngăn chặn các giao dịch gian lận và chi tiêu gấp đôi tiền tệ. Quá trình xác nhận dựa trên dữ liệu được mã hóa bằng cách sử dụng băm thuật toán. Giá trị được mã hóa kết quả là một chuỗi các số và chữ cái không giống với dữ liệu gốc và được gọi là hàm băm. Khai thác tiền điện tử liên quan đến việc làm việc với hàm băm này.

Băm yêu cầu xử lý dữ liệu từ một khối thông qua hàm toán học, dẫn đến kết quả đầu ra có độ dài cố định. Sử dụng đầu ra có độ dài cố định sẽ tăng tính bảo mật, vì bất kỳ ai đang cố gắng giải mã hàm băm không thể cho biết đầu vào dài hay ngắn chỉ bằng cách nhìn vào độ dài của đầu ra. 

Việc xử lý các hàm băm cần thiết để mã hóa các khối mới đòi hỏi sức mạnh xử lý đáng kể của máy tính, có thể tốn kém. Để lôi kéo các cá nhân và công ty, được gọi là người khai thác, đầu tư vào công nghệ cần thiết, các mạng tiền điện tử thưởng cho họ cả token tiền điện tử mới và phí giao dịch. Công cụ khai thác chỉ được bù nếu chúng là người đầu tiên tạo ra hàm băm đáp ứng các yêu cầu được đặt ra trong hàm băm đích.

== Tìm hiểu chi tiết hơn Công nghệ Blockchain là gì?

Giải quyết hàm băm về cơ bản là giải quyết một vấn đề toán học phức tạp và bắt đầu với dữ liệu có sẵn trong tiêu đề khối. Mỗi tiêu đề khối chứa một số phiên bản, dấu thời gian, hàm băm được sử dụng trong khối trước đó, hàm băm của Merkle Root, nonce và băm đích. Công cụ khai thác tập trung vào nonce, một chuỗi số. Số này được gắn vào nội dung được băm của khối trước đó, sau đó chính nó được băm. Nếu hàm băm mới này nhỏ hơn hoặc bằng hàm băm mục tiêu, thì nó được chấp nhận làm giải pháp, người khai thác được trao phần thưởng và khối được thêm vào blockchain.

Việc giải hàm băm yêu cầu người khai thác xác định chuỗi nào sẽ sử dụng làm chuỗi không, chính nó yêu cầu một số lượng đáng kể thử và sai. Điều này là do nonce là một chuỗi ngẫu nhiên. Rất khó có khả năng một người khai thác sẽ thành công với lần đầu tiên chính xác trong lần thử đầu tiên, có nghĩa là người khai thác có thể kiểm tra một số lượng lớn các tùy chọn nonce trước khi thực hiện đúng. Độ khó càng lớn – thước đo mức độ khó để tạo ra một hàm băm đáp ứng yêu cầu của hàm băm mục tiêu – càng mất nhiều thời gian để tạo ra một giải pháp.

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

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.

hash-ham-bam-la-gi-cach-hoat-dong-va-ung-dung-cua-hash-3

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ã

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.

Tương lai của hàm Hash

Trong lĩnh vực công nghệ thông tin, không có gì là không thể bị hack, nhưng hàm băm đã gần chạm đến giới hạn đó. Trong thời điểm hiện tại, sẽ mất hàng triệu hoặc hàng tỷ năm để hack một hàm băm. Nhưng vẫn còn đó những mối lo ngại về máy tính lượng tử. Về lý thuyết, điều này có thể phá vỡ các hàm băm được sử dụng bởi Bitcoin, phơi bày nó. Các nhà phát triển sẽ quản lý để bảo mật mạng để ngăn chặn điều này? Chúng ta chỉ có thể hy vọng vào điều tốt đẹp nhất.

Kết luận

Exchange Script vừa thực hiện xong bài viết :”Hash (hàm băm) là gì? Cách hoạt động và ứng dụng của Hash”, hy vọng những thông tin trong bài viết có thể giúp ích cho các bạn đang tìm kiếm thông tin.

Chúc các bạn thành công!

 

thiết kế sàn giao dịch tiền ảo

Share Social