จีพีจีมีเอนโทรปีไม่เพียงพอ


86

ฉันมีกระบวนการมากมายที่ทำงานอยู่เบื้องหลังเพื่อลองและรับเอนโทรปีเพียงพอ แต่ฉันก็ยังล้มเหลว

**We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 210 more bytes)**

ฉันต้องการวิธีในการสร้างคีย์ที่ใช้งานได้ทำให้สิ่งที่ฉันพยายามทำนั้นล้มเหลวอย่างเห็นได้ชัด

คำตอบ:


112

คุณเคยดูที่ RNG หรือไม่?

ประเภท Fedora / Rh / Centos: sudo yum install rng-tools

เกี่ยวกับประเภท deb: sudo apt-get install rng-toolsเพื่อตั้งค่า

จากนั้นเรียกใช้sudo rngd -r /dev/urandomก่อนสร้างคีย์

การอ้างอิง: http://it.toolbox.com/blogs/lim/how-to-generate-enough-entropy-for-gpg-key-generation-process-on-fedora-linux-38022


4
นอกจากนี้คุณยังสามารถใช้งานได้sudo apt-get install rng-toolsถ้าคุณใช้ Ubuntu แทนที่จะเป็นsudo yum install rng-utilsเช่นเดียวกับ Fedora เนื่องจากไม่มีrng-utilsแพ็คเกจสำหรับ Ubuntu
Jason Swett

4
แพ็คเกจนี้มีชื่อrng-toolsอยู่ในทั้ง Fedora และ EL6 ดังนั้นฉันจึงสงสัยว่าพิมพ์ผิดในบทความที่เชื่อมโยง BTW มันเป็นความคิดที่ดีที่จะให้ส่วนสำคัญของคำตอบที่นี่และลิงค์สำหรับการอ้างอิงในกรณีที่ลิงค์จะตายในอนาคต
Michael Hampton

11
ไม่มี "เอนโทรปีคุณภาพต่ำ" หรือ "ปลอมเอนโทรปี" ใน urandom urandom เรียกรหัสเดียวกันว่า / dev / random ไม่จำเป็นต้องป้อนข้อมูลการสุ่มเพิ่มเติมใน CSPRNG (ยกเว้นเวลาบูตและมีการกระจายของคุณควรดูแลมัน) นี่คือตำนานและไม่ควรเผยแพร่ ดูตัวอย่าง sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers หรือวิดีโอนี้: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger


2
ความคิดเห็นที่โหวตมากที่สุดนั้นไร้สาระ น่าเสียดายที่ฉันเห็นสิ่งนี้มากมายใน SO คำเตือน (แม้ว่าผิดอย่างสมบูรณ์) จะได้รับคะแนนเสียงจำนวนมากและไม่มีวิธีแก้ไข (ไม่มีตัวเลือก downvote แสดงความคิดเห็น) หมายความว่าเราไม่สามารถกำจัดตำนานได้
Stijn de Witt

28

ฉันสามารถสร้างกุญแจด้วย

apt-get install rng-tools

ในหน้าต่าง SSH อื่นเปิด

 gpg --gen-key

กลับไปที่เซสชัน SSH แรกของคุณแล้วเรียกใช้

sudo rngd -r /dev/urandom

ปล่อยให้เรื่องนี้รันจนกว่า gpg จะสร้างกุญแจของคุณ!


9
แน่นอนว่าฉันจะไม่แนะนำให้ใช้/dev/urandomกับการสร้างกุญแจที่มีความสำคัญใด ๆ
Andrew Barber

12
@AndrewBarber เรื่องไร้สาระ เป็นวิธีที่แนะนำ
David Schwartz

3
@AndrewBarber มันออกแบบมาอย่างชัดเจนเพื่อจุดประสงค์นั้น โดยทั่วไป/dev/randomเป็นความผิดพลาดในการออกแบบ มันควรบล็อกการเรียกใช้ครั้งแรก (ตลอดไป) (เมื่อบู๊ตครั้งแรก) เมื่อยังไม่มีการรวบรวมข้อมูลใด ๆ ไม่ต่างจากระบบปฏิบัติการอื่น ตอนนี้เรามีสระว่ายน้ำสองแห่ง เพียงไม่เคยใช้/dev/randomมันไม่มีข้อได้เปรียบ
Stijn de Witt

@AndrewBarber คุณจะแนะนำอะไรแทน
qodeninja

13

หากต้องการตรวจสอบจำนวนไบต์ของเอนโทรปีที่มีอยู่ให้ใช้

cat /proc/sys/kernel/random/entropy_avail

ถังเอนโทรปีคือ 4096 ไบต์ขนาดใหญ่ซึ่งสามารถหมดลงอย่างรวดเร็ว

การใช้เครื่องมือ 'readspeed' ขนาดเล็กนี้ ( http://1wt.eu/tools/readspeed/ ) คุณสามารถวัดความเร็วในการเติมถังเอนโทรปีด้วยวิธีการต่าง ๆ ได้อย่างรวดเร็ว

ตัวอย่างเช่นการเปิดตัว:

$ ./readspeed < /dev/random

และเลื่อนเมาส์ไปรอบ ๆ คุณจะเห็นว่า 'readspeed' จะล้างถังเอนโทรปีทันทีที่เต็มไปและเมื่อคุณเลื่อนเมาส์มันจะเติมเต็มเล็กน้อย

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

สุดท้ายมีอุปกรณ์รุ่นเอนโทรปีอยู่เช่นนี้: http://www.entropykey.co.uk/


4
ไม่มี "เอนโทรปีคุณภาพต่ำ" ใน urandom urandom เรียกรหัสเดียวกันว่า / dev / random นี่คือตำนานและไม่ควรเผยแพร่ ดูตัวอย่างsockpuppet.org/blog/2014/02/25/safely-generate-random-numbersหรือวิดีโอนี้: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger

คำตอบนี้มีอายุ 5 ปี เราคิดว่า urandom นั้นไม่ปลอดภัยเท่าการสุ่ม แต่สิ่งต่าง ๆ มีการเปลี่ยนแปลงตั้งแต่นั้นและถือว่า urandom ปลอดภัย
Julien Vehent

1
ความจริงคือมันปลอดภัยจากจุดเริ่มต้น คำเตือนก็ผิดเมื่อ 7 ปีที่แล้วเช่นกัน
Stijn de Witt

8

+1 สำหรับ rng-tools

ในกรณีที่คุณติดอยู่ในสถานการณ์ขณะที่ฉัน - ไม่มีสิทธิ์ในการติดตั้งซอฟต์แวร์ใหม่ (เครื่องมือ rng) บนเซิร์ฟเวอร์หัวขาดที่แทบจะไม่มีฮาร์ดแวร์อินพุต (การ์ดเสียงแป้นพิมพ์เมาส์) ติดอยู่ คุณสามารถเรียกใช้รหัสอย่างง่ายจากเทอร์มินัลอื่นเชื่อมต่อกับเซิร์ฟเวอร์เดียวกันเพื่อเพิ่มไปยังเอนโทรปี ไม่สำคัญว่าคุณจะเริ่มต้นใช้งานก่อนหรือหลังเริ่มต้นgpg --gen-key

$ nice -n 19 bash
$ until [ $COUNT -lt 1 ]; do
  let COUNT=`cat /proc/sys/kernel/random/entropy_avail`
  echo "`date` COUNTER $COUNT"
done

บรรทัดแรกคือการเริ่มเปลือก bash ใหม่โดยมีลำดับความสำคัญต่ำกว่า (ฉันต้องดีในเซิร์ฟเวอร์ที่ผู้ใช้หลายคนใช้ร่วมกัน) จนกว่าลูปจะไม่มีที่สิ้นสุดดังนั้นโปรดอย่าลืมเมื่อมีการสร้างคีย์ สิ่งที่ทำอยู่นั้นทำให้เครือข่ายทราฟฟิกเพิ่มเอนโทรปี นอกจากนี้ยังตรวจสอบตัวนับ entropy_avail เพื่อแสดงว่ามันได้รับการเติมและว่างเปล่าในด้านอื่น ๆ โดย gpg ในกรณีของฉันเคาน์เตอร์เต็มไปอย่างรวดเร็วถึง 64 และกลับว่างเปล่าเป็น 0 (เดาว่า gpg จะถูกเลือกเป็น 64 ชิ้น) ฉันกำลังรอการสร้างคีย์ 4096 บิตนานกว่า 3 ชั่วโมงบนเซิร์ฟเวอร์ หลังจากเริ่มเรียกใช้สคริปต์นี้สคริปต์จะทำงานให้เสร็จภายใน 5 นาที


ฉันก็ไม่ได้มีการเข้าถึงรูทบนเซิร์ฟเวอร์ระยะไกลและสิ่งนี้ทำงานในการสร้างเอนโทรปี [ $COUNT -lt 0 ]ผมคิดว่าอยู่ในสภาพที่ควรจะเปลี่ยนเป็น เพราะสำหรับระบบที่มีเอนโทรปีน้อยกว่าจริงบางครั้งมันถึง 0 และหยุด จีพีจีกำลังหิวโหยเอนโทรปีจริงๆ
Ajay Brahmakshatriya

ขอบคุณนี่น่าจะมีประโยชน์มากสำหรับฉันที่จะสร้างคนรุ่นใหม่บนกล่อง airgapped ยกเว้นฉันจะไม่ใช้วันที่เพราะคาดเดาได้
grepsedawk

7

ฉันถูกผูกมัดและมุ่งมั่นที่จะสร้างเอนโทรปีบนเซิร์ฟเวอร์ Ubuntu 14.04 ที่ไม่มีหัวเพื่อสร้างคีย์ 4096 ด้วย gpg --gen-key

มีแพ็คเกจสำหรับสร้างเอนโทรปีที่เรียกว่า hasged ตัวอย่างการติดตั้ง:

sudo apt-get install haveged

ฉันต้องsudo apt-get install rng-toolsเนื่องจากมันเป็นการพึ่งพาในการทดสอบต่อไปนี้

ตัวอย่างของการทดสอบเพื่อดูว่ามีการสร้างเอนโทรปีหรือไม่:

cat /dev/random | rngtest -c 1000

จำนวนความล้มเหลวน้อยมากเป็นที่ยอมรับในตัวสร้างตัวเลขแบบสุ่มใด ๆ แต่คุณสามารถคาดหวังว่าจะเห็นความสำเร็จ 998-1000 ครั้งบ่อยมากเมื่อใช้โฮเวอร์

ฉันพบเกี่ยวกับเรื่องนี้ในการสอนที่นี่:

https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged

ตอนนี้ฉันมีกุญแจหลังจากใช้งาน gpg --gen-key


0

ฉันพบปัญหานี้เมื่อทำงานpacman-key --initใน arch โซลูชันอื่น ๆ ที่นี่ใช้งานไม่ได้สำหรับฉัน แต่ฉันพบว่าเพียงแค่ทำให้เราเตอร์ของฉันทำงานได้อย่างดี:ping -f ip.of.my.router


0

มันง่ายกว่าที่ฉันคิดเมื่อเทียบกับโซลูชั่นที่นำเสนอที่นี่

ls -R /

ไบต์สุ่มที่จัดทำโดยคำสั่งด้านบนมีเพียงพอในการจัดทำเอนโทรปีที่ต้องการสำหรับการสร้างคู่คีย์ RSA / 4096

นำมาจาก: https://www.thingy-ma-jig.co.uk/blog/22-01-2010/generate-entropy-gnupg


0

havegedเป็นวิธีที่ดีที่สุด แต่ถ้าคุณไม่สามารถติดตั้งอะไรก็ได้คุณสามารถสร้างเอนโทรปีได้ด้วยตนเอง วิธีนี้อนุญาตgpg --gen-kenให้ทำใน 1-2 นาทีบนเครื่องของฉัน (เทียบกับ 10 วินาทีด้วยhaveged) ดังนั้นช้าลงประมาณ 10 เท่า

รันสิ่งนี้ในเทอร์มินัลอื่นขณะที่gpg --gen-keyทำงาน:

while true; do
    # print entropy available
    cat /proc/sys/kernel/random/entropy_avail
    # write a 1 MB stream of zeros to /tmp/foo
    # "conv=fdatasync" flushes the disk cache
    dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done

หนึ่งในสายการบิน:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.