Trả lời nhanh: Double spending (chi tiêu kép) là rủi ro một khoản tiền số bị dùng cho hai giao dịch trở lên. Tệp dữ liệu sao chép được dễ dàng, nên tiền số cần một cơ chế để mạng chỉ công nhận một lần chi. Bitcoin giải quyết bằng sổ cái công khai, chữ ký số và Proof of Work.
Điểm chính
- Chi tiêu kép là bài toán trung tâm mà whitepaper Bitcoin năm 2008 đặt ra để giải quyết.
- Ngân hàng chặn bằng sổ cái tập trung; blockchain chặn bằng sổ cái chung, chữ ký và đồng thuận.
- Giao dịch chưa vào khối (0 xác nhận) là chỗ hở lớn nhất, và càng nhiều xác nhận thì rủi ro đảo ngược càng thấp.
- Chuỗi nhỏ, ít sức mạnh bảo vệ dễ bị đảo ngược hơn Bitcoin, nên số xác nhận cần chờ phải tuỳ chuỗi.
Mục lục
- Double spending là gì và vì sao chỉ xuất hiện ở tiền số?
- Cách ngân hàng và blockchain cùng giải bài toán này
- Giao dịch bị chi tiêu kép trên Bitcoin diễn ra thế nào?
- Vì sao hay nghe “chờ 6 xác nhận”?
- Chuỗi nào dễ bị chi tiêu kép hơn?
- Doanh nghiệp nhận thanh toán bằng tiền số cần lưu ý gì?
- Chi tiêu kép khác gì hoàn tiền gian lận hay gian lận chứng từ?
- Ưu điểm, hạn chế của cách blockchain chặn chi tiêu kép
- Khi nào cần quan tâm, khi nào không?
- Câu hỏi thường gặp
Double spending là gì và vì sao chỉ xuất hiện ở tiền số?
Double spending, tiếng Việt thường gọi là chi tiêu kép, chi tiêu hai lần hay chi tiêu gấp đôi. Đó là rủi ro khi một loại tiền điện tử có thể được sử dụng hai lần hoặc nhiều hơn. Kẻ gian muốn mua hàng hoặc dịch vụ mà tiền gốc của họ vẫn còn nguyên để dùng tiếp.
Tiền giấy không gặp vấn đề này vì mỗi tờ là vật thể duy nhất: đưa cho người này thì bạn không còn tờ đó. Tiền số chỉ là dữ liệu, mà dữ liệu thì sao chép gần như miễn phí. Một tệp PDF gửi cho hai người vẫn còn nguyên ở máy bạn. Nếu số dư chỉ là một dòng thông tin, ai đó có thể gửi cùng một dòng cho hai người nhận. Hệ thống tiền số muốn dùng được thì phải có cách buộc cả mạng đồng ý rằng một khoản tiền chỉ được chi một lần.
Đây không phải một lỗi phụ. Trong phần tóm tắt whitepaper năm 2008, tác giả Bitcoin viết rằng chữ ký số chỉ giải quyết một phần. Lợi ích chính sẽ mất nếu vẫn cần bên thứ ba đáng tin để ngăn chi tiêu kép. Cả đề xuất của Bitcoin xoay quanh việc thay bên thứ ba đó bằng mạng ngang hàng.
Cách ngân hàng và blockchain cùng giải bài toán này
Với thẻ hay ví điện tử, một cơ quan trung tâm giữ sổ cái duy nhất. Khi bạn trả tiền, hệ thống kiểm tra số dư, trừ tiền rồi mới báo thành công. Ngân hàng và công ty tín dụng xác thực giao dịch để giảm rủi ro chi tiêu kép, nhưng với tiền điện tử thì không có bên trung gian thứ ba. Cách này hiệu quả nhưng bạn phải tin vào người giữ sổ.
Blockchain thay sổ cái của một bên bằng sổ cái được nhiều nút giữ bản sao. Khác biệt giữa hai mô hình được phân tích kỹ hơn trong bài blockchain khác database thế nào. Riêng với chi tiêu kép, có bốn thành phần phối hợp:
- Chữ ký số: chỉ người giữ khoá riêng mới tạo được chữ ký hợp lệ để tiêu một khoản. Cơ chế này nằm ở bài private key và public key.
- Kiểm tra với sổ cái: theo một tài liệu khảo sát, bên nhận tra đầu ra chưa tiêu (UTXO) của người gửi, kiểm tra chữ ký và chờ giao dịch được đào vào một khối hợp lệ.
- Thứ tự được cả mạng thống nhất: khi hai giao dịch cùng tiêu một khoản, mạng phải chọn một. Giao dịch kia bị coi là không hợp lệ.
- Chi phí để viết lại lịch sử: với Bitcoin, muốn thay các khối đã xếp chồng lên nhau phải bỏ ra sức tính toán còn lớn hơn phần còn lại của mạng cộng lại. Chi tiết ở bài Proof of Work.

Giao dịch bị chi tiêu kép trên Bitcoin diễn ra thế nào?
Khi bạn gửi giao dịch, nó được phát đi và chờ trong mempool của các nút. Các thợ đào gom giao dịch vào khối. Khối mới xuất hiện theo chu kỳ khoảng 10 phút, và đặc điểm này được giải thích ở bài block time. Khoảng trống giữa lúc phát giao dịch và lúc có khối chính là nơi rủi ro tồn tại. Có ba kiểu thường được nhắc đến, ở mức khái niệm:
Race attack: hai giao dịch chạy đua
Người mua gửi một giao dịch trả người bán, đồng thời gửi giao dịch khác tiêu cùng khoản đó về ví mình. Nếu người bán giao hàng ngay khi thấy giao dịch đầu trong mempool mà chưa chờ khối, họ có thể mất hàng khi giao dịch thứ hai được thợ đào chọn. Nút nào nhận trước giao dịch nào thì có thể thấy bản khác nhau trong những giây đầu.
Finney attack: giao dịch được giấu trong khối đào sẵn
Kẻ gian là thợ đào, giữ lại một khối đã đào xong có chứa giao dịch chi tiêu khoản tiền về ví mình. Họ dùng khoản tiền đó thanh toán cho người bán chấp nhận 0 xác nhận, rồi công bố khối giữ lại. Giao dịch trả người bán thành không hợp lệ. Kiểu này cần kẻ gian đang đào và chỉ nhắm vào người nhận không chờ khối.
Đảo ngược chuỗi bằng sức mạnh đào lớn
Kẻ gian đào một nhánh riêng, trong đó giao dịch gốc không tồn tại. Nếu nhánh riêng dài hơn nhánh công khai, các nút chuyển sang nhánh đó và giao dịch cũ biến mất. Theo nghiên cứu về Bitcoin, cuộc tấn công này chỉ thử được với một phần đáng kể sức mạnh băm, và kẻ tấn công đua với phần còn lại để thay các khối cuối. Trường hợp phải kiểm soát hơn nửa sức mạnh được trình bày ở bài tấn công 51%.
Một nhóm nghiên cứu năm 2023 chỉ ra rằng kẻ tấn công không nhất thiết cần quá bán sức mạnh để có lợi nhuận kỳ vọng nếu bên nhận chỉ chờ ít khối. Họ lưu ý đây là mô hình lý thuyết, không có nghĩa Bitcoin đang bị đe doạ. Điều đáng nhớ là khả năng chống chi tiêu kép của Bitcoin phụ thuộc vào số xác nhận mà bên nhận giao dịch lớn yêu cầu.
Vì sao hay nghe “chờ 6 xác nhận”?
Một xác nhận là một khối được đào chồng lên khối chứa giao dịch của bạn. Giao dịch có 6 xác nhận nghĩa là có 5 khối nằm trên khối chứa giao dịch. Con số 6 không phải quy định giao thức. Nó đến từ phần tính toán trong whitepaper, mô hình hoá cuộc đua như bài toán xác suất. Tác giả coi tiến độ của kẻ tấn công theo phân phối Poisson.
Với kẻ tấn công nắm 10% sức mạnh băm, xác suất đảo ngược sau 6 xác nhận là 0,0002428, tức khoảng 0,024%. Hãy đọc kỹ điều kiện: kết quả này chỉ đúng với q = 10% và thời gian đào trung bình đúng như giả định. Nghiên cứu về chính sách chấp nhận giao dịch cho thấy giả định thời gian rất quan trọng: khi 6 xác nhận mất 11 phút thì xác suất chi tiêu kép khoảng 0,01%, còn khi mất gần ba giờ thì khoảng 10%. Vì thế đếm xác nhận mà bỏ qua thời gian trôi qua kể từ lúc phát giao dịch chưa đủ để đặt ngưỡng an toàn.
Về xu hướng, tác giả Bitcoin cho rằng xác suất giảm theo hàm mũ khi số xác nhận z tăng. Mỗi khối thêm vào làm cuộc đua khó hơn rất nhiều cho kẻ tấn công thiểu số.

Chuỗi nào dễ bị chi tiêu kép hơn?
Cùng một con số xác nhận nhưng mức an toàn khác nhau giữa các chuỗi. Với chuỗi Proof of Work, chi phí tấn công tỷ lệ với sức mạnh băm đang bảo vệ chuỗi. Chuỗi nhỏ dùng cùng thuật toán hoặc có thể thuê được sức mạnh đào thì chi phí thấp hơn nhiều. Bản thân bài khảo sát bên dưới cũng lưu ý double spending hiếm xảy ra và gần như chưa từng xảy ra ở các blockchain lớn. Điều đó nói về chuỗi lớn, không áp dụng tự động cho mọi chuỗi.
Với chuỗi Proof of Stake, rủi ro chuyển từ chi phí đào sang việc kiểm soát lượng tài sản đặt cọc và cơ chế kết thúc giao dịch (finality). Khi một khối được coi là “chốt”, đảo ngược nó có thể khiến người đặt cọc bị phạt. Xem thêm ở bài Proof of Stake. Chuỗi riêng hoặc liên minh dùng đồng thuận chịu lỗi Byzantine thường cho giao dịch chốt ngay, vì danh sách bên tham gia đã biết. So sánh các họ này nằm ở bài cơ chế đồng thuận.
| Kiểu hệ thống | Ai chốt thứ tự giao dịch | Điểm cần để mắt về chi tiêu kép |
|---|---|---|
| Ngân hàng, ví điện tử | Một tổ chức giữ sổ | Lỗi hệ thống, gian lận nội bộ, hoàn tiền sau khi đã giao hàng |
| Chuỗi Proof of Work lớn | Thợ đào, theo chuỗi có nhiều công việc nhất | Giao dịch 0 xác nhận; giá trị lớn mà chờ ít khối |
| Chuỗi Proof of Work nhỏ | Thợ đào, sức mạnh thấp | Chi phí tấn công thấp; sắp xếp lại chuỗi sâu hơn bình thường |
| Chuỗi Proof of Stake | Validator đặt cọc | Giao dịch chưa chốt; tập trung tài sản đặt cọc |
| Chuỗi riêng, liên minh | Nhóm tổ chức đã biết | Cấu hình đồng thuận và quyền của nhóm vận hành |
Doanh nghiệp nhận thanh toán bằng tiền số cần lưu ý gì?
Người dùng cuối hiếm khi bị tấn công kiểu này. Người dễ bị nhắm là bên chấp nhận giao dịch có giá trị và giao tài sản ngay: cửa hàng nhận tiền số, sàn nhận nạp, đơn vị cung cấp dịch vụ số giao tức thì. Một vài điểm riêng của chủ đề:
- Không giao hàng khi chỉ thấy giao dịch trong mempool. Đây là điều kiện để cả race attack lẫn Finney attack có chỗ khai thác.
- Đặt số xác nhận theo từng chuỗi và theo giá trị đơn hàng. Con số trong tài liệu hướng dẫn chung chỉ là điểm xuất phát. Bài báo khoa học đã dẫn ở trên cho thấy thời gian chờ thực tế cũng ảnh hưởng đến xác suất.
- Theo dõi sắp xếp lại chuỗi (reorg). Nếu hệ thống của bạn ghi có tiền khi đã thấy giao dịch, phải có luồng trừ lại khi giao dịch biến mất khỏi chuỗi chính.
- Cẩn thận với cầu nối và tài sản bọc. Tài sản chuyển qua cầu nối giữa các chuỗi phụ thuộc vào độ an toàn của chuỗi nguồn: nếu giao dịch nguồn bị đảo ngược, tài sản đã phát hành ở chuỗi đích mất chỗ dựa.
Ví dụ minh hoạ (giả định): một cửa hàng bán mã kích hoạt phần mềm nhận thanh toán bằng một đồng coin trên chuỗi nhỏ. Hệ thống tự động giao mã ngay khi thấy giao dịch. Một khách tạo giao dịch trả tiền, nhận mã, rồi chuỗi sắp xếp lại khiến giao dịch trả tiền không còn trong chuỗi chính. Cửa hàng mất mã mà không có tiền. Cách khắc phục là gắn việc giao mã với số xác nhận, đặt cao hơn với chuỗi có ít sức mạnh bảo vệ.

Chi tiêu kép khác gì hoàn tiền gian lận hay gian lận chứng từ?
Người tìm từ khoá này đôi khi nhầm với các hiện tượng quen thuộc ở tiền truyền thống. Cần tách rõ:
- Hoàn tiền thẻ (chargeback): người mua nhờ ngân hàng đòi lại tiền sau khi đã nhận hàng. Tiền truyền thống đảo ngược được nhờ quy trình tranh chấp, còn giao dịch trên blockchain đã chốt thì không có bên nào để khiếu nại.
- Tái sử dụng chứng từ: dùng một hoá đơn hoặc mã giảm giá nhiều lần. Đây là lỗi kiểm soát nội bộ, không liên quan đến blockchain, dù cùng ý tưởng “dùng một thứ hai lần”.
- Chi tiêu kép trong hệ thống đã gom lại: sàn giao dịch hoặc ví lưu ký có thể ghi sai số dư nội bộ. Đây là lỗi phần mềm của bên giữ sổ, khác với việc ai đó thao túng mạng blockchain.
Ngoài chuỗi, cũng có giải pháp lớp trên xử lý giao dịch ngoài chuỗi chính rồi neo kết quả về chuỗi. Nếu bạn muốn hiểu cách các giải pháp này kế thừa độ an toàn, đọc bài Layer 1 và Layer 2.
Ưu điểm, hạn chế của cách blockchain chặn chi tiêu kép
Ưu điểm: không cần tin vào một bên giữ sổ, lịch sử công khai để ai cũng kiểm tra, và chi phí tấn công đủ lớn để chuỗi lớn gần như bất khả thi. Hạn chế: độ chắc chắn mang tính xác suất, nên bạn phải chờ thời gian; chuỗi nhỏ yếu hơn; và giao dịch đã chốt không đòi lại được khi người gửi nhầm hoặc bị lừa.
Nếu cần nhìn toàn cảnh cách các khối nối với nhau và vì sao sổ cái khó sửa, bạn có thể đọc bài trụ cột blockchain là gì.
Bài này chỉ giải thích khái niệm và cách phòng tránh, không phải khuyến nghị đầu tư hay mua bán tài sản mã hoá. Tài sản mã hoá có rủi ro cao về giá, kỹ thuật và pháp lý.
Khi nào cần quan tâm, khi nào không?
Cần quan tâm khi bạn nhận thanh toán bằng tiền số rồi giao tài sản không thu hồi được, khi vận hành sàn hoặc ví nhận nạp, hoặc khi triển khai chuỗi riêng với số nút ít. Ở các tình huống này, hãy xác định số xác nhận tối thiểu và xử lý reorg trong mã nguồn.
Ít cần lo khi bạn chỉ giữ tài sản, hoặc khi bạn dùng dịch vụ thanh toán đã nhận rủi ro thay bạn và quyết toán bằng tiền truyền thống. Ngay cả khi đó, bạn nên biết điều kiện hợp đồng nói ai chịu thiệt hại nếu giao dịch bị đảo ngược.
Câu hỏi thường gặp
Double spending có phải là hack ví không?
Không. Hack ví là đánh cắp khoá riêng để lấy tiền của chủ ví. Chi tiêu kép là dùng một khoản tiền hai lần để lừa bên nhận, kẻ gian thường vẫn dùng đúng khoản tiền của mình.
Chi tiêu kép trên Bitcoin đã từng xảy ra chưa?
Với giao dịch đã có nhiều xác nhận, hầu như không có trường hợp được ghi nhận rộng rãi. Rủi ro thực tế tập trung ở giao dịch 0 xác nhận và các chuỗi nhỏ hơn. Trường hợp chuỗi nhỏ bị sắp xếp lại đã được báo cáo nhiều lần, nhưng bạn nên kiểm tra nguồn tin trước khi dựa vào số liệu cụ thể.
Bao nhiêu xác nhận là đủ?
Không có một con số cố định cho mọi chuỗi. Mốc 6 xuất phát từ bảng xác suất cho kẻ tấn công 10% sức mạnh băm trên Bitcoin. Với giá trị lớn hoặc chuỗi nhỏ, bạn nên chờ nhiều hơn và tính cả thời gian thực tế đã trôi qua.
Chi tiêu kép có cần kiểm soát 51% mới làm được không?
Kiểm soát đa số làm kẻ tấn công thắng chắc chắn khi đủ thời gian. Dưới ngưỡng đó, xác suất thấp nhưng không bằng không, nhất là khi bên nhận chờ ít xác nhận. Vì thế mới có khuyến nghị chờ thêm khối.
Chuyển khoản ngân hàng có bị chi tiêu kép không?
Ngân hàng có sổ cái trung tâm kiểm tra số dư trước khi trừ tiền nên chi tiêu kép theo nghĩa blockchain không xảy ra. Tuy nhiên vẫn có gian lận khác như hoàn tiền sau khi nhận hàng hay lỗi hệ thống.
Hợp đồng thông minh có chặn được chi tiêu kép không?
Hợp đồng thông minh chạy trên blockchain nên kế thừa độ an toàn của chuỗi nền. Nếu chuỗi bị sắp xếp lại, trạng thái hợp đồng cũng thay đổi theo. Bạn có thể tìm hiểu thêm ở bài smart contract.
Đọc thêm tin tức, phân tích về AI, blockchain và chuyển đổi số trên VBPO Tech Blog, hoặc các bài khác trong chuyên mục Blockchain cơ bản.