এন্ট্রপি কেবলমাত্র হারিয়ে যায় না /dev/{,u}random, কার্নেলটিও কিছু নেয়। উদাহরণস্বরূপ, নতুন প্রক্রিয়াগুলির এলোমেলোভাবে ঠিকানা (ASLR) রয়েছে এবং নেটওয়ার্ক প্যাকেটের এলোমেলো ক্রম সংখ্যা প্রয়োজন। এমনকি ফাইল সিস্টেম মডিউলটি কিছু এনট্রপি সরিয়ে ফেলতে পারে। ড্রাইভার / চর / র্যান্ডম । সি । এ মন্তব্যগুলি দেখুন । এছাড়াও খেয়াল করুন যে entropy_availইনপুট পুলকে বোঝায় , আউটপুট পুলগুলি নয় (মূলত অ-ব্লকিং /dev/urandomএবং ব্লকিং /dev/random)।
আপনার যদি এন্ট্রপি পুলটি দেখার প্রয়োজন হয় তবে এটি ব্যবহার করবেন না watch cat, যা প্রতিটি অনুরোধে এন্ট্রপি গ্রাস করবে cat। অতীতেও আমি এই পুলটি দেখতে চেয়েছিলাম যেহেতু জিপিজি কী তৈরির ক্ষেত্রে খুব ধীর ছিল, তাই আমি এন্ট্রপি পুলটি দেখার একমাত্র উদ্দেশ্য নিয়ে একটি সি প্রোগ্রাম লিখেছিলাম: https://git.lekensteyn.nl/c-files/tree /entropy-watcher.c ।
মনে রাখবেন যে ব্যাকগ্রাউন্ড প্রক্রিয়া থাকতে পারে যা এন্ট্রপি গ্রাস করে। উপযুক্ত কার্নেলে ট্র্যাসপয়েন্টগুলি ব্যবহার করে আপনি প্রসেসগুলি দেখতে পাবেন যা এনট্রপি পুল পরিবর্তন করে। ব্যবহারের উদাহরণ যা -gসমস্ত সিপিইউতে কলচেইন ( ) সহ র্যান্ডম সাবসিস্টেম সম্পর্কিত সমস্ত ট্র্যাসপয়েন্টগুলিকে রেকর্ড করে ( ) -aনিজের প্রক্রিয়াটিকে উপেক্ষা করার জন্য 1 সেকেন্ডের পরে পরিমাপ শুরু করে ( -D 1000) এবং টাইমস্ট্যাম্পগুলি ( -T) সহ :
sudo perf record -e random:\* -g -a -D 1000 -T sleep 60
এগুলির যে কোনও একটি আদেশ সহ এটি পড়ুন ( perf.dataপ্রয়োজন অনুসারে মালিক পরিবর্তন করুন ):
perf report # opens an interactive overview
perf script # outputs events after each other with traces
perf scriptআউটপুট একটি আকর্ষণীয় অন্তর্দৃষ্টি এবং শো যখন এনট্রপি 8 বাইট (64 বিট) সম্পর্কে কিছু সময় অন্তর আমার মেশিনে আপীত হয় দেয়:
কে ওয়ার্কার / 0: 2 193 [000] 3292.235908: এলোমেলো: এক্সট্র্যাক্ট_এন্ট্রপি: ffffffff8173e956 পুল: এনবাইটস 8 এন্ট্রপি_কাউন্ট 921 কলার _এক্সফার_সেকেন্ডারি_পুল
5eb857 এক্সট্র্যাক্ট_এন্ট্রপি (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
5eb984 _xfer_secondary_pool (/lib/modules/4.6.2-1-ARCH/build/vmlinux)
5ebae6 পুশ_ টোপুল (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
293a05 প্রক্রিয়া_আপনি_কর্ম (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
293ce8 কর্মী_প্রেম (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
299998 kthread (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
7c7482 ret_from_fork (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
কে ওয়ার্কার / 0: 2 193 [000] 3292.235911: এলোমেলো: ডেবিট_এন্ট্রপি: ffffffff8173e956: ডেবিট_বিটস 64
5eb3e8 অ্যাকাউন্ট.part.12 (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
5eb770 এক্সট্র্যাক্ট_এন্ট্রপি (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
5eb984 _xfer_secondary_pool (/lib/modules/4.6.2-1-ARCH/build/vmlinux)
5ebae6 পুশ_ টোপুল (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
293a05 প্রক্রিয়া_আপনি_কর্ম (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
293ce8 কর্মী_প্রেম (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
299998 kthread (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
7c7482 ret_from_fork (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
...
অদলবদল 0 [002] 3292.507720: এলোমেলো: ক্রেডিট_ট্রোপি_বিটস: ffffffff8173e956 পুল: বিট 2 এনট্রপি_কাউন্ট 859 এন্ট্রপি_টোটাল 2 কলার অ্যাড_ইন্টারট্রপ_রেন্ডমনেস
5eaab6 ক্রেডিট_এন্ট্রপি_বিটস (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
5ec644 অ্যাড_ইন্টারটারপুট_রেন্ডোমনেস (/ লিবিব / মডুলস / 4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
2d5729 হ্যান্ডেল_িরক_উইভেন্ট_পারসিপু (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
2d58b9 হ্যান্ডেল_irq_event (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
2 ডি 8 ডি 1 বি হ্যান্ডেল_জেজ_িরক (/ লিবিব / মডিউলস / 4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
230e6a হ্যান্ডেল_ির্ক (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
7c9abb do_IRQ (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
7c7bc2 ret_from_intr (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
6756c7 সিপুইডল_এন্টার (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
2bd9fa কল_সিপিইডল (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
2bde18 cpu_startup_entry (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
2510e5 স্টার্ট_সেকেন্ডারী (/lib/modules/4.6.2-1- মার্চ / বিল্ড / ভিএমলিনাক্স)
স্পষ্টতই ইনপুট পুল থেকে আউটপুট পুলগুলিতে এন্ট্রপিকে স্থানান্তরিত করে এনট্রপির অপচয় রোধ করতে এটি ঘটে:
/*
* Credit (or debit) the entropy store with n bits of entropy.
* Use credit_entropy_bits_safe() if the value comes from userspace
* or otherwise should be checked for extreme values.
*/
static void credit_entropy_bits(struct entropy_store *r, int nbits)
{
...
/* If the input pool is getting full, send some
* entropy to the two output pools, flipping back and
* forth between them, until the output pools are 75%
* full.
*/
...
schedule_work(&last->push_work);
}
/*
* Used as a workqueue function so that when the input pool is getting
* full, we can "spill over" some entropy to the output pools. That
* way the output pools can store some of the excess entropy instead
* of letting it go to waste.
*/
static void push_to_pool(struct work_struct *work)
{
...
}
/dev/randomসর্বোপরি, এমন কিছু যা সুরক্ষিত ক্রিপ্টোগ্রাফিক উদ্দেশ্যে ব্যবহৃত হয় এবং প্রয়োগটি নিখুঁত হতে পারে না। একটি ব্যাখ্যা এখানে শেষ পয়েন্টে ইঙ্গিত করা যেতে পারে: en.wikedia.org/wiki/Entropy_pool#Using_obmitted_events ("একটি কী এবং একটি প্রারম্ভিক ভেক্টর সহ একটি স্ট্রিম সাইফার বজায় রাখুন ..." দিয়ে শুরু করে)> পুলটি প্রতিস্থাপন করা হলেই যথেষ্ট হবে তথ্য জমেছে।