এন্ট্রপি কেবলমাত্র হারিয়ে যায় না /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 ("একটি কী এবং একটি প্রারম্ভিক ভেক্টর সহ একটি স্ট্রিম সাইফার বজায় রাখুন ..." দিয়ে শুরু করে)> পুলটি প্রতিস্থাপন করা হলেই যথেষ্ট হবে তথ্য জমেছে।