BTC
ETH
HTX
SOL
BNB
ดูตลาด
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt

พลิกสถานการณ์: สถานการณ์ของ Ethereum

ECN以太坊中国
特邀专栏作者
บทความนี้มีประมาณ 3978 คำ การอ่านทั้งหมดใช้เวลาประมาณ 6 นาที
จุดประสงค์ของบล็อกโพสต์นี้คือเพื่อเปิดเผยปัญหาร้ายแรงและชัดเจนอย่างเป็นทางการกับแพลต
สรุปโดย AI
จุดประสงค์ของบล็อกโพสต์นี้คือเพื่อเปิดเผยปัญหาร้ายแรงและชัดเจนอย่างเป็นทางการกับแพลต

ที่มา | บล็อก Ethereum

ที่มา | บล็อก Ethereum

จุดประสงค์ของบล็อกโพสต์นี้คือเพื่อเปิดเผยปัญหาร้ายแรงและชัดเจนอย่างเป็นทางการกับแพลตฟอร์ม Ethereum ก่อนการ Hard Fork ของเบอร์ลิน

จุดประสงค์ของบล็อกโพสต์นี้คือเพื่อเปิดเผยปัญหาร้ายแรงและชัดเจนอย่างเป็นทางการกับแพลตฟอร์ม Ethereum ก่อนการ Hard Fork ของเบอร์ลิน

ชื่อเรื่องรอง

สถานะ

เริ่มจากพื้นหลังของ Ethereum และ "สถานะ" ของมันกันก่อน

สถานะของ Ethereum ประกอบด้วย patricia-merkle trie ซึ่งเป็นต้นไม้คำนำหน้าประเภทหนึ่ง บทความนี้จะไม่ลงรายละเอียดทางเทคนิค พูดง่ายๆ ก็คือ เมื่อต้นไม้โตขึ้นกิ่งก้านของต้นไม้จะหนาแน่นขึ้นและหนาแน่นขึ้น แต่ละบัญชีที่เข้าร่วมเป็นใบใหม่ ระหว่างรากของต้นไม้และระหว่างใบมีโหนด "กลาง" จำนวนมาก

ในการค้นหาบัญชีเฉพาะหรือ "ใบไม้" ในต้นไม้ยักษ์นี้ จากรากของต้นไม้และผ่านโหนดระดับกลาง จำเป็นต้องแก้ไขแฮช 6-9 แฮชเพื่อแฮชข้อมูลที่เราต้องการคำนวณในที่สุด .

กล่าวโดยย่อ สำหรับการสืบค้นแต่ละครั้งที่ค้นหาบัญชี จะมีการดำเนินการแยกวิเคราะห์ 8-9 ครั้ง การดำเนินการแยกวิเคราะห์แต่ละครั้งเป็นการสืบค้นฐานข้อมูล และการสืบค้นฐานข้อมูลแต่ละครั้งอาจเป็นการดำเนินการกับดิสก์จริงจำนวนเท่าใดก็ได้ จำนวนของการทำงานของดิสก์นั้นคาดเดาได้ยาก แต่เนื่องจากคีย์ trie ถูกแฮชแบบเข้ารหัส (ป้องกันการชนกัน) คีย์จึงเป็น "แบบสุ่ม" ซึ่งเป็นกรณีที่เลวร้ายที่สุดสำหรับฐานข้อมูลใดๆ

เนื่องจาก Ethereum เติบโตขึ้น จึงจำเป็นต้องเพิ่มต้นทุนการดำเนินการเข้าถึงต้นไม้อยู่เสมอ ในเดือนตุลาคม 2559 หลังจากประสบกับเหตุการณ์ "Shanghai Attack" เครือข่าย Ethereum ได้ทำการ hard fork ของ Tangerine Whistle ที่ความสูงของบล็อก 2,463,000 ซึ่งรวมถึง EIP 150 ซึ่งเพิ่มต้นทุนก๊าซของการดำเนินการบางอย่างอย่างมาก และแนะนำการเปลี่ยนแปลงจำนวนมากเพื่อป้องกัน ต่อต้านการโจมตี DoS

ค่าธรรมเนียมน้ำมันที่เพิ่มขึ้นอีกครั้งคือการอัปเกรดอิสตันบูลในเดือนธันวาคม 2019 ซึ่งเปิดใช้งาน EIP 1884

EIP-1884 แนะนำการเปลี่ยนแปลงค่าธรรมเนียมก๊าซดังต่อไปนี้:

➤SLOAD เพิ่มจาก 200 เป็น 800 แก๊ส

➤EXTCODEHASH เพิ่มจาก 400 เป็น 700 แก๊ส

ชื่อเรื่องรอง

ปัญหา

ในเดือนมีนาคม 2019 Martin Swende กำลังทำการวัดประสิทธิภาพของ EVM opcode EIP-1884 ที่ตามมาขึ้นอยู่กับการสืบสวนนี้ Broken Meter เผยแพร่เอกสารนี้ (2019/9) ไม่กี่เดือนก่อนที่จะเปิดใช้งาน EIP-1884

นักวิจัยด้านความปลอดภัยของ ethereum สองคน Hubert Ritzdorf และ Matthias Egli และหนึ่งในผู้เขียนรายงาน Daniel Perez ได้ "สร้างอาวุธ" ช่องโหว่และส่งไปยังโปรแกรมรางวัลบั๊กของ ethereum คือวันที่ 4 ตุลาคม 2562

ขอแนะนำให้ทุกคนอ่านเอกสารฉบับเต็มที่พวกเขาส่งมาซึ่งมีรายละเอียดมาก

ในวันเดียวกัน นักพัฒนาจาก Geth, Parity และ Aleth ได้เรียนรู้เกี่ยวกับเอกสารในช่องทางที่จัดทำขึ้นเพื่อการรักษาความปลอดภัยข้ามไคลเอนต์โดยเฉพาะ

สาระสำคัญของช่องโหว่นี้คือการเรียกใช้การสืบค้นแบบสุ่ม นี่คือตัวอย่างง่ายๆ:

ในรายงานของพวกเขา นักวิจัยใช้ eth_call เพื่อดำเนินการเพย์โหลดนี้บนโหนดที่ซิงโครไนซ์เครือข่ายหลัก ต่อไปนี้คือข้อมูลระหว่างการดำเนินการ ซึ่งมีค่าใช้จ่าย 10 ล้านแก๊ส:

  • Parity: ~90s

  • Geth: ~70s

➤ EXTCODEHASH (400 แก๊ส) ที่ใช้ 10 ล้านแก๊ส

  • Parity : ~50s

  • Geth : ~38s

➤ EXTCODEHASH (700 แก๊ส) ที่ใช้ 10 ล้านแก๊ส

เห็นได้ชัดว่าการเปลี่ยนแปลงใน EIP-1884 ช่วยลดผลกระทบจากการโจมตีครั้งนี้ แต่ยังไม่เพียงพอ

ใกล้จะถึงงานประชุมนักพัฒนาที่โอซาก้าแล้ว ในการประชุมนักพัฒนา มีการแชร์ข้อมูลเกี่ยวกับปัญหานี้กับนักพัฒนาไคลเอนต์บน mainnet เรายังได้พบกับ Hubert, Mathias และ Greg Markou (จาก Chainsafe ซึ่งทำงานเกี่ยวกับ ETC อยู่ในขณะนั้นด้วย) ผู้พัฒนา ETC ก็ได้รับรายงานนี้เช่นกัน

เมื่อปี 2019 ใกล้เข้ามา เราทราบดีว่าปัญหาเลวร้ายกว่าที่คาดการณ์ไว้ก่อนหน้านี้ เนื่องจากธุรกรรมที่เป็นอันตรายอาจผลักเวลาในการบล็อกให้อยู่ในช่วงนาที ยิ่งไปกว่านั้น ชุมชนนักพัฒนาไม่พอใจกับ EIP-1884 เนื่องจาก EIP-1884 ทำลายกระบวนการสัญญาบางอย่าง และผู้ใช้และผู้ขุดเหมืองต่างกระตือรือร้นที่จะเพิ่มขีดจำกัดก๊าซของบล็อก

ชื่อเรื่องรอง

สารละลาย

สารละลาย

วิธีที่สองคือการแก้ไขผ่านวิศวกรรมซอฟต์แวร์ การปรับเปลี่ยนโมเดลข้อมูลและโครงสร้างในไคลเอนต์

ชื่อเรื่องรอง

การทำงานของโปรโตคอลเลเยอร์

การเปิดตัวครั้งแรกเกี่ยวกับวิธีจัดการกับการโจมตีประเภทนี้อยู่ที่นี่ ในเดือนกุมภาพันธ์ 2020 ได้เปิดตัวอย่างเป็นทางการในชื่อ EIP 2583 แนวคิดคือการกำหนดบทลงโทษเมื่อใดก็ตามที่การค้นหาแบบ trie ส่งผลให้เกิดการพลาด

อย่างไรก็ตาม ปีเตอร์พบมาตรการตอบโต้ การโจมตีแบบ "รีเลย์ป้องกัน" ซึ่งจำกัดขอบเขตสูงสุดของบทลงโทษนี้ได้อย่างมีประสิทธิภาพ (ประมาณ 800)

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

ด้วยเหตุนี้ EIP นี้จึงถูกละทิ้งและเรากำลังมองหาทางเลือกอื่นที่ดีกว่า

➤ Alexey Akhunov เสนอแนวคิดของ Oil ซึ่งเป็นแหล่งที่สองของก๊าซ แต่มันไม่เหมือนกับก๊าซในสาระสำคัญ เนื่องจากชั้นดำเนินการมองไม่เห็นและอาจทำให้ธุรกรรมถูกย้อนกลับทั่วโลก

➤ Martin ยังได้เขียนข้อเสนอที่คล้ายกันในเดือนพฤษภาคม 2020 (Gas And Karma)

ในขณะที่ทำซ้ำในกลไกต่างๆ เหล่านี้ Vitalik Buterin เสนอให้เพิ่มต้นทุนก๊าซโดยตรงและเก็บรายการการเข้าถึงไว้ ในเดือนสิงหาคม 2020 Martin และ Vitalik ได้เริ่มปรับปรุง EIP-2929 และ EIP-2930 ซึ่งเป็นเพื่อนร่วมทาง

EIP-2929 แก้ปัญหาก่อนหน้านี้ได้อย่างมีประสิทธิภาพ

➤ เมื่อเทียบกับ EIP-1884 ซึ่งเพิ่มต้นทุนก๊าซอย่างไม่มีเงื่อนไข EIP-2929 จะเพิ่มต้นทุนก๊าซในส่วนที่ไม่ได้เยี่ยมชมเท่านั้น ส่งผลให้ต้นทุนสุทธิเพิ่มขึ้นน้อยกว่าจุดเปอร์เซ็นต์

➤ ด้วยการเพิ่ม EIP-2930 จะไม่มีการหยุดชะงักของกระบวนการสัญญาใดๆ

ในวันที่ 15 เมษายน 2021 EIP ทั้งสองเปิดใช้งานในการอัปเกรดเบอร์ลิน

ชื่อเรื่องรอง

งานพัฒนา

วิธีแก้ปัญหาที่ Peter เสนอในเดือนตุลาคม 2019 คือ "ภาพรวมสถานะแบบไดนามิก"

สแนปชอตเป็นโครงสร้างข้อมูลเสริมที่ใช้ในการจัดเก็บสถานะ Ethereum ในรูปแบบแฟลต ซึ่งสามารถสร้างแบบออนไลน์ทั้งหมดระหว่างการทำงานของโหนด Geth แบบสด ประโยชน์ของสแน็ปช็อตคือทำหน้าที่เป็นโครงสร้างเร่งสำหรับการเข้าถึงสถานะ:

➤ แทนที่จะอ่านดิสก์ O(log N) (x โอเวอร์เฮดของ LevelDB) เพื่อเข้าถึงบัญชีหรือสล็อตที่เก็บข้อมูล สแน็ปช็อตสามารถให้เวลาในการเข้าถึง O(1) โดยตรง (x โอเวอร์เฮดของ LevelDB)

➤ สแนปชอตรองรับการทำซ้ำในบัญชีและพื้นที่เก็บข้อมูลที่มีความซับซ้อน O(1) ต่อรายการ ซึ่งช่วยให้โหนดระยะไกลสามารถดึงข้อมูลสถานะตามลำดับได้ถูกกว่าเมื่อก่อนมาก

➤ สแนปชอตยังเปิดใช้งานกรณีการใช้งานที่แปลกใหม่ เช่น สถานะการตัดแต่งกิ่ง การพยายามออฟไลน์หรือการโยกย้ายไปยังรูปแบบข้อมูลอื่น

ข้อเสียของสแนปชอตคือบัญชีเดิมและข้อมูลพื้นที่เก็บข้อมูลจะถูกทำซ้ำอย่างมีประสิทธิภาพ สำหรับ mainnet นี่หมายถึงพื้นที่ SSD เพิ่มเติมอีก 25GB

แนวคิดของสแนปชอตแบบไดนามิกเริ่มต้นขึ้นตั้งแต่กลางปี ​​2019 และจุดประสงค์ดั้งเดิมคือการส่งเสริมการซิงโครไนซ์สแนปชอตเป็นหลัก ในเวลาที่ทีมเก็ทยุ่งอยู่กับ "โปรเจกต์ใหญ่" มากมาย

➤ ตัดแบบออฟไลน์

➤ การซิงโครไนซ์สแน็ปช็อตแบบไดนามิก + สแน็ปช็อต

➤ ตระหนักถึงการกระจายสถานะ LES (Light Ethereum Subprotocol) ผ่านสถานะการแบ่งส่วน

ชื่อเรื่องรอง

สรุป

สรุป

ในเดือนมีนาคมถึงเมษายน 2021 โปรโตคอล snap/1 ถูกนำมาใช้ในไคลเอนต์ geth ทำให้สามารถซิงโครไนซ์ผ่านอัลกอริทึมตามสแน็ปช็อตใหม่ได้ แม้ว่าจะไม่ใช่โหมดการซิงค์เริ่มต้น แต่นี่เป็นขั้นตอนสำคัญในการทำให้สแน็ปช็อตไม่เพียงมีประโยชน์ในการป้องกันการโจมตี แต่ยังเป็นการเพิ่มประสิทธิภาพที่สำคัญสำหรับผู้ใช้อีกด้วย

ในแง่ของข้อตกลง การอัปเกรดเบอร์ลินจะเสร็จสิ้นในเดือนเมษายน 2564

ต่อไปนี้คือเกณฑ์มาตรฐานบางส่วนที่พัฒนาขึ้นในสภาพแวดล้อมการตรวจสอบ AWS ของเรา:

➤ ก่อนการอัปเกรดเบอร์ลิน ไม่มีสแนปช็อต ก๊าซ 25M: 14.3 วินาที

➤ ก่อนการอัปเกรดเบอร์ลิน มีภาพรวม ก๊าซ 25M: 1.5 วินาที

➤ หลังจากการอัปเกรดเบอร์ลิน ไม่มีสแน็ปช็อต ก๊าซ 25M: ~3.1 วินาที

➤ หลังจากการอัปเกรดเบอร์ลิน ด้วยสแนปชอต ก๊าซ 25M: ~0.3 วินาที

ตัวเลขคร่าวๆ แสดงให้เห็นว่าการอัปเกรด Perlin สามารถลดประสิทธิภาพของการโจมตีได้ 5 เท่า และสแนปช็อตได้ 10 เท่า เพื่อลดผลกระทบโดยรวมได้ 50 เท่า

เราประเมินว่าขณะนี้อยู่บน mainnet (ก๊าซ 15M) สำหรับโหนด geth ที่ไม่ใช้สแน็ปช็อต สามารถสร้างบล็อกด้วยเวลาดำเนินการ 2.5-3 วินาที สำหรับโหนดที่ไม่ใช่สแน็ปช็อต ตัวเลขนี้จะยิ่งแย่ลงเรื่อยๆ เมื่อสถานะเติบโตขึ้น

สำหรับความเป็นไปได้ในการดำเนินการโจมตีนี้ ค่าใช้จ่ายสำหรับผู้โจมตีในการซื้อบล็อกทั้งหมดนั้นอยู่ที่ประมาณไม่กี่ ETH (ก๊าซ 15 ล้านคือ 1.5 ETH สำหรับ 100 Gwei)

ชื่อเรื่องรอง

ทำไมต้องเผยแพร่ตอนนี้?

ในความเป็นจริง ความเสี่ยงนี้เป็น "ความลับแบบเปิด" เสมอ ซึ่งมีการเปิดเผยต่อสาธารณะโดยไม่ตั้งใจมากกว่าหนึ่งครั้ง และมีการพูดถึงหลายครั้งในการประชุมนักพัฒนาหลัก แต่ไม่ได้ลงรายละเอียด

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

บทความนี้เขียนโดย Martin Holst Swende และ Peter Szilagyi เมื่อวันที่ 23-04-2021 จะมีการแชร์กับโครงการที่ใช้ Ethereum ในวันที่ 26-04-2021 และเผยแพร่สู่สาธารณะในวันที่ 2021-05-18

ลิงค์ต้นฉบับ:https://blog.ethereum.org/2021/05/18/eth_state_problems/

ETH
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก:
https://t.me/Odaily_News
กลุ่มสนทนา:
https://t.me/Odaily_GoldenApe
บัญชีทางการ:
https://twitter.com/OdailyChina
สารบัญบทความ
คลังบทความของผู้เขียน
ECN以太坊中国
อันดับบทความร้อน
Daily
Weekly
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android