การเพิ่ม "หมายเลขสุ่มเอนโทรปี" สำหรับคีย์ GPG


10

ในวิดีโอต่อไปนี้: ลินุกซ์ HOWTO: การรักษาความปลอดภัยข้อมูลของคุณกับ PGP ส่วนที่ 2gpgคุณจะได้แสดงให้เห็นถึงวิธีการสร้างคู่คีย์ด้วย เมื่อเวลาประมาณ1:50ผู้สอนพูดสิ่งต่อไปนี้:

ในขณะที่กำลังสร้างคีย์มันเป็นความคิดที่ดีที่จะเลื่อนเมาส์ไปรอบๆ เล็กน้อยเพื่อให้เอนโทรปีของเลขสุ่มเพิ่มขึ้นสำหรับการสร้าง keypair

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


คำถามข้างเคียงนี่คือการใช้ "ตำนานเมือง" ที่ถูกต้องหรือมีวลีคล้าย ๆ กันสำหรับ "ตำนานในคอมพิวเตอร์" หรือไม่?
IQAndreas

1
ผมคิดว่าคำพูดที่เป็นตำนานเมือง ; ผมไม่เคยได้ยินตำนานเมือง ดูen.wikipedia.org/wiki/Urban_legendในการคำนวณวลี"cargo ลัทธิ"อาจเหมาะสม
Derobert

คำตอบ:


8

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

เครื่องกำเนิดไฟฟ้าแบบสุ่มที่ดีทั้งหมดเหมาะสำหรับการเข้ารหัสและ Linux อยู่ในประเภทนั้นมีสององค์ประกอบ:

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

เอนโทรปีต้องมาจากแหล่งที่มาภายนอกกับคอมพิวเตอร์ ผู้ใช้เป็นแหล่งข้อมูลหนึ่งของเอนโทรปี สิ่งที่ผู้ใช้ทำส่วนใหญ่ไม่ได้สุ่ม แต่จังหวะเวลาที่ดีของการกดแป้นและการเคลื่อนไหวของเมาส์นั้นคาดเดาไม่ได้ว่าจะสุ่มเล็กน้อย - ไม่สุ่มมาก แต่ค่อย ๆ สะสม แหล่งที่มาอื่น ๆ ของเอนโทรปีรวมถึงเวลาของแพ็กเก็ตเครือข่ายและเสียงจากกล้องหรือไมโครโฟนสีขาว เคอร์เนลเวอร์ชันและการกำหนดค่าต่าง ๆ อาจใช้ชุดแหล่งข้อมูลที่แตกต่างกัน คอมพิวเตอร์บางเครื่องมีวงจร RNG สำหรับฮาร์ดแวร์โดยเฉพาะตามการสลายตัวของกัมมันตภาพรังสีหรือวงจรอิเล็กทรอนิกส์ที่ไม่เสถียร แหล่งข้อมูลเฉพาะเหล่านี้มีประโยชน์อย่างยิ่งในอุปกรณ์และเซิร์ฟเวอร์ที่ฝังตัวซึ่งสามารถมีพฤติกรรมที่คาดการณ์ได้ในการบู๊ตครั้งแรกโดยที่ผู้ใช้ไม่ต้องทำอะไรแปลก ๆ

ลินุกซ์ให้ตัวเลขสุ่มไปยังโปรแกรมผ่านทางอุปกรณ์ทั้งสอง: และ/dev/random /dev/urandomการอ่านจากอุปกรณ์ใดอุปกรณ์หนึ่งส่งคืนคุณภาพการเข้ารหัสลับ อุปกรณ์ทั้งสองใช้สถานะ RNG ภายในเดียวกันและอัลกอริทึมเดียวกันเพื่อเปลี่ยนสถานะและสร้างไบต์แบบสุ่ม พวกเขามีข้อ จำกัด ที่แปลกประหลาดซึ่งทำให้สิ่งที่ไม่ถูกต้อง:

  • /dev/urandom สามารถส่งคืนข้อมูลที่คาดการณ์ได้หากระบบยังไม่ได้สะสมเอนโทรปีเพียงพอ
  • /dev/randomคำนวณจำนวนของเอนโทรปีที่มีและบล็อกหากมีไม่เพียงพอ ฟังดูดียกเว้นการคำนวณขึ้นอยู่กับการพิจารณาเชิงทฤษฎีที่ทำให้ปริมาณของเอนโทรปีที่มีอยู่ลดลงเป็นเส้นตรงกับแต่ละบิตเอาต์พุต จึง/dev/randomมีแนวโน้มที่จะปิดกั้นอย่างรวดเร็ว

ระบบ Linux บันทึกสถานะ RNG ภายในลงในดิสก์และเรียกคืนในเวลาบูต ดังนั้นเอนโทรปีดำเนินการตั้งแต่การบูตครั้งแรกจนถึงครั้งต่อไป เวลาเดียวที่ระบบ Linux อาจไม่มีเอนโทรปีคือเมื่อติดตั้งใหม่ เมื่อมีเอนโทรปีเพียงพอในระบบแล้วเอนโทรปีจะไม่ลดลง การคำนวณข้อบกพร่องของ Linux เท่านั้นที่ลดลง สำหรับคำอธิบายเพิ่มเติมของข้อควรพิจารณานี้การอ่าน/dev/urandomเหมาะสำหรับการสร้างคีย์การเข้ารหัสโดยนักวิทยาการมืออาชีพ ดู Aso คุณสามารถอธิบายประมาณการเอนโทรปีที่ใช้ใน random.c

การเลื่อนเมาส์จะเพิ่มความเป็นเอนโทรปีให้กับระบบมากขึ้น แต่gpg สามารถอ่านได้เท่านั้น/dev/randomไม่ใช่/dev/urandom (วิธีการแก้ปัญหานี้คือการทำให้/dev/randomอุปกรณ์ 1: 9 เหมือนกัน/dev/urandom) ดังนั้นจึงไม่เสี่ยงที่จะได้รับตัวเลขสุ่มที่ไม่สุ่มพอ หากคุณไม่เลื่อนเมาส์ปุ่มจะสุ่มให้ได้ แต่สิ่งที่สามารถเกิดขึ้นได้คือ gpg อาจถูกบล็อกในการอ่าน/dev/randomรอให้ตัวนับเอนโทรปีของเคอร์เนลเพิ่มขึ้น


ยกเว้น linux เวอร์ชันปัจจุบันไม่อย่างน้อยจากการทดสอบของฉันให้ใช้อุปกรณ์อินพุตเป็นแหล่งของเอนโทรปี (หรืออย่างน้อยก็ประมาณเอนโทรปี) ฉันค่อนข้างแน่ใจว่าพวกเขาเปลี่ยนสิ่งนั้นเพราะในทางทฤษฎีพวกเขาอาจอยู่ภายใต้การควบคุมของผู้โจมตี
Derobert

derobert @ ณ 3.12 มีการเรียกร้องให้add_input_randomnessในdrivers/input/input.cแต่ผมไม่ทราบว่าในสิ่งที่สถานการณ์มันจะเอนโทรปีฉีดจริง
Gilles 'ดังนั้นหยุดความชั่วร้าย'

ฉันเดาว่ามันเพิ่มเอนโทรปี แต่ด้วยค่าประมาณ 0 ... ฉันลองทั้งเมาส์ USB และแป้นพิมพ์ PS / 2 ดูเหมือนว่าจะไม่ประมาณค่าเอนโทรปี ไม่แน่ใจว่าทำไมเพราะอย่างที่ฉันเห็นการเรียกไปยัง credit_entropy_bits ในรหัส
Derobert

3

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

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

กล่าวโดยย่อ: นี่ไม่เป็นความจริงสำหรับเวอร์ชัน Linux ปัจจุบัน มันเป็นคนที่มีอายุมากกว่า

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

cat /proc/sys/kernel/random/entropy_availคุณสามารถดูวิธีเอนโทรปีมากสามารถใช้ได้โดย


นอกจากนี้โปรดทราบว่าคุณสามารถใช้เครื่องมือที่ต้องการrngdป้อนพูลเอนโทรปีปลอม
Patrick

@ แพทริกแน่นอนและถ้าคุณมีชิปใหม่และเชื่อถือ NSA (โอ้เดี๋ยวก่อนฉันหมายความว่า Intel) คุณสามารถใช้ RDRAND ได้
Derobert

havegedมันเป็นเครื่องมือที่ดีอีกวิธีหนึ่งในการป้อนพูลเอนโทรปีของปลอม
mavillan

นั่นไม่ใช่เรื่องราวที่สมบูรณ์ - RNG ไม่ได้หมดเอนโทรปีมันหมดขอบเขตของเอนโทรปี นอกจากนี้ชิ้นส่วนสำคัญของปริศนาคือ gpg ไม่สนใจเมาส์มันเป็นเคอร์เนลที่ทำ
Gilles 'หยุดความชั่วร้าย'

@Gilles ฉันชี้แจงว่า gpg ใช้ Linux RNG และข้อบกพร่องในตัวประมาณค่าเอนโทรปีนั้นดูเหมือนเกินขอบเขต
Derobert

0

ก้อยมีการสร้างคีย์ที่รวดเร็วมากเพราะhavegedติดตั้งแล้ว:

sudo apt-get install haveged
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.