Tác giả: Nghiên cứu BitMEX
Nguồn: BitMEX
Tóm tắt: Trên blockchain Bitcoin , có hai cặp giao dịch giống hệt nhau, một trong đó nằm giữa cặp kia và cả hai đều xuất hiện vào giữa tháng 11 năm 2010. Các giao dịch chồng chéo có thể gây nhầm lẫn và các nhà phát triển Bitcoin đã cố gắng chống lại điều này trong nhiều năm. Vấn đề vẫn chưa được giải quyết hoàn toàn và lần chồng chéo tiếp theo có thể xảy ra vào năm 2046. Mặc dù rủi ro liên quan đến các giao dịch chồng chéo hiện là nhỏ, nhưng đây vẫn là một lỗi thú vị đáng để suy nghĩ.

Tổng quan
Một giao dịch Bitcoin bình thường sẽ chi ít nhất một đầu ra từ một giao dịch trước đó, đó là một mã định danh giao dịch (TXID) tham chiếu đến một giao dịch trước đó. Các đầu ra chưa chi này chỉ có thể được chi một lần - nếu chúng có thể được chi lần, bạn có thể chi cùng một Bitcoin hai lần, điều này sẽ khiến Bitcoin trở nên vô giá trị. Tuy nhiên, trên thực tế, hai cặp giao dịch giống hệt nhau đã xuất hiện trên Chuỗi Bitcoin . Điều này là có thể vì các giao dịch coinbase (các giao dịch cho phép người tạo khối nhận phần thưởng khối) không có bất kỳ đầu vào giao dịch nào, mà thay vào đó tạo ra các đồng tiền mới. Do đó, có thể có hai giao dịch coinbase khác nhau gửi cùng một số tiền đến cùng một địa chỉ và được xây dựng theo cùng một cách chính xác, khiến chúng giống hệt nhau. Vì các giao dịch giống hệt nhau, nên TXID của chúng cũng giống hệt nhau (TXID là bản tóm tắt băm của dữ liệu giao dịch). Ngoài ra, khả năng duy nhất để các TXID chồng chéo là xung đột băm (hai tiền ảnh khác nhau tạo ra cùng một giá trị băm); đối với một hàm băm an toàn về mặt mật mã, điều này được cho là không có khả năng xảy ra và không thể xảy ra. Đối với thuật toán băm SHA256, xung đột băm chưa bao giờ xảy ra trong Bitcoin hay bất kỳ nơi nào khác.
Hai cặp giao dịch giống hệt nhau này xảy ra rất gần nhau về mặt thời gian, giữa 08:37 UTC ngày 14 tháng 11 năm 2010 và 00:38 UTC ngày 15 tháng 11 năm 2010. Cặp giao dịch đầu tiên kẹp cặp giao dịch thứ hai ở giữa, giống như một chiếc bánh sandwich. Chúng ta sẽ coi d5d2….8599 là cặp giao dịch chồng chéo đầu tiên, vì nó là giao dịch đầu tiên chồng chéo, mặc dù (thật kỳ lạ) một giao dịch trước đó, e3bf….b468 , chồng chéo với một giao dịch trong tương lai.
Chi tiết về các giao dịch chồng chéo
Bên dưới, bạn có thể thấy hai ảnh chụp màn hình từ Block Explorermempool.space hiển thị cặp giao dịch chồng chéo đầu tiên, xảy ra ở hai khối khác nhau.


Điều thú vị là nếu bạn nhập các URL có liên quan để truy vấn các trang web Block Explorer, Block Explorermempool.space mặc định hiển thị khối trước đó (chiều cao 91812) khi hiển thị cặp giao dịch chồng chéo đầu tiên ( d5d2….8599 ) và mặc định hiển thị khối sau đó (chiều cao 91880) khi hiển thị cặp giao dịch chồng chéo thứ hai ( e3bf….b468 ). Blockstream.info và Btcscan.org có cùng kết quả. Theo thử nghiệm cơ bản của chúng tôi, Blockchain.com và Blockchair.com là khác nhau, chúng luôn hiển thị khối mới hơn.
Trong số bốn khối liên quan ở đây, chỉ có một khối chứa giao dịch khác ngoài giao dịch coinbase và đó là khối ở độ cao 91812; giao dịch này kết hợp 1 BTC và 19 BTC thành một đầu ra duy nhất trị giá 20 BTC.
Những đầu ra này có thể được chi tiêu không?
Vì có hai cặp TXID giống hệt nhau nên các giao dịch tiếp theo khó có thể tham chiếu đến chúng. Mỗi giao dịch chồng chéo có giá trị 50 BTC. Do đó, các giao dịch chồng chéo này bao gồm tổng cộng 4 * 50 BTC = 200 BTC; hoặc, bạn có thể nói 2 * 50 BTC = 100 BTC, tùy thuộc vào cách bạn hiểu chúng. Theo một góc nhìn, 100 BTC không tồn tại. Tính đến hôm nay, tất cả 200 BTC vẫn chưa được chi tiêu. Theo như chúng tôi biết (không nhất thiết phải hoàn toàn chính xác), nếu ai đó biết private key đằng sau các đầu ra này, thì những Bitcoin này có thể được chi tiêu. Tuy nhiên, sau khi chi tiêu, các UTXO này sẽ bị xóa khỏi cơ sở dữ liệu và 50 BTC trong các giao dịch chồng chéo có liên quan sẽ trở thành không thể chi tiêu (bị mất), do đó chỉ có thể khôi phục 100 BTC. Còn về khối nào mà giao dịch đã được chi tiêu đến (khối trước đó hay khối sau đó), thì vẫn chưa xác định và không thể nói rõ ràng.
Trước khi giao dịch chồng chéo được tạo, các bên có thể chi tiêu tất cả Bitcoin trong giao dịch; sau đó các bên có thể tạo các đầu ra chồng chéo, do đó tạo một mục mới trong cơ sở dữ liệu (hoặc tập hợp các đầu ra chưa chi). Nếu điều này đúng, điều đó có nghĩa là không chỉ có các giao dịch chồng chéo mà còn có các giao dịch chồng chéo với các đầu ra đã chi chồng chéo. Nếu điều này đúng, nó sẽ mở ra khả năng tạo ra nhiều giao dịch chồng chéo hơn nữa, tạo ra các chuỗi giao dịch chồng chéo khi các đầu ra này được chi tiêu. Các bên sẽ phải rất cẩn thận để sắp xếp thứ tự các sự kiện để đảm bảo rằng họ luôn chi tiêu giao dịch chồng chéo trước khi nó được tạo, nếu không một số Bitcoin có thể bị mất mãi mãi. Các giao dịch chồng chéo mới này sẽ không phải là giao dịch coinbase, mà là các giao dịch "thông thường". May mắn thay, điều này đã không xảy ra.
Các vấn đề gây ra bởi các giao dịch chồng chéo
Sự trùng hợp ngẫu nhiên rõ ràng là một điều tồi tệ. Nó gây nhầm lẫn cho ví và Block Explorer, che giấu nguồn gốc của Bitcoin. Nó cũng tạo ra nhiều khả năng cho các cuộc tấn công và vụ nổ. Ví dụ, bạn có thể sử dụng hai giao dịch chồng chéo để trả cho cùng một người lần. Sau đó, khi người đó quyết định chi tiêu số tiền, họ thấy rằng chỉ có một nửa số tiền có thể chi tiêu được. Ví dụ, điều này cũng có thể khiến sàn giao dịch gặp rủi ro và khiến sàn giao dịch mất khả năng thanh toán, mà kẻ tấn công không phải chịu bất kỳ chi phí nào vì chúng có thể yêu cầu rút tiền ngay sau khi gửi tiền.
Không cho phép giao dịch với TXID trùng lặp
Để giảm bớt vấn đề giao dịch chồng chéo, vào tháng 2 năm 2012, nhà phát triển Bitcoin Pieter Wuille đã đề xuất BIP30 , cấm tạo các giao dịch chồng chéo với TXID hiện có trừ khi giao dịch trước đó đã được chi tiêu hoàn toàn. Soft fork này được áp dụng cho tất cả các khối sau ngày 15 tháng 3 năm 2012.
Vào tháng 9 năm 2012, nhà phát triển Bitcoin Greg Maxwell đã thay đổi các quy tắc để kiểm tra BIP30 sẽ được áp dụng cho tất cả các khối (không chỉ những khối được tạo ra sau ngày 15 tháng 3 năm 2012). Hai tập hợp giao dịch chồng chéo được đề cập ở trên được coi là ngoại lệ. Điều này đã khắc phục một số lỗ hổng DoS. Về mặt kỹ thuật, đây là một soft fork khác, mặc dù thay đổi quy tắc chỉ áp dụng cho các khối được tạo ra cách đây 6 tháng, vì vậy nó không có bất kỳ rủi ro nào của các thay đổi quy tắc giao thức thông thường.
Kiểm tra BIP30 đòi hỏi nhiều tính toán. Nút phải kiểm tra tất cả các đầu ra giao dịch trong một khối mới để xem liệu bất kỳ điểm cuối đầu ra nào đã tồn tại trong tập UTXO hay chưa. Đây có lẽ là lý do tại sao Wuille thiết kế nó để chỉ kiểm tra các đầu ra chưa được sử dụng. Nếu tất cả các đầu ra (kể từ Khối Genesis ) được kiểm tra, thì việc tính toán sẽ còn khó khăn hơn nữa và việc cắt tỉa sẽ không còn khả thi nữa. (Ghi chú của người dịch: Chế độ cắt tỉa là chế độ hoạt động của nút xóa một phần các khối lịch sử nhưng vẫn giữ nguyên toàn bộ tập UTXO để có thể xác minh các khối mới.)
BIP34
Vào tháng 7 năm 2012, nhà phát triển Bitcoin Gavin Andresen đã đề xuất BIP34 , soft fork kích hoạt vào tháng 3 năm 2013. Thay đổi giao thức này yêu cầu các giao dịch coinbase phải bao gồm Block Height và cho phép quản lý phiên bản định dạng khối. Block Height được thêm vào làm phần tử đầu tiên trong scriptSig (chữ ký tập lệnh) của giao dịch coinbase. Byte đầu tiên trong chữ ký tập lệnh giao dịch coinbase chỉ định số byte được sử dụng cho số Block Height, theo sau là chính số Block Height. Trong 160 năm đầu tiên ( 2 ^ 23 / (144 blocks/day * 356 day/year) ), byte đầu tiên phải luôn là 0x03. Đây là lý do tại sao chữ ký tập lệnh coinbase ngày nay (ở dạng thập lục phân) luôn bắt đầu bằng 03. Soft fork này dường như đã giải quyết hoàn toàn vấn đề giao dịch trùng lặp và bây giờ tất cả các giao dịch phải là duy nhất.
Vào tháng 11 năm 2015, sau khi BIP34 được áp dụng, nhà phát triển Bitcoin Alex Morcos đã thêm một yêu cầu hợp nhất vào kho lưu trữ phần mềm Bitcoin Core để thay đổi nút nhằm ngừng thực hiện kiểm tra BIP30. Rốt cuộc, vì BIP34 đã khắc phục được sự cố nên việc kiểm tra tốn kém này không còn cần thiết nữa. Vào thời điểm đó, người ta không biết, nhưng về mặt kỹ thuật, đây là một hard fork sẽ làm mất hiệu lực các khối trong tương lai với xác suất rất nhỏ. Bây giờ, hard fork tiềm năng này không quan trọng vì hầu như không ai chạy phần mềm nút được phát hành trước tháng 11 năm 2015. Tại forkmonitor.info , chúng tôi đang chạy Bitcoin Core 0.10.3, được phát hành vào tháng 10 năm 2015. Do đó, đây là một máy trạm tuân theo các quy tắc trước hard fork và vẫn thực hiện kiểm tra BIP30 tốn kém.
Sự cố với khối 198 3702
Sau đó, người ta phát hiện ra rằng một số giao dịch coinbase trong các khối trước khi BIP34 được kích hoạt có chữ ký tập lệnh trùng với các khối hợp lệ trong tương lai (BIP34). Do đó, mặc dù BIP34 khắc phục được sự cố trong hầu hết các trường hợp, nhưng không phải là khắc phục được 100%. Vào năm 2018, nhà phát triển Bitcoin John Newbery đã liệt kê danh sách đầy đủ các điểm chồng chéo có thể xảy ra này như sau:
| Khối Cũ | Khối mới | Ngày dự kiến khối mới sẽ đến |
|---|---|---|
| 209.920 | 209.921 | 28/11/2012* |
| 176,684 | 490,897 | 21/10/2017* |
| 164.384 | 1.983.702 | 13/01/2046 |
| 169.895 | 3.708.179 | 28/10/2078 |
| 170,307 | 3.709.183 | 03/11/2078 |
| 171.896 | 3.712.990 | 30/11/2078 |
| 172.069 | 3.713.413 | 03/12/2078 |
| 172,357 | 3.714.082 | 07/12/2078 |
| 172,428 | 3.714.265 | 09/12/2078 |
| 183,669 | 3.761.471 | 02/11/2079 |
| 196.988 | 4.275.806 | 12/08/2089 |
| 174,151 | 5.208.854 | 11/05/2107 |
| 201.577 | 5.327.833 | 14/08/2109 |
| 206.039 | 7.299.941 | 11/02/2147 |
| 206.354 | 7.299.941 | 11/02/2147 |
- Nguồn: https://gist.github.com/jnewbery/df0a98f3d2fea52e487001bf2b9ef1fd -
Ghi chú về “*”: Các khối này được khai thác vào năm 2012 và 2017 và các giao dịch coinbase của chúng không chồng chéo. Khối 209921 (khối cuối cùng thứ 79 của lần giảm nửa lần ) không thể chồng chéo vì các kiểm tra BIP30 vẫn còn hiệu lực tại thời điểm đó.
Bảng hàng năm về số lượng giao dịch coinbase chồng chéo có thể xảy ra

- Nguồn: https://gist.github.com/jnewbery/df0a98f3d2fea52e487001bf2b9ef1fd -
Do đó, khối tiếp theo có thể có giao dịch chồng chéo là 198 3702, dự kiến sẽ được tạo vào tháng 1 năm 2046. Khối có chiều cao 16 4384 được tạo vào tháng 1 năm 2012 và giao dịch coinbase của nó đã gửi 170 BTC đến 7 địa chỉ khác nhau. Do đó, nếu một thợ đào vào năm 2046 muốn khởi chạy một cuộc tấn công như vậy, anh ta không chỉ phải có thể khai thác khối này mà còn phải đốt gần 170 BTC tiền phí và tổng chi phí sẽ cao hơn một chút so với 170 BTC (bao gồm cả chi phí cơ hội của khoản trợ cấp khối 0,09765625 BTC). Dựa trên tỷ giá hối đoái Bitcoin hiện tại là 88.500 đô la, điều này sẽ trả giá 15 triệu đô la. Đối với người sở hữu 7 địa chỉ trong giao dịch coinbase này vào năm 2012, thì vẫn chưa biết và có khả năng cao là private key này đã bị mất. Cả 7 đầu ra của giao dịch coinbase này đã được chi tiêu, và 3 trong đó đã được chi tiêu trong cùng một giao dịch . Chúng tôi cho rằng rằng các khoản tiền này có thể liên quan đến chương trình Ponzi Pirate40 , mặc dù đây chỉ là suy đoán. Do đó, cuộc tấn công này có vẻ không chỉ rất tốn kém mà còn gần như hoàn toàn vô dụng. Phải tốn một khoản tiền rất lớn để loại bỏ một nút chạy 31 năm phần mềm khỏi mạng.
(Ghi chú của người dịch: Logic ở đây là BIP34 không cấm việc xảy ra các giao dịch chồng chéo, chỉ có BIP30 cấm. Do đó, nếu các giao dịch chồng chéo được tạo ở độ cao 198 3702, nó sẽ chỉ gây ra sự cố cho nút vẫn đang chạy kiểm tra BIP30 - nó sẽ fork khỏi mạng bao gồm nút không còn chạy kiểm tra BIP30. Tất nhiên, cũng có thể nói rằng hiện tại, chúng ta không có tiêu chuẩn rõ ràng về cách xử lý các giao dịch chồng chéo.)
Khối có khả năng nguy hiểm tiếp theo có thể có giao dịch coinbase chồng chéo với khối ở độ cao 169985 xuất hiện vào tháng 3 năm 2012. Đầu ra của giao dịch coinbase này trong lịch sử chỉ hơn 50 BTC một chút, ít hơn nhiều so với 170 BTC. 50 BTC tất nhiên có liên quan đến trợ cấp khối tại thời điểm đó và trong tương lai, vào năm 2078, khi có nguy cơ chồng chéo, trợ cấp khối sẽ thấp hơn nhiều. Do đó, để khai thác lỗ hổng này, thợ đào phải đốt khoảng 50 BTC phí, không thể thu hồi được vì chúng phải được gửi đến đầu ra xuất hiện trong giao dịch năm 2012. Không ai biết giá Bitcoin vào năm 2078, nhưng cuộc tấn công này cũng có thể cực kỳ tốn kém. Do đó, vấn đề này có thể không phải là rủi ro lớn mà Bitcoin phải đối mặt, nhưng nó vẫn là mối quan tâm.
Kể từ nâng cấp SegWit năm 2017, các giao dịch coinbase cũng có thể bao gồm cam kết đối với tất cả các giao dịch trong khối. Các khối trước BIP34 này không bao gồm các cam kết dữ liệu chứng kiến. Do đó, để tạo ra một giao dịch coinbase trùng lặp, thợ đào cần xóa tất cả các giao dịch sử dụng đầu ra SegWit khỏi khối, điều này làm tăng thêm chi phí cơ hội của cuộc tấn công vì có ít giao dịch hơn có thể được đưa vào khối để trả phí.
kết luận
Lỗi giao dịch kép dường như không phải là vấn đề bảo mật lớn đối với Bitcoin, vì nó rất khó, tốn kém và hiếm khi khai thác. Tuy nhiên, đây vẫn là một vấn đề thú vị, xét đến các mốc thời gian và đặc tính thú vị của giao dịch kép. Tuy nhiên, các nhà phát triển đã dành lượng lớn thời gian cho vấn đề này và ngày 2046 có thể đã bị chôn vùi trong tâm trí của một số nhà phát triển như một hạn chót để sửa lỗi. Có một số cách để sửa lỗi này, có thể yêu cầu một soft fork. Một giải pháp khả thi là bắt buộc thực hiện cam kết SegWit (có trong giao dịch coinbase).
(qua)





