আসুন কিছু কম্পিউটার জুজু খেলুন, কেবল আপনি, আমি এবং একটি সার্ভার যা আমরা দুজনেই বিশ্বাস করি। সার্ভারটি সিউডো-এলোমেলো নম্বর জেনারেটর ব্যবহার করে যা আমরা খেলার আগে ঠিক একটি 32-বিট বীজ দিয়ে শুরু করে। সুতরাং প্রায় চার বিলিয়ন সম্ভাব্য ডেক রয়েছে।
আমি আমার হাতে পাঁচটি কার্ড পেয়েছি - স্পষ্টতই আমরা টেক্সাস হোল্ড 'এম খেলছি না। ধরা যাক কার্ডগুলি আমার কাছে একটি বিতরণ করা হয়েছে, একটি আপনার কাছে, একটি আমার কাছে, একটি আপনার কাছে এবং আরও অনেক কিছু। সুতরাং আমি ডেক প্রথম, তৃতীয়, পঞ্চম, সপ্তম এবং নবম কার্ড আছে।
এর আগে আমি সিউডো-এলোমেলো সংখ্যার জেনারেটরটি প্রতি বীজের সাথে একবার, চার বিলিয়ন বার চালিয়েছিলাম এবং প্রত্যেকটির জন্য উত্পন্ন প্রথম কার্ডটি ডাটাবেসে লিখে রেখেছিলাম। ধরুন আমার প্রথম কার্ডটি কোদালির রানী। এটি কেবলমাত্র সম্ভাব্য ডেকগুলির মধ্যে 52 টির মধ্যে একটিতে প্রথম কার্ড হিসাবে দেখায়, তাই আমরা সম্ভাব্য ডেকগুলি চার বিলিয়ন থেকে প্রায় 80 মিলিয়ন বা আরও কমিয়ে ফেলেছি।
ধরুন আমার দ্বিতীয় কার্ডটি হৃদয়ের তিনটি। এখন আমি আমার আরএনজি আরও ৮০ মিলিয়ন বার চালিয়েছি ৮০ মিলিয়ন বীজ ব্যবহার করে যে কোদালদের রানিকে প্রথম সংখ্যা হিসাবে উত্পাদন করে। এটি আমার কয়েক সেকেন্ড সময় নেয়। আমি তিনটি হৃদয়কে তৃতীয় কার্ড হিসাবে তৈরি করে এমন সমস্ত ডেকে লিখি - আমার হাতে দ্বিতীয় কার্ড। এটি আবার মাত্র 2% ডেকে, তাই এখন আমরা 2 মিলিয়ন ডেকে নেমে এসেছি।
ধরুন আমার হাতে তৃতীয় কার্ডটি ক্লাবগুলির 7 টি। আমার কাছে 2 মিলিয়ন বীজের একটি ডাটাবেস রয়েছে যা আমার দুটি কার্ড ব্যবহার করে; আমি R টি ক্লাবকে তৃতীয় কার্ড হিসাবে উত্পাদন করে এমন 2 টি ডেক খুঁজে পাওয়ার জন্য আমি আরএনজি আরও 2 মিলিয়ন বার চালিয়েছি এবং আমরা মাত্র 40 হাজার ডেকে নেমেছি।
আপনি কিভাবে এটি যায় দেখুন। আমার চতুর্থ কার্ড উত্পাদনকারী সমস্ত বীজগুলি খুঁজে পেতে আমি আমার আরএনজি 40000 আরও বার চালনা করি এবং এটি আমাদের 800 ডেকে নামায় এবং তারপরে আমার পঞ্চম কার্ড উত্পাদনকারী 20 ডলার বীজ পেতে এটি আরও 800 বার চালান, এবং এখন আমি কেবল এই বিশটি ডেকে কার্ড তৈরি করুন এবং আমি জানি যে আপনার পক্ষে বিশটি হাত রয়েছে। তদুপরি, আমি পরবর্তীটি কী আঁকতে চলেছি তার একটি খুব ভাল ধারণা আমার রয়েছে।
এখন আপনি দেখতে পাচ্ছেন কেন সত্য এলোমেলো গুরুত্বপূর্ণ? আপনি যেভাবে এটি বর্ণনা করেছেন, আপনি ভাবেন যে বিতরণ গুরুত্বপূর্ণ, তবে বিতরণ এমন নয় যা কোনও প্রক্রিয়া এলোমেলো করে তোলে। অনুমানযোগ্যতা হ'ল প্রক্রিয়াটি এলোমেলো করে তোলে।
হালনাগাদ
(তাদের অনর্থক প্রকৃতির কারণে এখন মুছে ফেলা হয়েছে) মন্তব্যগুলির ভিত্তিতে, যারা এটি পড়েছেন তাদের কমপক্ষে 0.3% লোক আমার বক্তব্য হিসাবে বিভ্রান্ত হয়েছেন। মানুষ পয়েন্ট আমি করেননি বা তার থেকেও খারাপ বিরুদ্ধে তর্ক করেন, তখন তর্ক জন্য পয়েন্ট যে আমি হয়নি ধৃষ্টতা যে আমি তাদের করেননি উপর করুন, তারপরে আমি জানি যে আমি আরো স্পষ্ট এবং সাবধানে ব্যাখ্যা করা প্রয়োজন।
শব্দের বিতরণ শব্দটির চারপাশে কোনও বিভ্রান্তি রয়েছে বলে মনে হয় তাই আমি ব্যবহারগুলি সাবধানতার সাথে ডাকতে চাই।
হাতের প্রশ্নগুলি হ'ল:
- সিউডোর্যান্ডম সংখ্যা এবং সত্যই এলোমেলো সংখ্যার পার্থক্য কীভাবে?
- কেন পার্থক্য গুরুত্বপূর্ণ?
- পার্থক্যগুলির কি পিআরএনজির আউটপুট বিতরণের সাথে কিছু যুক্ত রয়েছে?
আসুন পোকার খেলুন এমন কার্ডের এলোমেলো ডেক উত্পন্ন করার সঠিক উপায় বিবেচনা করে শুরু করি । তারপরে আমরা দেখব যে ডেক উত্পন্ন করার জন্য অন্যান্য কৌশলগুলি কীভাবে আলাদা এবং যদি এই পার্থক্যের সুযোগ নেওয়া সম্ভব হয়।
আসুন ধরে নেওয়া শুরু করুন যে আমাদের কাছে একটি ম্যাজিক বক্স লেবেলযুক্ত রয়েছে TRNG
। এর ইনপুট হিসাবে আমরা এটির চেয়ে বড় বা তার সমান একটি পূর্ণসংখ্যা n দেব এবং এর আউটপুট হিসাবে এটি আমাদেরকে এক এবং এন এর মধ্যে সত্যিকারের এলোমেলো সংখ্যা দেয় lusive বাক্সের আউটপুট সম্পূর্ণ অপ্রত্যাশিত (যখন একটিকে বাদ দিয়ে অন্য কোনও সংখ্যা দেওয়া হয়) এবং এক এবং এন এর মধ্যে যে কোনও সংখ্যা অন্য হিসাবে সম্ভাব্য; অর্থাৎ যে বন্টন হয় অভিন্ন । (এলোমেলোতার আরও আরও উন্নত পরিসংখ্যানের চেক রয়েছে যা আমরা সম্পাদন করতে পারতাম; আমি এই বিষয়টিকে আমার তর্কের কাছে জার্মানি না বলে এড়িয়ে চলেছি। অনুমান করে টিআরএনজি পরিসংখ্যানগতভাবে এলোমেলো।)
আমরা কার্ডগুলির একটি অসমাপ্ত ডেক দিয়ে শুরু করি। আমরা বাক্সটি এক থেকে 52 এর মধ্যে একটি সংখ্যার জন্য জিজ্ঞাসা করি - এটি TRNG(52)
। এটি যে কোনও নম্বরই ফিরিয়ে দেয়, আমরা আমাদের সাজানো ডেক থেকে প্রচুর কার্ড গণনা করি এবং সেই কার্ডটি সরিয়ে ফেলি। এলোমেলো ডেকের মধ্যে এটি প্রথম কার্ডে পরিণত হয়। তারপরে আমরা TRNG(51)
দ্বিতীয় কার্ডটি নির্বাচন করতে অনুরোধ করি এবং তাই করি।
এটি দেখার অন্য একটি উপায় হ'ল 52 টি আছে! = 52 x 51 x 50 ... x 2 x 1 সম্ভাব্য ডেক, যা প্রায় 2 226 । আমরা এগুলির মধ্যে একটি সত্যই এলোমেলোভাবে বেছে নিয়েছি।
এখন আমরা কার্ড লেনদেন। আমি যখন আমার কার্ডগুলি দেখি তখন আপনার কাছে কী কার্ড রয়েছে তা আমার কোনও ধারণা নেই । (আপনার কাছে আমার কাছে থাকা কার্ডগুলির কোনও নেই বলে সুস্পষ্ট বিষয়টি বাদ দিয়ে)) এগুলি সমান সম্ভাবনা সহ কোনও কার্ড হতে পারে।
সুতরাং আমাকে নিশ্চিত করে তুলুন যে আমি এটি পরিষ্কারভাবে ব্যাখ্যা করেছি। আমাদের প্রতিটি স্বতন্ত্র আউটপুটের অভিন্ন বিতরণ রয়েছে TRNG(n)
; প্রত্যেকে সম্ভাব্যতা 1 / n এর সাথে 1 এবং n এর মধ্যে একটি সংখ্যা বাছাই করে। এছাড়াও, এই প্রক্রিয়াটির ফলাফল আমরা 52 টির মধ্যে একটি বেছে নিয়েছি! 1/52 একটি সম্ভাব্যতা !, তাই ডিস্ট্রিবিউশনের সাথে সম্ভব ডেকে সম্ভব ডেকে সেট উপর হয় এছাড়াও অভিন্ন।
ঠিক আছে.
এখন ধরা যাক যে আমাদের কাছে লেবেলযুক্ত কম ম্যাজিক বক্স রয়েছে PRNG
। আপনি এটি ব্যবহার করার আগে, এটি অবশ্যই 32-বিট স্বাক্ষরযুক্ত নম্বর সহ সিড করা উচিত ।
পাশে: 32 কেন ? এটি কি একটি 64- বা 256- বা 10000-বিট নম্বর দিয়ে বীজ দেওয়া যায় না? অবশ্যই। তবে (1) বাস্তবে বেশিরভাগ অফ-দ্য শেল্ফ পিআরএনজিগুলি 32-বিট সংখ্যাযুক্ত এবং বীজ বানাতে যদি আপনার 10000 বিট র্যান্ডমনেস থাকে তবে আপনি কেন পিআরএনজি ব্যবহার করছেন? আপনার কাছে ইতিমধ্যে এলোমেলোতার 10000 বিটের উত্স রয়েছে!
যাইহোক, পিআরএনজি কীভাবে কাজ করে ফিরে আসুন: এটি বীজ হওয়ার পরে, আপনি এটি যেভাবে ব্যবহার করেন সেভাবে ব্যবহার করতে পারেন TRNG
। এটি হ'ল, আপনি এটিকে একটি নম্বর, এন দিয়ে গেছেন এবং এটি আপনাকে 1 এবং n এর মধ্যে একটি সংখ্যা প্রদান করবে lusive তদুপরি, output আউটপুটটির বিতরণ কমবেশি অভিন্ন । অর্থাত্, যখন আমরা PRNG
1 এবং 6 এর মধ্যে একটি সংখ্যার জন্য জিজ্ঞাসা করি, তখন আমরা প্রতি 1 টি 2, 3, 4, 5 বা 6 পেয়েছি প্রায় এক ছয় ভাগ সময়, বীজ কী ছিল তা নির্বিশেষে।
আমি এই বিষয়টিকে বেশ কয়েকবার জোর দিতে চাই কারণ মনে হয় এটি নির্দিষ্ট মন্তব্যকারীদের বিভ্রান্ত করছে। পিআরএনজি বিতরণ কমপক্ষে দুটি উপায়ে সমান। প্রথমত, ধরুন আমরা কোনও নির্দিষ্ট বীজ বেছে নিই। আমরা প্রত্যাশা করব যে ক্রমটি PRNG(6), PRNG(6), PRNG(6)...
মিলিয়ন বার 1 এবং 6 এর মধ্যে সংখ্যার অভিন্ন বন্টন তৈরি করবে এবং দ্বিতীয়ত, আমরা যদি এক মিলিয়ন বিভিন্ন বীজ বেছে নিয়ে প্রতিটি বীজের জন্য PRNG(6)
একবার ডাকি , আবার আমরা 1 থেকে সংখ্যার অভিন্ন বিতরণ আশা করব 6. এই অপারেশনের পারেন জুড়ে PRNG এর একরূপতা আক্রমণ আমি বর্ণনা করছি সাথে প্রাসঙ্গিক নয় ।
এই প্রক্রিয়াটিকে ছদ্ম-এলোমেলো বলা হয় কারণ বাক্সটির আচরণটি আসলে সম্পূর্ণরূপে নির্বিচারক ; এটি 2 এক থেকে বেছে 32 সম্ভব বীজ উপর ভিত্তি করে আচরণে। এটি, একবার এটি বীজ হওয়ার পরে, অভিন্ন বন্টনের সাথে সংখ্যার ক্রমPRNG(6), PRNG(6), PRNG(6), ...
তৈরি করে , তবে সেই ক্রমটি পুরোপুরি বীজ দ্বারা নির্ধারিত হয়। কলের একটি প্রদত্ত ক্রম জন্য, বলছি, PRNG (52), PRNG (51) ... এবং ইত্যাদি, সেখানে মাত্র 2 হয় 32 সম্ভব সিকোয়েন্স। বীজটি মূলত আমাদের মধ্যে কোনটি চয়ন করে।
ডেক জেনারেট করার জন্য সার্ভার এখন একটি বীজ উত্পন্ন করে। (কিভাবে? আমরা ফিরে যে বিন্দু থেকে আসবো।) তারপর তারা কল PRNG(52)
, PRNG(51)
ইত্যাদি ডেক, আগে অনুরূপ তৈরি করতে।
আমি বর্ণিত আক্রমণটির জন্য এই সিস্টেমটি সংবেদনশীল। সার্ভারকে আক্রমণ করার জন্য আমরা প্রথমে আগে 0 দিয়ে বাক্সটির নিজস্ব কপি বীজ করে জিজ্ঞাসা করি PRNG(52)
এবং এটি লিখে রাখি । তারপরে আমরা 1 দিয়ে পুনরায় বীজ PRNG(52)
বর্ষণ করি , জিজ্ঞাসা করি এবং 2 32 -1 অবধি সমস্ত লিখে রাখি ।
এখন, পোকার সার্ভার যা ডেকে উত্পন্ন করতে PRNG ব্যবহার করছে তা কোনওভাবে বীজ উত্পন্ন করতে হবে। তারা কীভাবে তা করে তা বিবেচ্য নয়। তারা TRNG(2^32)
সত্যই এলোমেলো বীজ পেতে কল করতে পারে । অথবা তারা বীজ হিসাবে বর্তমান সময় নিতে পারে, যা মোটেও এলোমেলো নয়; আমি জানি আপনার সময় যতটা সময় হয়। আমার আক্রমণের বিষয়টি হ'ল এটি কিছু যায় আসে না, কারণ আমার কাছে আমার ডাটাবেস রয়েছে । আমি যখন আমার প্রথম কার্ডটি দেখি তখন সম্ভব 98% বীজ মুছতে পারি। আমি যখন আমার দ্বিতীয় কার্ডটি দেখি তখন আমি আরও 98% আরও মুছে ফেলতে পারি, এবং আরও অবশেষে অবধি আমি মুষ্টিমেয় সম্ভাব্য বীজের কাছে নামতে পারি এবং আপনার হাতে কী আছে তা উচ্চ সম্ভাবনা দিয়ে জেনে নিতে পারি।
এখন, আমি আবার জোর দিয়ে বলতে চাই যে এখানে অনুমানটি হ'ল আমরা যদি PRNG(6)
এক মিলিয়ন বার ফোন করি তবে আমরা প্রতিটি সংখ্যা প্রায় এক ছয় ভাগের সময় পেয়ে যাব । এই বিতরণটি (আরও বা কম) অভিন্ন , এবং যদি সেই বিতরণের অভিন্নতা আপনার পক্ষে যত্ন নেওয়া হয় তবে তা ঠিক। প্রশ্নটি হ'ল বিন্দুটি কি এমন অন্যান্য বিষয় রয়েছে PRNG(6)
যা আমরা বিতরণ করি? এবং উত্তর হ্যাঁ । আমরা অনির্দেশ্যতা সম্পর্কেও যত্নশীল ।
সমস্যাটি দেখার আরেকটি উপায় হ'ল যদিও মিলিয়ন কল বিতরণ ভাল PRNG(6)
হতে পারে, কারণ পিআরএনজি কেবল 2 32 সম্ভাব্য আচরণ থেকে বেছে নিচ্ছে , এটি প্রতিটি সম্ভাব্য ডেক তৈরি করতে পারে না। এটা শুধুমাত্র 2 তৈরি করতে পারেন 32 2 226 সম্ভব ডেকে; একটি ক্ষুদ্র ভগ্নাংশ সুতরাং সব ডেকের সেট উপর বিতরণ খুব খারাপ। তবে আবার, এখানে মৌলিক আক্রমণটি এর আউটপুটটির একটি ছোট নমুনা থেকে আমাদের অতীত এবং ভবিষ্যতের আচরণের সফলভাবে পূর্বাভাস দিতে সক্ষম হওয়ার উপর ভিত্তি করে PRNG
।
এটি ডুবে গেছে তা নিশ্চিত করার জন্য আমি এটি তৃতীয় বা চারবার বলি There এখানে তিনটি বিতরণ রয়েছে। প্রথমত, প্রক্রিয়াটির বিতরণ যা এলোমেলো 32-বিট বীজ উত্পাদন করে। যে পুরোপুরি, র্যান্ডম অনির্দেশ্য এবং অভিন্ন হতে পারে এবং হামলা এখনও কাজ করবে । দ্বিতীয়ত, এক মিলিয়ন কল বিতরণ PRNG(6)
। এটি পুরোপুরি অভিন্ন হতে পারে এবং আক্রমণটি এখনও কার্যকর হবে। তৃতীয়ত, সিউডো-এলোমেলো প্রক্রিয়া দ্বারা বর্ণিত ডেকগুলির বিতরণ আমি বর্ণনা করেছি। যে বিতরণ চূড়ান্ত; কেবলমাত্র আইআরএল সম্ভাব্য ডেকগুলির একটি ক্ষুদ্র ভগ্নাংশই বেছে নেওয়া যেতে পারে। আক্রমণটি আউটপুট সম্পর্কে আংশিক জ্ঞানের ভিত্তিতে PRNG এর আচরণের পূর্বাভাসের উপর নির্ভর করে ।
ASIDE: এই আক্রমণটির প্রয়োজন যে আক্রমণকারীটি PRNG দ্বারা ব্যবহৃত সঠিক অ্যালগরিদমটি কী তা জানতে বা অনুমান করতে সক্ষম হয়। তা বাস্তববাদী কিনা তা একটি উন্মুক্ত প্রশ্ন। তবে, কোনও সুরক্ষা সিস্টেম ডিজাইনের সময় আপনার আক্রমণকারীদের প্রোগ্রামের সমস্ত অ্যালগোরিদম জেনে থাকলেও আক্রমণগুলির বিরুদ্ধে সুরক্ষিত থাকতে আপনাকে অবশ্যই এটি নকশা করতে হবে । অন্য একটি উপায় রাখুন: সিস্টেমটি সুরক্ষিত হওয়ার জন্য কোনও সুরক্ষা ব্যবস্থার যে অংশটি অবশ্যই গোপন রাখতে হবে তাকে "কী" বলা হয়। আপনার গোপনীয়তা হিসাবে যে অ্যালগরিদম আপনি ব্যবহার করছেন তার সুরক্ষার জন্য যদি আপনার সিস্টেম নির্ভর করে তবে আপনার কীতে সেই অ্যালগোরিদম রয়েছে । এটি একটি অত্যন্ত দুর্বল অবস্থান হতে!
সরানো.
এখন ধরা যাক আমাদের একটি তৃতীয় ম্যাজিক বক্স লেবেলযুক্ত রয়েছে CPRNG
। এটি একটি ক্রিপ্টো শক্তি সংস্করণ PRNG
। এটি 32-বিট বীজের পরিবর্তে 256-বিট বীজ লাগে। এটি PRNG
সেই সম্পত্তির সাথে ভাগ করে নেয় যা বীজ 2 256 সম্ভাব্য আচরণগুলির মধ্যে একটি থেকে পছন্দ করে। এবং আমাদের অন্যান্য মেশিনগুলির মতো এরও সম্পত্তি রয়েছে যে CPRNG(n)
1 এবং n এর মধ্যে ফলাফলের অভিন্ন বন্টন তৈরি করতে প্রচুর সংখ্যক কল রয়েছে : প্রতিটি সময় 1 / n হয়। আমরা কি এর বিরুদ্ধে আমাদের আক্রমণ চালাতে পারি?
আমাদের আসল আক্রমণটির জন্য আমাদের বীজ থেকে শুরু করে 32 টি ম্যাপিং সংরক্ষণ করতে হবে PRNG(52)
। তবে 2 256 অনেক বড় সংখ্যা; এটি CPRNG(52)
বহুবার চালানো এবং ফলাফলগুলি সংরক্ষণ করা সম্পূর্ণরূপে অপারগ ।
তবে ধরুন , বীজ সম্পর্কে একটি সত্যকে মূল্যবান করে তোলার অন্য কোনও উপায় আছে CPRNG(52)
? আমরা এখন পর্যন্ত বেশ বোবা হয়েছি, সমস্ত সম্ভাব্য সংমিশ্রণকে কেবল জোর করে-জোর করে। আমরা কী যাদু বাক্সের ভিতরে নজর রাখতে পারি, কীভাবে এটি কাজ করে তা নির্ধারণ করতে এবং আউটপুটের ভিত্তিতে বীজ সম্পর্কে তথ্যগুলি অনুমান করতে পারি?
না। বিবরণটি ব্যাখ্যা করতে খুব জটিল, তবে সিপিআরএনজিগুলি চতুরতার সাথে ডিজাইন করা হয়েছে যাতে আউটপুটের প্রথম আউটপুট থেকে বা কোনও উপসেট থেকে বীজ সম্পর্কে কোনও দরকারী সত্যকে নির্ধারণ করা অনর্থ্য হয়, যত বড়ই হোক না কেন ।CPRNG(52)
ঠিক আছে, সুতরাং এখন ধরা যাক সার্ভার CPRNG
ডেক উত্পন্ন করতে ব্যবহার করছে। এটি একটি 256 বিট বীজ প্রয়োজন। কীভাবে এটি বীজ পছন্দ করে? যদি এটি কোনও আক্রমণকারী ভবিষ্যদ্বাণী করতে পারে এমন কোনও মান চয়ন করে তবে হঠাৎ আক্রমণটি আবার কার্যকর হয় । আমরা যদি 256 টি সম্ভাব্য বীজের মধ্যে এটি নির্ধারণ করতে পারি , তার মধ্যে কেবলমাত্র চার বিলিয়নই সার্ভার দ্বারা নির্বাচিত হওয়ার সম্ভাবনা রয়েছে, তবে আমরা আবার ব্যবসায়ে ফিরে আসছি । আমরা এই আক্রমণটিকে আবার মাউন্ট করতে পারি, কেবলমাত্র সংখ্যায় কম বীজ তৈরি করা সম্ভব যা সম্ভবত উত্পাদিত হতে পারে।
256-বিট সংখ্যাটি সমানভাবে বিতরণ করা হয়েছে - তা নিশ্চিত করার জন্য সার্ভারের কাজ করা উচিত - অর্থাৎ, প্রতিটি সম্ভাব্য বীজ 1/2 256 এর সম্ভাব্যতার সাথে বেছে নেওয়া হয় । মূলত সার্ভারের TRNG(2^256)-1
জন্য বীজ উত্পন্ন করতে কল করা উচিত CPRNG
।
আমি যদি সার্ভারটি হ্যাক করতে পারি এবং এটিতে বীজ চয়ন করা হয়েছে তা দেখতে পীর করতে পারি? সেক্ষেত্রে আক্রমণকারী সিপিআরএনজির সম্পূর্ণ অতীত এবং ভবিষ্যত জানে । সার্ভারের লেখককে এই আক্রমণ থেকে রক্ষা করা দরকার! (অবশ্যই যদি আমি এই আক্রমণটিকে সফলভাবে মাউন্ট করতে পারি তবে আমি সম্ভবত সরাসরি আমার ব্যাংক অ্যাকাউন্টে অর্থটি সরাসরি ট্রান্সফার করতে পারি, সুতরাং এটি তেমন আকর্ষণীয় নয় Point সত্যই এলোমেলোভাবে 256-বিট সংখ্যাটি অনুমান করা খুব সুন্দর arn
প্রতিরক্ষা-গভীরতা সম্পর্কে আমার আগের বিষয়টিতে ফিরতে: 256-বিট বীজ এই সুরক্ষা ব্যবস্থার মূল চাবিকাঠি । সিপিআরএনজির ধারণা হ'ল কী সুরক্ষিত থাকবে ততক্ষণ সিস্টেমটি সুরক্ষিত থাকবে ; এমনকি যদি অ্যালগরিদম সম্পর্কে অন্যান্য প্রতিটি তথ্য জানা থাকে তবে যতক্ষণ আপনি কীটি গোপন রাখতে পারবেন ততক্ষণ প্রতিপক্ষের কার্ডগুলি অনাকাঙ্ক্ষিত।
ঠিক আছে, সুতরাং বীজটি গোপন এবং সমানভাবে বিতরণ করা উচিত কারণ এটি যদি না হয় তবে আমরা আক্রমণটি মাউন্ট করতে পারি। আমাদের অনুমান দ্বারা আউটপুট বিতরণ CPRNG(n)
অভিন্ন। সমস্ত সম্ভাব্য ডেকের সেট উপর বিতরণ সম্পর্কে কি?
আপনি বলতে পারেন: সিপিআরএনজি দ্বারা 2 টি 256 সম্ভাব্য সিকোয়েন্স আউটপুট রয়েছে তবে কেবলমাত্র 226 টি সম্ভাব্য ডেক রয়েছে। সুতরাং ডেকের চেয়ে আরও সম্ভাব্য ক্রম রয়েছে, তাই আমরা ভাল; প্রতিটি সিস্টেমে-আইআরএল ডেক এখন এই সিস্টেমে সম্ভব (উচ্চ সম্ভাবনার সাথে)। এবং এটি ছাড়া একটি ভাল যুক্তি ...
2 226 কেবল 52 এর কাছাকাছি is এটি ভাগ করুন। 2 256/52 ! সম্ভবত পুরো সংখ্যা হতে পারে না কারণ একটি জিনিসের জন্য, 52! 3 দ্বারা বিভাজ্য কিন্তু দুটি শক্তি হয় না! যেহেতু এটি পুরো সংখ্যা নয় এখন আমাদের পরিস্থিতি রয়েছে যেখানে সমস্ত ডেকগুলি সম্ভব , তবে কিছু ডেকে অন্যের চেয়ে বেশি সম্ভাবনা রয়েছে ।
যদি এটি পরিষ্কার হয় না, তবে ছোট সংখ্যার সাথে পরিস্থিতি বিবেচনা করুন। ধরুন আমাদের কাছে তিনটি কার্ড রয়েছে, এ, বি এবং সি। ধরুন আমরা একটি পিআরএনজি ব্যবহার করেছি--বিট বীজ সহ, তাই সম্ভাব্য বীজ রয়েছে। PRNG(3)
বীজের উপর নির্ভর করে 256 টি সম্ভাব্য আউটপুট রয়েছে ; তাদের এক তৃতীয়াংশ এ হওয়ার কোনও উপায় নেই, তাদের এক তৃতীয়াংশ বি এবং তাদের এক তৃতীয়াংশ সি হবে কারণ 256 টি 3 দ্বারা সমানভাবে বিভাজ্য নয় them তাদের মধ্যে একটির দিকে একটি ছোট পক্ষপাত থাকতে হবে।
একইভাবে, 52 টি সমানভাবে 2 256 তে বিভক্ত হয় না , তাই প্রথম কার্ডটি বেছে নেওয়া এবং অন্যদের থেকে দূরে একটি পক্ষপাতিত্ব হিসাবে কিছু কার্ডের প্রতি কিছু পক্ষপাত থাকতে হবে।
32-বিট বীজ সহ আমাদের মূল সিস্টেমে একটি বিশাল পক্ষপাত ছিল এবং সম্ভাব্য ডেকের সিংহভাগ কখনও উত্পাদিত হয়নি। এই সিস্টেমে সমস্ত ডেক উত্পাদন করা যায়, তবে ডেকের বিতরণ এখনও ত্রুটিযুক্ত । কিছু ডেক অন্যদের তুলনায় খুব সামান্য সম্ভাবনা থাকে।
এখন প্রশ্ন হচ্ছে: আমরা কি এই ত্রুটির ভিত্তিতে আক্রমণ করব? এবং উত্তর অনুশীলন হয়, সম্ভবত না । সিপিআরএনজিগুলি এমনভাবে নকশা করা হয়েছে যাতে বীজটি সত্যিকারের এলোমেলো হয় তবে এটি এবং এর মধ্যে পার্থক্যটি বলা গুনগতভাবে অক্ষম ।CPRNG
TRNG
ঠিক আছে, সুতরাং এর যোগফল দেওয়া যাক।
সিউডোর্যান্ডম সংখ্যা এবং সত্যই এলোমেলো সংখ্যার পার্থক্য কীভাবে?
তারা যে পরিমাণ পূর্বাভাসের প্রদর্শন করে তা তাদের মধ্যে পৃথক।
- সত্যই এলোমেলো সংখ্যা অনুমানযোগ্য নয়।
- সমস্ত সিউডো-এলোমেলো সংখ্যা অনুমানযোগ্য যদি বীজ নির্ধারণ বা অনুমান করা যায় or
কেন পার্থক্য গুরুত্বপূর্ণ?
কারণ এমন অ্যাপ্লিকেশন রয়েছে যেখানে সিস্টেমটির সুরক্ষা অনির্দেশ্যতার উপর নির্ভর করে ।
- যদি প্রতিটি কার্ড চয়ন করতে কোনও টিআরএনজি ব্যবহার করা হয় তবে সিস্টেমটি অনুপলব্ধ।
- যদি কোনও সিপিআরএনজি প্রতিটি কার্ড চয়ন করতে ব্যবহার করা হয় তবে বীজটি অনির্দেশ্য এবং অজানা উভয় ক্ষেত্রে সিস্টেম নিরাপদ।
- যদি একটি ছোট বীজের জায়গার সাথে একটি সাধারণ পিআরএনজি ব্যবহার করা হয় তবে বীজটি অনির্দেশ্য বা অজানা কিনা তা নির্বিশেষে সিস্টেমটি নিরাপদ নয়; আমি বর্ণিত ধরণের আক্রমণাত্মক আক্রমণগুলির জন্য অল্প পরিমাণে বীজযুক্ত স্থান সংবেদনশীল।
পার্থক্যটির কি পিআরএনজির আউটপুট বিতরণের সাথে কিছু যুক্ত রয়েছে?
বিতরণ বা জন্য উহার অভাব একরূপতা পৃথক কল করার RNG(n)
আক্রমণের আমি বর্ণনা করেছি প্রাসঙ্গিক নয়।
যেমনটি আমরা দেখেছি, উভয়ই PRNG
এবং CPRNG
সম্ভাব্য সকল ডেকের পৃথক ডেক বেছে নেওয়ার সম্ভাবনার দুর্বল বিতরণ করে। PRNG
যথেষ্ট খারাপ, তবে দুটো একসাথে সমস্যা আছে।
আরেকটি প্রশ্ন:
টিআরএনজি যদি সিপিআরএনজির চেয়ে আরও ভাল হয়, যা পিআরএনজির চেয়ে আরও ভাল হয় তবে কেন কেউ সিপিআরএনজি বা পিআরএনজি ব্যবহার করে?
দুটি কারণ।
প্রথম: ব্যয়। টিআরএনজি ব্যয়বহুল । সত্যিকারের এলোমেলো সংখ্যা তৈরি করা কঠিন। সিপিআরএনজিগুলি বীজের জন্য টিআরএনজি-তে কেবল একটি কল সহ নির্বিচারে অনেক কলের জন্য ভাল ফলাফল দেয়। নীচের দিকটি অবশ্যই আপনাকে সেই বীজটিকে একটি গোপন রাখতে হবে ।
দ্বিতীয়: কখনও কখনও আমরা অনুমানযোগ্যতা চাই এবং আমাদের যত্ন নেওয়া সমস্ত হ'ল ভাল বিতরণ। আপনি যদি পরীক্ষার স্যুটটির প্রোগ্রাম ইনপুট হিসাবে "এলোমেলো" ডেটা তৈরি করে থাকেন এবং এটি একটি ত্রুটি দেখায়, তবে চমৎকার হবে যে পরীক্ষার স্যুটটি চালিয়ে আবারও বাগটি তৈরি করা যায়!
আমি আশা করি এটি এখন আরও স্পষ্ট।
অবশেষে, আপনি যদি এটি উপভোগ করেন তবে আপনি এলোমেলোতা এবং আদেশের বিষয় সম্পর্কে আরও কিছু পড়া উপভোগ করতে পারেন: