কখন / দেব / এলোমেলো বনাম / দেব / ইউরানডম ব্যবহার করবেন


71

আমার ব্যবহার করা উচিত /dev/randomনাকি /dev/urandom?

কোন পরিস্থিতিতে আমি একে অপরের তুলনায় পছন্দ করব?



উত্তর:


79

টি এল; ডিআর

/dev/urandomসর্বাধিক ব্যবহারিক উদ্দেশ্যে ব্যবহার করুন ।

দীর্ঘতর উত্তর আপনি যে ইউনিক্সের চালাচ্ছেন তার উপর নির্ভর করে।

লিনাক্স

Icallyতিহাসিকভাবে /dev/randomএবং /dev/urandomউভয় একই সময়ে প্রবর্তিত হয়েছিল।

@ ডেভিডশওয়ার্টজ যেহেতু একটি মন্তব্যে উল্লেখ করেছেন , /dev/urandomবিস্তৃত ক্ষেত্রে ব্যবহারকেই অগ্রাধিকার দেওয়া হয়। তিনি এবং অন্যান্যরা নিবন্ধ সম্পর্কে/dev/urandom দুর্দান্ত মিথগুলির একটি লিঙ্কও সরবরাহ করেছিলেন যা আমি আরও পড়ার জন্য প্রস্তাব করি।

সংক্ষেপে:

  • র manpage বিভ্রান্তিকর
  • উভয়ই এলোমেলোতা তৈরি করতে একই সিএসপিআরএনজি দ্বারা খাওয়ানো হয় ( চিত্র 2 এবং 3 )
  • /dev/random এন্ট্রপির বাইরে চলে গেলে অবরুদ্ধ করে
  • এনট্রপির পরিমাণ রক্ষণশীলভাবে অনুমান করা হয়, তবে তা গণনা করা হয় না
  • /dev/urandomকখনও অবরুদ্ধ হবে না, থেকে পড়া /dev/randomপ্রক্রিয়াগুলির কার্যকারিতা থামিয়ে দিতে পারে।
  • বুট হওয়ার খুব শীঘ্রই বিরল ক্ষেত্রে, সিএসপিআরএনজির সঠিকভাবে বীজযুক্ত হওয়ার মতো পর্যাপ্ত এনট্রপি /dev/urandomনা থাকতে পারে এবং উচ্চ মানের মানের এলোমেলোতা তৈরি করতে পারে না।
  • এনএসপিআরএনজি যদি প্রথমে সঠিকভাবে বীজত থাকে তবে এনট্রপি চালানো কোনও সমস্যা নয়
  • সিএসপিআরএনজি প্রতিনিয়ত পুনরায় বীজযুক্ত হচ্ছে
  • লিনাক্স ৪.৮ এবং /dev/urandomতারপরে, এনট্রপি পুল (দ্বারা ব্যবহৃত /dev/random) সরিয়ে দেয় না তবে সিএসপিআরএনজি আউটপুটটি প্রবাহ থেকে ব্যবহার করে।
  • ব্যবহার /dev/urandom

বিধি ব্যতিক্রম

ইন ক্রিপ্টোগ্রাফি স্ট্যাক এক্সচেঞ্জ এর ব্যবহার করতে হলে /dev/randomবেশি /dev/urandomলিনাক্স-এ @otus দুই ব্যবহারের ক্ষেত্রে দেয় :

  1. স্বল্প এনট্রপি ডিভাইসে বুটের কিছুক্ষণ পরে, সঠিকভাবে বীজ দেওয়ার জন্য যদি পর্যাপ্ত এনট্রপি তৈরি করা হয় নি /dev/urandom

  2. তথ্য তাত্ত্বিক সুরক্ষা সহ এককালীন প্যাড তৈরি করা

যদি আপনি (1) সম্পর্কে উদ্বিগ্ন হন তবে আপনি এন্ট্রপিটি উপলব্ধ তা পরীক্ষা/dev/random করতে পারেন ।

যদি আপনি (2) করছেন তবে আপনি এটি ইতিমধ্যে জানতে পারবেন :)

দ্রষ্টব্য: আপনি / dev / এলোমেলো থেকে পড়া অবরুদ্ধ হবে কিনা তা পরীক্ষা করে দেখতে পারেন , তবে সম্ভাব্য রেস শর্ত থেকে সাবধান থাকুন।

বিকল্প: ব্যবহার না!

@ টটাস আরও উল্লেখ করেছেন যে প্রাথমিক বীজ এনট্রপি অনুপলব্ধ থাকে তবে getrandom()সিস্টেমটি কেবলমাত্র পড়বে /dev/urandomএবং কেবলমাত্র ব্লক করবে ।

আছে পরিবর্তন সমস্যা /dev/urandomব্যবহার করতেgetrandom() , কিন্তু এটা অনুমেয় যে একটি নতুন /dev/xrandomডিভাইস উপর ভিত্তি করে তৈরি করা হয় getrandom()

ম্যাক অপারেটিং সিস্টেম

উইকিপিডিয়া যেমন বলে তেমন কিছু যায় আসে না :

ম্যাকস SHA1 এর উপর ভিত্তি করে 160-বিট ইয়ারো ব্যবহার করে। / Dev / এলোমেলো এবং / দেব / ইউরানডমের মধ্যে কোনও পার্থক্য নেই; উভয়ই অভিন্ন আচরণ করে। অ্যাপলের আইওএসও ইয়ারো ব্যবহার করে।

FreeBSD 'র

উইকিপিডিয়া যেমন বলে তেমন কিছু যায় আসে না :

/dev/urandom/dev/randomসঠিকভাবে বীজ না হওয়া পর্যন্ত কেবলমাত্র একটি লিঙ্ক এবং শুধুমাত্র ব্লক।

এর অর্থ বুট হওয়ার পরে, ফ্রিবিএসডি এলোমেলো সদ্ব্যবহারের অবসান না হওয়ার আগে পর্যাপ্ত বীজ এনট্রপি সংগ্রহ না করা অবধি অপেক্ষা করার মতো যথেষ্ট স্মার্ট।

NetBSD বা

ব্যবহার করুন /dev/urandom, ধরে নিলেন আপনার সিস্টেম /dev/randomযথাযথ প্রাথমিক বীজ বপনের জন্য একবার থেকে একবারে পড়েছে ।

Rnd (4) র manpage বলেছেন :

/dev/urandom কখনও বাধা দেয় না।

/dev/randomকখনও কখনও ব্লক। সিস্টেমের অবস্থা পূর্বাভাসযোগ্য হিসাবে জানা থাকলে বুটের প্রথম দিকে ব্লক হয়ে যাবে।

অ্যাপ্লিকেশনগুলিকে এলোমেলোভাবে উত্পন্ন ডেটা যেমন: ক্রিপ্টোগ্রাফিক কী বা সিমুলেশনের জন্য বীজের প্রয়োজন হয় তখন / ডিভ / ইউরেন্ডম থেকে পড়তে হবে।

পূর্বাভাস অনুযায়ী কী উত্পন্ন করতে না পারে সেজন্য সিস্টেমগুলিতে ইন্টারনেটে কথা বলা বা অন্যথায় ক্রিপ্টোগ্রাফির প্রয়োজন হয় এমন কোনও পরিষেবা চালুর আগে বুট থেকে / ডি / র্যান্ডম থেকে কমপক্ষে একবার বিচার করার জন্য ইঞ্জিনিয়ার করা উচিত।


BSD: Use/dev/urandom - /dev/urandomওপেনবিএসডি-তে কোনও কিছুই বাদে । ওপেনবিএসডি রয়েছে /dev/arandom, তবে আপনার এটি ব্যবহার করার কথা নয়, arc4random(3)পরিবর্তে আপনার ফাংশনটি ব্যবহার করা উচিত । সম্ভবত এলোমেলো ডিভাইস এবং ফাংশন সম্পর্কে পরামর্শ দেওয়া উচিত এমন লোকদের উপর যা ছেড়ে দেওয়া উচিত যারা আসলে কী তা বোঝে?
স্যাট কাটসুরা

1
পছন্দ করুন উদ্ধৃতিটি প্রতিফলিত করতে ফ্রিবিএসডি আপডেট হয়েছে। এই ব্যক্তিরা কে তা নির্ধারণ করার প্রস্তাব আপনি কীভাবে করবেন?
টম

3
শিক্ষাগত যোগ্যতা? পিয়ার-রিভিউড কাজ?
স্যাটাস কাতসুরা

1
" /dev/randomএটি এন্ট্রপি শেষ হয়ে গেলে ব্লক করে" - লিনাক্সে, আপনি কীভাবে ডিভাইসটি খুলবেন তা নির্ভর করে। যদি openপতাকাগুলি অন্তর্ভুক্ত করে O_NONBLOCKতবে তা অবরুদ্ধ হবে না। যদি কোনও এন্ট্রপি না থাকে তবে কলটি তাত্ক্ষণিকভাবে ফিরে আসবে এবং 0 বাইট পড়ার ইঙ্গিত দেবে।

1
@ টমহেল আচরণটি আইএমও-তে কম অবাক হয় না। যদি /dev/randomকেবল (প্রাক্তন :) 60 বাইট হয় তবে ddআপনাকে একটি 60 বাইট ফাইল দেবে। headএকই দৃশ্যে ব্যবহার করা দেখতে সম্ভবত এটি চিরকাল স্থায়ী। আপনি যা চান তা উভয়ই করছেন না, তবে কমপক্ষে আমার পক্ষে এটি আরও সুস্পষ্ট যে headএটি প্রত্যাশিতভাবে করছেন না।
রায়ান জে

5

প্রথাগতভাবে, মধ্যে একমাত্র পার্থক্য /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 খনির পড়ুন ।


5

এটি কিছুটা "আমিও" উত্তর, তবে এটি টম হেলের সুপারিশকে শক্তিশালী করে। এটি লিনাক্সের বর্গক্ষেত্র প্রযোজ্য।

  • ব্যবহার /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ালাই। সম্ভাব্যরূপে সনাক্ত করা এবং সম্ভবত স্থির করা যায় এমন কনফিগারেশনগুলি নজরে না যায়। যদি সমস্যাটি সামনে না আনা হয় তবে তা ঠিক করা হবে না।

আমার মনে হচ্ছে কার্নেল কিছু সংস্থার জন্য নীতিগত সিদ্ধান্ত নিচ্ছে। যাদের হার্ডওয়্যার রয়েছে যেগুলি কার্যকরভাবে অনুপযুক্ত, তারা ঝুঁকি নিয়ে বাঁচার সিদ্ধান্ত নিতে পারে বা তারা হার্ডওয়্যারকে রিফ্রেশ করার সিদ্ধান্ত নিতে পারে। তবে, এ সম্পর্কিত তথ্য ছাড়াই তারা বুঝতে পারে না যে তাদের একটি কার্যক্ষম আইটেম রয়েছে।

শেষ পর্যন্ত থ্রেডে পৌঁছে যাওয়া সমঝোতাটি কলিং মডিউল প্রতি কমপক্ষে একটি ডেমসিগ ছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.