আমার ব্যবহার করা উচিত /dev/random
নাকি /dev/urandom
?
কোন পরিস্থিতিতে আমি একে অপরের তুলনায় পছন্দ করব?
আমার ব্যবহার করা উচিত /dev/random
নাকি /dev/urandom
?
কোন পরিস্থিতিতে আমি একে অপরের তুলনায় পছন্দ করব?
উত্তর:
/dev/urandom
সর্বাধিক ব্যবহারিক উদ্দেশ্যে ব্যবহার করুন ।
দীর্ঘতর উত্তর আপনি যে ইউনিক্সের চালাচ্ছেন তার উপর নির্ভর করে।
Icallyতিহাসিকভাবে /dev/random
এবং /dev/urandom
উভয় একই সময়ে প্রবর্তিত হয়েছিল।
@ ডেভিডশওয়ার্টজ যেহেতু একটি মন্তব্যে উল্লেখ করেছেন , /dev/urandom
বিস্তৃত ক্ষেত্রে ব্যবহারকেই অগ্রাধিকার দেওয়া হয়। তিনি এবং অন্যান্যরা নিবন্ধ সম্পর্কে/dev/urandom
দুর্দান্ত মিথগুলির একটি লিঙ্কও সরবরাহ করেছিলেন যা আমি আরও পড়ার জন্য প্রস্তাব করি।
সংক্ষেপে:
/dev/random
এন্ট্রপির বাইরে চলে গেলে অবরুদ্ধ করে/dev/urandom
কখনও অবরুদ্ধ হবে না, থেকে পড়া /dev/random
প্রক্রিয়াগুলির কার্যকারিতা থামিয়ে দিতে পারে।/dev/urandom
না থাকতে পারে এবং উচ্চ মানের মানের এলোমেলোতা তৈরি করতে পারে না।/dev/urandom
তারপরে, এনট্রপি পুল (দ্বারা ব্যবহৃত /dev/random
) সরিয়ে দেয় না তবে সিএসপিআরএনজি আউটপুটটি প্রবাহ থেকে ব্যবহার করে।/dev/urandom
।বিধি ব্যতিক্রম
ইন ক্রিপ্টোগ্রাফি স্ট্যাক এক্সচেঞ্জ এর ব্যবহার করতে হলে /dev/random
বেশি /dev/urandom
লিনাক্স-এ
@otus দুই ব্যবহারের ক্ষেত্রে দেয় :
স্বল্প এনট্রপি ডিভাইসে বুটের কিছুক্ষণ পরে, সঠিকভাবে বীজ দেওয়ার জন্য যদি পর্যাপ্ত এনট্রপি তৈরি করা হয় নি /dev/urandom
।
যদি আপনি (1) সম্পর্কে উদ্বিগ্ন হন তবে আপনি এন্ট্রপিটি উপলব্ধ তা পরীক্ষা/dev/random
করতে পারেন ।
যদি আপনি (2) করছেন তবে আপনি এটি ইতিমধ্যে জানতে পারবেন :)
দ্রষ্টব্য: আপনি / dev / এলোমেলো থেকে পড়া অবরুদ্ধ হবে কিনা তা পরীক্ষা করে দেখতে পারেন , তবে সম্ভাব্য রেস শর্ত থেকে সাবধান থাকুন।
বিকল্প: ব্যবহার না!
@ টটাস আরও উল্লেখ করেছেন যে প্রাথমিক বীজ এনট্রপি অনুপলব্ধ থাকে তবে getrandom()
সিস্টেমটি কেবলমাত্র পড়বে /dev/urandom
এবং কেবলমাত্র ব্লক করবে ।
আছে পরিবর্তন সমস্যা /dev/urandom
ব্যবহার করতেgetrandom()
, কিন্তু এটা অনুমেয় যে একটি নতুন /dev/xrandom
ডিভাইস উপর ভিত্তি করে তৈরি করা হয় getrandom()
।
উইকিপিডিয়া যেমন বলে তেমন কিছু যায় আসে না :
ম্যাকস SHA1 এর উপর ভিত্তি করে 160-বিট ইয়ারো ব্যবহার করে। / Dev / এলোমেলো এবং / দেব / ইউরানডমের মধ্যে কোনও পার্থক্য নেই; উভয়ই অভিন্ন আচরণ করে। অ্যাপলের আইওএসও ইয়ারো ব্যবহার করে।
উইকিপিডিয়া যেমন বলে তেমন কিছু যায় আসে না :
/dev/urandom
/dev/random
সঠিকভাবে বীজ না হওয়া পর্যন্ত কেবলমাত্র একটি লিঙ্ক এবং শুধুমাত্র ব্লক।
এর অর্থ বুট হওয়ার পরে, ফ্রিবিএসডি এলোমেলো সদ্ব্যবহারের অবসান না হওয়ার আগে পর্যাপ্ত বীজ এনট্রপি সংগ্রহ না করা অবধি অপেক্ষা করার মতো যথেষ্ট স্মার্ট।
ব্যবহার করুন /dev/urandom
, ধরে নিলেন আপনার সিস্টেম /dev/random
যথাযথ প্রাথমিক বীজ বপনের জন্য একবার থেকে একবারে পড়েছে ।
/dev/urandom
কখনও বাধা দেয় না।
/dev/random
কখনও কখনও ব্লক। সিস্টেমের অবস্থা পূর্বাভাসযোগ্য হিসাবে জানা থাকলে বুটের প্রথম দিকে ব্লক হয়ে যাবে।অ্যাপ্লিকেশনগুলিকে এলোমেলোভাবে উত্পন্ন ডেটা যেমন: ক্রিপ্টোগ্রাফিক কী বা সিমুলেশনের জন্য বীজের প্রয়োজন হয় তখন / ডিভ / ইউরেন্ডম থেকে পড়তে হবে।
পূর্বাভাস অনুযায়ী কী উত্পন্ন করতে না পারে সেজন্য সিস্টেমগুলিতে ইন্টারনেটে কথা বলা বা অন্যথায় ক্রিপ্টোগ্রাফির প্রয়োজন হয় এমন কোনও পরিষেবা চালুর আগে বুট থেকে / ডি / র্যান্ডম থেকে কমপক্ষে একবার বিচার করার জন্য ইঞ্জিনিয়ার করা উচিত।
/dev/urandom
- /dev/urandom
ওপেনবিএসডি-তে কোনও কিছুই বাদে । ওপেনবিএসডি রয়েছে /dev/arandom
, তবে আপনার এটি ব্যবহার করার কথা নয়, arc4random(3)
পরিবর্তে আপনার ফাংশনটি ব্যবহার করা উচিত । সম্ভবত এলোমেলো ডিভাইস এবং ফাংশন সম্পর্কে পরামর্শ দেওয়া উচিত এমন লোকদের উপর যা ছেড়ে দেওয়া উচিত যারা আসলে কী তা বোঝে?
/dev/random
এটি এন্ট্রপি শেষ হয়ে গেলে ব্লক করে" - লিনাক্সে, আপনি কীভাবে ডিভাইসটি খুলবেন তা নির্ভর করে। যদি open
পতাকাগুলি অন্তর্ভুক্ত করে O_NONBLOCK
তবে তা অবরুদ্ধ হবে না। যদি কোনও এন্ট্রপি না থাকে তবে কলটি তাত্ক্ষণিকভাবে ফিরে আসবে এবং 0 বাইট পড়ার ইঙ্গিত দেবে।
/dev/random
কেবল (প্রাক্তন :) 60 বাইট হয় তবে dd
আপনাকে একটি 60 বাইট ফাইল দেবে। head
একই দৃশ্যে ব্যবহার করা দেখতে সম্ভবত এটি চিরকাল স্থায়ী। আপনি যা চান তা উভয়ই করছেন না, তবে কমপক্ষে আমার পক্ষে এটি আরও সুস্পষ্ট যে head
এটি প্রত্যাশিতভাবে করছেন না।
প্রথাগতভাবে, মধ্যে একমাত্র পার্থক্য /dev/urandom
এবং /dev/random
- কি যখন কার্নেল মনে পদ্ধতিতে এর কোনো এনট্রপি নেই /dev/random
বন্ধ ব্যর্থ /dev/urandom
খোলা ব্যর্থ। উভয় ড্রাইভার থেকে এনট্রপি গুন ছিল add_disk_randomness()
, add_interrupt_randomness()
এবং add_input_randomness()
। /drivers/char/random.c
সুনির্দিষ্ট জন্য দেখুন ।
যুক্ত করতে সম্পাদিত: লিনাক্স ৪.৮ হিসাবে /dev/urandom
সিএসপিআরএনজি ব্যবহার করতে পুনরায় কাজ করা হয়েছিল।
সুতরাং আপনি কখন বন্ধ ব্যর্থ করা উচিত? যে কোনও ধরণের ক্রিপ্টোগ্রাফিক ব্যবহারের জন্য, বিশেষত ডিআরবিজি বপন করা। /dev/urandom
আরএসএ কী তৈরি করার সময় এবং পর্যাপ্ত এনট্রপি না দেওয়ার ফলাফলগুলি ব্যাখ্যা করার জন্য একটি খুব ভাল কাগজ রয়েছে । আপনার PS এবং Qs খনির পড়ুন ।
এটি কিছুটা "আমিও" উত্তর, তবে এটি টম হেলের সুপারিশকে শক্তিশালী করে। এটি লিনাক্সের বর্গক্ষেত্র প্রযোজ্য।
/dev/urandom
/dev/random
লিনাক্স কার্নেল ক্রিপ্টো মেলিং তালিকার থিওডোর সি'ও অনুসারে /dev/random
এক দশক ধরে অবনতি হয়েছে been পুনরায় থেকে : [আরএফসি প্যাচ ভি 12 3/4] লিনাক্স র্যান্ডম নম্বর জেনারেটর :
কার্যত কেউ / dev / এলোমেলো ব্যবহার করে না। এটি মূলত একটি অবহেলিত ইন্টারফেস; এক দশকেরও বেশি আগে যে প্রাথমিক ইন্টারফেসগুলির জন্য সুপারিশ করা হয়েছে তা হ'ল / ডিভ / ইউরানডম এবং এখন, গেট্রেন্ডম (2)।
আমরা নিয়মিত পরীক্ষা করি /dev/random
এবং এটি প্রায়শই ব্যর্থতা ভোগ করে। পরীক্ষাটি তিনটি পদক্ষেপ সম্পাদন করে: (1) /dev/random
নন-ব্লকিং মোডে 10 কে বাইট চেয়ে জিজ্ঞাসা করে ড্রেন ; (২) ব্লকিং মোডে ১ by বাইটের অনুরোধ করুন (৩) ব্লকটি এলোমেলো (দরিদ্র লোকের পরীক্ষা) কিনা তা পরীক্ষা করার চেষ্টা করুন। পরীক্ষাটি শেষ হতে কয়েক মিনিট সময় নেয়।
ডেবাইন সিস্টেমগুলিতে সমস্যাটি এতটাই খারাপ (i686, x86_64, এআরএম, এবং এমআইপিএস) আমরা জিসিসি কম্পাইল ফার্মকে rng-tools
তাদের পরীক্ষার মেশিনগুলির জন্য প্যাকেজ ইনস্টল করতে বলেছিলাম । থেকে ইনস্টল করুন gcc67 এবং gcc68 উপর RNG-সরঞ্জাম :
আমি অনুরোধ করতে চাই যে rcc- সরঞ্জামগুলি gcc67 এবং gcc68 এ ইনস্টল করা উচিত। ডিবিয়ান সিস্টেমগুলি এবং ডিভাইসটি ব্যবহার করে এমন লাইব্রেরিগুলিতে অত্যাচার পরীক্ষা করার সময় / ডিএন / র্যান্ডমগুলি আরএনজি-সরঞ্জামগুলি ছাড়াই এনট্রপি হ্রাস পায়।
BSDs এবং OS X ঠিক আছে appear সমস্যাটি অবশ্যই লিনাক্সের।
এটি লিনাক্স জেনারেটর ব্যর্থতা লগ না উল্লেখ উল্লেখযোগ্য হতে পারে। তারা সিস্টেম লগ পূরণ করতে এন্ট্রি চায় না। আজ অবধি, বেশিরভাগ ব্যর্থতা নিরব থাকে এবং বেশিরভাগ ব্যবহারকারীর দ্বারা সনাক্ত করা যায়।
কার্নেল কমপক্ষে একটি ব্যর্থতার বার্তা মুদ্রণ করতে চলেছে তাই পরিস্থিতি শীঘ্রই পরিবর্তিত হওয়া উচিত। থেকে নীরবতা কম্পাইলার সতর্কবার্তা এবং ফিক্স জাতি: [প্যাচ] র্যান্ডম কার্নেল ক্রিপ্টো মেইলিং তালিকা:
বিশেষত, আমি যোগ
depends on DEBUG_KERNEL
। এর অর্থ হ'ল এই দরকারী সতর্কতাগুলি কেবল অন্যান্য কার্নেল বিকাশকারীকে ডেকে আনে। আমরা সম্ভবত এটিই চাই। যদি বিভিন্ন সম্পর্কিত বিকাশকারীরা তাদের নির্দিষ্ট সাবসিস্টেম থেকে একটি সতর্কতা আসতে দেখেন তবে তারা এটিকে ঠিক করতে আরও উত্সাহিত হবে। বিতরণ কার্নেলের সাধারণ ব্যবহারকারীদের সতর্কতা বা স্প্যামটি মোটেই দেখতে পাওয়া উচিত নয়, কারণ সাধারণত ব্যবহারকারীরা DEBUG_KERNEL ব্যবহার করছেন না।আমি মনে করি একটি সুরক্ষা ইঞ্জিনিয়ারিং দৃষ্টিকোণ থেকে সমস্ত বার্তা দমন করা খারাপ ধারণা।
অনেক লোক ডিবাগ কার্নেল চালায় না। যে ব্যবহারকারীরা সমস্যাগুলি সম্পর্কে জানতে বা জানতে চান তাদের বেশিরভাগই এর ঘটনাটি বুঝতে পারবেন না। বিবেচনা করুন, আমরা সিস্টেমেড সমস্যাগুলি শিখার কারণটি ডেমেজের কারণে হয়েছিল।
সমস্ত কনফিগারেশনের জন্য সমস্ত বার্তা দমন করা প্রয়োজনের তুলনায় আরও বিস্তৃত নেট castালাই। সম্ভাব্যরূপে সনাক্ত করা এবং সম্ভবত স্থির করা যায় এমন কনফিগারেশনগুলি নজরে না যায়। যদি সমস্যাটি সামনে না আনা হয় তবে তা ঠিক করা হবে না।
আমার মনে হচ্ছে কার্নেল কিছু সংস্থার জন্য নীতিগত সিদ্ধান্ত নিচ্ছে। যাদের হার্ডওয়্যার রয়েছে যেগুলি কার্যকরভাবে অনুপযুক্ত, তারা ঝুঁকি নিয়ে বাঁচার সিদ্ধান্ত নিতে পারে বা তারা হার্ডওয়্যারকে রিফ্রেশ করার সিদ্ধান্ত নিতে পারে। তবে, এ সম্পর্কিত তথ্য ছাড়াই তারা বুঝতে পারে না যে তাদের একটি কার্যক্ষম আইটেম রয়েছে।
শেষ পর্যন্ত থ্রেডে পৌঁছে যাওয়া সমঝোতাটি কলিং মডিউল প্রতি কমপক্ষে একটি ডেমসিগ ছিল।