Amber avatar
Coin98 Insights
Nơi chia sẻ tất cả những kiến thức Crypto từ cơ bản đến nâng cao, kinh nghiệm đầu tư Bitcoin và các hình thức đầu tư tiền điện tử khác.

Double Spending là gì? Rủi ro chi tiêu hai lần trong crypto

Double spending có thể làm giảm hiệu suất tính toán của blockchain, giảm tính minh bạch và đồng thời ảnh hưởng tới tài sản của người dùng. Vậy double spending là gì?
Amber avatar
nguyennsh
11 min read
Published Nov 02 2023
Updated Apr 05 2024
Amber media

Double Spending là gì?

Double spending là rủi ro chi tiêu hai lần trong mạng lưới blockchain, mà kẻ tấn công sử dụng một nguồn tiền cho hai hoặc nhiều giao dịch. Mục đích của kẻ lợi dụng double spending là trục lợi trong việc mua bán tài sản, dịch vụ và tài sản gốc của họ không bị tiêu hao.

Tuy nhiên, tận dụng lỗ hổng double spending, kẻ tấn công phải là một node, thợ đào hoặc validator có quyền tham gia vào quá trình xác thực các giao dịch của họ, thậm chí sở hữu hơn 51% sức mạnh tính toán của mạng lưới để ghi các giao dịch xấu vào blockchain. Vì vậy, double spending thường hiếm xảy ra ở thị trường crypto, và gần như chưa bao giờ xảy ra ở những blockchain lớn.

Double spending là một trong những vấn đề đầu tiên mà tất cả nhà phát triển cần phải giải quyết khi họ bắt đầu xây dựng, phát triển blockchain. Vì double spending được coi là lỗ hổng ảnh hưởng tới sự minh bạch của mạng lưới, tài sản của người dùng và thậm chí ảnh hưởng tới giá trị token của các dự án.

advertising
double spending là gì
Double spending được coi là nỗi lo cho mọi blockchain.

Double Spending diễn ra như thế nào?

Double spending là lỗ hổng phổ biến ở những giao dịch online, phụ thuộc vào công nghệ điện tử, do đó thị trường crypto cũng không ngoại lệ với lỗi double spending.

Thông thường, double spending diễn ra trong khoảng thời gian chờ xác thực của các giao dịch và khoảng thời gian tạo khối mới của blockchain.

Giả sử, A là kẻ thực hiện tấn công double spending. A sẽ đóng 2 vai trò, là người thực hiện giao dịch, đồng thời cũng là một node xác thực giao dịch của mạng lưới.

Quy trình thực hiện sẽ như sau:

A tạo và ký giao dịch ban đầu, trong đó số lượng tiền và người nhận được chỉ định.
A phát tán (broadcast) phiên bản giao dịch ban đầu đến các node trong mạng blockchain.
Các node trong mạng nhận và xác nhận giao dịch ban đầu.
Trong quá trình xác nhận giao dịch, A tạo một phiên bản giao dịch khác với cùng một số tiền nhưng có dữ liệu giao dịch khác nhau.
A tiếp tục phát tán phiên bản giao dịch thứ hai đến các node trong mạng blockchain.
Các node tiếp nhận giao dịch thứ hai và xác nhận nó.
Giao dịch ban đầu và giao dịch thứ hai cùng tồn tại trong mạng blockchain và được xác nhận bởi một số node trong mạng. Sự không đồng nhất trong thông tin giao dịch tạo ra sự nhầm lẫn trong hệ thống.

Tuy nhiên, công nghệ blockchain sử dụng các cơ chế kiểm soát và xác thực thông qua thuật toán đồng thuận như chứng minh công việc (Proof of Work), đòi hỏi các node phải tuân theo để có thể ghi các khối mới lên mạng lưới. Việc này nhằm ngăn chặn và phát hiện các giao dịch double spending, khiến việc thực hiện double spending khó khăn và tốn kém đối với kẻ tấn công.

Ở một số blockchain lớn như Bitcoin, mạng lưới thường có tính năng kiểm tra lại các giao dịch (reorg). Vì vậy, những giao dịch không hợp lệ sẽ bị từ chối chỉ sau tối đa 6 block.

Double spending có thể diễn ra khi và chỉ khi, kẻ tấn công có quyền xác thực tương tự những thợ đào khác đồng thời phải có sức mạnh tính toán lớn hơn 51% của toàn mạng lưới. Lúc này, kẻ tấn công sẽ có quyền xác thực tất cả các giao dịch sai là hợp lệ, và thậm chí “in" token thông qua double spending.

Nhưng nếu sức mạnh tính toán của kẻ tấn công không đủ mạnh, giao dịch của họ sẽ bị loại bỏ khỏi blockchain chỉ trong vài phút hoặc vài giây.

mô hình hoạt động của double spending
Mô hình hoạt động của double spending

Ví dụ mạng lưới Bitcoin, một giao dịch luôn được xác thực trong 6 block. Nếu các thợ đào phát hiện có giao dịch bị trùng lặp hoặc sai sót, 6 block mới nhất sẽ bị xóa đi. Nhưng nếu có cá nhân/tổ chức có sức mạnh tính toán lớn, họ có thể tính toán ra được 6 block liên tiếp, dẫn đến việc họ có thể làm các giao dịch sai sót thành giao dịch đúng.

Tuy nhiên, để có thể đạt được 51% sức mạnh tính toán của mạng lưới phải cần rất nhiều tài nguyên và rất tốn kém chi phí. Đồng thời, khi đã tấn công được double spending, mạng lúc này không còn sự bảo mật và minh bạch, các token được in thêm sẽ không có giá trị, điều này đồng nghĩa với việc kẻ tấn công phải bỏ ra rất nhiều tiền nhưng không thu lại được lợi nhuận gì từ mạng lưới.

Trên thực tế, hình thức này chỉ được cộng đồng cho rằng là loại double spending lý thuyết và lý tưởng nhất cho kẻ tấn công, khi họ cần phải có sức mạnh tính toán hơn một nửa sức mạnh tính toán của những thợ đào còn lại.

Double spending vẫn có khả năng đến từ lỗi thiết kế trong smart contract, cho phép người dùng có thể chi tiêu hai lần với cùng một token.

Cơ chế phòng tránh double spending của Bitcoin

Bitcoin là blockchain đầu tiên không thể bị double spending, và cơ chế phòng tránh vẫn được nhiều blockchain áp dụng cho tới ngày nay. Đầu tiên, khi một người dùng tạo một giao dịch, giao dịch này sẽ ở trong trạng thái “chưa xác thực" và sẽ không được đưa vào block của Bitcoin.

Nếu giao dịch “không xác thực" được đưa vào block, nó sẽ được mạng lưới Bitcoin xác thực trong 6 block của mạng lưới. Trong thời gian này, nếu giao dịch được xác nhận tính đúng đắn và không có double spending, giao dịch này sẽ được viết lên sổ cái công khai gửi cho thợ đào và người nhận, dưới dạng mã hoá cryptography.

cơ chế ngăn chặn double spending
Cơ chế phòng tránh double spending của Bitcoin

Bitcoin là mạng lưới lớn nhất thị trường crypto, nên việc luôn bị nhắm tới double spending bởi các kẻ tấn công là điều hiển nhiên. Nếu như mạng lưới với vốn hoá hơn 600 tỷ USD gặp phải double spending, hậu quả không chỉ dừng lại ở mạng lưới Bitcoin mà thậm chí là sự sụp đổ của cả hệ sinh thái trong thị trường crypto.

vốn hoá bitcoin
Vốn hoá Bitcoin luôn dao động 40-50% tổng vốn hoá thị trường. Nguồn: TradingView.

Các loại tấn công tạo nên double spending

51% Attack

51% attack là hình thức tấn công của một cá nhân/tổ chức, khi họ nắm giữ 51% sức mạnh tính toán của blockchain. Nếu kẻ tấn công có 51% sức mạnh tính toán, họ có thể tự do xác thực, ngăn chặn và sắp xếp các giao dịch trên mạng lưới. Từ đó, lỗ hổng double spending xảy ra dễ dàng hơn.

Ví dụ, khi kẻ tấn công thực hiện 51% attack, họ có thể tạo nhiều giao dịch với cùng một nguồn tiền, và những giao dịch này đều được họ xác thực và thêm vào block . Dẫn đến tình trạng giao dịch đó đã được thiết lập, có tính đúng đắn từ mạng lưới, nhưng tài sản của kẻ tấn công sẽ không biến mất.

Tuy nhiên, do quy mô tấn công cần lượng lớn tài nguyên và khó thực hiện, 51% attack chỉ diễn ra ở những blockchain nhỏ, ít thợ đào. Tháng 1/2020, blockchain Bitcoin Gold từng là nạn nhân của 51% attack, kẻ tấn công khi đó đã tận dụng double spending và trục lợi tới 70,000 USD.

Race Attack

Race attack là hình thức tấn công lợi dụng lỗ hổng double spending, khi kẻ tấn công tạo một giao dịch đầu tiên chưa được xác thực với nạn nhân. Và cùng lúc đó, kẻ tấn công tạo một giao dịch thứ hai “đi trước" giao dịch thứ nhất, nhằm mục đích có được sự xác thực từ mạng lưới. Do đó, khiến giao dịch thứ nhất của kẻ tấn công với nạn nhân thất bại, nhưng giao dịch thứ hai lại thành công.

Điều này làm nạn nhân nghĩ rằng họ đã được thanh toán và cung cấp dịch vụ cho kẻ tấn công, nhưng thực chất kẻ tấn công chưa hề chuyển tiền cho nạn nhân.

Finney Attack

Finney attack là hình thức tấn công của thợ đào, khi họ có thể tạo một block chứa giao dịch giả mạo. Đồng thời, họ tạo một giao dịch với cùng loại tiền điện và chuyển cho người dùng thật. Nếu như người dùng này chấp nhận giao dịch, thợ đào sẽ đưa block chứa giao dịch giả lên mạng lưới blockchain. Từ đó, khiến giao dịch giả được xác thực, và giao dịch thứ hai bị từ chối.

Finney attack được nghĩ ra bởi Hal Finney, người đầu tiên xác thực block trên mạng lưới Bitcoin. Ngoài ra, ông cho rằng Finney attack chỉ là ý tưởng cho cuộc tấn công và không có tính thực tiễn, bởi Finney attack yêu cầu kẻ tấn công phải có yếu tố may mắn khi phải tìm được block chứa giao dịch thật, để thay thế bằng block chứa giao dịch giả.

Phòng tránh Double Spending

Đối với các blockchain lớn, cách phòng tránh double spending phụ thuộc vào những yếu tố bảo mật của mạng lưới như smart contract, cryptography, cơ chế đồng thuận…. Nhưng đối với người dùng thông thường, làm sao để phòng tránh double spending?

Ở những ví dụ trên, người dùng có thể thấy đa phần người bán đều chấp nhận những giao dịch “chưa xác thực", dẫn đến hậu quả là họ bị lừa và chưa nhận tài sản thanh toán. Vì vậy, để phòng tránh double spending, người dùng nên chấp nhận được những giao dịch được “gắn mác" xác thực.

Ở thời điểm hiện tại, các ví như Coin98 Wallet, Trust Wallet… và thậm chí những sàn giao dịch tập trung như OKX, Binance… luôn có gắn nhãn các các giao dịch đang trong tình trạng “chưa xác thực", nhằm mục đích cảnh báo người dùng.

cách tránh double spending
Những giao dịch chưa xác thực sẽ được ví ghi là pending hoặc unconfirmed. Ảnh: LEPSIAPD

Một số câu hỏi về Double Spending

Double Spending có phổ biến không?

Ở thời điểm hiện tại, double spending chủ yếu diễn ra ở những blockchain nhỏ, cơ chế phòng thủ yếu đối với 51% attack và race attack. Ở những blockchain lớn như Bitcoin hay Ethereum… tỉ lệ xuất hiện double spending xảy ra là rất thấp, hoặc có thể không bao giờ xảy ra.

Người dùng phòng tránh Double Spending như thế nào?

Thông thường, người dùng nên chấp nhận các giao dịch đã được xác thực bởi mạng lưới, ví dụ ở mạng lưới Bitcoin, người dùng nên đợi ít nhất 6 confirmation block (số block xác thực bởi các thợ đào), hoặc ở mạng lưới Polygon cần ít nhất 128 confirmation block. Thời gian bạn chấp nhận giao dịch càng lâu, double spending càng khó xảy ra.