Bitcoin là khái niệm tiền kỹ thuật số do nhân vật huyền thoại và bí ẩn Satoshi Nakamoto đưa ra vào năm 2009, sử dụng công nghệ blockchain làm hạ tầng và vận hành theo mô hình ngang hàng, chống lại sự tập trung hóa. Whitepaper giải thích khái niệm này do Nakamoto viết là tài liệu bắt buộc phải đọc với bất kỳ ai muốn hiểu bitcoin và tiền mã hóa nói chung. Whitepaper này không chỉ trình bày bitcoin như một khái niệm, mà còn giải thích cách hệ thống chịu lỗi Byzantine có thể vận hành trong một môi trường phi tập trung.
Trước hết, người quan tâm đến Bitcoin cần biết rằng yếu tố lớn nhất giúp khái niệm bitcoin đi vào đời thực chính là công nghệ blockchain, và cần hiểu công nghệ này hoạt động ra sao.
Blockchain là gì?
Blockchain là một chuỗi các block, mỗi block chứa các giá trị dữ liệu, và không bị giám sát hay quản lý bởi bất kỳ cơ quan trung ương nào. Những chuỗi thông tin này được bảo mật bằng mật mã học và nhờ cấu trúc phi tập trung mà không thể bị bịt miệng. Về cơ bản, blockchain sử dụng hai cấu trúc dữ liệu: con trỏ (pointer) và danh sách liên kết (linked list).
Con trỏ (Pointers)
Con trỏ là những biến cho biết một biến khác nằm ở đâu. Trong điều kiện bình thường, biến trong lập trình chứa dữ liệu. (Với ví dụ int a = 10, biến số nguyên a có giá trị 10.) Con trỏ thì ngược lại: thay vì giữ một giá trị làm dữ liệu, nó trỏ đến vị trí của biến đang giữ dữ liệu đó.
Danh sách liên kết (Linked Lists)
Danh sách liên kết là một trong những đơn vị quan trọng nhất trong cấu trúc dữ liệu và đại khái có dạng như sau.
Một chuỗi các block, mỗi block chứa một dữ liệu cụ thể và được liên kết với block kế tiếp thông qua một con trỏ. Biến con trỏ chứa địa chỉ của node tiếp theo và nhờ vậy tạo ra sự kết nối. Như ta thấy ở node cuối, con trỏ cuối cùng không chứa dữ liệu nào.
Điểm quan trọng ở đây là mỗi con trỏ chứa địa chỉ của block kế tiếp. Vậy con trỏ của block đầu tiên nằm ở đâu? Block đầu tiên được gọi là genesis block và con trỏ của nó nằm bên trong hệ thống.
Hash pointer là con trỏ chứa giá trị hash của block đứng trước nó.
Hash là quá trình nhận dữ liệu với độ dài bất kỳ và tạo ra kết quả có cùng độ dài, bất kể nội dung của dữ liệu, thông qua một hàm nhất định. Với Bitcoin, giao dịch chuyển tiền được lấy làm dữ liệu và trộn bằng thuật toán SHA-256 để tạo ra kết quả có độ dài cố định. Bất kể độ dài dữ liệu đầu vào, thuật toán SHA-256 luôn tạo ra kết quả dài 256 bit.
Blockchain ở dạng đơn giản nhất là một danh sách liên kết như mô tả dưới đây.
Blockchain là một danh sách liên kết trong đó mỗi block chứa một dữ liệu và một hash pointer trỏ về block đứng trước nó. Vậy hash pointer là gì? Hash pointer rất giống con trỏ thông thường, nhưng thay vì chỉ chứa địa chỉ của block trước, nó còn chứa kết quả hash của dữ liệu trong block đó. Khác biệt nhỏ trong thiết kế này chính là điều khiến công nghệ blockchain an toàn đến vậy.
Hãy giả sử trong giây lát có kẻ tấn công muốn nhắm vào block 3 và thay đổi dữ liệu trong đó. Do đặc tính của hàm hash, thay đổi nhỏ nhất trong dữ liệu cũng sẽ tạo ra khác biệt cực lớn trong kết quả. Thay đổi nhỏ nhất ở dữ liệu trong block 3 sẽ làm thay đổi kết quả hash lưu trong block 2, thay đổi ở block 2 sẽ ảnh hưởng đến kết quả hash trong block 1, và cứ thế toàn bộ chuỗi sẽ phải bị thay đổi — điều bất khả thi. Đây chính là cơ chế khiến blockchain không thể bị bịt miệng.
Đào coin (Mining) là gì?
Đào coin là quá trình cần thiết để tạo ra bitcoin mới. Việc đào Bitcoin vận hành theo nguyên tắc Proof of Work (POW). Nói đơn giản: việc giải một bài toán phải rất khó, nhưng một khi bạn giải được, lời giải của bạn phải được chứng minh là đúng một cách rất dễ dàng.
Trước khi tìm hiểu vì sao Bitcoin dùng POW, hãy thử hiểu vì sao tiền mã hóa lại cần một hệ thống như vậy.
Trước Bitcoin, nhiều loại tiền kỹ thuật số khác nhau từng được tạo ra, nhưng nếu xây dựng một mạng ngang hàng phi tập trung trong môi trường số, vấn đề lớn nhất là bài toán logic mang tên Bài toán các vị tướng Byzantine. Vì Nakamoto đã vượt qua được bài toán này trong bitcoin nhờ POW, bitcoin mới có thể bắt đầu vòng đời của mình và tiếp tục phát triển mạnh mẽ.
Bài toán các vị tướng Byzantine
Hãy tiếp tục bằng việc giải thích Bài toán các vị tướng Byzantine, vốn cũng thường được nhắc đến trong các nghiên cứu học thuật. Các vị tướng Byzantine lên kế hoạch tấn công thành trì của kẻ địch gặp hai vấn đề:
Các vị tướng đóng quân rất xa nhau, nên không thể có một cơ quan trung ương chỉ huy cuộc vây hãm.
Kẻ địch cũng có quân đội hùng mạnh, nên cuộc tấn công phải được các tướng thực hiện cùng lúc thì mới có thể thành công.
Trong khi các đạo quân vây hãm bao quanh thành, mỗi đạo quân truyền mệnh lệnh từ đạo quân bên phải sang đạo quân bên trái, và việc liên lạc được duy trì theo cách này. Nhưng vấn đề là khi có lệnh "tấn công vào thứ Tư", một đạo quân có thể chưa sẵn sàng và gửi ngược lại thông điệp "không, hãy tấn công vào thứ Sáu". Hoặc người lính đưa tin có thể bị địch bắt, hay nội dung thông điệp anh ta mang theo có thể bị thay đổi. Trong một môi trường thiếu tin cậy như vậy, bất kỳ cuộc tấn công nào cũng sẽ thất bại nếu không đạt được sự phối hợp tuyệt đối.
Bài toán logic tương tự cũng áp dụng cho các mạng blockchain, vốn là hạ tầng của những đồng tiền mã hóa như bitcoin. Đây là những mạng lưới cực kỳ lớn, và làm sao ta có thể tin tưởng từng cá nhân trong mạng? Ta có thể muốn gửi cho ai đó 4 ether, nhưng làm sao tin được rằng một kẻ xấu sẽ không biến con số đó thành 40 ether?
Satoshi Nakamoto đã vượt qua bài toán logic này bằng cách đưa ra giao thức proof-of-work. Hãy xem nó hoạt động thế nào:
Khi đạo quân vây thành muốn truyền thông điệp "chúng ta tấn công vào thứ Hai" cho đạo quân bên trái, họ cần làm theo các bước sau;
Đầu tiên, thông điệp gốc được gán một giá trị ngẫu nhiên chỉ dùng một lần gọi là "nonce". Nonce có thể là bất kỳ giá trị nào trong hệ thập lục phân.
Sau đó, thông điệp đã gán giá trị nonce được đưa qua hàm hash để thu về một kết quả. Trong cuộc tấn công giả định của chúng ta, giả sử các chỉ huy chọn cách chỉ chia sẻ với nhau những kết quả hash có 5 chữ số đầu bằng 0 để đảm bảo an toàn.
Nếu kết quả của hàm hash đúng như mong muốn, họ chuyển tiếp thông điệp cho vị tướng kế tiếp. Nếu kết quả không khớp, cần thay đổi ngẫu nhiên giá trị nonce đã gán và lặp lại quá trình cho đến khi thu được kết quả có 5 chữ số đầu bằng 0. Hệ thống này đòi hỏi thời gian tính toán cực kỳ dài.
Nếu người lính đưa tin bị bắt hoặc nội dung thông điệp bị thay đổi, kết quả hash sẽ khác đi rất nhiều do đặc tính của hàm hash. Khi xem lại thông điệp, các vị tướng sẽ nhận ra 5 chữ số đầu của kết quả hash không phải là 0 và sẽ rút lệnh tấn công.
Tuy nhiên, dù xác suất rất thấp, mỗi hàm hash vẫn có thể cho ra kết quả trùng nhau. Về lý thuyết, khi A và B là hai đầu vào riêng biệt, H(A) và H(B) không nên có bất kỳ xác suất nào để H(A) = H(B), nhưng trong ứng dụng thực tế, không hàm hash nào hoàn toàn chống được va chạm (collision).
Vậy trong xác suất thấp đó, điều gì xảy ra nếu người lính đưa tin bị bắt, thông điệp bị thay đổi, và một cuộc tấn công khiến kết quả hash vẫn đúng như các vị tướng mong muốn? Tất nhiên đó sẽ là một quá trình tốn thời gian, nhưng không phải bất khả thi. Để đối phó, các vị tướng tận dụng lợi thế quân số của mình.
Vấn đề này có thể được giải quyết bằng cách ba vị tướng cùng lúc gửi thông điệp sang bên trái, thay vì một vị tướng lần lượt chuyển tin từ phải sang trái. Nếu các vị tướng tự soạn thông điệp của mình rồi tạo ra một thông điệp gộp, đưa thông điệp này qua hàm hash, gán giá trị nonce cho kết quả, rồi lại đưa vào hàm hash một lần nữa, thì lần này 6 chữ số đầu của kết quả phải bằng 0.
Ở giai đoạn này, việc tìm ra giá trị nonce của thông điệp và thay đổi nội dung sẽ tiêu tốn thời gian một cách nghiêm trọng.
Ngược lại, nhiệm vụ của các vị tướng nhận thông điệp lại rất dễ; họ chỉ cần thêm giá trị nonce được cung cấp vào kết quả hash và so sánh các kết quả. Bước này là một quy trình rất nhanh và đơn giản. Ý tưởng này chính là cơ chế vận hành của nguyên tắc proof-of-work.
Việc tìm giá trị nonce cho hash phù hợp đòi hỏi sức mạnh tính toán và thời gian khổng lồ.
Ngược lại, việc kiểm tra kết quả và xác định có gian lận hay không chỉ mất rất ít thời gian.
Đây chính là cách các thợ đào áp dụng giao thức proof-of-work trong việc đào Bitcoin. Họ dùng sức mạnh tính toán của mình để giải bài toán mật mã trước mặt và tạo ra block tiếp theo. Trên blockchain Bitcoin, các block được tạo ra sau mỗi 10 phút.
Các giao dịch chuyển tiền diễn ra trên mạng Bitcoin như thế nào?
Giả sử John muốn gửi một ít bitcoin cho Dave. Giao dịch này diễn ra thế nào? Chuyển bitcoin hoạt động rất khác so với chuyển tiền pháp định. Nếu John muốn đưa Dave 10 USD, anh ấy chỉ cần rút tờ 10 USD ra khỏi ví và đưa cho Dave là xong. Nhưng với bitcoin thì khác, đó không phải thứ ta sở hữu về mặt vật lý. Thứ ta có là bằng chứng rằng ta sở hữu bitcoin.
Có hai điều chúng ta cần biết và lưu ý;
Thợ đào xác nhận và bảo đảm các giao dịch chuyển tiền bằng dữ liệu họ đưa vào block do mình tạo ra. Họ cũng thu phí cho dịch vụ này.
Với tiền pháp định, ta không biết và không theo dõi lịch sử của bất kỳ tờ tiền nào trước khi đến tay mình. Cũng chẳng có cách thực tế nào để làm điều đó. Nhưng mọi giao dịch chuyển bitcoin đều được ghi lại trên mạng bitcoin.
Với những thông tin này, hãy xem giao dịch chuyển bitcoin giữa John và Dave. Giao dịch này có hai phần: đầu vào và đầu ra (input-output).
Để John thực hiện được giao dịch này, anh phải có bitcoin từ các giao dịch trước đó. Như đã nói, mọi giao dịch chuyển tiền đều được ghi lại trên mạng bitcoin.
John cần gom số bitcoin từ các giao dịch anh đã nhận trước đó với tên TR(0), TR(1) và TR(2), tạo một giao dịch mới với tên TR(INPUT) và gửi cho Dave. Ở đây TR(INPUT) trở thành dữ liệu đầu vào của giao dịch mới.
Đây đại khái là hình dạng của giao dịch chuyển bitcoin theo Input.
Dữ liệu đầu ra đơn giản chứa số bitcoin mà Dave sẽ có sau giao dịch mới, cùng phần tiền thừa còn lại — phần này sau đó được gửi ngược về John và trở thành giá trị TR(INPUT) trong giao dịch tiếp theo của anh.
Quá trình này chỉ có một kết quả đầu ra nếu không tính phần tiền thừa, nhưng hoàn toàn có thể có những giao dịch với nhiều kết quả đầu ra. Cách mô tả này chỉ đơn giản cho thấy một giao dịch diễn ra trên mạng bitcoin như thế nào. Tuy nhiên, để mọi thứ diễn ra thành công, một số điều kiện nhất định phải được đáp ứng.
Các điều kiện mà giao dịch phải tuân thủ:
TR(INPUT) > TR(OUTPUT). Giao dịch đầu vào phải luôn lớn hơn giao dịch đầu ra. Trong mỗi giao dịch, phần chênh lệch giữa đầu vào và đầu ra (đầu ra + tiền thừa) được trả cho thợ đào dưới dạng phí. Nghĩa là: Phí giao dịch cho thợ đào = TR(INPUT) - (TR(OUTPUT) + TIỀN THỪA)
Ở phía đầu vào, phải có TR(0)+TR(1)+TR(2)=TR(INPUT). Nói cách khác, John phải có đủ bitcoin để gửi cho Dave. Nếu không đủ bitcoin để xử lý giao dịch, giao dịch sẽ bị thợ đào từ chối.
Giờ Dave phải chứng minh anh là chủ sở hữu số bitcoin được gửi cho mình. John đã mã hóa giao dịch chuyển bitcoin bằng public key của Dave. Dave chỉ có thể mở khóa này bằng private key của mình.
Trong khi đó, John phải chứng minh anh có đủ bitcoin để gửi cho Dave. Anh làm điều này bằng cách ký giao dịch muốn thực hiện bằng private key của chính mình. Bất kỳ ai cũng có thể mở nó bằng public key của John và xác minh rằng anh thực sự có đủ số bitcoin cần thiết. Bằng chứng này được gọi là dữ liệu chữ ký (signature data).
Dữ liệu đầu vào (bao gồm dữ liệu chữ ký) và dữ liệu đầu ra được cộng lại với nhau và đưa qua thuật toán hash SHA-256. Đầu ra của thuật toán này được gọi là giao dịch chuyển tiền.
Có một điều cần nhớ: để một giao dịch bitcoin diễn ra, thợ đào tạo ra block phải thực sự đưa giao dịch đó vào block. Thợ đào tạo block được nhận phí cho tất cả các giao dịch mà họ đưa vào block đó. Khi lượng giao dịch tăng theo thời gian, các giao dịch phải chờ block mới xuất hiện do các block đã bị lấp đầy. Trên thực tế, những người không muốn chờ sẽ trả phí đào cao hơn, khiến giao dịch của họ nổi bật và hấp dẫn hơn trong mắt thợ đào.
Từ đó xuất hiện nguyên tắc replace-by-fee. Nó hoạt động đơn giản như sau: dù John đã gửi 5 BTC cho Dave, giao dịch không bao giờ được đưa vào block và cứ treo ở trạng thái chờ vì phí đào được đặt quá thấp. Không có cách nào hoàn tác hay hủy giao dịch này vì bitcoin đã chi tiêu không thể thu hồi. Tuy nhiên, nếu John thực hiện một giao dịch đến cùng địa chỉ với cùng số BTC nhưng đặt phí đào cao hơn, giao dịch cũ sẽ bị coi là vô hiệu và giao dịch mới sẽ chờ được xử lý.
Tương lai của Bitcoin và tiền mã hóa nói chung đầy ắp những khả năng vô tận. Ứng dụng của blockchain không có giới hạn, và các dự án trong lĩnh vực này đang ngày càng thành công và an toàn hơn.
Trong hành trình từ tiền hàng hóa đến việc sử dụng kim loại quý như vàng bạc, rồi đến tiền giấy và tiền danh nghĩa, ý tưởng về tiền trong môi trường ảo không hề mới, nhưng chỉ trong lịch sử gần đây nó mới trở nên khả thi.
Theo một số người, đó là một nhóm trong CIA; theo những người khác, đó là người ngoài hành tinh, hay có khi thực sự là một cyberpunk mang tên Satoshi Nakamoto. Dù là ai, người đó đã để lại cho chúng ta toàn quyền quyết định phải làm gì tiếp theo với những ý tưởng và ứng dụng sẽ thay đổi hoàn toàn cách chúng ta nhìn nhận tài sản và cách cất giữ chúng. Người đó đã mở đường cho những ý tưởng còn tiến bộ hơn của chính mình ra đời và thuyết phục cả thế giới nhìn mọi thứ bằng một lăng kính hoàn toàn khác.

Satoshi cũng không quên giấu một thông điệp trong genesis block — block khởi đầu — mà ông đã tự tay viết vào dưới dạng hard code. Ghi lại ngày 3/1/2009, ông đính kèm dòng tít của tờ Times (Anh) ngày hôm đó về các ngân hàng chịu trách nhiệm cho cuộc khủng hoảng kinh tế toàn cầu: "Minister is on the verge of second bailout for banks" (Bộ trưởng sắp tung gói cứu trợ thứ hai cho các ngân hàng). Nhiều khả năng ông đang mỉa mai hệ thống ngân hàng dự trữ liên bang bằng những lời này. Không ai biết vì sao Satoshi tạo ra địa chỉ không thể chi tiêu này trong block khởi đầu. Đến nay đã có 16 BTC được gửi ẩn danh vào địa chỉ này, và vì thế tổng cung 21 triệu bitcoin trên thực tế sẽ không bao giờ đạt được trọn vẹn.
Bitcoin chỉ mất 9 năm để chạm tới những tầm cao khiến các ngân hàng trung ương trên thế giới phải e sợ, và chặng đường phía trước của nó vẫn còn rất dài.
