ความเสี่ยง Reentrancy Attack ในช่วงสัญญาณ BIP-110

Article author

BIP-110 เริ่มบังคับสัญญาณพร้อมกับการสนับสนุนนักขุดที่ไม่เพียงพอ

Bitcoin Improvement Proposal 110 เริ่มเข้าสู่ช่วงบังคับสัญญาณตั้งแต่บล็อกที่ 961,632 เป็นต้นไป ในช่วงเวลานี้ โหนดที่บังคับใช้ BIP-110 จะเริ่มปฏิเสธบล็อกที่ไม่ได้ตั้งค่า version bit 4 อย่างไรก็ตาม การสนับสนุนจากนักขุดต่อ BIP-110 ยังคงต่ำกว่าขั้นต่ำที่ต้องการอย่างมาก โดยนักขุดสัญญาณสนับสนุนเพียง 2.53% ของ 2,016 บล็อกก่อนหน้าช่วงเวลานี้ ซึ่งต่ำกว่าค่าที่ต้องการเพื่อการเปิดใช้ในระยะต้นที่ 55% อย่างมาก การยอมรับที่ต่ำนี้ทำให้เกิดโซ่ BIP-110 ส่วนน้อยขึ้นชั่วคราวแต่ไม่นานก็ถูกโซ่ Bitcoin หลักที่โดดเด่นกว่าดึงหน้าไปได้

BIP-110 เสนอข้อจำกัดชั่วคราวเกี่ยวกับขนาดข้อมูล payload และผลลัพธ์ของธุรกรรมใน Bitcoin เพื่อป้องกันการบันทึกข้อมูลที่ไม่ใช่การเงินซึ่งเพิ่มภาระทรัพยากรของโหนด แม้ว่าการบังคับใช้สัญญาณบังคับจะเริ่มที่บล็อก 961,632 แต่ข้อจำกัดของธุรกรรมตามข้อเสนอจะเริ่มมีผลจริงที่บล็อก 965,664 ก็ต่อเมื่อมีการเห็นชอบจากนักขุดเพียงพอ

ข้อจำกัดเชิงเทคนิคของ BIP-110 และผลกระทบต่อความจุข้อมูล

BIP-110 มุ่งกำหนดขีดจำกัดเฉพาะเกี่ยวกับขนาดและประเภของข้อมูลที่อนุญาตในธุรกรรม Bitcoin โดยเน้นไปที่การควบคุมการเติบโตของข้อมูลที่ไม่เกี่ยวข้องกับธุรกรรมหลัก ข้อเสนอจำกัดสคริปต์เอาต์พุตใหม่ส่วนใหญ่ไว้ที่ 34 ไบต์ จำกัดขนาดเอาต์พุต OP_RETURN ไม่เกิน 83 ไบต์ และจำกัดการดันข้อมูลบางอย่างและ witness อยู่ที่ 256 ไบต์

// ตัวอย่าง pseudocode แบบ Solidity แสดงการตรวจสอบขนาดที่คล้ายกัน
function validateOutputScriptSize(bytes memory outputScript) internal pure returns (bool) {
    // บังคับขนาดสคริปต์เอาต์พุตไม่เกิน 34 ไบต์สำหรับสคริปต์ใหม่ส่วนใหญ่
    if (outputScript.length > 34) {
        revert("Output script size exceeds 34 bytes limit");
    }
    return true;
}

function validateOpReturnSize(bytes memory opReturnData) internal pure returns (bool) {
    // บังคับให้ข้อมูล OP_RETURN ไม่เกิน 83 ไบต์
    if (opReturnData.length > 83) {
        revert("OP_RETURN data exceeds 83 bytes limit");
    }
    return true;
}

ข้อจำกัดเหล่านี้มุ่งเป้าเพื่อลดการบวมของบล็อกเชนที่เกิดจากการบันทึกข้อมูลและข้อมูลที่ไม่ใช่ธุรกรรม ซึ่งเพิ่มความต้องการพื้นที่เก็บข้อมูลและแบนด์วิดท์ให้กับผู้ดำเนินโหนดเต็มรูปแบบ อย่างไรก็ดี เอาท์พุตธุรกรรมที่ยังไม่ถูกใช้งาน (UTXOs) ที่ถูกสร้างก่อนการเปิดใช้จะได้รับการยกเว้นจากข้อจำกัดใหม่เหล่านี้เพื่อลดผลกระทบทันทีต่อผู้ใช้ Bitcoin และสมาร์ตคอนแทรกต์ที่มีอยู่

เนื่องจากข้อจำกัดเหล่านี้มีเป้าหมายลดธุรกรรมที่มีข้อมูลมาก การนำไปใช้จริงอาจส่งผลกระทบต่อรูปแบบการเขียนสคริปต์และวิธีการฝังข้อมูลที่นักพัฒนากำลังใช้ในปัจจุบัน รวมไปถึงอาจส่งผลต่อ NFTs หรือโครงสร้างชั้นข้อมูลที่พึ่งพาขนาดเอาต์พุตที่ใหญ่กว่า

การสนับสนุนจากนักขุดและพลวัตของความเห็นพ้องต้องกันตามช่วงสัญญาณ BIP-110

ช่วงเวลาสัญญาณสำหรับ BIP-110 ครอบคลุมบล็อกที่ 961,632 ถึง 963,647 ซึ่งในช่วงนี้นักขุดต้องส่งสัญญาณความพร้อมผ่าน version bit 4 เพื่อให้ดำเนินการเปิดใช้ได้ การปฏิบัติตามการส่งสัญญาณเป็นสิ่งจำเป็นเพราะการสนับสนุนนักขุด 55% คือเกณฑ์ที่กำหนดสำหรับการเปิดใช้ก่อนกำหนดและการบังคับใช้ขั้นสุดท้าย

พารามิเตอร์ ค่าที่กำหนด หมายเหตุ
เริ่มบังคับสัญญาณ บล็อก 961,632 โหนดปฏิเสธบล็อกที่ไม่ได้ตั้ง version bit 4
สิ้นสุดช่วงสัญญาณ บล็อก 963,647 สิ้นสุดช่วงเวลาบังคับสัญญาณ
เริ่มสถานะล็อกอิน บล็อก 963,648 จุดสำคัญของความก้าวหน้าในการเปิดใช้งาน
บังคับใช้ข้อจำกัด บล็อก 965,664 ข้อจำกัดขนาดธุรกรรมมีผลบังคับใช้
สนับสนุนก่อนสัญญาณ 2.53% (51 จาก 2,016 บล็อก) ต่ำกว่าขั้นต่ำ 55% อย่างมาก

แม้ว่ากฎระเบียบบังคับสัญญาณจะถูกนำมาใช้แล้ว แต่สัดส่วนการมีส่วนร่วมของนักขุดที่ต่ำมาก — เพียงราว 2.53% ของบล็อกก่อนหน้า — ชี้ให้เห็นว่าการสนับสนุนยังมีจำกัดและเป็นอุปสรรคต่อการยอมรับในวงกว้าง ภาพนี้แสดงให้เห็นการเกิดโซ่ BIP-110 ส่วนน้อยที่ปรากฏขึ้นแต่ถูกโซ่หลักแซงหน้าอย่างรวดเร็ว ซึ่งสะท้อนถึงความยากลำบากในการเปิดใช้การเปลี่ยนแปลงที่มีความขัดแย้งโดยไร้ความเห็นพ้องกว้างขวาง

ความขัดแย้งและคำวิจารณ์เกี่ยวกับ BIP-110 ภายในระบบนิเวศ Bitcoin

BIP-110 ได้รับคำวิจารณ์อย่างมากจากบุคคลสำคัญในชุมชน Bitcoin รวมถึง Michael Saylor ประธานเจ้าหน้าที่ฝ่ายกลยุทธ์ และ Adam Back ซีอีโอของ Blockstream ผู้วิจารณ์เชื่อว่าข้อเสนอนี้เสี่ยงต่อการแตกแยกเครือข่าย Bitcoin โดยทำให้โหนดที่ใช้ BIP-110 ปฏิเสธธุรกรรมที่ถูกต้องตามกฎเดิม ส่งผลให้เกิดการแยกสายโซ่

คำวิจารณ์นี้สะท้อนถึงความสมดุลที่ละเอียดอ่อนระหว่างการอัปเกรดเครือข่ายที่ต้องการบังคับใช้ข้อจำกัดที่เข้มงวดเพื่อความปลอดภัยหรือการจัดการทรัพยากร และความสำคัญของการรักษาความเห็นพ้องเพื่อหลีกเลี่ยงความขัดแย้ง ในกรณีนี้ การบังคับใช้สัญญาณบังคับและการปฏิเสธบล็อกที่ไม่ส่งสัญญาณของ BIP-110 แสดงสถานการณ์ที่ไม่ปกติซึ่งทำให้เกิดโซ่ส่วนน้อยชั่วคราวก่อนที่โซ่ส่วนใหญ่จะเหนือกว่า

การถกเถียงนี้สะท้อนความตึงเครียดที่กว้างกว่าสำหรับการบริหารจัดการบล็อกเชนระหว่างการพัฒนาที่นำโดยนักพัฒนาและความเต็มใจของนักขุดที่จะยอมรับการเปลี่ยนแปลงเหล่านี้ โดยเฉพาะเมื่อข้อเสนอนั้นจำกัดข้อมูลธุรกรรมและกำหนดกฎการตรวจสอบใหม่

แผนสำรองและสถานะการพัฒนาของโค้ดสนับสนุน BIP-110

การพัฒนาที่เกี่ยวข้องกับ BIP-110 คือการปรับฐานโค้ดการเปลี่ยนแปลง fallback proof-of-work (PoW) โดยนักพัฒนา Bitcoin, Chris Guida เมื่อวันที่ 1 สิงหาคม โดยอิงจากงานเบื้องต้นของผู้ดูแล Bitcoin Knots คือ Luke Dashjr การเปลี่ยนแปลง fallback PoW นี้เป็นแผนสำรองในกรณีนักขุดไม่เห็นด้วยกับการเปิดใช้ BIP-110

// Pseudocode แบบ Solidity ตัวอย่างกลไก fallback อย่างง่าย
contract PoWFallback {
    bool public bip110Rejected;

    function checkPoWChange() external view returns(bool) {
        if (bip110Rejected) {
            // เปิดใช้กฎ fallback PoW
            return true;
        }
        return false;
    }
}

อย่างไรก็ตาม ยังไม่มีการกำหนดวันที่เปิดใช้กลไก fallback นี้ ซึ่งหมายความว่ายังคงเป็นมาตรการป้องกันในระดับนักพัฒนามากกว่าคุณสมบัติที่จะเกิดขึ้นในเร็วๆ นี้ การมีแผน fallback หลายกรณีสะท้อนความซับซ้อนในการวางแผนการอัปเกรดที่อาจเจอการต่อต้านจากนักขุด


จากมุมมองด้านความปลอดภัย วิธีของ BIP-110 ที่จำกัดขนาดข้อมูลธุรกรรมสอดคล้องกับแนวปฏิบัติที่ดีที่สุดที่พบในการพัฒนาสมาร์ตคอนแทรกต์ซึ่งการลดพื้นผิวการโจมตีและการใช้ทรัพยากรเป็นเรื่องสำคัญ จากประสบการณ์ของเราใน Soken การกำหนดข้อจำกัดขนาดข้อมูลอย่างเข้มงวดช่วยลดความเสี่ยง เช่น การโจมตี reentrancy ที่ใช้ payload ขนาดใหญ่มากเกินไปหรือไม่คาดคิด แม้ว่า environment ของ scripting ใน Bitcoin จะแตกต่างจากสมาร์ตคอนแทรกต์แบบ Ethereum อย่างมาก แต่แนวปฏิบัติในการจำกัดความซับซ้อนของข้อมูลและบังคับใช้กฎตรวจสอบด้วยความเห็นพ้องนั้นยังสำคัญอย่างยิ่ง

การเปรียบเทียบ: ข้อจำกัดข้อมูลใน BIP-110 เทียบกับข้อจำกัดข้อมูลของสมาร์ตคอนแทรกต์ทั่วไป

ฟีเจอร์ ข้อจำกัดใน BIP-110 แนวปฏิบัติสมาร์ตคอนแทรกต์ทั่วไป
ขนาดสคริปต์/เอาต์พุต สูงสุด 34 ไบต์สำหรับสคริปต์เอาต์พุตใหม่ แตกต่างกัน; คอนแทรกต์มักจำกัดขนาด calldata เพื่อประสิทธิภาพก๊าซ
ขนาดข้อมูล OP_RETURN สูงสุด 83 ไบต์ โดยทั่วไปไม่มีความเทียบเคียงโดยตรง แต่บันทึก/อีเวนต์มักถูกควบคุมขนาด
ขนาดการดันข้อมูล/ witness สูงสุด 256 ไบต์ สมาร์ตคอนแทรกต์จำกัด array/string inputs เพื่อป้องกันการใช้ก๊าซจนหมด
การยกเว้นก่อนเปิดใช้ UTXOs ที่สร้างก่อนเปิดใช้ได้รับการยกเว้น คอนแทรกต์เดิมยังคงสถานะไว้; การอัปเกรดมีผลกับการปรับใช้ใหม่เท่านั้น
กลไกบังคับใช้ ปฏิเสธบล็อกระดับโหนดอย่างเข้มงวด ยกเลิก (revert) ในระดับคอนแทรกต์เมื่อผิดกฎ

การเน้นชัดเจนใน BIP-110 เกี่ยวกับการลดข้อมูลที่ไม่จำเป็นสะท้อนหลักการเดียวกับความปลอดภัยสมาร์ตคอนแทรกต์ที่ต้องการลดช่องทางการใช้ผิดหรือใช้ทรัพยากรเกินจำเป็น

ข้อคิดด้านความปลอดภัยเกี่ยวกับการโจมตีแบบ reentrancy และข้อจำกัดขนาดข้อมูลในโปรโตคอลบล็อกเชน

แม้ BIP-110 จะไม่ได้แก้ปัญหาช่องโหว่ reentrancy แบบคลาสสิก — ซึ่งเป็นปัญหาที่พบในสมาร์ตคอนแทรกต์ที่สามารถเขียนโปรแกรมได้ — ข้อจำกัดข้อมูลของ BIP-110 มีส่วนช่วยในด้านสุขอนามัยความปลอดภัยโดยลดความซับซ้อนและขนาดของสคริปต์ธุรกรรม ในสมาร์ตคอนแทรกต์สถานะซับซ้อน การโจมตีแบบ reentrancy เกิดขึ้นเมื่อสัญญาฝ่ายตรงข้ามเรียกฟังก์ชันซ้ำก่อนที่การอัปเดตสถานะจะเสร็จสิ้น โดยมักจะอาศัยการเปลี่ยนแปลงหลายสถานะในการทำธุรกรรมเดียว

// ตัวอย่างรูปแบบที่เสี่ยงต่อ reentrancy แบบเรียบง่าย
contract VulnerableContract {
    mapping(address => uint256) public balances;

    function withdraw(uint256 amount) external {
        require(balances[msg.sender] >= amount, "Insufficient balance");

        (bool success, ) = msg.sender.call{value: amount}("");
        require(success, "Failed to send Ether");

        balances[msg.sender] -= amount; // อัปเดตสถานะหลังเรียกภายนอก – เสี่ยง
    }
}

การกำหนดข้อจำกัดข้อมูลอย่างเข้มงวด คล้ายกับข้อจำกัดของ BIP-110 ช่วยลดโอกาสการโจมตีที่ซับซ้อนหรือใช้ข้อมูลมาก โดยทำให้การตรวจสอบความถูกต้องง่ายขึ้นและลดพื้นผิวการโจมตีได้แม้ในสภาพแวดล้อมที่เขียนโปรแกรมได้สูง

// รูปแบบปลอดภัย: อัปเดตสถานะก่อนเรียก
function withdraw(uint256 amount) external {
    require(balances[msg.sender] >= amount, "Insufficient balance");

    balances[msg.sender] -= amount; // อัปเดตสถานะก่อนเรียกภายนอก

    (bool success, ) = msg.sender.call{value: amount}("");
    require(success, "Failed to send Ether");
}

เปรียบเทียบนี้เน้นย้ำว่าการจำกัดความซับซ้อนของข้อมูลและบังคับให้อัปเดตสถานะก่อนล่วงหน้าเป็นพื้นฐานสำคัญในการป้องกันช่องโหว่ reentrancy และความผิดพลาดทางตรรกะในสมาร์ตคอนแทรกต์ หลักการนี้สอดคล้องกับข้อจำกัดของ BIP-110 ในระดับโปรโตคอล Bitcoin


การดำเนินการเพื่อเปิดใช้ BIP-110 สะท้อนถึงความซับซ้อนของการเปลี่ยนแปลงทางเทคนิค ความเห็นพ้องของนักขุด และการยอมรับในชุมชนในโปรโตคอลบล็อกเชนหลัก การติดตามความคืบหน้าผ่านการบังคับสัญญาณและการสนับสนุนนักขุดที่แทบไม่มีเลยชี้ให้เห็นถึงความสำคัญของการมีส่วนร่วมอย่างกว้างขวางสำหรับการเปลี่ยนแปลงที่ต้องอาศัยความเห็นพ้อง ข้อจำกัดขนาดข้อมูลตามข้อเสนอยังสื่อสารถึงข้อกังวลต่อเนื่องเกี่ยวกับความยั่งยืนของบล็อกเชนและภาระทรัพยากรโหนด ซึ่งเป็นธีมที่สอดคล้องกับความปลอดภัยและการออกแบบสมาร์ตคอนแทรกต์

สำหรับนักพัฒนาและสถาปนิกโปรโตคอล การเข้าใจผลกระทบเชิงปฏิบัติต่อข้อจำกัดข้อมูลดังกล่าวสามารถช่วยชี้แนะแนวทางการออกแบบสมาร์ตคอนแทรกต์ให้สอดคล้องกับข้อจำกัดของเครือข่าย พร้อมทั้งป้องกันความเสี่ยงอย่างเช่นช่องโหว่ reentrancy ล่วงหน้า การสำรวจพลวัตเหล่านี้ผ่านงานตรวจสอบและการวิเคราะห์ความปลอดภัยอย่างละเอียดของ Soken ช่วยเปิดเผยความสัมพันธ์ลึกซึ้งและสนับสนุนการพัฒนาที่มั่นคง ทนทานสำหรับ Bitcoin และเครือข่ายอื่นๆ ต่อไป

องค์กรที่ผสานการอัปเกรดหรือพัฒนาคอนแทรกต์บนโปรโตคอล Bitcoin ที่กำลังพัฒนา จะได้รับประโยชน์จากการประเมินกฎความปฏิบัติตามอย่างสม่ำเสมอเช่น BIP-110 โดยพิจารณาทั้งผลกระทบด้านทรัพยากรและความเป็นไปได้ของความเห็นพ้อง การติดตามพัฒนาการกลไก fallback อย่างต่อเนื่องยังช่วยเตรียมความพร้อมสำหรับสถานะเครือข่ายทางเลือกที่อาจเกิดขึ้นจากข้อพิพาทเกี่ยวกับการอัปเกรด

กรณีนี้ยืนยันบทบาทสำคัญของการวิเคราะห์ความปลอดภัยสมาร์ตคอนแทรกต์อย่างครอบคลุม แม้ในสภาพแวดล้อม scripting ที่ค่อนข้างคงที่ของ Bitcoin ก็จำเป็นต้องมีการตรวจสอบร่วมกับข้อเสนออัปเกรดที่เกิดขึ้นใหม่ การใช้ความเชี่ยวชาญข้ามโปรโตคอลของ Soken ช่วยเปิดเผยช่องทางภัยคุกคามและความซับซ้อนของความเห็นพ้อง ช่วยให้โครงการต่างๆ สามารถออกแบบแอปบล็อกเชนที่ปลอดภัย ทำงานร่วมกันได้ และคาดการณ์เทรนด์โปรโตคอลและการเปลี่ยนแปลงที่ขับเคลื่อนโดยนักขุดได้อย่างมีประสิทธิภาพ

Article author

คำถามที่พบบ่อย

Reentrancy attack คืออะไรใน blockchain?

Reentrancy attack เป็นการโจมตีที่ใช้ช่องโหว่ของ smart contract โดยการเรียกฟังก์ชันแบบ recursive ก่อนที่จะสิ้นสุดการทำงานครั้งก่อน ทำให้สามารถถอนเงินหรือเปลี่ยนแปลงสถานะโดยไม่ได้รับอนุญาตได้

BIP-110 มีผลต่อช่องโหว่ reentrancy อย่างไร?

BIP-110 จำกัดขนาดข้อมูลและผลลัพธ์ของธุรกรรม ทำให้ลดธุรกรรมที่ซับซ้อนซึ่งอาจถูกใช้ประโยชน์จาก reentrancy attack จึงช่วยเพิ่มความปลอดภัยของ smart contract ใน Bitcoin

ทำไมการสนับสนุนจาก miners จึงสำคัญต่อการเปิดใช้งาน BIP-110?

BIP-110 ต้องการการสัญญาณจาก miners อย่างน้อย 55% เพื่อเปิดใช้ข้อจำกัดธุรกรรม หากไม่มีการสนับสนุนเพียงพอ รูปแบบธุรกรรมที่เสี่ยงและเอื้อต่อ reentrancy attack จะยังคงมีอยู่

นักพัฒนาควรป้องกันช่องโหว่ reentrancy อย่างไร?

นักพัฒนาควรใช้รูปแบบ checks-effects-interactions, ใช้ mutex locks และตรวจสอบโค้ดด้วยเครื่องมือ audit เพื่อลดช่องโหว่ reentrancy ใน smart contract

การสนับสนุนน้อยของ miners ต่อ BIP-110 มีผลต่อความปลอดภัย Bitcoin อย่างไร?

การสนับสนุนต่ำทำให้ BIP-110 ถูกเลื่อนเปิดใช้งาน ส่งผลให้ช่องโหว่ในธุรกรรมอย่าง reentrancy attack ยังคงมีอยู่ อาจทำให้เกิดแยกสายของเครือข่ายกระทบต่อความเสถียร

แชท