คำเตือนความเสี่ยง: ระวังความเสี่ยงจากการระดมทุนที่ผิดกฎหมายในนาม 'สกุลเงินเสมือน' 'บล็อกเชน' — จากห้าหน่วยงานรวมถึงคณะกรรมการกำกับดูแลการธนาคารและการประกันภัย
ข่าวสาร
ค้นพบ
ค้นหา
เข้าสู่ระบบ
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
ดูตลาด

วิทยาศาสตร์ยอดนิยม: ตัวเลขสุ่มจริงและตัวเลขสุ่มหลอก

比特派钱包
特邀专栏作者
2020-03-06 03:06
บทความนี้มีประมาณ 1313 คำ การอ่านทั้งหมดใช้เวลาประมาณ 2 นาที
ความสุ่มของตัวเลขสุ่มเป็นส่วนสำคัญของการสร้างคีย์ส่วนตัว
ผู้ใช้ Bitcoin ชอบพูดคุยเกี่ยวกับหัวข้อที่เข้าใจยาก เช่น "การเข้ารหัสแบบอสมมาตร" "เส้นโค้งวงรี" และ "คอมพิวเตอร์ควอนตัม" จากนั้นจึงสูญเสียเหรียญด้วยวิธีที่อธิบายไม่ได้ เช่น "สุ่ม"

มีเหตุการณ์หลายครั้งที่ผู้ใช้กระเป๋าเงินของแบรนด์ต่าง ๆ สูญเสียเหรียญ ทั้งหมดนี้เป็นเพราะปัญหาเกี่ยวกับฟังก์ชั่นสุ่ม

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

เมื่อพูดถึงการสุ่ม มีสองแนวคิดที่ต้องชี้แจง: "ตัวสร้างตัวเลขสุ่มจริง" (TRNG) และตัวสร้างตัวเลขสุ่มหลอก (PRNG)

ฟังก์ชันสุ่มส่วนใหญ่ในโปรแกรมคอมพิวเตอร์และภาษาเป็นเครื่องกำเนิดตัวเลขหลอก และทั้งหมดใช้ "เมล็ด" (เช่น "เวลา") เพื่อสร้างผลลัพธ์ "ดูสุ่ม" โดยอัลกอริทึมบางอย่าง

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

เรามาพูดถึงตัวสร้างตัวเลขสุ่มที่แท้จริงกัน ใน Wiki ของจีน การนำ "ตัวสร้างตัวเลขสุ่มแบบฮาร์ดแวร์" (HRNG) มาเทียบเคียงกับตัวสร้างตัวเลขสุ่มจริงนั้นไม่ถูกต้องนัก การสุ่มที่แท้จริงในความหมายที่เคร่งครัดอาจมีอยู่ในกลศาสตร์ควอนตัมเท่านั้น ในหมู่พวกเขา สิ่งที่เราต้องการ (หรือต้องการได้) ในปัจจุบันไม่ใช่การสุ่มแบบนี้

เราต้องการหมายเลขสุ่มที่คาดเดาไม่ได้ มีสถิติ และมีการเข้ารหัสอย่างปลอดภัย ตราบเท่าที่เครื่องสร้างหมายเลขสุ่มที่ทำเช่นนี้ได้ก็สามารถเรียกว่าเครื่องสร้างหมายเลขสุ่มที่แท้จริงได้ การสุ่มที่แท้จริงประเภทนี้ไม่จำเป็นต้องได้รับการออกแบบมาเป็นพิเศษสำหรับฮาร์ดแวร์ ตัวสร้างตัวเลขสุ่ม (/dev/random) ในเคอร์เนลของระบบปฏิบัติการ Linux จะรักษากลุ่มเอนโทรปี การเปลี่ยนแปลงความแรงของสัญญาณเครือข่าย ฯลฯ) ทำให้สามารถให้เอนโทรปีข้อมูลสุ่มที่ใหญ่ที่สุดที่เป็นไปได้ ดังนั้นจึงเป็นเครื่องกำเนิดตัวเลขสุ่มจริงคุณภาพสูง

อย่างไรก็ตาม /dev/random กำลังบล็อกอยู่ นั่นคือหากกลุ่มเอนโทรปีว่างเปล่า การดำเนินการอ่านไปยัง /dev/random จะถูกระงับจนกว่าจะรวบรวมเสียงรบกวนรอบข้างได้เพียงพอ

ดังนั้น เมื่อพัฒนาโปรแกรม เราควรใช้ /dev/urandom เป็นสำเนาของ /dev/random จะไม่ปิดกั้น แต่เอนโทรปีของผลลัพธ์อาจน้อยกว่า /dev/random

ตกลง หลังจากทั้งหมดที่กล่าวมา เราควรใช้ตัวสร้างตัวเลขสุ่มแบบใดเพื่อสร้างคีย์ส่วนตัวเมื่อเราพัฒนาแอปพลิเคชัน Bitcoin

คำตอบนั้นง่าย: urandom ใช้ urandom เท่านั้น

อย่าใช้วิธีสุ่มตัวเลขของบริษัทอื่น แม้แต่ไลบรารีความปลอดภัยขั้นสูงบางรายการที่มีฟังก์ชันสุ่มที่อ้างว่า "ปลอดภัยมาก" เนื่องจากเป็นตัวสร้างตัวเลขสุ่มเข้ารหัสทั้งหมดในโหมดผู้ใช้ และ urandom เป็นตัวสร้างตัวเลขสุ่มในโหมดเคอร์เนล เคอร์เนลสามารถเข้าถึงเอนโทรปีของอุปกรณ์ดิบ และเคอร์เนลสามารถมั่นใจได้ว่าจะไม่แชร์สถานะเดียวกันระหว่างแอปพลิเคชัน .

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

ดังนั้น นักพัฒนาควรใช้ urandom เมื่อต้องการตัวเลขสุ่มที่ปลอดภัยด้วยการเข้ารหัส

สุดท้าย เด็กบางคนถามว่าฮาร์ดแวร์กระเป๋าเงิน BITHD ของคุณสร้างตัวเลขสุ่มจริงหรือไม่

นี่คือคำตอบ: แน่นอน

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

安全
钱包
ยินดีต้อนรับเข้าร่วมชุมชนทางการของ Odaily
กลุ่มสมาชิก

https://t.me/Odaily_News

กลุ่มสนทนา

https://t.me/Odaily_CryptoPunk

บัญชีทางการ

https://twitter.com/OdailyChina

กลุ่มสนทนา

https://t.me/Odaily_CryptoPunk

สรุปโดย AI
กลับไปด้านบน
ความสุ่มของตัวเลขสุ่มเป็นส่วนสำคัญของการสร้างคีย์ส่วนตัว
คลังบทความของผู้เขียน
比特派钱包
ดาวน์โหลดแอพ Odaily พลาเน็ตเดลี่
ให้คนบางกลุ่มเข้าใจ Web3.0 ก่อน
IOS
Android