Số Nonce là một trong những yếu tố vô cùng quan trọng để tìm hàm băm của Blockchain. Vậy Số Nonce là gì, tại sao lại cần nó và vai trò của nó như thế nào? Cùng tham khảo bài viết sau để có những cái nhìn chi tiết về số Nonce nhé!
Nội dung chính
Số Nonce là gì?
Số Nonce là một số nguyên 32bit (4 byte), là giá trị chỉ có thể được sử dụng một lần duy nhất, được các Miner sử dụng để tìm ra hàm băm (Hash SHA-256) phù hợp cho Block mới trong Blockchain của Bitcoin. Số nonce không chỉ có vai trò quan trọng trong việc xác định Block, giải mã hàm băm mà còn đảm bảo có thể giúp Miner phát hiện ra bất cứ thay đổi nhỏ nào xuất hiện trong Blockchain.
Đây là một trong những yếu tố vô cùng quen thuộc với những Miner trong thuật toán POW bởi họ cần tìm ra được tổ hợp bit này thì mới có thể xác thực dữ liệu và nhận được phần thưởng từ Blockchain.
Số Nonce “nằm” đâu trong một Block?
Để giúp bạn có hình dung cơ bản về số Nonce, hãy cùng nhìn qua mô phỏng sau đây về vị trí của số Nonce trong Block. Trên thực tế, một block có thể sẽ phức tạp với nhiều thông số hơn tùy theo code của từng Blockchain; tuy nhiên, về cơ bản, một block đều sẽ có chứa: số thứ tự của chính nó, số Nonce, Data và Hash (hàm băm của chính Block đó và hàm băm của khối liền trước nó)
Vai trò và cách tạo ra Hash (hàm băm)?
Trước khi tìm hiểu rõ về số Nonce và cách ra đời của tổ hợp bit này, chúng ta cần nắm được vai trò và quá trình một hash được tạo ra như thế nào?
Vai trò của Hash
Bạn có thể hình dung như thế này, chúng ta sử dụng ngôn ngữ, chữ số để thể hiện và lưu trữ lại giao dịch. Tuy nhiên, máy móc lại không hiểu nên không sử dụng được những ngôn ngữ này. Bởi vậy, chúng sẽ cần đến một ngôn ngữ riêng để xử lý được dữ liệu một cách nhanh chóng và chính xác nhất. Ngôn ngữ đó chính là số Hash. Hay nói cách khác, công việc của chúng ta là chuyển dữ liệu từ ngôn ngữ thông thường sang ngôn ngữ của máy tính, là chuyển những transaction (dữ liệu giao dịch) trong phần Data sang số Hash.
Mặc dù Hash là một dạng ngôn ngữ của máy tính nhưng nó không hề ngẫu nhiên, ví dụ với ký tự “Hello Coinlize” chúng ta sẽ có số Hash như sau:
2c8615a504bda0996caf7ef591677a10240d2fc7468a707bbad3cf33289059b0
Nhìn vào các bạn sẽ thấy dãy Hash này có vẻ là một dãy ký tự vô nghĩa và bất quy tắc. Nhưng khi ta thay đổi một ít ký tự ở đầu vào thì ngay lập tức Hash sẽ bị thay đổi hoặc nếu để lại đầu vào như cũ thì hash sẽ có đầu ra giống như trước.
Ví dụ: bạn có một giao dịch là : “người A chuyển cho người B số tiền X”, thông tin này sẽ được điền trong Data và cho ra một Hash duy nhất (của giao dịch đó), tạm gọi là dãy hash 1 như hình bên dưới bắt đầu bằng 49ab, kết thúc bằng 76ae.
Khi bạn thay đổi bất cứ yếu tố nào trong dữ liệu đó, ví dụ thay đổi người A thành người C, Hash sẽ thay đổi từ Hash 1 thành Hash 2 (bắt đầu bằng 79dc và kết thúc với 714e)
Tuy nhiên khi bạn nhập lại dữ liệu đúng như ban đầu là “người A chuyển cho người B số tiền X”, Hash sẽ tự động trở về Hash 1 như cũ.
Tạo ra Hash như thế nào?
Khi nhìn một dãy ký tự bất nguyên tắc và không có ý nghĩa gì trong ngôn ngữ con người, hẳn bạn cũng đặt ra câu hỏi làm thế nào để tạo ra được một hàm hash? Và đây có phải điều mà Miner thường hay làm để xác thực dữ liệu và liên kết các khối lại với nhau?
Câu trả lời là nếu Hash chỉ được tạo ra từ dữ liệu, nó có thể được hoàn thiện trong thời gian rất ngắn và không mất quá nhiều công sức. Bởi việc “phiên dịch” transaction trong Data sang Hash khá đơn giản (máy tính cá nhân nào cũng làm được). Tuy nhiên, một hash chỉ đơn thuần chứa data sẽ không thể được kết nối vào chuỗi, cũng không giúp các Node biết được khối đó có bị thay đổi hay chỉnh sửa không (do chúng ta đâu có hiểu được ngôn ngữ này).
Ngoài ra, Miner cũng không thể can thiệp vào giao dịch của người dùng, chỉnh sửa giao dịch để thay đổi thành số hash đặc biệt phù hợp với việc kết nối trong chuỗi. Đó là lý do chúng ta cần đến sự góp mặt của số Nonce.
Hash đặc biệt là số kiểu vầy (có nhiều số 0 ở đầu): 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f
Đây là cách mà số Nonce được dùng trong Blockchain
Quy tắc tạo ra số Nonce
Như đã chia sẻ phía trên, Hash không thể chỉ được tạo ra bởi dữ liệu giao dịch, bởi điều này khiến cho hash quá nhanh và khó quản lý. Bởi vậy, chúng ta cần có thêm một yếu tố nữa để đảm bảo hash không chỉ “phiên dịch” được dữ liệu mà còn bảo vệ được dữ liệu đó.
Như vậy, Hash lúc này sẽ bao gồm 2 yếu tố chính: là số Nonce và Data. Và chúng ta chỉ cần random liên tục số Nonce này, để tìm ra 1 Hash đặc biệt mà Block yêu cầu (ví dụ là 4 số 0 hay 5 số 0 ở đầu dãy) là sẽ giải mã thành công và thêm được khối mới.
Cho nên công việc của Miner là phải thử liên tục vô số các Nonce ngẫu nhiên để tìm ra được một hàm Hash đặc biệt, như ví dụ ở hình bên dưới là 4 số 0 ở đầu.
Để bạn dễ hiểu hơn, bạn có thể hình dung thế này: Hàm hash là một phương trình bao gồm 2 biến chính là số Nonce và Data. Trong đó, Data là biến không đổi (dữ liệu được người dùng cung cấp mà Miner không thể can thiệp) còn số Nonce là biến ngẫu nhiên (không được sử dụng theo thứ tự nào hết). Bởi vậy, Miner sẽ cần thử liên tục biến ngẫu nhiên cho đến khi xuất hiện hàm Hash hợp lệ với yêu cầu.
Với Blockchain của Bitcoin thì Miner sẽ phải tìm ra các Hash đặc biệt được bắt đầu bởi các số 0 liên tục ở đầu dãy Hash. Số lượng số 0 càng nhiều thì độ khó càng cao.
Thiết bị để tìm số Nonce
Theo những ví dụ trên, để tìm ra được số Nonce, Miner sẽ cần thử liên tục những số ngẫu nhiên. Nên họ không thể ngồi cả ngày để test bằng máy tính cá nhân được. Họ sẽ cần sử dụng đến những siêu máy tính và thiết bị chuyên dụng để random số Nonce.
Những thiết bị này khác với máy tính và thiết bị di động của chúng ta ở chỗ nó chỉ tập trung vào 1 mục tiêu duy nhất là random “biến ngẫu nhiên” Nonce trong “phương trình” Hash, thử đến khi nào tìm ra thì thôi. Do đó nó đòi hỏi sức mạnh tính toán rất khủng khiếp đối với những Hash khó (nhiều số 0 ở đầu dãy) .
Ngoài ra, Miner không tìm kiếm số Nonce một mình mà luôn trong 1 cuộc đua khắc nghiệt để tìm ra số Nonce sớm hơn những người khác, nên những thiết bị máy móc không chỉ cần đảm bảo khả năng tính toán tốt mà còn cần tốc độ cực nhanh. Tức là chúng cần thử được càng nhiều số Nonce trong vòng 1s càng tốt.
Tại sao Blockchain cần số Nonce?
Như vậy, chắc hẳn bạn đã hình dung ra quy trình và cách thức để Miner tìm kiếm ra được một số Nonce, đồng thời giải đáp được thắc mắc về việc tại sao họ phải đầu tư thiết bị máy móc và tiêu tốn năng lượng nhiều như thế. Tuy nhiên, cách Miner tìm ra được số Nonce chưa thể giúp bạn hoàn toàn hiểu được vai trò của số Nonce trong hàm băm. Vậy, hãy cùng tìm hiểu tiếp những phân tích dưới đây để
Ổn định hàm Hash
Như đã đề cập phía trên, số Nonce là một số nguyên với 32 bit, chỉ được sử dụng một lần duy nhất. Tuy nhiên, điều đặc biệt của số Nonce là nhờ có nó mà các nhà phát triển blockchain có thể thêm điều kiện cho Hash, khiến chúng ta có thể tùy biến được độ khó của việc thêm block mới, bằng việc tăng các số 0 ở đầu dãy.
Với chuỗi các bit bằng 0 này, hàm Hash không còn là một dãy ký tự trông có vẻ ngẫu nhiên và vô nghĩa nữa mà nó đã được Miner “giải mã thành công” cho ra một dãy ký tự hoàn chỉnh, bảo mật hơn, dễ dàng liên kết với các Block tạo thành chuỗi khối trong blockchain.
“Định hình” và hoàn thiện một Block
Khi một số Nonce được tìm ra có nghĩa là một Block đã được hoàn thành. Điều này đồng nghĩa với việc các giao dịch khác sẽ không thể được tiếp tục ghi thêm trong data của Block đó. Vì khi Miner tìm ra được số Nonce rồi thì hàm băm cũng đã hoàn thiện và nó đã sẵn sàng được liên kết vào chuỗi nên nếu ghi thêm giao dịch lên sẽ khiến Hash bị thay đổi.
“Thách thức” những cuộc tấn công
Hãy thử tưởng tượng như thế này: Nếu Block chỉ chứa Data và Hash, không bao gồm số Nonce và chúng được liên kết lại với nhau theo một chuỗi. Khi hình dung đến đây, bạn vẫn thấy không có gì quá đặc biệt đúng không?
Tuy nhiên, vấn đề nằm ở chỗ khi có một cá nhân hoặc một tổ chức tấn công vào hệ thống và thay đổi những giao dịch này. Do không chứa Nonce nên họ có thể thay đổi và hợp lệ hóa toàn chuỗi một cách rất nhanh chóng, đồng thời thu về được lợi nhuận lớn, khiến mạng lưới trở nên hỗn loạn.
Vậy viễn cảnh với sự góp mặt của Nonce thì sao?
Khi cá nhân hoặc tổ chức thay đổi thông tin giao dịch và muốn hợp lệ hóa toàn chuỗi họ sẽ phải tìm ra được một số Nonce phù hợp mới (vì Hash nó sẽ nhảy thành số khác khi bạn thay đổi data của các giao dịch). Như vậy, họ lại phải thử liên tục các biến Nonce ngẫu nhiên khác cho đến khi Hash ra được giá trị khớp với Data mới. Việc này không chỉ tốn nhiều thời gian mà còn yêu cầu sức mạnh tính toán rất lớn để có thể tính toán nhanh hơn các Node khác trong mạng.
Đó là chưa kể đến việc khi họ thay đổi xong dữ liệu họ sẽ phải gửi bằng chứng làm việc đến toàn bộ hệ thống để được xác nhận. Nếu những Node khác nhận thấy điểm bất ổn, những nỗ lực tấn công đó sẽ trở nên vô nghĩa khi bị out ra khỏi hệ thống.
Số lượng Node của Bitcoin? Mất bao lâu sẽ đào hết 21 triệu BTC
Ngoài ra, do việc thay đổi giao dịch có thể dẫn đến sự thay đổi trong hàm băm nên trong khoảng thời gian những kẻ tấn công loay hoay xoay sở với việc tìm số Nonce, hệ thống đã kịp thời phát hiện được vấn đề và linh hoạt đưa ra những phương án xử lý.
Không những vậy, số Hash giúp một chuỗi các khối được liên kết với nhau rất chặt chẽ. Điều này có nghĩa là họ càng cố gắng thay đổi dữ liệu tại những khối cũ, vô số những khó khăn sẽ chồng chéo lên nhau đến mức khó có thể giải mã được. Bởi vậy, kể cả khi một cá nhân hoặc tổ chức có đủ khả năng để hình thành một cuộc tấn công 51%, họ cũng khó có thể thực sự tấn công và làm xáo trộn hệ thống với tính logic của số Nonce và Hash.
Đây chính là lý do số Nonce giúp hàm băm không chỉ có giá trị “phiên dịch” transaction sang ngôn ngữ máy tính & công nghệ mà còn bảo vệ được những dữ liệu đã được mã hóa đó.
“Điều chỉnh” độ khó của việc đào coin
Bên cạnh việc là một “đối thủ” nặng ký và có sức cản trở lớn đối với những kẻ có ý đồ tấn công vào hệ thống, độ khó của số Nonce còn có thể được điều chỉnh để phù hợp với số lượng Miner có trong hệ thống.
Cụ thể hơn, trong cùng một hệ thống Blockchain, việc xác định số Nonce và hàm băm của mọi Block đều có độ khó tương đương nhau, dẫn đến tỷ lệ tìm ra chính xác tổ hợp bit để thêm vào hàm băm của mỗi Miner là như nhau.
Bởi vậy, mỗi Block đều cần một lượng thời gian trung bình để thêm vào chuỗi (ví dụ là khoảng 10 phút đối với Bitcoin). Tuy nhiên, điều gì sẽ xảy ra nếu không có Miner nào tìm ra được số Nonce phù hợp với hàm băm? Lúc này, hệ thống Blockchain sẽ có sự điều chỉnh với độ khó của Block để đảm bảo Miner có thể tìm ra được tổ hợp bit và hoàn thiện hàm băm của Block. Việc điều chỉnh này nằm ở số lượng bit 0 ở đầu hàm băm. Hash càng có nhiều bit 0 thì số Nonce càng có nhiều chữ số, dẫn đến việc tính toán càng đòi hỏi độ phức tạp và lượng thời gian lớn hơn.
Hiện tại, những Block gần nhất của Bitcoin đang có số lượng bit 0 lên đến 19 số 0. Do ngày càng có nhiều Miner tham gia vào việc đào Bitcoin. Trong khi đó, những Block đầu tiên của Bitcoin chỉ có 5 bit 0 ở đầu Hash.
Số Nonce còn được ứng dụng vào đâu?
Như vậy, số Nonce giúp cho một hàm băm được hoàn thiện hơn, dễ liên kết và quản lý hơn; đồng thời có thể đem đến khả năng bảo mật tốt cho hệ thống. Cũng vì lý do này mà số Nonce không chỉ được ứng dụng trong Blockchain của hệ sinh thái cryptocurrency mà còn được sử dụng trong Blockchain của rất nhiều lĩnh vực và ngành nghề khác như ngành Logistic, chuỗi cung ứng, hệ thống ngân hàng, …
Với những chia sẻ trên, chắc hẳn anh em đã có dịp tìm hiểu kỹ hơn về việc số Nonce là gì, cũng như vai trò vô cùng quan trọng của nó trong việc hoàn thiện hàm băm và đem đến cho Blockchain những phương pháp quản lý và bảo mật một cách tốt nhất. Thông qua đó, hy vọng bạn đã có thêm những hiểu biết cần thiết về công nghệ Blockchain và quá trình đào coin; đồng thời có thêm niềm tin vào hệ thống và độ bảo mật của Blockchain trong hệ sinh thái Cryptocurrency.
Bài viết hay mà anh em nên đọc:
➤ Kiến thức Crypto cơ bản – 3 Tư duy Coin người mới cần khắc sâu
➤ Smart contract là gì? Tại sao lại vô cùng quan trọng với Blockchain
➤ Có nên đầu tư vào Coin? Được và mất gì khi kiếm tiền từ Bitcoin
Comments (No)