শিরোনাম এবং আপনার প্রশ্নের শরীর দুটি ভিন্ন প্রশ্ন জিজ্ঞাসা: কিভাবে ওএস এনট্রপি সৃষ্টি (এই আসলেই করা উচিৎ গ্রহণ করে এনট্রপি), এবং কিভাবে এটা এই এনট্রপি থেকে সিউডো-যদৃচ্ছতা জেনারেট করে। আমি পার্থক্য ব্যাখ্যা করে শুরু করব।
এলোমেলোতা কোথা থেকে আসে?
এলোমেলো নম্বর জেনারেটর (আরএনজি) দুটি ধরণের আসে:
- সিউডো-র্যান্ডম সংখ্যার জেনারেটর (পিআরএনজি), যাকে ডেট্রিমেন্টিক র্যান্ডম বিট জেনারেটর (ডিআরবিজি) বা এর সংমিশ্রণগুলিও বলা হয়, হ'ল নির্ধারক অ্যালগরিদম যা একটি স্থির আকারের পরিবর্তনশীল অভ্যন্তরীণ অবস্থা বজায় রাখে এবং সেই অবস্থা থেকে তাদের আউটপুট গণনা করে।
- হার্ডওয়্যার র্যান্ডম নম্বর জেনারেটর (এইচআরএনজি), যাকে "ট্রু" র্যান্ডম সংখ্যা জেনারেটরও বলা হয়, এটি শারীরিক ঘটনার উপর ভিত্তি করে। "সত্য" হ'ল কিছুটা ভুল ধারণা, কারণ এমন কোনও তথ্যের উত্স নেই যা সত্যই এলোমেলো হিসাবে পরিচিত , কেবল তথ্যের উত্স যা অনুমানযোগ্য বলে জানা যায় না।
শারীরিক ঘটনার সিমুলেশনগুলির মতো কিছু অ্যাপ্লিকেশন স্ট্যাম্পটিকাল পরীক্ষায় উত্তীর্ণ এলোমেলো সংখ্যার সাথে সামগ্রী হতে পারে। অন্যান্য অ্যাপ্লিকেশনগুলির, যেমন ক্রিপ্টোগ্রাফিক কীগুলির প্রজন্মের জন্য আরও শক্তিশালী সম্পত্তি প্রয়োজন হয়: অনুমানযোগ্যতা । অনির্দেশ্যতা একটি সুরক্ষা সম্পত্তি, (কেবলমাত্র) কোনও পরিসংখ্যানগত সম্পত্তি নয়: এর অর্থ হ'ল কোনও বিরোধী এলোমেলো সংখ্যা জেনারেটরের আউটপুট অনুমান করতে পারে না। (আরও স্পষ্টভাবে, আপনি প্রতিদ্বন্দ্বীর পক্ষে আরএনজি আউটপুটটির প্রতিটি বিট অনুমান করার সম্ভাবনা পরিমাপ করে আরএনজির মানটি পরিমাপ করতে পারবেন। সম্ভাবনাটি যদি 1/2 থেকে পৃথক হয়, আরএনজি খারাপ হয়))
শারীরিক ঘটনাগুলি রয়েছে যা ভাল পরিসংখ্যানগত বৈশিষ্ট্যগুলির সাথে এলোমেলো ডেটা উত্পাদন করে - উদাহরণস্বরূপ, তেজস্ক্রিয় ক্ষয় বা পটভূমির গোলমালের কিছু জ্যোতির্বিজ্ঞানী পর্যবেক্ষণ, বা শেয়ার বাজারের ওঠানামা। পক্ষপাতদুষ্ট সম্ভাব্যতা বিতরণকে অভিন্ন সম্ভাব্যতার বিতরণে পরিণত করার জন্য এই জাতীয় শারীরিক পরিমাপের কন্ডিশনিং ( হোয়াইটেনিং ) প্রয়োজন । একটি শারীরিক পরিমাপ যা প্রত্যেকের কাছে জানা যায় তা ক্রিপ্টোগ্রাফির জন্য ভাল নয়: স্টক মার্কেটের ওঠানামা জিওহ্যাশিংয়ের জন্য ভাল হতে পারে তবে আপনি সেগুলি গোপন কী তৈরি করতে ব্যবহার করতে পারবেন না ।
ক্রিপ্টোগ্রাফির গোপনীয়তা প্রয়োজন : একটি শত্রু অবশ্যই কন্ডিশনিংয়ে গেছে এমন ডেটা সন্ধান করতে সক্ষম হবে না। আছে ক্রিপ্টোগ্রাফি নিরাপদ সিউডো-রেণ্ডম সংখ্যা জেনারেটর PRNG আলগোরিদিম যার আউটপুট ক্রিপ্টোগ্রাফিক অ্যাপ্লিকেশন ব্যবহার, ছাড়াও জন্য উপযুক্ত: (CSPRNG) ভাল পরিসংখ্যানগত বৈশিষ্ট্য হচ্ছে । সিএসপিআরএনজি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত করে তোলে এমন একটি বৈশিষ্ট্য হ'ল এর আউটপুট কোনও প্রতিপক্ষকে অভ্যন্তরীণ অবস্থার পুনর্গঠন করতে দেয় না (সমস্ত বিট জেনেও একটি সিএসপিআরএনজি উত্পাদিত একটি হারিয়ে যাওয়া বিটটি খুঁজে পেতে সহায়তা করে না)। আমি কীভাবে কোনও সিএসপিআরএনজি করব তা জানব না কারণ এটি সহজ বিট - আপনি পেশাদার ক্রিপ্টোগ্রাফারদের দেওয়া রেসিপিগুলি অনুসরণ করতে পারেন (একটি মান ব্যবহার করুন)অ্যালগরিদম, যেমন হাশ_ডিআরবিজি, এইচএমএসি_ডিআরবিজি বা সিআইটিআর_ডিআরবিজি এনআইএসপি এসপি 800-90 এ থেকে ) বা এএনএসআই এক্স 9.31 পিআরএনজি । সিএসপিআরএনজি সুরক্ষিত হওয়ার জন্য তার রাজ্যের দুটি সম্পত্তি প্রয়োজন:
- রাজ্যকে অবশ্যই শুরু থেকে এবং সর্বদা গোপন রাখতে হবে (যদিও রাষ্ট্রের সংস্পর্শে অতীত ফলাফলগুলি প্রকাশিত হবে না)।
- রাজ্যটি অবশ্যই রৈখিক হতে হবে: আরএনজি আর কখনও একই রাজ্য থেকে শুরু করা উচিত নয়।
একটি এলোমেলো সংখ্যা জেনারেটরের আর্কিটেকচার
অনুশীলনে, প্রায় সমস্ত ভাল এলোমেলো নম্বর জেনারেটর এক বা একাধিক এনট্রপি উত্সের সাথে একটি সিএসপিআরএনজি একত্রিত করে । এটিকে দৃ .়ভাবে বলতে গেলে, এনট্রপি হ'ল ডেটা উত্সের অনির্দেশ্যতার একটি পরিমাপ। নিখুঁতভাবে একটি হার্ডওয়্যার আরএনজি-তে একটি এলোমেলো নম্বর জেনারেটরকে ব্যাস করা কঠিন:
- সম্ভাব্য ডেটাটিকে অভিন্ন বিতরণে পরিণত করতে কাঁচা শারীরিক তথ্যের যে কোনও উপায়ে কন্ডিশনার প্রয়োজন।
- এলোমেলো উত্স থেকে আউটপুট গোপন রাখতে হবে।
- এন্ট্রপি উত্সগুলি চাহিদার তুলনায় প্রায়শই ধীর হয়।
সুতরাং অপারেটিং সিস্টেমে আরএনজি প্রায় সবসময় এই জাতীয়ভাবে কাজ করে :
- একটি অনির্দেশ্য অভ্যন্তরীণ রাষ্ট্র গঠনের জন্য পর্যাপ্ত এনট্রপি সংগ্রহ করুন ।
- একটি সিএসপিআরএনজি চালান , বীজ হিসাবে জমা হওয়া এনট্রপিটি অর্থাত্ অভ্যন্তরীণ অবস্থার প্রাথমিক মান হিসাবে।
- Allyচ্ছিকভাবে, পর্যায়ক্রমে অভ্যন্তরীণ অবস্থায় অতিরিক্ত এনট্রপিকে মিশ্রিত করুন। (এটি কঠোরভাবে প্রয়োজনীয় নয়, যেহেতু এনট্রপি কোনও পরিমাপযোগ্য হারে "গ্রাস" করা হয় না It এটি নির্দিষ্ট হুমকির বিরুদ্ধে সহায়তা করে যা পুরো সিস্টেমের সাথে আপস না করেই আরএনজি রাজ্যকে ফাঁস করে দেয়।)
একটি এলোমেলো সংখ্যা জেনারেশন পরিষেবা অপারেটিং সিস্টেমের কাজের অংশ, কারণ এনট্রপি সংগ্রহের জন্য হার্ডওয়্যার অ্যাক্সেস প্রয়োজন হয় এবং এনট্রপি উত্সগুলি একটি ভাগ করা উত্স গঠন করে: অপারেটিং সিস্টেমটি অবশ্যই তাদের একত্রিত করতে হবে এবং অ্যাপ্লিকেশনগুলির জন্য উপযুক্ত হবে এমন আউটপুট সংগ্রহ করবে। অপারেটিং সিস্টেমে এনট্রপি উত্সগুলির সিউডো-এলোমেলো কন্ডিশনার প্রয়োজন; এটি পাশাপাশি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত হতে পারে, কারণ এটি মূলত শক্ত নয় (এবং এটি অপারেটিং সিস্টেমগুলিতে প্রয়োজনীয় যেখানে অ্যাপ্লিকেশনগুলি একে অপরের উপর নির্ভর করে না; সম্পূর্ণ সমবায় সিস্টেমগুলিতে, প্রতিটি অ্যাপ্লিকেশন অভ্যন্তরীণভাবে নিজস্ব সিএসপিআরএনজি চালাতে হবে যদি অপারেটিং সিস্টেমটি থাকে) যাইহোক একটি সরবরাহ করে না)।
অবিচ্ছিন্ন স্টোরেজ সহ বেশিরভাগ সিস্টেমগুলি বুট করার সময় ডিস্ক থেকে একটি আরএনজি বীজ লোড করবে (আমি কোনও ধরণের ধ্রুবক স্টোরেজের জন্য সংক্ষেপ হিসাবে "ডিস্ক" ব্যবহার করব) এবং সেই বীজ থেকে উত্পন্ন কিছু তাজা সিউডো-এলোমেলো তথ্য দিয়ে বীজটিকে ওভাররাইট করে, অথবা যদি সেই বীজ এবং অন্য এনট্রপি উত্স থেকে উত্পন্ন এলোমেলো ডেটা পাওয়া যায়। এইভাবে, পুনরায় বুটের পরে এনট্রপি না পাওয়া সত্ত্বেও, পূর্ববর্তী সেশনের এনট্রপিটি পুনরায় ব্যবহার করা হবে।
সংরক্ষিত অবস্থা সম্পর্কে কিছু যত্ন নিতে হবে। মনে আছে আমি কীভাবে বললাম রাজ্যটিকে রৈখিক হতে হবে? যদি আপনি একই ডিস্কের অবস্থা থেকে দু'বার বুট করেন তবে আপনি একই আরএনজি আউটপুট পাবেন। যদি আপনার পরিবেশে এটির সম্ভাবনা থাকে তবে আপনার এন্ট্রপির আরও একটি উত্স প্রয়োজন। ব্যাকআপগুলি থেকে পুনরুদ্ধার করার সময়, বা ভার্চুয়াল মেশিনটি ক্লোন করার সময় যত্ন নিন । ক্লোনিংয়ের একটি কৌশল হ'ল কিছু পরিবেশগত তথ্য যা সঞ্চারিত তবে অনন্য (উদাহরণস্বরূপ সময় এবং ম্যাক ঠিকানা) এর সাথে সঞ্চিত এনট্রপিকে মিশ্রিত করা; সাবধান হন যে যদি পরিবেশের ডেটা পূর্বাভাসযোগ্য হয় তবে সঞ্চিত ভিএম রাষ্ট্রের মালিকানায় থাকা যে কেউ ফর্কযুক্ত ভিএম উদাহরণটির বীজ পুনর্গঠন করতে পারে।
এনট্রপি সূত্র
একটি অপারেটিং সিস্টেমে এন্টারোপি উত্সগুলি অনুসন্ধান করা (এবং সঠিকভাবে ব্যবহার করা) এলোমেলো সংখ্যা জেনারেশনের সবচেয়ে চ্যালেঞ্জিং অংশ। উপলভ্য এনট্রপি উত্সগুলি প্রয়োজনীয়ভাবে হার্ডওয়্যার এবং কোন পরিবেশে হার্ডওয়্যার চালিত হয় তার উপর নির্ভরশীল।
আপনি যদি ভাগ্যবান হন তবে আপনার হার্ডওয়্যারটি একটি পেরিফেরাল সরবরাহ করে যা কোনও এনট্রপি উত্স হিসাবে ব্যবহার করা যেতে পারে: একটি হার্ডওয়্যার র্যান্ডম সংখ্যা জেনারেটর , হয় ডেডিকেটেড বা পার্শ্ব-উদ্দেশ্যযুক্ত। উদাহরণ স্বরূপ:
NIST SP800-90B হার্ডওয়্যার আরএনজির জন্য নকশা নির্দেশিকা সরবরাহ করে। একটি হার্ডওয়্যার আরএনজি মূল্যায়ন করা কঠিন । হার্ডওয়্যার আরএনজি সাধারণত নাজুক প্রাণী, যা যত্ন সহ ব্যবহার করা প্রয়োজন: অনেক ধরণের অস্থিরতা অর্জনের জন্য বুটের পরে কিছু সময় এবং পড়ার মাঝে কিছু সময় প্রয়োজন হয়, তারা প্রায়শই তাপমাত্রা ইত্যাদির মতো পরিবেশগত পরিস্থিতিতে সংবেদনশীল হয় are
আইভি ব্রিজ আর্কিটেকচারের উপর ভিত্তি করে ইন্টেল x86-64 প্রসেসর এমন RdRand
নির্দেশাবলী সরবরাহ করে যা তাপের আওয়াজ দ্বারা বর্ধিত কোনও সিএসপিআরএনজি থেকে আউটপুট সরবরাহ করে । বেশিরভাগ স্মার্টফোন প্রসেসরে একটি হার্ডওয়্যার এনট্রপি উত্স অন্তর্ভুক্ত থাকে, যদিও অ্যান্ড্রয়েড সর্বদা এটি ব্যবহার করে না।
যে সিস্টেমে শক্তিশালী এনট্রপি উত্সের অভাব রয়েছে তাদের দুর্বল এনট্রপি উত্সগুলিকে একত্রিত করে এবং আশা করা (তারা নিশ্চিত হবে যে খুব শক্তিশালী কোনও শব্দ হবে) যা তাদের যথেষ্ট হবে। এলোমেলো মাউস মুভমেন্ট ক্লায়েন্ট মেশিনগুলির জন্য জনপ্রিয়, এবং আপনি নির্দিষ্ট ক্রিপ্টোগ্রাফি প্রোগ্রামগুলি দ্বারা সুরক্ষা শোটি দেখে থাকতে পারেন যা আপনাকে মাউসটি সরিয়ে নিতে বলছে (যদিও কোনও একবিংশ শতাব্দীর পিসি অপারেটিং সিস্টেমে ওএস প্রয়োগ ব্যতীত প্রয়োজন ছাড়াই এনট্রপি সংগ্রহ করবে) )।
আপনি যদি একটি উদাহরণ দেখতে চান তবে আপনি লিনাক্সের দিকে নজর দিতে পারেন, তবে সচেতন হন যে এটি নিখুঁত নয় । বিশেষত, /dev/random
প্রায়শই ব্লকগুলি (কারণ এটি এনট্রপির অত্যধিক রক্ষণশীল ধারণা সহ পর্যাপ্ত এনট্রপি উপলব্ধ না হওয়া অবধি এটি ব্লক করে ), যদিও /dev/urandom
প্রথম বুট ব্যতীত প্রায় সবসময়ই ভাল থাকে তবে পর্যাপ্ত এনট্রপি না থাকলে কোনও ইঙ্গিত দেয় না। লিনাক্সের অনেকগুলি এইচআরএনজি ডিভাইসের জন্য ড্রাইভার রয়েছে এবং বিভিন্ন ডিভাইস ( ইনপুট ডিভাইস সহ ) এবং ডিস্কের সময় থেকে এনট্রপি সংগ্রহ করে ।
আপনার যদি (গোপনীয়) অবিরাম স্টোরেজ থাকে তবে উপরের ইঙ্গিত অনুসারে আপনি এটি একটি বুট থেকে অন্য বুটে এন্ট্রপি বাঁচাতে ব্যবহার করতে পারেন। প্রথম বুট একটি সূক্ষ্ম সময়: সিস্টেম, যে সময়ে একটা মোটামুটি আন্দাজের রাষ্ট্র হতে পারে, বিশেষ করে ভর উত্পাদিত ডিভাইস মূলত একই ভাবে কারখানা থেকে বের চালনা করেন। কিছু এম্বেড থাকা ডিভাইস যা অবিচ্ছিন্ন স্টোরেজ থাকে তাদের কারখানায় প্রাথমিক বীজ সরবরাহ করা হয় (কারখানায় একটি কম্পিউটারে চলমান আরএনজি দ্বারা উত্পাদিত)। ভার্চুয়ালাইজড সার্ভার পরিবেশে, হোস্ট বা কোনও এনট্রপি সার্ভার থেকে ভার্চুয়াল মেশিন ইনস্ট্যান্ট করার সময় প্রাথমিক এনট্রপি সরবরাহ করা যেতে পারে।
খারাপ-বীজযুক্ত ডিভাইসগুলি অনুশীলনে একটি বিস্তৃত সমস্যা - সর্বজনীন আরএসএ কীগুলির একটি সমীক্ষায় দেখা গেছে যে অনেক সার্ভার এবং ডিভাইসগুলির মধ্যে এমন কী রয়েছে যা দুর্বল আরএনজি দিয়ে তৈরি হয়েছিল, সম্ভবত একটি ভাল পিআরএনজি যা অপর্যাপ্তভাবে বীজযুক্ত ছিল। ওএস ডিজাইনার হিসাবে, আপনি নিজেরাই এই সমস্যাটি সমাধান করতে পারবেন না: প্রথম বুটে আরএনজি যথাযথভাবে বদ্ধ করা হবে তা নিশ্চিত করা ডিপ্লোয়মেন্ট চেইনের নিয়ন্ত্রণে থাকা সত্তার কাজ । ওএস ডিজাইনার হিসাবে আপনার কাজটি হ'ল প্রথম বীজ সরবরাহ করার জন্য একটি ইন্টারফেস সহ একটি যথাযথ আরএনজি সরবরাহ করা এবং যদি সঠিকভাবে বীজ হওয়ার আগে আরএনজি ব্যবহার করা হয় তবে সঠিক ত্রুটি সংকেত নিশ্চিত করা।