उपयोगकर्ता सहभागिता के बिना gpg कुंजी कैसे उत्पन्न करें?


13

मैंने https://www.gnupg.org/documentation/manuals/gnupg/Unattended-GPG-key-generation.html#Unattended-GPG-key-generation विधि में पाया कि यूजर इंटरेक्शन के लिए gpg कुंजियाँ बनाते हैं, लेकिन यह नहीं है काम करने लगते हैं।

मेरी स्क्रिप्ट है:

#!/usr/bin/env bash
rm -rf .gnupg
mkdir -m 0700 .gnupg
touch .gnupg/gpg.conf
chmod 600 .gnupg/gpg.conf
tail -n +4 /usr/share/gnupg2/gpg-conf.skel > .gnupg/gpg.conf

touch .gnupg/{pub,sec}ring.gpg


cat >.gnupg/foo <<EOF
    %echo Generating a basic OpenPGP key
    Key-Type: RSA
    Key-Length: 2048
    Subkey-Type: RSA
    Subkey-Length: 2048
    Name-Real: User 1
    Name-Comment: User 1
    Name-Email: user@1.com
    Expire-Date: 0
    Passphrase: kljfhslfjkhsaljkhsdflgjkhsd
    %pubring foo.pub
    %secring foo.sec
    # Do a commit here, so that we can later print "done" :-)
    %commit
    %echo done
EOF

gpg2 --verbose --batch --gen-key .gnupg/foo

जब मैं इसे चलाता हूं, तो यह पता चलता है:

=$ ./gen.keys.sh 
gpg: Generating a basic OpenPGP key
gpg: no running gpg-agent - starting one
gpg: writing public key to `foo.pub'
gpg: writing secret key to `foo.sec'

लेकिन तब यह लटका रहता है।

जब मैं इस उपयोगकर्ता के लिए इस बीच पीएस ट्री देखता हूं, तो मैं देखता हूं:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
tstpg    22603  0.0  0.0  24108  5688 pts/9    Ss   14:59   0:00 -bash
tstpg    22624  0.0  0.0  13688  3168 pts/9    S+   14:59   0:00  \_ bash ./gen.keys.sh
tstpg    22632  0.2  0.0  27428  3676 pts/9    SL+  14:59   0:00      \_ gpg2 --verbose --batch --gen-key .gnupg/foo
tstpg    22634  0.3  0.0  18072  2884 pts/9    SL+  14:59   0:00          \_ gpg-agent --server

~ / .Gnupg / gpg.conf में एजेंट के बारे में कोई उल्लेख नहीं है, और मुझे नहीं पता कि यह क्या करने की कोशिश कर रहा है।

Foo.pub/foo.sec फाइलें होम डायर में उत्पन्न होती हैं, लेकिन खाली हैं।

मैं क्या खो रहा हूँ? किसी भी तरह के उपयोगकर्ता इंटरैक्शन के बिना कुंजी कैसे उत्पन्न करें?

संस्करण:

  • gpg (GnuPG) 2.0.26
  • libgcrypt 1.6.2

जवाबों:


4

यह संभावना है कि आप एन्ट्रॉपी से बाहर चल रहे हैं। मुख्य पीढ़ी को बहुत उच्च गुणवत्ता वाले यादृच्छिक संख्याओं की आवश्यकता होती है; कंप्यूटर को उच्च-गुणवत्ता वाली यादृच्छिकता प्रदान करने के लिए उपयोगकर्ता की गतिविधि के बिना, एन्ट्रापी पूल को पीढ़ी द्वारा समाप्त किया जा रहा है, और पीढ़ी की प्रक्रिया बस लटकी हुई है, पूल के फिर से भरने का इंतजार कर रही है।

संतुष्टि बढ़ाने के क्रम में आपकी पसंद, हैं

  1. गैर-अवरोधक छद्म आयामी संख्या जनरेटर का उपयोग करने के लिए जीपीजी को पुन: कॉन्फ़िगर करना , जो कि सबसे नासमझी होगा (हालांकि नीचे देखें),

  2. मौजूदा सिस्टम स्थिति से अधिक एन्ट्रॉपी प्राप्त करने के लिए एक सॉफ्टवेयर सॉल्यूशन का उपयोग करना (कर्नेल बेहद रूढ़िवादी है कि यह सिस्टम स्टेट से प्राप्त करने के लिए कितना एन्ट्रोपी तैयार करता है, विशेष रूप से जहां उस राज्य का कोई सीधा मानव इनपुट नहीं है, जैसे सीपीयू या एनएपी टाइमिंग); जैसा कि आप ने बताया है, haveged ऐसे ही एक समाधान है, या

  3. कंप्यूटर को उच्च-ग्रेड एन्ट्रापी के एक अन्य भौतिक स्रोत के साथ प्रदान करना। Entropy Key या OneRNG जैसे उपकरण इस आवश्यकता को पूरा कर सकते हैं (उत्पाद को बचाने के साथ मेरा कोई संबंध नहीं है कि मैं Entropy कुंजी का मालिक हूं, और इससे बहुत खुश हूं)।

संपादित करें : mzhaase इस लेख पर एक टिप्पणी में मेरा ध्यान आकर्षित करता है / dev / urandom / / dev / random (जिसके लिए बहुत धन्यवाद, यह एक उत्कृष्ट लेख है!) और urandomकुंजी बनाने के लिए उपयोग करने के अपने नापसंद के साथ मुद्दा लेता है । वास्तव में, लेख यह नहीं कहता है कि दो स्रोत समान हैं, और नोट

लिनक्स के / dev / urandom खुशी से आपको कर्नेल से पहले रैंडम नंबर नहीं देता, यहां तक ​​कि एन्ट्रापी इकट्ठा करने का भी मौका था। कब है वो? सिस्टम प्रारंभ में, कंप्यूटर को बूट करना।

कहने का urandomतात्पर्य यह है कि, बूट के बाद, जब तक कि PRNG को पर्याप्त एंट्रोपी के साथ आरंभीकृत नहीं किया गया है, यह वास्तव में कुंजी पीढ़ी के लिए उपयोग करने के लिए असुरक्षित है। यह एक समय लग सकता है, विशेष रूप से एक अप्राप्य, हेडलेस सर्वर पर, और हमें नहीं पता है कि सीमा कब तक पहुंच गई है, क्योंकि सिस्टम स्पष्ट रूप से हमें नहीं बताता है।

अब, यदि /dev/randomमैं संख्याओं को जारी करने के लिए तैयार हूं , तो मैं यथोचित अनुमान लगा सकता हूं कि एन्ट्रापी पूल काफी गहरा है जिसे urandomठीक से आरंभ किया गया होगा। लेकिन अगर मुझे इसके /dev/randomप्रत्येक उपयोग से पहले अवरुद्ध करने के लिए जांच करनी है urandom(जो कि मैंने रिबूट की तुलना में अक्सर कम चाबियाँ उत्पन्न करता है, तो मामला होने की संभावना है) मैं /dev/randomअपनी कुंजी उत्पन्न करने के लिए बस से संख्याओं का उपयोग कर सकता हूं।


2
यह है / समस्या थी। जोड़ा डेमॉन है, और अब यह ठीक काम करता है - ~ 0.7 में प्रमुख पीढ़ी।
ईजेज़े

कि PRNGs 'उतना अच्छा नहीं है' एक मिथक है। वास्तव में दोनों / dev / random / और / dev / urandom एक ही PRNG का उपयोग करते हैं। आपको एल्गोरिदम के लिए सच्ची यादृच्छिकता की आवश्यकता नहीं है जो केवल कम्प्यूटेशनल रूप से सुरक्षित हैं (और न तो / देव / यादृच्छिक या न ही देव / उरजनी वास्तव में आपको सच्ची यादृच्छिकता दे सकते हैं: आपको वास्तव में इसके लिए यादृच्छिक चीजों को मापने की आवश्यकता है)। एकमात्र क्रिप्टोग्राफी जिसमें सच्चे यादृच्छिकता की आवश्यकता होती है, वह एक-समय-पैड जैसे सूचनात्मक रूप से सुरक्षित एल्गोरिदम हैं। यह लिंक इस बारे में विस्तार से बात करता है: 2uo.de/myths-about-urandom
mzhaase

@mzhaase अजीब तरह से, मैं उस लिंक पर आया, और इसे पढ़ा, इस सप्ताह के शुरू में। मैं लेख को प्रतिबिंबित करने के लिए ऊपर अपने जवाब को संपादित करूंगा, हालांकि मैं इससे पूरी तरह सहमत नहीं हूं। मैं यह भी ध्यान देता हूं कि मेरी प्रणाली, अजीब तरह से, शायद /dev/random(और /dev/urandomलगभग हर समय अत्यधिक-अप्रत्याशित संख्या) से सच्ची यादृच्छिकता प्राप्त करती है , क्योंकि मेरे पास एक हार्डवेयर उपकरण है जो क्वांटम टनलिंग का उपयोग करता है जो मेरे सर्वर से शारीरिक रूप से जुड़ा हुआ है। ऊपर)।
MadHatter

1
काम करता है अच्छा है, कुंजी 1 सेकंड में उत्पन्न होता है। बस उपयुक्त हो जाओ स्थापित किया है, और फिर चलाते हैं: हैज़ किया
waza123

@ waza123 अच्छी बात है, हालाँकि यकीनन एक जो पहले से ही दो साल पहले eijeze द्वारा बनाई गई थी (ऊपर की पहली टिप्पणी देखें)।
मध्याह्न

2

मैंने पाया कि कुछ सरल बदलाव हैं जो आपकी स्क्रिप्ट का काम करते हैं। मैंने कुछ परीक्षण भी शामिल किए हैं ताकि एक बार कुंजी बनाने के बाद यह स्वचालित रूप से परीक्षण किया जाएगा।

मैंने पासवर्ड भी हटा दिया ताकि मुख्य परीक्षण स्वचालित हो सकें।

#!/usr/bin/env bash
rm -rf .gnupg
mkdir -m 0700 .gnupg
touch .gnupg/gpg.conf
chmod 600 .gnupg/gpg.conf
tail -n +4 /usr/share/gnupg2/gpg-conf.skel > .gnupg/gpg.conf

cd .gnupg
# I removed this line since these are created if a list key is done.
# touch .gnupg/{pub,sec}ring.gpg
gpg2 --list-keys


cat >keydetails <<EOF
    %echo Generating a basic OpenPGP key
    Key-Type: RSA
    Key-Length: 2048
    Subkey-Type: RSA
    Subkey-Length: 2048
    Name-Real: User 1
    Name-Comment: User 1
    Name-Email: user@1.com
    Expire-Date: 0
    %no-ask-passphrase
    %no-protection
    %pubring pubring.kbx
    %secring trustdb.gpg
    # Do a commit here, so that we can later print "done" :-)
    %commit
    %echo done
EOF

gpg2 --verbose --batch --gen-key keydetails

# Set trust to 5 for the key so we can encrypt without prompt.
echo -e "5\ny\n" |  gpg2 --command-fd 0 --expert --edit-key user@1.com trust;

# Test that the key was created and the permission the trust was set.
gpg2 --list-keys

# Test the key can encrypt and decrypt.
gpg2 -e -a -r user@1.com keydetails

# Delete the options and decrypt the original to stdout.
rm keydetails
gpg2 -d keydetails.asc
rm keydetails.asc

1

एक स्वचालित एप्लिकेशन इंस्टॉल के लिए कुंजी बनाने के हिस्से के रूप में इसे काम किया। एंटरॉय जनरेट करने के लिए ' rngd ' पैकेज को स्थापित करना और शुरू करना आपके मुद्दे को ठीक करेगा। स्थापित करने और उपयोग करने के लिए सरल।

यहाँ कोड है

  • /dev/hwrandomएन्ट्रापी का एक स्रोत प्रदान करने के लिए आरंग्ड ( डिफ़ॉल्ट रूप से, लेकिन परिवर्तनीय) शुरू होता है
  • एक साधारण टेम्पलेट को कॉपी करता है (जो आप चाहते हैं, उसके साथ जिंजा टेम्पलेट ईमेल और नाम बदलें)
  • gpg का उपयोग करके एक कुंजी बनाता है
  • स्थानीय कीरिंग में इसे आयात करता है

प्रदान किए गए नमूना कोड urandomमें एक स्रोत के रूप में उपयोग किया जाता है, जो कि हतोत्साहित किया जाता है। wiki.archlinux.org/index.php/Rng-tools Warning: Some tutorials available in the Internet, and even early versions of rng-tools package, recommend the following line for systems without TRGN: RNGD_OPTS="-o /dev/random -r /dev/urandom" Of course, this is a really bad idea, since you are simple filling the kernel entropy pool with entropy coming from the kernel itself! If your system does not have an available TRGN consider using haveged instead. See FS#34580 for details.
keyneom

@keyneom rngd /dev/hwrandomडिफ़ॉल्ट रूप से उपयोग करता है और परिवर्तनीय है। मैन पेज देखें
xddsg

ठीक है, मैं बता रहा था कि आपके द्वारा इससे जुड़े कोड में स्पष्ट रूप से उपयोग किया जा रहा है urandomऔर ऐसा करने से हतोत्साहित किया जाता है।
15

-1

यहाँ एक है जिसका आप उपयोग कर सकते हैं लेकिन मैं इस स्क्रिप्ट को एक नए टर्मिनल में चलाने की सलाह दूंगा ताकि आपके वर्तमान को प्रभावित न किया जा सके। यह स्क्रिप्ट मशीन को व्यस्त रखने और एक अनंत लूप में फंसने तक एन्ट्रापी उत्पन्न करना जारी रखेगा जब तक कि उपयोगकर्ता स्क्रिप्ट से बाहर नहीं निकलता। मुख्य पीढ़ी के बाद तक कोई उपयोगकर्ता सहभागिता आवश्यक नहीं है। सभी स्क्रिप्ट हमेशा के लिए सूची फ़ाइलों है।

आपकी मशीन और कुंजी के आकार के आधार पर उत्पन्न होने में कुछ मिनट (कभी-कभी 10+) लग सकते हैं, लेकिन इसके साथ सहभागिता नहीं करना अच्छा है।

#!/bin/sh

while true;
do find * / && find * / && find * / && find * / && find * / && find * / && find * / && find * / && find * /;

echo "Press ctrl+c to exit this infinite loop"
sleep 2;
done

एक फाइलसिस्टम पर एक खोज करना एन्ट्रापी का वास्तव में सुरक्षित स्रोत उत्पन्न नहीं कर रहा है क्योंकि इसका व्यवहार पूर्वानुमान योग्य और प्रतिलिपि प्रस्तुत करने योग्य है।
जोफ्रे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.