รหัสส่วนตัวของ Ethereum นั้นสุ่มไม่เพียงพอ แฮ็กเกอร์ถอดรหัสรหัสส่วนตัวเพื่อขโมยเหรียญ
ผลิตโดย Odaily
ผู้แต่ง | ฉิน เสี่ยวเฟิง
บรรณาธิการ | หลู่ เสี่ยวหมิง

(ภาพจากcryptonomist)
ตามsecurity evaluatorsผลิตโดย Odaily
บรรณาธิการ | หลู่ เสี่ยวหมิง
คำอธิบายภาพ
(ภาพจาก
ตาม
ข่าว สำนักงานประเมินความปลอดภัยอิสระ (ISE) เพิ่งเปิดตัวการศึกษาใหม่ที่เรียกว่า Ethercombing ซึ่งมุ่งเน้นไปที่ความปลอดภัยของคีย์ส่วนตัวของกระเป๋าเงิน Ethereum
ISE พบว่าขณะนี้มีคีย์ส่วนตัว 732 รายการบน Ethereum blockchain ที่มีความเสี่ยงที่จะถูกขโมยเนื่องจากการสุ่มที่ต่ำ นอกจากนี้ ตั้งแต่ปีที่แล้ว กลุ่มแฮ็กเกอร์ที่ชื่อว่า "Blockchainbandit" ได้ดำเนินกิจกรรมการขโมยผ่านคีย์ส่วนตัวที่มีความปลอดภัยต่ำ สูงถึง 37,926 ETH (มูลค่า 54 ล้านดอลลาร์ในขณะนั้น) จนถึงวันนี้องค์กรยังไม่หยุดนิ่ง
ชื่อเรื่องรอง
0x47579DA2BEA463533DBFAD6FCF8E90876C2FE9760DC1162ACC4059EE37BDDB5C
การสุ่มคีย์ส่วนตัวไม่สูง
0x0000000000000000000000000000000000000000000000000000000037BDDB5C
การสร้างรหัสสาธารณะและที่อยู่ Ethereum ขึ้นอยู่กับรหัสส่วนตัว ด้วยรหัสส่วนตัว สามารถสร้างรหัสสาธารณะและที่อยู่ได้ และสามารถใช้ Ethereum (ETH) ในที่อยู่ที่เกี่ยวข้องได้
คีย์ส่วนตัวเป็นตัวเลขสุ่มโดยพื้นฐานแล้ว อาร์เรย์มี 32 ไบต์ 1 ไบต์เท่ากับไบนารี 8 บิต และไบนารีมีเพียงสองค่าเท่านั้น: 0 หรือ 1 ดังนั้นจำนวนคีย์ส่วนตัวทั้งหมดจึงเกือบ 2^(8*32)=2^256 และความน่าจะเป็นของการถอดรหัสคีย์ส่วนตัวคือ 1/2^256
Adrian Bednarek นักวิจัยของ ISE กล่าวว่าแม้ว่าจะยังมีความเป็นไปได้ในทางทฤษฎี แต่จริงๆ แล้วเป็นไปไม่ได้เลยที่จะบังคับถอดรหัสคีย์ส่วนตัว แม้ว่าเราจะใช้ทรัพยากรในการประมวลผลที่ช่วยให้เราสร้างคีย์ได้ 100 ล้านล้านคีย์ต่อวินาที แต่ก็จะใช้เวลาประมาณสองสามปี และเราไม่มีทรัพยากรในการประมวลผลดังกล่าวเลย
อย่างไรก็ตาม ISE พบในการทดลองว่าเนื่องจากข้อผิดพลาดในรหัสซอฟต์แวร์กระเป๋าเงินบางรหัสที่สร้างคีย์ส่วนตัว คีย์ส่วนตัวที่สร้างขึ้นนั้นไม่ได้สุ่มมากและถูกถอดรหัสได้ง่ายจากความรุนแรงของคอมพิวเตอร์ (ระบุความเป็นไปได้ทั้งหมด)
เนื่องจากปัญหาเกี่ยวกับโค้ด ความสมบูรณ์ของไพรเวตคีย์จึงถูกตัดเหลือ 32 บิตที่เอาต์พุต ซึ่งส่งผลให้เกิดสิ่งต่อไปนี้:
สำหรับคอมพิวเตอร์ การถอดรหัสคีย์ส่วนตัวแบบ 32 บิตนั้นยากน้อยกว่าคีย์ส่วนตัวแบบ 256 บิตมาก
นอกเหนือจากข้อผิดพลาดในการเข้ารหัสกระเป๋าเงิน, ปัญหาการอ้างอิงหน่วยความจำ, ความเสียหายของหน่วยความจำ, ข้อผิดพลาดของอุปกรณ์แบบสุ่ม, การใช้ซ้ำเมล็ดแบบสุ่ม, การทำให้ยุ่งเหยิงของวัตถุ, ความเสียหายของสแต็ก, การทำให้ยุ่งเหยิงของอินพุต, ข้อผิดพลาดของเอนโทรปี, ความเสียหายของฮีปหรือข้อผิดพลาดในการเข้ารหัสแบบคอมไพล์ล่วงหน้าที่ไม่ได้ตรวจสอบ ล้วนทำให้ไพรเวตคีย์ไม่ สุ่มพอ ความปลอดภัยจะลดลง
นักวิจัยของ ISE พบในการทดลองว่าปัจจุบันมีคีย์ส่วนตัว 732 คีย์บนบล็อกเชน Ethereum ซึ่งการสุ่มไม่แข็งแรงและมีความเสี่ยงที่จะรั่วไหล คีย์ส่วนตัวเหล่านี้ยังคงทำงานอยู่และเชื่อมโยงกับธุรกรรม 49,060 รายการบนเชน
เพื่อทดสอบคีย์ส่วนตัวที่มีความปลอดภัยต่ำที่พบ นักวิจัยของ ISE ได้โอน ETH มูลค่า $1 ไปยังที่อยู่แห่งใดแห่งหนึ่ง และโทเค็นก็ถูกโอนออกไปในไม่กี่วินาทีต่อมา
การติดตามของ ISE พบว่าในที่สุดโทเค็นก็ไหลไปยังกระเป๋าเงินขององค์กรแฮ็กเกอร์ที่เรียกว่า "Blockchainbandit" องค์กรได้ขโมยคีย์ส่วนตัวโดยมีการรักษาความปลอดภัยที่อ่อนแอตั้งแต่เดือนมกราคม 2018 เมื่อถึงจุดสูงสุด ยอดคงเหลือของที่อยู่สูงถึง 37,926 ETH ซึ่งมีมูลค่า 54 ล้านดอลลาร์ในขณะนั้น จนถึงวันนี้องค์กรยังไม่หยุดนิ่ง
ชื่อเรื่องรอง
Ethereum เองก็ไม่มีปัญหา
หากมีปัญหากับคีย์ส่วนตัวแสดงว่ามีช่องโหว่ในเทคโนโลยีของ Ethereum blockchain เองหรือไม่? Hu Jingyu นักวิจัย Ethereum บอกกับ Odaily ว่าคีย์ส่วนตัวที่มีความปลอดภัยต่ำซึ่งปรากฏอยู่ในปัจจุบันนั้นเป็นปัญหาส่วนใหญ่ของกระเป๋าเงินและไม่มีส่วนเกี่ยวข้องกับ Ethereum เอง Chen Changwu ผู้พัฒนาหลักของ Ethereum เชื่อว่าไม่มีปัญหากับอัลกอริทึมของ Ethereum เอง
Chen Changwu เสริมว่านอกเหนือจากตัวเลขสุ่มแล้ว ค่า K ที่ใช้ในกระบวนการลายเซ็นจะส่งผลต่อความปลอดภัยของคีย์ส่วนตัวด้วย "ค่า K ลับจะใช้ในกระบวนการสร้างลายเซ็น ปัจจุบันทั้ง BTC และ ETH ใช้ RFC6979 เพื่อสร้างค่านี้ ค่า K นี้ต้องเป็นค่าสุ่มและไม่ซ้ำกัน อย่างไรก็ตาม โปรแกรมเมอร์บางคนที่ไม่คุ้นเคยกับการเขียนโปรแกรมอัลกอริทึมการเข้ารหัส มีแนวโน้มที่จะเพิกเฉยรายละเอียดเหล่านี้นำไปสู่การรั่วไหลของคีย์ส่วนตัว”
ในตอนท้ายของรายงาน ISE ยังให้คำแนะนำแก่นักพัฒนาและผู้ใช้:
สำหรับนักพัฒนา:
สร้างตัวเลขสุ่มโดยใช้ไลบรารีที่รู้จักกันดีหรือโมดูลเฉพาะแพลตฟอร์ม
ใช้ตัวสร้างตัวเลขสุ่มหลอกที่ปลอดภัยด้วยการเข้ารหัส
ตรวจสอบซอร์สโค้ดและคอมไพล์โค้ดที่สร้างขึ้นเพื่อตรวจสอบว่าคีย์ที่สร้างขึ้นแบบสุ่มไม่ได้ถูกตัดทอน
ใช้แหล่งเอนโทรปีหลายแหล่ง
ใช้คำสั่งการสร้างหมายเลขสุ่มของฮาร์ดแวร์ที่สอดคล้องกับ NIST (RDRAND/RDSEED) ซึ่งจัดทำโดย AMD/Intel*
ดูคำแนะนำ NIST/FIPS เกี่ยวกับการสร้างตัวเลขสุ่มแบบเข้ารหัส
ตรวจสอบและใช้ NIST Statistical Test Suite (NIST SP 800-22)Arvind Krishna สำหรับผู้ใช้ที่ใช้กระเป๋าเงิน:


