এভিআর র্যান্ডম নম্বর জেনারেটর


12

আমি টিআই ( slaa338 ) এর একটি অ্যাপনোট পড়েছি যা এলোমেলো সংখ্যার ("সিউডো" এর বিপরীতে) উত্পাদনের জন্য একটি কৌশল বর্ণনা করে। এই লক্ষ্য অর্জনের জন্য এটি এমএসপি ৪৩০ এর কিছুটা বিদেশী ক্লক সাবসিস্টেমটি ব্যবহার করে। "সত্যিকারের" এলোমেলো সংখ্যা তৈরির জন্য এমন কোনও কৌশল সম্পর্কে কী জানেন যে একটি AVR (আমি বিশেষত এক্সমেগার প্রতি আগ্রহী) এর উপর প্রয়োগ করা যেতে পারে?


1
সোয়েডো এলোমেলোভাবে ডাইস গেমসের জন্য কাজ করে। আমি মনে করি তিনি ক্রিপ্টোগ্রাফিকভাবে সুরক্ষিত চান।
কর্টুক

2
আপনি যে অ্যাপ্লিকেশনটি এবং / বা আপনার প্রয়োজনীয় এলোমেলোভাবে ডিগ্রি দিতে পারেন তার কোনও ইঙ্গিত দিতে পারেন? যদি এটি ক্রিপ্টোগ্রাফির জন্য হয় তবে কেবল বীজের গুণমান ছাড়াও অতিরিক্ত বিবেচনা রয়েছে। ইতিমধ্যে করা কয়েকটি পরামর্শ - যেমন বিভিন্ন ধরণের পরিবেশগত উপকরণগুলির নমুনা তৈরি করা আপনার প্রয়োজনীয়তার উপর ভিত্তি করে উপযুক্ত হতে পারে বা নাও পারে।
উইন্ডেল ওসকে

উত্তর:


6

এক্সমেগা ব্যবহার করতে আপনি কতটা খারাপ? যদি ক্রিপ্টো এবং এলোমেলো সংখ্যা জেনারেশন আপনার প্রকল্পের একটি বড় অংশ হয় তবে আটমেলের সিকিউরএভিআর সিরিজে একটি হার্ডওয়্যার র্যান্ডম নম্বর অন্তর্নির্মিত রয়েছে এবং এটি ক্রিপ্টোগ্রাফিক অ্যাপ্লিকেশনগুলির জন্য ডিজাইন করা হয়েছে।

নির্বিশেষে, আমি সন্দেহ করি যে আপনি একটি এলোমেলো বীজ উত্স পাবেন যার ভাল বন্টন রয়েছে। আপনি এটি ছদ্ম র্যান্ডম সংখ্যা জেনারেটরের মাধ্যমে কয়েকবার চালাতে চাইবেন যতক্ষণ আপনি প্রতিবার একটি ভিন্ন বীজ দিয়ে শুরু করেন, এটি আপনাকে এলোমেলো সংখ্যার একটি দুর্দান্ত সেট দেবে। একটি এলজিসি হ'ল একটি দ্রুত এবং সহজ ছদ্ম র্যান্ডম জেনারেটর:

static unsigned long Seed; 

/* Call before first use of NextVal */
unsigned long InitSeed()
{
   //Your code for random seed here

   // Correct distribution errors in seed
   NextVal();
   NextVal();
   NextVal();
   return NextVal();
}

 /* Linear Congruential Generator 
  * Constants from  
  * "Numerical Recipes in C" 
  * by way of 
   * <http://en.wikipedia.org/wiki/Linear_congruential_generator#LCGs_in_common_use>
   * Note: Secure implementations may want to get uncommon/new LCG values
  */
unsigned long NextVal()
{
  Seed=Seed*1664525L+1013904223L;
  return Seed;
} 

1
এটি দুর্দান্ত, আমি সিকিওরএভিআর লাইনটি উপলব্ধি করতে পারি নি, পয়েন্টারের জন্য ধন্যবাদ!
ভিসাতচু

বিটিডাব্লু: আপনার যদি সত্যিই সুরক্ষা প্রয়োজন হয় তবে আমি যে সহজ, কার্যকর এবং দ্রুত এলসিজি পদ্ধতি উপস্থাপন করেছি তা আপনি যা চান তা নয়: অনেক এলসিজি ভেঙে যেতে পারে; কেবল একটি সারিতে ২-৩ টি মান পান এবং পরিচিত কনস্ট্যান্টের সেট সহ একটি এলসিজি জেনারেটরে প্লাগ করুন - এতে উইকিপিডিয়া পৃষ্ঠায় সমস্ত কিছু অন্তর্ভুক্ত থাকবে। একটি মিলের প্যাটার্ন আক্রমণকারীটিকে পরবর্তী সংখ্যাটি কী হবে তা অনুমান করতে দেয়। ধ্রুবকগুলি কিছুই থেকে নেই, তা নির্ধারণ করা সম্ভব (তবে শক্ত)।
কেভিন ভার্মির

1
@reerevnivek এফওয়াইআই, আতেল তাদের সিকিওরএভিআর লাইন বিক্রি করছে ... আপনি যদি ক্রিপ্টোগ্রাফিক জিনিসগুলি চান যা এভিআর থেকে বিকাশের পরিবেশের ক্ষেত্রে সম্পূর্ণ ভিন্ন বলগেম হয় তবে তারা তাদের এআরএম-ভিত্তিক 32-বিট প্রসেসরের প্রস্তাব দেয়। তাদের উপর সত্যিকারের আরএনজির সাথে একটি দম্পতি রয়েছে যদিও, সম্ভবত আমি কোনও দিন তাদের সাথে খেলব।
ভিসাতচু

7

এডিসিকে একটি হার্ডওয়্যার শব্দের উত্সের সাথে সংযুক্ত করুন এবং প্রয়োজনে এলোমেলো সংখ্যাগুলি "সাদা" করতে সফ্টওয়্যারটি ব্যবহার করুন।

এখানে একটি এভিআর ভিত্তিক প্রকল্প এটি করে: লিওনের মিনি পোর্টেবল র‌্যান্ডম নম্বর জেনারেটর (এমপিআরএনজি)

ক্রিপ্টোগ্রাফিকভাবে এটি কতটা সুরক্ষিত হওয়া দরকার তার উপর নির্ভর করে আপনি বাহ্যিক হার্ডওয়্যারের পরিবর্তে গ্র্যান্ডেড এনালগ ইনপুট বা " অভ্যন্তরীণ তাপমাত্রা সংবেদক " এর শব্দটি আপনার এলোমেলো বীজ হিসাবে ব্যবহার করতে পারেন ।

আপডেট : আমি পরে আরডুইনোর জন্য একটি প্রোগ্রাম লিখেছিলাম যা চিপের টাইমারগুলিকে একটি এনট্রপি উত্স হিসাবে ব্যবহার করে (এডিসি অকেজো হয়ে উঠল কারণ শোরগোল বিটগুলি কেটে ফেলা হয়েছে), এবং এটি এন্ট্রপি লাইব্রেরি তৈরির অনুপ্রেরণা জাগিয়ে তোলে

উভয় ক্ষেত্রে, এলোমেলোতা উদাহরণস্বরূপ, তাপমাত্রার মান থেকে আসে না, যা কেবল ধীরে ধীরে পরিবর্তিত হয়, তবে কমপক্ষে উল্লেখযোগ্য বিট থেকে , যা একের পরেরটিতে পড়তে এলোমেলোভাবে পরিবর্তিত হয়। আমি প্রতি বিট আউটপুট, বিট শিফটিং এবং পূর্ববর্তী পঠনের সাথে এক্সওরিংয়ের জন্য একাধিকবার মানটি পড়ি। একটি অসম্পর্কিত বিট সহ সত্যই এলোমেলো বিটটি জোর করা এলোমেলোতা সংরক্ষণ করে , তাই এলোমেলোতা সমস্ত বিটের চারপাশে ছড়িয়ে যায় এবং এটি সত্য সাদা শব্দে পরিণত হয়। আপনার বিট রেট খুব বেশি হবে না, যদিও আপনি অধিগ্রহণের সময় বা টাইমার চক্র প্রতি এক বিট আউটপুট পান। টাইমার পদ্ধতিতে, আমি প্রায় bit৪ বিট / গুলি পাচ্ছিলাম।


5
একটি (কম-বেশি সত্য) আরএনজি, "-পিআরএনজি" নামকরণ দুর্ভাগ্যজনক।
নিক টি

এডিসির জন্য +1, আমি মনে করি আপনি সম্ভবত এমন কোনও কোনও সন্ধান করছেন যা তাপমাত্রা সংবেদকের চেয়ে বেশি ফ্রিকোয়েন্সিতে পরিবর্তিত হয়।
অক্টোপাস

1
@ অ্যাক্টপাস আচ্ছা আপনি তাপমাত্রাটি এন্ট্রপি উত্স হিসাবে ব্যবহার করছেন না, আপনি কোলাহলকারী সর্বনিম্ন তাৎপর্যপূর্ণ বিটগুলি ব্যবহার করছেন, যা তাপমাত্রা স্থির থাকলেও এডিসি পড়ার সময় এলোমেলোভাবে পরিবর্তিত হবে। আমি যখন আরডিনোতে পরীক্ষা করেছি, যদিও এই বিটগুলি সর্বদা 0 ছিল, সুতরাং এটি সম্ভবপর ছিল না এবং এর পরিবর্তে আমাকে টাইমার প্রকরণ ব্যবহার করতে হয়েছিল। অন্য একটি এমসইউতে আমি সেই পদ্ধতিটি ব্যবহার করেছিলাম, এডিসির এলএসবি গুলো শোরগোল এবং ব্যবহারযোগ্য।
এন্ডোলিথ

3

একটি এলোমেলো বীজ উত্পাদন করার জন্য অন্য কৌশল, একটি বাহ্যিক ইভেন্ট অবধি ঘড়ির চক্র সংখ্যা গণনা করা। উদাহরণস্বরূপ, যদি এটি কোনও ব্যক্তি কোনও ডিভাইস ব্যবহার করেন তবে তিনি 'গো' বোতামটি টিপুন না হওয়া অবধি ঘড়ির চক্রের সংখ্যা গণনা করুন এবং এলোমেলো বীজ হিসাবে ব্যবহার করুন।


4
পার্শ্ব চ্যানেল আক্রমণগুলির বিরুদ্ধে এটি খুব বেশি সুরক্ষিত নাও হতে পারে কারণ তারা একটি ডিভাইসের নিয়ন্ত্রণ সুরক্ষার মাধ্যমে ভেঙে যেতে পারে তবে সমস্ত ক্রিপ্টোগ্রাফির মতোই অ্যাপ্লিকেশন সম্ভাব্যতা নির্ধারণ করে।
কর্টুক

3

একই ক্রম দিয়ে পুনরায় আরম্ভ করবেন না তা নিশ্চিত হওয়ার জন্য, আমি ইপ্রোমে স্বম বাইট ব্যবহার করি:

#include <avr/eeprom.h>
#include <stdlib.h> // rand

u16  EEMEM randinit; 

int main(void) {
        srand(eeprom_read_word(&randinit));
        eeprom_write_word(&randinit,rand());
        [...]
 }

এটি বেশ ভাল এলোমেলো দেয় এবং প্রোগ্রাম / মেমরির জন্য খুব বেশি খরচ হয় না।


2
এটি প্রতিবার বাইট 0 পড়ে। আপনার কাছে কী প্রমাণ রয়েছে যে এই বাইটটি এলোমেলো? যদি তা হয় তবে এটি দুর্দান্ত কৌশল!
কেভিন ভার্মির

এই শব্দটি (আসলে 0 এবং 1 বাইট) এলোমেলো হবে, কারণ প্রতিটি প্রারম্ভকালে আমি এর বিষয়বস্তু দিয়ে এলোমেলো জেনারেটরটি আরম্ভ করি। তারপরে আমি এটিকে একটি নতুন র্যান্ড () দিয়ে আপলোড করব। সুতরাং পরের আরম্ভটি বর্তমানের থেকে এলোমেলো দেখবে ... এবং আরও কিছু ... তবে আমি যদি র‌্যান্ডিনেটটি ffff (বা 0000?) এ পুনরায় সেট করি তবে আমারও একই র‌্যাণ্ডিনিট ক্রম থাকবে! সুতরাং এটি নিখুঁত নয়। ফিউজ সম্পর্কে কে সতর্কতা ভুলে গিয়েছিলাম যারা * .ইহেক্স;) আপলোড করার সময় ইপ্রোমটি মুছে দেয়
jojo l'abricot

3

আমি একটি লাইব্রেরি তৈরি করেছি যা আরডুইনোর জন্য মূল নকশা করা হয়েছে এমন সময় একটি সি ++ বাস্তবায়নে ক্লাসের পাশাপাশি অ্যাভেরিতে জি ++ ব্যবহার করে কাজ করে, প্রকৃতপক্ষে এটি সম্প্রতি এআরএম আর্কিটেকচারেও পোর্ট করা হয়েছে।

এটি ওয়াচডগ টাইমার এবং সিস্টেম ঘড়ির মধ্যে জিটারটি ব্যবহার করে এবং বিভিন্ন চিপগুলির কয়েকটিতে পরীক্ষা করা হয়েছে (উইকির পৃষ্ঠায় নথিভুক্ত)

http://code.google.com/p/avr-hardware-random-number-generation/wiki/WikiAVRentropy


2

আপনি কি এলোমেলো সাeedদ () এর মতো কিছু ব্যবহার করে দেখেছেন ? - আরডুইনো আইডিইতে ব্যবহৃত

আপনি এটেল এভিআর তে একটি ফ্লোটিং (ফ্রি) অ্যানালগ পিনের নমুনা করতে এই ফাংশনটি ব্যবহার করতে পারেন, এটি সিউডো এলোমেলো সংখ্যা ক্রিয়া - এলোমেলো () এর জন্য একটি স্বেচ্ছাসেবী সূচনা পয়েন্ট তৈরি করতে মানটি ব্যবহার করে ।

এলোমেলো () দ্বারা তৈরি করা মানটি সিউডো এলোমেলো সংখ্যা হতে পারে - তবে এলোমেলো শুরুর বিন্দুটি এলোমেলোভাবে তৈরি করা (র্যান্ডমসেইড) দ্বারা যতটা পেতে পারে ততই আসল একটি নম্বর / মান হওয়া উচিত।


2
এনালগ পিনের মতো বিষয়গুলির নমুনা এড়ানো এলোমেলো কাছাকাছি, তবে এর এমনকি বিতরণও হবে না। তবে কয়েকবার এলোমেলোভাবে বীজ চালান, এবং এটি হবে।
কেভিন ভার্মির

.... সিউডো এলোমেলো নম্বর জেনারেটরের মাধ্যমে কয়েকজন ... <- কীভাবে এটি নিখোঁজ হয়েছিল? এনটিএস: প্রথমে মস্তিষ্ক জড়িত করুন, তারপরে আঙ্গুলগুলি।
কেভিন ভার্মির

ঠিক - এটি এনক্রিপশন / সুরক্ষা ইত্যাদির জন্য ব্যবহার করা সর্বাধিক সুরক্ষিতও নয় তবে এটি আপনাকে জেনারেটরি সংগীত বা ডাইস গেমসের মতো কোনও কিছুর জন্য একটি দুর্দান্ত এলোমেলো নম্বর দেবে। এটি প্রয়োগ করা খুব ভাল এবং সহজ :)
জিম

1

এভিআর হার্ডওয়্যার দিয়ে কীভাবে এটি অর্জন করা যায় সে সম্পর্কে একটি কাগজ রয়েছে। এটিতে ক্লক জিটারের উপর নির্ভর করা জড়িত। মূলত, আপনি একটি পৃথক টাইমারের নীচের বিটগুলির একটি পৃথক স্বতন্ত্র ক্লক উত্স বন্ধ করে রাখার জন্য একটি ঘড়ি উত্সের ভিত্তিতে টাইমার বিঘ্ন ব্যবহার করেন। দুটি ঘড়ির সাথে কিছু এলোমেলো ঝাঁকুনি যুক্ত থাকবে এবং নমুনাটি পুরোপুরি পর্যায়ক্রমিক হবে না।

আমি একটি এসটিএম 32 মাইক্রোকন্ট্রোলারে এটির ধারণার একটি ছোট প্রমাণ করেছি, কোডটি এখানে গিথুবে রয়েছে । এলোমেলোকরণ পরীক্ষার স্যুটগুলির একটি সেটের উপর ভিত্তি করে এটি কিছু ভাল ফলাফল পেয়েছে।

আমার মতে, আমি মনে করি এটি একটি এডিসি দিয়ে ভাসমান পিনের নমুনা দেওয়ার চেয়ে ভাল যা আক্রমণ করা অত্যন্ত সহজ (পিনটি মাটিতে বেঁধে রাখুন এবং আপনার নম্বরটি এত বেশি এলোমেলো নয়!)। আমি নিশ্চিত যে ক্লক জিটার ভিত্তিক আরএনজি হস্তান্তর করার উপায় আছে তবে এটি আমাকে কিছুটা ভাল অনুভব করতে পারে যে আমি অন-চিপ অভ্যন্তরীণ ঘড়ির উত্সের ভিত্তিতে এই খাঁটি ভিত্তিতে করতে পারি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.