ব্যবহারকারীর মিথস্ক্রিয়া ছাড়াই কীভাবে জিপিজি কী জেনারেট করবেন?


13

আমি https://www.gnupg.org/docamentation/manouts/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 ফাইলগুলি হোম dir এ তৈরি করা হয়েছে তবে খালি রয়েছে।

আমি কী মিস করছি? কোনও ধরণের ব্যবহারকারীর ইন্টারঅ্যাকশন ছাড়াই কী কীভাবে উত্পন্ন করা যায়?

সংস্করণ:

  • gpg (GnuPG) 2.0.26
  • libgcrypt 1.6.2

উত্তর:


4

সম্ভবত আপনি ইন্ট্রপির বাইরে চলেছেন। মূল প্রজন্মের জন্য অনেক উচ্চ মানের র্যান্ডম সংখ্যার প্রয়োজন; কম্পিউটারে উচ্চমানের এলোমেলোতা সরবরাহ করার জন্য ব্যবহারকারীর ক্রিয়াকলাপ ছাড়াই, এনট্রপি পুলটি প্রজন্মের দ্বারা ক্লান্ত হয়ে আসছে, এবং পুলটি পুনরায় পূরণের অপেক্ষায় প্রজন্মের প্রক্রিয়াটি কেবল স্তব্ধ হয়ে যায়।

আপনার পছন্দগুলি ক্রমবর্ধমান সন্তুষ্টিজনক ক্রমের জন্য

  1. নন-ব্লকিং সিডোডোরডম নম্বর জেনারেটরটি ব্যবহার করতে জিপিজি পুনরায় কনফিগার করা, যা সবচেয়ে বোকামি হবে (যদিও নীচে দেখুন),

  2. বিদ্যমান সিস্টেমের অবস্থা থেকে আরও এনট্রপি নেওয়ার জন্য একটি সফ্টওয়্যার সমাধান ব্যবহার করে (কর্নেল সিস্টেম এনট্রি থেকে কতটা এনট্রপি তৈরি করতে প্রস্তুত তা সম্পর্কে কুখ্যাত রক্ষণশীল, বিশেষত যেখানে সেই রাজ্যের সরাসরি মানুষের ইনপুট নেই, যেমন সিপিইউ বা এনআইসির সময়সীমা); যেমনটি আপনি উল্লেখ করেছেন, হ্যাজড হ'ল এটির একটি সমাধান, বা

  3. কম্পিউটারকে উচ্চ-গ্রেডের এনট্রপির আরও একটি শারীরিক উত্স সরবরাহ করে। এন্ট্রপি কী বা ওয়ানআরএনজির মতো ডিভাইসগুলি এই প্রয়োজনীয়তাটি পূরণ করতে পারে (আমার একটি এনট্রোপির মালিকানাধীন পণ্য সংরক্ষণের সাথে আমার কোনও সংযোগ নেই, এবং এতে আমি খুব খুশি)।

সম্পাদনা : মোজাএজ / ডিভ / ইউরানডম বনাম / দেব / এলোমেলো (যার জন্য অনেক ধন্যবাদ, এটি একটি দুর্দান্ত নিবন্ধ!) সম্পর্কিত এই নিবন্ধটিতে একটি মন্তব্যে আমার দৃষ্টি আকর্ষণ করেছে এবং urandomকীগুলি তৈরি করার ক্ষেত্রে আমার অপছন্দের বিষয়টি নিয়েছে । আসলে, নিবন্ধটি বলে না যে দুটি উত্স সমতুল্য, এবং এটি নোট করে

লিনাক্সের / ডিভ / ইউরেনডম আপনাকে খুশিতে এলোমেলো সংখ্যা দেয় কার্নেলের এমনকি এন্ট্রপি সংগ্রহের সুযোগ পাওয়ার আগেই। কখন ঘটেছে? সিস্টেম শুরুর সময়, কম্পিউটার বুট করা।

এটি বলার অপেক্ষা রাখে না যে বুটের পরে, urandomপিআরএনজি পর্যাপ্ত এনট্রপি দিয়ে শুরু না করা পর্যন্ত এটি মূল প্রজন্মের জন্য ব্যবহার করা সত্যই অনিরাপদ। এটি কিছুক্ষণ সময় নিতে পারে, বিশেষত একটি অবরুদ্ধ, হেডলেস সার্ভারে এবং আমরা জানিনা কখন প্রান্তিকতাটি পৌঁছেছে, কারণ সিস্টেমটি স্পষ্টভাবে আমাদের জানায় না।

এখন, যদি /dev/randomসংখ্যা জারি করার জন্য প্রস্তুত থাকে তবে আমি যুক্তিসঙ্গতভাবে অনুমান করতে পারি যে এনট্রপি পুলটি যথেষ্ট গভীর যা urandomসঠিকভাবে শুরু করা হবে। তবে যদি /dev/randomপ্রতিটি ব্যবহারের আগে আমাকে ব্লক করার জন্য পরীক্ষা করতে হয় urandom(যা আমি পুনরায় বুট করার চেয়ে কম প্রায়ই কীগুলি উত্পন্ন করি, সম্ভবত এটি ঘটতে পারে) তবে আমি /dev/randomআমার কীগুলি উত্পন্ন করতে কেবল সংখ্যাগুলি ব্যবহার করতে পারি।


2
সমস্যাটি ছিল / হ্যাজেড ডেমন যুক্ত হয়েছে, এবং এখন এটি দুর্দান্ত কাজ করে - key 0.7 এর মূল প্রজন্ম।
আইজিজ

পিআরএনজিগুলি 'যতটা ভাল' তা মিথ নয়। আসলে / ডেভ / এলোমেলো এবং / ডেভ / ইউরানডম একই পিআরএনজি ব্যবহার করে। আপনার কেবল অ্যালগরিদমগুলির জন্য সত্যিকারের এলোমেলোতার প্রয়োজন নেই যা কেবল গণনাগতভাবে সুরক্ষিত (এবং / দেব / এলোমেলো বা / দেব / ইউরেনডম আপনাকে সত্যিকারের এলোমেলোতা দিতে পারে না: এর জন্য আপনাকে অবশ্যই এলোমেলো জিনিসগুলি পরিমাপ করতে হবে)। একমাত্র ক্রিপ্টোগ্রাফির জন্য যা সত্যিকারের এলোমেলো প্রয়োজন, তথ্যগুলি ওয়ান-টাইম-প্যাডের মতো সুরক্ষিত অ্যালগরিদম। এই লিঙ্কটি এই সম্পর্কে বিস্তারিত আলোচনা করেছে: 2uo.de/myths-about-urandom
mzhaase

অদ্ভুতভাবে @ মোজায়েস, আমি এই লিঙ্কটি পেরিয়ে এসেছি এবং এই সপ্তাহের প্রথম দিকে এটি পড়েছি। আমি নিবন্ধটি প্রতিফলিত করতে আমার উত্তরটি সম্পাদনা করব, যদিও আমি এটির সাথে পুরোপুরি একমত নই। আমি আরও লক্ষ করি যে আমার সিস্টেমটি সম্ভবত অদ্ভুতভাবে সত্যিকারের এলোমেলোতা পেয়েছে /dev/random, (এবং তাই /dev/urandomপ্রায় সমস্ত সময় থেকে উচ্চ-অপ্রত্যাশিত সংখ্যা ), কারণ আমার একটি হার্ডওয়্যার ডিভাইস রয়েছে যা আমার সার্ভারের সাথে শারীরিকভাবে সংযুক্ত এনট্রপি তৈরি করতে কোয়ান্টাম টানেলিং ব্যবহার করে (দেখুন দেখুন) উপরে)।
ম্যাডহ্যাটার

1
হ্যাজেডগুলি দুর্দান্ত কাজ করে, কীটি 1 সেকেন্ডে উত্পন্ন হয়। সবেমাত্র অ্যাপ্লিকেশনটি ইনস্টল হ্যাজেড করুন, এবং তারপরে চালান: হ্যাজেড
ওয়াজা 123

@ waza123 ভাল পয়েন্ট, যদিও যুক্তিযুক্তভাবে এটি ইতিমধ্যে দু'বছর আগে আইজিজ দ্বারা তৈরি করা হয়েছিল (উপরের প্রথম মন্তব্যটি দেখুন)।
ম্যাডহ্যাটার

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এনট্রপির উত্স সরবরাহ করতে আরএনজিডি ( ডিফল্টরূপে, তবে সংশোধনযোগ্য) শুরু হয়
  • একটি সাধারণ টেম্পলেট অনুলিপি করে (জিনজা টেম্পলেট ইমেল এবং নামটি যা চান তা প্রতিস্থাপন করুন)
  • জিপিজি ব্যবহার করে একটি কী তৈরি করে
  • এটি স্থানীয় কীরিংয়ে আমদানি করে

প্রদত্ত নমুনা কোডটিতে 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 rngd /dev/hwrandomডিফল্টরূপে ব্যবহার করে এবং পরিবর্তনযোগ্য। ম্যান পৃষ্ঠা দেখুন।
xddsg

ঠিক আছে, আমি বলছিলাম যে আপনি যে কোডটির সাথে লিঙ্ক করেছেন সেটি স্পষ্টভাবে ব্যবহার urandomকরছে এবং এটি করা নিরুৎসাহিত।
কীনোম

-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

একটি ফাইল সিস্টেমে অনুসন্ধান করা এনট্রপির সত্যিকারের সুরক্ষিত উত্স তৈরি করছে না কারণ এর আচরণটি অনুমানযোগ্য এবং পুনরুত্পাদনযোগ্য।
জোফ্রে 0
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.