Block withholding: kiểu tấn công pool không thể thấy qua một share đơn lẻ
Một thợ đào gửi share thật nhưng giấu đi share lẽ ra đã là một khối. Đây là cái giá phải trả, ai chịu, và cách phát hiện.
Cuộc tấn công này là gì
Mỗi share bạn gửi cho pool là một lời giải thật nhưng chưa đạt mục tiêu của khối. Thỉnh thoảng có một lời giải cũng thấp hơn mục tiêu của khối, và share đó là cả một khối. Nó trông giống hệt mọi share khác cho đến tận lúc pool kiểm tra nó.
Tấn công giữ khối (block withholding) là khi một thợ đào làm việc trung thực, gửi mọi share thông thường, và lặng lẽ vứt bỏ đúng share lẽ ra là một khối. Pool đếm các share và trả tiền cho chúng. Khối mà pool lẽ ra nhận được không bao giờ đến.
Vì sao một share không bao giờ để lộ nó
Đây là điều khiến cuộc tấn công đáng chú ý chứ không chỉ đơn thuần là thiếu tử tế. Không có gì ở kẻ tấn công trông sai trên bất kỳ share riêng lẻ nào. Phần cứng là thật, hashrate là thật, các share hợp lệ và đến với tốc độ đúng. Pool không thể xem xét một share và thấy được bất cứ điều gì.
Thứ bị thiếu là một sự vắng mặt, và sự vắng mặt chỉ lộ ra theo thời gian. Một thợ đào chiếm một tỷ lệ nhất định trong hashrate của pool lẽ ra phải tìm được khoảng chừng ấy tỷ lệ số khối của pool. Trong một giờ, điều đó không nói lên gì, vì việc tìm khối là một quá trình ngẫu nhiên và những quãng im ắng là chuyện bình thường. Qua một khoảng thời gian đủ dài, nó nói lên rất nhiều.
Nó gây thiệt hại bao nhiêu, và ai thực sự chịu
Pool mất phần thưởng khối lẽ ra nó có. Nhưng pool không thực sự là nơi chịu thiệt, và đây là phần đáng hiểu nếu bạn đào trên bất kỳ pool nào.
Với cơ chế tỷ lệ (proportional), vòng đơn giản là tiếp tục cho đến khi có người khác tìm được khối. Mọi người trong vòng đã đóng góp công sức cho một vòng kéo dài hơn mức lẽ ra, nên ai cũng kiếm được ít hơn một chút trên mỗi đơn vị công sức. Thiệt hại được chia đều cho những thợ đào trung thực.
Với cơ chế trả theo share (pay per share), tình hình tệ hơn cho người vận hành, vì pool đã tự bỏ tiền túi trả cho mọi share và trông vào các khối để bù lại. Một cuộc tấn công kéo dài nhắm vào pool trả theo share là sự rút ruột trực tiếp người vận hành, và trong lịch sử đó là trường hợp người ta lo ngại nhất.
Vì sao lại có người làm việc này
Kẻ tấn công cũng vứt bỏ luôn phần thưởng khối, nên thoạt nhìn đây là tự hại mình hoàn toàn. Nó chỉ có lý khi kẻ tấn công được lợi ở một chỗ mà pool không thấy được.
Động cơ thường gặp là cạnh tranh. Một người vận hành pool riêng có thể thuê hoặc trỏ hashrate vào một đối thủ, chặn kết quả của đối thủ, và khiến pool của mình trông may mắn hơn khi so sánh. Kẻ tấn công trả chi phí phá hoại bằng các share mà nó vẫn thu được.
Có một biến thể tinh vi hơn, khi kẻ tấn công giữ khối lại thay vì vứt bỏ, tiếp tục đào riêng trên khối đó, và gửi sau vào thời điểm có lợi cho mình. Cách này khó thực hiện hơn và cần một phần lớn hashrate thì mới đáng thử.
Nó thực sự được phát hiện như thế nào
Việc phát hiện mang tính thống kê, và buộc phải như vậy, vì không có tín hiệu nào khác. Phép đo rất dễ phát biểu: so sánh số khối mà một người đóng góp đã tìm được với số khối mà số share của họ cho thấy lẽ ra phải tìm được, qua một khoảng thời gian đủ dài để độ may mắn cân bằng lại.
Khoảng thời gian là phần khó. Đặt nó ngắn thì xui xẻo bình thường trông như một cuộc tấn công, nghĩa là liên tục buộc tội thợ đào trung thực. Đặt nó dài thì một kẻ tấn công thật hoạt động được một thời gian trước khi các con số lên tiếng. Không có cách khéo léo nào né được sự đánh đổi này; đó là đặc tính của sự ngẫu nhiên, không phải của phần mềm.
Đó là lý do một hệ thống phát hiện nghiêm túc nêu vấn đề để con người xem xét thay vì tự hành động. Một lệnh cấm tự động dựa trên một con số thống kê rồi sẽ có lúc cấm nhầm một người chỉ đơn giản là xui, và đẩy một thợ đào hợp pháp ra khỏi pool là kết quả tệ hơn cả chính cuộc tấn công.
Điều này có ý nghĩa gì nếu bạn là thợ đào trung thực
Gần như không có gì, và đó là lý do để nói thẳng ra điều này.
Share của bạn được đếm và trả tiền như nhau trong mọi trường hợp. Xui xẻo không phải là lỗi và không thể là lỗi, vì trong bất kỳ khoảng thời gian ngắn nào phần lớn thợ đào đều xui. Một chuỗi các vòng mà bạn đóng góp nhiều còn pool không tìm được gì là biến động bình thường, và chỉ số độ may mắn trong thống kê pool tồn tại chính là để bạn thấy nó bình thường đến mức nào.
Điều duy nhất đáng biết là đây là một lý do khiến các pool quan tâm đến việc ai đang trỏ hashrate vào mình, và là lý do một pool công bố các khối và độ may mắn của mình một cách trung thực thì dễ tin tưởng hơn một pool không làm vậy. Mọi thứ cần thiết để kiểm tra pool đều có trên trang khối.