এনট্রপি ড্রেন রাখে কি?


21

যদি আমি watch cat /proc/sys/kernel/random/entropy_availদেখতে পাই যে আমার সিস্টেমে এনট্রপি ধীরে ধীরে সময়ের সাথে বেড়ে যায়, যতক্ষণ না এটি 180-190 পরিসরে পৌঁছে যায় যেদিকে এটি নেমে যায় প্রায় 120-130 এর দিকে। এনট্রপিতে ড্রপগুলি প্রতি বিশ সেকেন্ডের মধ্যে দেখা দেয়। এমনকি আমি lsofবলি যে কোনও প্রক্রিয়া নেই /dev/randomবা /dev/urandomখোলেনি। এনট্রপি দূরে কী? কার্নেলটির পাশাপাশি এনট্রপিও প্রয়োজন, বা এটি আরও বৃহত্তর পুলটিকে আরও ছোট, আরও উন্নত মানের পুলে পুনঃপ্রসারণ করছে?

এটি একটি খালি-ধাতব মেশিনে রয়েছে, কোনও এসএসএল / এসএসএইচ / ডাব্লুপিএ সংযোগ নেই।


ভাল প্রশ্ন, এবং আমি আপনাকে একটি নির্দিষ্ট উত্তর দিতে না পারলে, এটি আমার কাছে বোঝা যায় যে "এনট্রপি পুল" এমন কিছু নয় যা অব্যবহৃত হলে বাড়ানো উচিত। /dev/randomসর্বোপরি, এমন কিছু যা সুরক্ষিত ক্রিপ্টোগ্রাফিক উদ্দেশ্যে ব্যবহৃত হয় এবং প্রয়োগটি নিখুঁত হতে পারে না। একটি ব্যাখ্যা এখানে শেষ পয়েন্টে ইঙ্গিত করা যেতে পারে: en.wikedia.org/wiki/Entropy_pool#Using_obmitted_events ("একটি কী এবং একটি প্রারম্ভিক ভেক্টর সহ একটি স্ট্রিম সাইফার বজায় রাখুন ..." দিয়ে শুরু করে)> পুলটি প্রতিস্থাপন করা হলেই যথেষ্ট হবে তথ্য জমেছে।
স্বর্ণলোকস

মনে রাখবেন যে কোনও ক্ষেত্রে, লিনাক্সের এনট্রপি গণনা /dev/randomবেশ জালিয়াতি - একবার এন্ট্রপি পুল একবার পূর্ণ হয়ে গেলে, /dev/urandomঠিক ততটাই ভাল /dev/random
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

1
@ টেক্রাফ বাহ, উত্তরটি খুব দ্রুত পেয়েছে। আমি 2.5 বছর পরে কখনও উত্তর পাওয়ার আশা করিনি।
উইংডসবমারিনার

উত্তর:


20

এন্ট্রপি কেবলমাত্র হারিয়ে যায় না /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)
{
    ...
}

2
এটি উল্লেখ করার জন্য +1 যে এমনকি কোনও প্রোগ্রাম শুরু করার মতো আপাতদৃষ্টিতে "নির্দোষ" ক্রিয়াকলাপগুলি অল্প পরিমাণে এনট্রপি নিষ্কাশন করতে পারে।
একটি সিভিএন

এই ব্যাখ্যাটি অবশ্য প্রশ্নে বর্ণিত পরিস্থিতিটির সাথে কিছুটা পরস্পরবিরোধী, তাই না? সেখানে এন্ট্রপি (পর্যবেক্ষণ করা watch) অবিচ্ছিন্নভাবে বৃদ্ধি পায় তারপরে তীক্ষ্ণ ড্রপ হয়। যদি watchপ্রতিটি পড়ার ক্ষেত্রে এনট্রপি গ্রাস করা হয় তবে এটি আসলে অবিচ্ছিন্নভাবে হ্রাস করা উচিত।
টেকরফ

@ টেক্রাফ ভাল পর্যবেক্ষণ, পর্যায়ক্রমে অনুরোধ catতত্ত্ব মত একই এনট্রপি ড্রেন থাকা উচিত যা দৃশ্যমান নয় not দেখা যাচ্ছে যে "পর্যাপ্ত" এনট্রপি রয়েছে তখন এনট্রপি অন্য একটি পুলে স্থানান্তরিত হয়।
লেকেনস্টেইন

4

খুব কম/dev/randomসময়ের মধ্যে কোনও প্রক্রিয়া দ্বারা পড়া পড়া শেষ হওয়ার কারণে lsof নিরীক্ষণের সেরা সরঞ্জাম নয়। আমি পেয়ে কি প্রক্রিয়া একটি পঠিত করছে, কিন্তু ব্যবহারের একটি ভাল পদ্ধতি জানি নাআপনি নজর রাখতে পারেন যদি সেখানে পঠিত।inotify

এখানে মূলত দুটি উপায় রয়েছে:

  1. এর সাথে এন সেকেন্ডের পরে একটি সারাংশ পান:

    inotifywatch -v -t 60 /dev/random 
    
  2. দেখুন লাইভ এক্সেস ঘটনা:

    inotifywait -m --timefmt '%H:%M:%S' --format '%T: %e' /dev/random
    

উভয়ই আপনাকে প্রক্রিয়া দেবে না এবং পরেরটি আপনাকে পড়ার আকার দেয় না। প্রথমটি আপনাকে এই হিসাবে একটি সংক্ষিপ্তসার দেবে:

total  access  close_nowrite  open  filename
18     16      1              1     /dev/random

আপনার যদি এটির চলমান থাকে এবং একটি করে থাকেন তবে dd if=/dev/random of=/tmp/foo bs=1 count=3আপনি ধারণাটি পাবেন।

যাহাই হউক না কেন। যখন কার্নেল পুল থেকে গ্রাস করবে তখন এটি আপনাকে টিক্স দেবে না।


এটি ব্যবহার করে এনট্রপির স্থিতি পরীক্ষা করার সময়

watch cat /proc/sys/kernel/random/entropy_avail

প্রতিটি catযেমন এনট্রপি গ্রহন করতে যাচ্ছে তেমন সেরা ধারণা নয় । (আমি দেখতে পাচ্ছি এটি অন্য একটি উত্তর পপ আপ করেছে যা এটিরও উল্লেখ করে)) এর জন্য আমার কিছু সি কোডও রয়েছে এবং গতকাল এটি সনাক্ত করার চেষ্টা করেছি। আমি এটি খুঁজে পেতে পারি এবং পরে উত্তর আপডেট করতে পারি কিনা তা আমি দেখতে পাব।


অডিট করা লগ থেকে পড়তে পারে /dev/random(আমি জানি এই সাইটে একই ধরণের উদাহরণ রয়েছে)।
গিলস 'অসন্তুষ্ট হওয়া বন্ধ করুন'

1
নিম্নলিখিত watch catuse Fcntl 'SEEK_SET'; open(my $fh,"<", "/proc/sys/kernel/random/entropy_avail"); while (1) { print <$fh>; sleep(1); seek($fh,0,SEEK_SET); }
পার্লের
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.