Nửa đầu của bài viết này là câu trả lời của David A. Harding trên trang web Hỏi & Đáp của Bitcoin Stack Exchange, giải thích về "cuộc tấn công làm cong thời gian". Cuộc tấn công làm lệch thời gian là một điểm yếu ở cấp độ đồng thuận mà đề xuất soft fork"The Great Consensus Cleanup" cố gắng giải quyết. Tuy nhiên, trên testnet 4 nơi áp dụng soft fork dọn dẹp đồng thuận, nhà phát triển Zawy đã phát hiện ra một cuộc tấn công tương tự. Nửa sau là phần giới thiệu của Murch về phương pháp tấn công trên diễn đàn Delving Bitcoin, cũng như các phương pháp giảm thiểu được đề xuất của ông.
cuộc tấn công lệch thời gian
Liên kết gốc: https://bitcoin.stackexchange.com/questions/75831/what-is-time-warp-Attack-and-how-does-it-work-in-general/75834#75834
Tác giả: David A. Harding
Giao thức Bitcoin(quy tắc đồng thuận) có hai quy tắc liên quan đến dấu thời gian trong Block Header:
- Nút sẽ không chấp nhận một khối có dấu thời gian vượt quá 2 giờ so với giờ địa phương.
- Dấu thời gian của một khối phải vượt quá giá trị trung bình của 11 khối trước đó, đây là điều kiện tiên quyết để nó được nút chấp nhận. Quy tắc này được gọi là: Thời gian trung bình trong quá khứ (MTP).
Như bạn đã đề cập trong câu hỏi của mình, sự thay đổi về độ khó khai thác được tính toán dựa trên (sự khác biệt giữa) dấu thời gian của khối đầu tiên và khối cuối cùng trong giai đoạn điều chỉnh độ khó của các khối năm 2016.
Với các quy tắc trên, nếu tất cả thợ đào đồng loạt hành động, họ có thể tuân theo quy tắc MTP trong khối 2015 đầu tiên của chu kỳ, do đó dấu thời gian của mỗi khối chỉ được di chuyển về phía trước thêm 1 giây (so với khối trước đó của nó) (điều này là tăng trưởng nhỏ nhất được cho phép theo quy định MTP). Điều này sẽ chỉ làm giảm độ khó một chút, nhưng hãy nghĩ về điều gì sẽ xảy ra với các quy tắc MTP khi chúng di chuyển dấu thời gian của khối cuối cùng vượt quá thời gian thực hiện tại một chút: trung vị hoàn toàn không thay đổi.
Dấu thời gian thực được tính bằng giây, nhưng ở đây chúng tôi sử dụng ngày làm đơn vị để biểu thị bộ 11 dấu thời gian dựa trên thời gian hiện tại:
[-13, -13, -13, -13, -13, -13, -13, -13, -13, -13, 0]
Lưu ý của người dịch: "-13" trước có nghĩa là thời gian được biểu thị bằng các dấu thời gian này là 13 ngày trước thời gian thực.
Khi đó, giá trị dấu thời gian trung bình của 11 khối này vẫn là -13, nghĩa là khi thợ đào sử dụng nhiều hơn thời gian hiện tại ở khối cuối cùng của chu kỳ điều chỉnh độ khó một chút thì họ không cần cho phép dấu thời gian đã được chuyển về phía trước hơn 1 giây - khối đầu tiên của chu kỳ độ khó tiếp theo có thể sử dụng dấu thời gian -13, có nghĩa là chu kỳ độ khó đã bắt đầu 13 ngày trước.
Khi kết thúc chu kỳ điều chỉnh độ khó thứ hai này, thợ đào lại có thể di chuyển dấu thời gian về phía trước càng xa càng tốt, do đó, giao thức cho rằng phải mất 28 ngày để khai thác tất cả các khối trong chu kỳ này—chỉ bằng một nửa tốc độ dự kiến— — Vì vậy, hãy giảm độ khó khai thác giảm một nửa trong chu kỳ tiếp theo.
Tại thời điểm này, các giá trị được sử dụng trong quy tắc MTP trông như sau:
[-27, -27, -27, -27, -27, -27, -27, -27, -27, -27, 0]
Thợ đào có thể tiếp tục lặp lại cuộc tấn công này (di chuyển dấu thời gian của khối trước đó trong một chu kỳ càng xa càng tốt và di chuyển dấu thời gian của khối cuối cùng về phía trước càng xa càng tốt), liên tục giảm độ khó cho đến khi khối 2016 được khai thác. mất chưa đến 2016 giây, tức là độ khó không thể giảm thêm nữa (vì MTP yêu cầu dấu thời gian của mỗi khối phải tăng lên ít nhất 1 giây).
Câu hỏi chính của bạn là làm thế nào một cuộc tấn công như vậy có thể xảy ra nếu không có sự thông đồng của đa số thợ đào. Bây giờ bạn đã thấy một cuộc tấn công có thể xảy ra như thế nào khi tất cả thợ đào thông đồng với nhau. Cần thấy rằng việc lựa chọn dấu thời gian cho phép thợ đào tấn công khai thác đủ may mắn để tìm thấy một khối có thể ngăn chặn thời gian trung bình chuyển đến một giá trị trung thực một cách đáng tin cậy.
Ví dụ: hãy tưởng tượng rằng dấu thời gian của 11 khối vừa qua trông như thế này:
[-27, 0, -27, 0, -27, 0, -27, 0, -27, 0, -27]
Nếu bạn sắp xếp các dấu thời gian này và tìm giá trị trung vị, bạn sẽ thấy rằng giá trị trung vị là -27, mặc dù 5/11 (45%) tỷ lệ băm băm được khai thác một cách trung thực. Tuy nhiên, điều này không có nghĩa là thợ đào tấn công khai thác vẫn có 55% tỷ lệ băm băm sao? Có thể là không, một thợ đào lớn với tỷ lệ băm trên 30% có thể sử dụng cuộc tấn công "khai thác ích kỷ" để đạt được lợi thế hoặc thợ đào có thể trực tiếp đe dọa khiến các khối khác có dấu thời gian trung thực trở nên lỗi thời. khối") cho phép thợ đào trung thực lợi nhuận ít tiền hơn.
Cá nhân tôi không cho rằng cuộc tấn công này có khả năng xảy ra với Bitcoin vì nó thực thi chậm và rất dễ thấy, nhưng những người thiết kế các giao thức khác có thể cần phải cẩn thận trong việc thay đổi các tham số vì những thay đổi tham số này có thể khiến các cuộc tấn công dễ thực hiện hơn.
Cuộc tấn công dọc thời gian thay thế của Zawy
Liên kết gốc: https://delvingbitcoin.org/t/zawy-s-alternating-timestamp-Attack/1062
Tác giả: Murch
@zawy đã giới thiệu một cuộc tấn công trong Testnet 4 PR ngày hôm qua. Tôi sẽ bày tỏ sự hiểu biết của tôi.
Tương tự như cuộc tấn công làm cong thời gian, cuộc tấn công này yêu cầu kẻ tấn công có thể chọn dấu thời gian của khối đa số, nhưng không giống như cuộc tấn công làm cong thời gian, nó không dựa vào các đặc điểm không chồng chéo của giai đoạn điều chỉnh độ khó (tức là trong đo độ khó từng lỗi một trong suốt thời gian của chu kỳ). Cuộc tấn công này có vẻ hợp lý về mặt lý thuyết, mặc dù yêu cầu thực hiện 16 tuần khai thác ích kỷ (và có thể là 50% tỷ lệ băm băm) sẽ khiến nó trở nên phi thực tế.
Ý tưởng chung của cuộc tấn công này là giữ lại dấu thời gian của hầu hết các khối, nhưng trong khối cuối cùng của chu kỳ điều chỉnh độ khó, lần lượt đặt các dấu thời gian đại diện cho tương lai và các dấu thời gian đại diện cho quá khứ, từ đó chuyển qua lại giữa giảm thiểu và tăng khó khăn. Nhiệt độ quá nóng và thấp này cho phép kẻ tấn công tạo ra nhiều khối hơn trong cùng thời gian so với những gì thợ đào trung thực dự kiến sẽ tạo ra.
Cụ thể, kẻ tấn công đã làm điều này:
Kẻ tấn công trước tiên đặt dấu thời gian càng xa càng tốt. Trong mô tả ban đầu, dấu thời gian chỉ được nâng cao 1 giây cho mỗi khối, nhưng dấu thời gian chỉ cần được nâng cao sau mỗi 6 giây . Thợ đào nắm giữ phần lớn tỷ lệ băm băm, vì vậy chúng tôi hy vọng các khối sẽ xuất hiện sau mỗi 20 phút. Chúng tôi giả định rằng tốc độ tạo khối không đổi trong một khoảng thời gian khó khăn để đơn giản hóa cuộc thảo luận:
Nhãn cao MTP [các] [các] dấu thời gian thời gian thực tế đã trôi qua khó khăn điểm bắt đầu 0 < 0 0 0 D 1 < 0 0 20 phút D 2 < 0 0 40 phút D 3 < 0 0 60 phút D … … … … … 6 0 1 2 giờ D … … … … … 12 1 2 4 giờ D … … … … … Kẻ tấn công đặt dấu thời gian của khối cuối cùng của chu kỳ điều chỉnh độ khó thành 8 tuần sau ngày bắt đầu cuộc tấn công. Khối này sẽ không được nút khác chấp nhận vì đã quá hai giờ so với giờ địa phương của nút, vì vậy kẻ tấn công ở đây (tạm thời) fork mình ra khỏi mạng. Tuy nhiên, dấu thời gian này tượng trưng cho tương lai, cho phép kẻ tấn công thay đổi độ khó của chu kỳ tiếp theo thành 1/4 độ khó của chu kỳ này. Dấu thời gian của khối đầu tiên của chu kỳ điều chỉnh độ khó thứ hai cũng cần được đặt thành 8 tuần sau (kể từ ngày bắt đầu cuộc tấn công) để đáp ứng các yêu cầu của đề xuất dọn dẹp đồng thuận.
Nhãn cao MTP [các] [các] dấu thời gian thời gian thực tế đã trôi qua khó khăn điểm bắt đầu 0 < 0 0 0 D … … … … … 2014 335 336 4 tuần – 40 phút D 2015 335 8W 4 tuần − 20 phút D 2016 336 8W 4 tuần D/4 Kẻ tấn công tiếp tục khai thác trong chu kỳ độ khó thứ hai, tăng dấu thời gian lên ít nhất có thể và một lần nữa nâng dấu thời gian của khối cuối cùng lên 8 tuần nữa, do đó lại giảm độ khó xuống 4 lần. Vì nó chiếm khoảng một nửa tỷ lệ băm băm nên kẻ tấn công phải mất 4 tuần để hoàn thành chu kỳ khó khăn đầu tiên, nhưng chỉ 1 tuần cho chu kỳ khó khăn thứ hai.
Nhãn cao MTP [các] [các] dấu thời gian thời gian thực tế đã trôi qua khó khăn điểm bắt đầu 0 < 0 0 0 D 1 < 0 0 1200 D … … … … … 2014 335 336 4 tuần – 40 phút D 2015 335 8W 4 tuần − 20 phút D 2016 336 8W 4 tuần D/4 2017 336 337 4 tuần + 5 phút D/4 2018 336 337 4 tuần + 10 phút D/4 … … … … … 4030 671 672 5 tuần − 10 phút D/4 4031 671 16W 5 tuần − 5 phút D/4 4032 672 16W 5 tuần D/16 4033 672 673 5 tuần + 75 giây D/16 Zawy cũng cho biết kẻ tấn công có thể đặt dấu thời gian nhỏ nhất có thể và dấu thời gian lớn nhất có thể cho lần chuyển khối cuối cùng của việc điều chỉnh độ khó. Điều này dẫn đến một số chu kỳ điều chỉnh độ khó có thời gian trôi qua danh nghĩa phức tạp. Tuy nhiên, thuật toán điều chỉnh độ khó sẽ tương đương thời gian này là nửa tuần và vẫn chỉ tăng độ khó lên hệ số 4. Ngay cả khi tuân thủ các hạn chế mới do quá trình dọn dẹp đồng thuận đề xuất (không cho phép đặt dấu thời gian của khối đầu tiên của giai đoạn khó khăn tiếp theo sớm hơn khối cuối cùng của giai đoạn trước), kẻ tấn công vẫn có thể Chuyển đổi giữa 1/4 và 16/1. Kẻ tấn công có thể khai thác hai khối giai đoạn khó khăn cứ sau 5/4 tuần.
Nhãn cao MTP [các] [các] dấu thời gian thời gian thực tế đã trôi qua khó khăn điểm bắt đầu 0 < 0 0 0 D 1 < 0 0 1200 D … … … … … 2014 335 336 4 tuần – 40 phút D 2015 335 8W 4 tuần − 20 phút D 2016 336 8W 4 tuần D/4 2017 336 337 4 tuần + 5 phút D/4 2018 336 337 4 tuần + 10 phút D/4 … … … … … 4030 671 672 5 tuần − 10 phút D/4 4031 671 16W 5 tuần − 5 phút D/4 4032 672 16W 5 tuần D/16 4033 672 673 5 tuần + 75 giây D/16 … … … … … 6047 1007 1008 5 tuần 42 giờ − 75 giây D/16 6048 1008 1009 5 tuần 42 giờ D/4 6049 1008 1009 5 tuần 42 giờ + 5 phút D/4 … … … … … 8063 1343 1344 6 tuần 42 giờ − 5 phút D/4 8064 1344 16W 6 tuần 42 giờ D/16 8065 1344 16W 6 tuần 42 giờ + 75 giây D/16 … … … … … 10079 1679 1680 6 tuần 84 giờ − 75 giây D/16 10080 1680 1681 6 tuần 84 giờ D/4 10081 1680 1681 6 tuần 84 giờ + 5 phút D/4 … … … … … 12095 2015 2016 7 tuần 84 giờ − 5 phút D/4 12096 2016 16W 7 tuần 84 giờ D/16 12097 2016 16W 7 tuần 84 giờ + 75 giây D/16 … … … … … Khi thời gian trôi qua thực tế đạt đến 16 tuần, kẻ tấn công có thể tiết lộ Chuỗi khai thác bí mật của mình và (giả sử) có khối lượng công việc tích lũy cao hơn một chút, do đó vô hiệu hóa và sắp xếp lại khoảng 8064 trong số 16 tuần hoạt động giao dịch trên mạng công cộng, thu được khoảng. Phần thưởng khối 39816 và có thể nhận được nhiều phí giao dịch hơn trên mạng công cộng, bởi vì tất cả các giao dịch không xung đột được phát trong giai đoạn tạo khối chậm của mạng công cộng đều có thể được đóng gói.
Các biến thể của cuộc tấn công Zawy
Sau khi đọc mô tả về cuộc tấn công này ngày hôm qua, tôi đã nảy ra ý tưởng để tinh chỉnh nó:
Thay vì xen kẽ dấu thời gian của khối cuối cùng của chu kỳ thành giá trị tối thiểu và 16 tuần sau, kẻ tấn công có thể giảm xuống giá trị tối thiểu trong một chu kỳ và sau đó chuyển sang dấu thời gian biểu thị tương lai theo hai bước:
nhãn | chiều cao | MTP [các] | dấu thời gian [s] | thời gian trôi qua [s] | khó khăn |
---|---|---|---|---|---|
bắt đầu | 0 | < 0 | 0 | 0 | D |
1 | < 0 | 0 | 1200 | D | |
2 | < 0 | 0 | 2400 | D | |
3 | < 0 | 0 | 3600 | D | |
… | … | … | … | … | |
6 | 0 | 1 | 7200 | D | |
… | … | … | … | … | |
12 | 1 | 2 | 14400 | D | |
… | … | … | … | … | |
2014 | 335 | 336 | 4 tuần − 40 phút | D | |
2015 | 335 | 8W | 4 tuần − 20 phút | D | |
giai đoạn khác biệt thứ 2 | 2016 | 336 | 8W | 4W | D/4 |
2017 | 336 | 337 | 4 tuần + 5 phút | D/4 | |
2018 | 336 | 337 | 4 tuần + 10 phút | D/4 | |
… | … | … | … | … | |
4030 | 671 | 672 | 5 tuần − 10 phút | D/4 | |
4031 | 671 | 16W | 5-5 phút | D/4 | |
giai đoạn khác biệt thứ 3 | 4032 | 672 | 16W | 5 tuần | D/16 |
4033 | 672 | 673 | 5 tuần + 75 giây | D/16 | |
… | … | … | … | … | |
6047 | 1007 | 1008 | 5 tuần 42 giờ − 75 giây | D/16 | |
6048 | 1008 | 1009 | 5 tuần 42 giờ | D/4 | |
6049 | 1008 | 1009 | 5 tuần 42 giờ + 5 phút | D/4 | |
… | … | … | … | … | |
8063 | 1343 | 1344 | 6 tuần 42 giờ − 5 phút | D/4 | |
8064 | 1344 | 8W | 6 tuần 42 giờ | D/16 | |
8065 | 1344 | 8W | 6 tuần 42 giờ + 75 giây | D/16 | |
… | … | … | … | … | |
10079 | 1679 | 1680 | 6 tuần 84 giờ − 75 giây | D/16 | |
10080 | 1680 | 16W | 6 tuần 84 giờ | D/64 | |
10081 | 1680 | 16W | 6 tuần 84 giờ + 19 giây | D/64 | |
… | … | … | … | … | |
12095 | 2015 | 2016 | … | D/64 | |
12096 | 2016 | 2017 | … | D/16 | |
12097 | 2016 | 2017 | … | D/16 | |
… | … | … | … | … | |
14111 | 2351 | 2352 | … | D/16 | |
14112 | 2352 | 8W | … | D/64 | |
14113 | 2352 | 8W | … | D/64 | |
… | … | … | … | … | |
16127 | 2687 | 2688 | … | D/64 | |
16128 | 2688 | 16W | … | D/256 | |
16129 | 2688 | 16W | … | D/256 | |
… | … | … | … | … | |
18143 | 3023 | 3024 | … | D/256 | |
18144 | 3024 | 3025 | … | D/64 | |
18145 | 3024 | 3025 | … | D/64 | |
… | … | … | … | … |
Điều này không chỉ cho phép kẻ tấn công tạo ra nhiều khối hơn mà còn giảm độ khó theo cấp số nhân.
Tóm lại
Có thể hữu ích nếu soft fork đặt ra các yêu cầu bổ sung về dấu thời gian, yêu cầu dấu thời gian của khối cuối cùng của giai đoạn khó khăn N phải lớn hơn dấu thời gian của khối đầu tiên trong cùng khoảng thời gian. Tức là nó yêu cầu:
$$n ∈ ℕ; dấu thời gian_{2016×n} < dấu thời gian_{2016×n+2015}$$
Tôi không cho rằng nhu cầu khai thác trung thực để nâng cao dấu thời gian trong các chu kỳ khó khăn (ít nhất một giây, điều này gián tiếp gây ra bởi các quy tắc MTP hiện tại) xung đột với quy tắc này trừ khi dấu thời gian được sửa đổi như đã đề cập ở trên. Tuy nhiên, theo những gì tôi hiểu, quy tắc như vậy sẽ làm giảm bề mặt tấn công này.