একটি হার্ডওয়্যার র্যান্ডম-সংখ্যা জেনারেটর উন্নত করুন


53

আপনার কাজটি আপনার চারপাশে থাকা সমস্ত হার্ডওয়্যার সহ একটি হার্ডওয়্যার এলোমেলো সংখ্যা জেনারেটর তৈরি করা।

চ্যালেঞ্জ

নিম্নলিখিত বৈশিষ্ট্য সহ একটি প্রোগ্রাম লিখুন:

  1. এটি হয় 0বা 1(এবং অন্য কিছুই) মুদ্রণ করে ।
  2. আউটপুটটি কেবলমাত্র কম্পিউটারের অভ্যন্তরীণ অবস্থার উপর নির্ভর করে কোনও শারীরিক প্রক্রিয়ার উপর নির্ভর করে।
  3. পরবর্তী রানগুলির আউটপুটগুলির সাথে কোনও সম্পর্ক নেই (এক মিনিট দূরে)।
  4. কোনও বাস্তব প্রচেষ্টা দিয়ে আউটপুট অনুমানযোগ্য নয়।
  5. আউটপুট হওয়ার সম্ভাবনা 00.2 থেকে 0.8 এর মধ্যে রয়েছে।
  6. এটি এক মিনিটেরও কম সময়ে যুক্তিসঙ্গত উচ্চ সম্ভাবনার সাথে চলে।

আপনার প্রোগ্রামটিতে কেন এই বৈশিষ্ট্য রয়েছে তা আপনাকে অবশ্যই ব্যাখ্যা করতে হবে, যদি তা স্পষ্ট না হয়।

স্পষ্টতা এবং বিধিনিষেধ

নিম্নলিখিতটি জনপ্রিয়তার প্রতিযোগিতার জন্য প্রচুর পরিমাণে বিধিনিষেধের মতো বলে মনে হতে পারে তবে প্রোগ্রামটি প্রশ্নের চেতনার মধ্যে থেকে যায়, কিছুটা কাজ করে এবং সম্পূর্ণ ওভারকিল হওয়ার কারণে জনপ্রিয় তবে সমাধানগুলি এড়িয়ে চলেন তা নিশ্চিত করার জন্য এটি সমস্ত কিছু যা অতিমাত্রায় ওভারকিল হওয়ার কারণে চূড়ান্তভাবে হয় বরং বিরক্তিকর.

  • সিস্টেমের সময়টি কোনও শারীরিক প্রক্রিয়া হিসাবে গণনা করা হয় না।
  • আপনি 8 ইঞ্চি ফ্লপি-ডিস্ক ড্রাইভ থেকে শুরু করে ইউএসবি রকেট লঞ্চার থেকে হেডফোন পর্যন্ত আপনার পছন্দ মতো যে কোনও গ্রাহক-গ্রেডের হার্ডওয়্যার ব্যবহার করতে পারেন - যদি না তা এলোমেলো সংখ্যা তৈরির উদ্দেশ্যে না হয়। হার্ডওয়ারের একটি অংশটি গ্রাহক-গ্রেড, যদি এটি ভর উত্পাদিত হয় এবং 1000 costs / € / than এর চেয়ে কম হয়, তাই আপনি রেডিও টেলিস্কোপগুলি, সিইআরএন, এমআরআই বা আপনার বাড়িতে নির্মিত কণা আবিষ্কারক ব্যবহার করতে পারবেন না use
  • আপনি কেবলমাত্র হার্ডওয়্যারটির অবস্থা এবং প্রান্তিককরণের উপর সর্বাধিক প্রাথমিক অনুমানগুলি তৈরি করতে পারেন যেমন স্যুইচ অন করা (যদি এটিতে পাওয়ার স্যুইচ থাকে) এবং সঠিকভাবে ইনস্টল ও কার্যকরী হয়ে থাকে। উদাহরণস্বরূপ আপনি একটি সিডি ড্রাইভ ধরে নিতে পারেন যা সাধারণত কোনও ডিস্ক পড়তে সক্ষম হয় এবং জ্যাম না হয় তবে আপনি এটিকে উন্মুক্ত বা বন্ধ বলে ধরে নিতে বা ডিস্ক ধারণ করতে পারবেন না। অন্য একটি উদাহরণে আপনি দুটি বিশেষ অংশের হার্ডওয়্যারকে একটি বিশেষ ইন্টারঅ্যাকশনের জন্য প্রান্তিককরণের জন্য ধরে নিতে পারবেন না, তবে আপনি সেগুলি একই ঘরে ধরে নিতে পারবেন।
  • আপনি হার্ডওয়্যারটি আপনার পছন্দ মতো যে কোনও রাজ্যে রেখে দিতে পারেন, যদি না আপনি এটিটি ভাঙেন।
  • আপনি হার্ডওয়ারটিকে প্রাকৃতিক পরিবেশে ধারণ করতে এবং নিতে পারেন, তবে এর চেয়ে বেশি কিছুই নয়। উদাহরণস্বরূপ আপনি ধরে নিতে পারেন যে হার্ডওয়্যারটি তরল হিলিয়ামের ট্যাঙ্কে বা একটি অত্যন্ত শব্দ- এবং হালকারোধী ঘরে বা কোনও স্থানের মধ্যে অবস্থিত নয়। তবে, আপনি কেবলমাত্র মূল প্রচেষ্টার সাথে এড়ানো যায় না এমনগুলি বাদে কোনও শব্দ- এবং আলোকসজ্জা উপস্থিত থাকার কথা ধরে নিতে পারবেন না।
  • আপনার প্রোগ্রামটি আপনার পছন্দসই একটি অ-রহস্যজনক অপারেটিং সিস্টেম সহ একটি স্ট্যান্ডার্ড ডেস্কটপ কম্পিউটারে চলতে হবে। আপনি এমন কোনও সফ্টওয়্যার নিয়োগ করতে পারেন যা বিশেষভাবে এলোমেলো-সংখ্যা তৈরির জন্য ডিজাইন করা হয়নি।
  • আপনি ইন্টারনেট অ্যাক্সেস ধরে নিতে পারবেন না।
  • আপনি মানুষকে উপস্থিত বা অনুপস্থিত হিসাবে ধরে নিতে পারবেন না, তবে আপনি ধরে নিতে পারেন যে কেউ ইচ্ছাকৃতভাবে আপনার প্রোগ্রামের সাথে হস্তক্ষেপ করবে না, যেমন ম্যানুয়ালি কোনও ফ্যান থামানো বা এমন কোনও প্রোগ্রাম চালানো যা যতক্ষণ সম্ভব মাইক্রোফোনটি স্যুইচ করা ছাড়া কিছুই করে না।
  • আপনি কেবল সফ্টওয়্যার সেটিংস সম্পর্কে সর্বাধিক প্রাথমিক অনুমানগুলি করতে পারেন। উদাহরণস্বরূপ, আপনি ড্রাইভারগুলি ইনস্টল এবং সক্রিয় করার জন্য ধরে নিতে পারেন তবে শব্দটি নিঃশব্দ করার জন্য আপনাকে অবশ্যই প্রস্তুত থাকতে হবে।
  • আপনি যে কোনও রাজ্যে সফ্টওয়্যার সেটিংস ছেড়ে যেতে পারেন।

বোনাস

বিশেষত সংক্ষিপ্ত সমাধানের জন্য একটি বিশেষ অনুদান প্রদান করা হয়েছিল। এটি নির্দেশাবলীর সংখ্যা অনুসারে এবং অক্ষরের চেয়ে মিল ছিল। বিজয়ীরা ছিল (আমার মাপদণ্ড অনুসারে আবদ্ধ):

আমি কেবল একটি উত্তর দিতে পারি এবং তেজস কালের উত্তরটি প্রচুর পরিমাণে জিতেছিল।


2
নতুন স্মার্টফোন এবং ল্যাপটপগুলিতে পাওয়া গ্রাইস্কোপকে কি ভোক্তা হার্ডওয়্যার হিসাবে বিবেচনা করা হয়?
Nzall

@ নাটকেরখফস: হ্যাঁ
Wrzlprmft

আসলে, আমরা কি "গ্রাহক-গ্রেড হার্ডওয়্যার" এর সংজ্ঞা পেতে পারি? "আপনার স্থানীয় কম্পিউটার দোকানে আপনি 500 ডলারেরও কম দামে কিনে নিতে পারেন, বা আপনি 1,000 ডলারের মেশিনের অংশ হিসাবে পেতে পারেন" এটি একটি গ্রহণযোগ্য সংজ্ঞা?
Nzall


1
আমাকে এখানে একটু ট্রিভিয়া প্রবেশ করানো যাক, অস্ট্রেলিয়ান ন্যাশনাল ইউনিভার্সিটিতে কোয়ান্টাম মেকানিক্সের উপর ভিত্তি করে একটি আসল এলোমেলো সংখ্যা জেনারেটর রয়েছে। একবার দেখুন: qrng.anu.edu.au/index.php
আলেকজান্দ্রে

উত্তর:


28

খোল

মাইক্রোফোন স্ট্রিম থেকে একটি একক নমুনা পড়ে এবং এর সর্বনিম্ন-তাত্পর্যপূর্ণ বিট প্রিন্ট করে, যা শব্দের দ্বারা আধিপত্য করা উচিত।

সম্পাদনা: মাইক্রোফোনটি নিঃশব্দ করাতে পরিবর্তন করা হয়েছে ... এবং সমস্ত কিছু!

# Warning - unmutes EVERYTHING!
for DEV in `amixer | grep Simple | sed -e "s/.*'\(.*\)'.*/\\1/" -e "s/ /~/g"`
do
    amixer -q -- sset "`echo $DEV | sed 's/~/ /g'`" unmute 100% 2>/dev/null
done

echo $(( `od -N1 -d < /dev/dsp | head -n1 | sed 's/.* //'` & 1 ))

আমার যদি মাইকটি নিঃশব্দ করা থাকে? এই নিখুঁত নীরবতা করা উচিত নয়?
ইয়েতি

3
@ ইয়েতি: আচ্ছা, নিশ্চিত তবে আমাদের ধরে নিতে অনুমতি দেওয়া হয়েছে যে "হার্ডওয়্যারটি চালু এবং কার্যকরী", যা আমি মনে করি এটি জুড়ে।
Ell

3
সমস্ত কিছু
আনমুট

1
cat /dev/urandom > /dev/dspকম্পিউটারটি যদি সাউন্ড-প্রুফ রুম / চেম্বার / বাক্স / কেস / স্পেসে থাকে তবে আপনি কিছু ডেটা ব্যবহার করে স্পিকারগুলিকে খাওয়ার চেষ্টা করতে পারেন ।
ইসমাইল মিগুয়েল

আমি কি করতে চেয়েছিলাম!
শর্টসথেরি

26

সজোরে আঘাত

echo $[`ping -qc1 127.1|sed 's/[^1-9]/+/g'`0&1]

লোকালহোস্টে একক পিংয়ের প্রতিক্রিয়া সময় থেকে এনট্রপি সংগ্রহ করে।

নোট করুন যে প্রতিক্রিয়া সময় ঠিক তিনবার প্রদর্শিত হবে ping -qc1:

PING 127.1 (127.0.0.1) 56(84) bytes of data.

--- 127.1 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.044/0.044/0.044/0.000 ms

অন্যান্য সমস্ত সংখ্যা এবং ধ্রুবক এবং - আরও গুরুত্বপূর্ণ - প্রতিক্রিয়া সময় থেকে স্বতন্ত্র।

sed 's/[^1-9]/+/g'প্রতিটি শূন্য এবং অ-অঙ্ককে প্লাস চিহ্নগুলিতে রূপান্তর করে এবং echo $[...0&1]ফলাফলের যোগফলের সমতা প্রিন্ট করে।


1
এটা সবসময় আমার জন্য 1 ছাপে: CYGWIN_NT-6.2-WOW64 work 1.7.28(0.271/5/3) 2014-02-09 21:06 i686 Cygwin- pingহয়েছে তন্ন তন্ন -qবা -cএখানে।
rr-

2
উইন্ডোজ ব্যবহার pingনিশ্চিত করা হয়েছে। আমি বিস্মিত.
rr-

1
@ জেমসনেল: সমস্যা তখন। উইন্ডোজ পিংয়ের যথাযথ নির্ভুলতা নেই; এটি সর্বদা 1 এমএসের সময় দেখাবে ...
ডেনিস

6
দেখে মনে হচ্ছে এটি নিষেধাজ্ঞা # 2 লঙ্ঘন করছে: পিনিং লোকালহোস্ট পুরোপুরি কম্পিউটারের অভ্যন্তরীণ অবস্থার উপর নির্ভর করে।
tophyr

2
বলা মুশকিল। @ ডেনিস: আপনি কি জানেন যে ওঠানামা কোথা থেকে আসে?
Wrzlprmft

25

জাভাস্ক্রিপ্ট + এইচটিএমএল 5 ডিভাইসমোশন

var hash = function(x) {
    var h = 0
    for (var i = 0; i < x.length; i++) {
        h += x.charCodeAt(i)
        h ^= h << 5
        h ^= h >> 3
        h ^= h << 13
        h &= 0xffff
    }
    return h
}
var listener = function(e) {
    var accelerationString = JSON.stringify(e.acceleration)
    var hashed = hash(accelerationString)
    alert(hashed % 2)
    window.removeEventListener("devicemotion", listener, true)
}
window.addEventListener("devicemotion", listener, true);

জেএসফিডাল এখানে

সমর্থিত ডিভাইসগুলিতে (বেশিরভাগ মোবাইল ডিভাইস) এ এইচটিএমএল 5 ডিভাইসমোশন API ব্যবহার করে। এটি accelerationফলাফলকে জেএসএনে রূপান্তরিত করে, এটি হ্যাশ করে এবং বাকি মডুলো 2 নেয়।

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


40
"দয়া করে নতুন পাসওয়ার্ড তৈরি করতে ডিভাইসটি কাঁপুন।"
PTwr

21

পাইথন + ওয়েবক্যাম

এখান থেকে নির্লজ্জভাবে চুরি কোড ব্যবহার করা, আপনার ওয়েবক্যাম ব্যবহার করে একটি শাপশট নেয়, ডেটা হ্যাশ করে এবং কমপক্ষে উল্লেখযোগ্য বিট প্রিন্ট করে।

#!/usr/bin/python
import pygame.camera, hashlib

pygame.camera.init()
cam = pygame.camera.Camera(pygame.camera.list_cameras()[0])
cam.start()
raw = cam.get_raw()
cam.stop()
pygame.camera.quit()

h = hashlib.sha256()
h.update(raw)
print ord(h.digest()[-1]) % 2

8
ভাল হ্যাশের কোনও "কমপক্ষে উল্লেখযোগ্য বিট" নেই। হ্যাঁ, আপনি কী বলতে চেয়েছিলেন তা আমি জানি
gnibbler

11
@ 11684, অভিন্ন ফলাফলগুলি রোধ করার জন্য ক্যামেরায় সম্ভবত যথেষ্ট পরিমাণে শোরগোল ইত্যাদি রয়েছে
gnibbler

2
আলোর কিছুটা ওঠানামা করা উচিত (বাইরের আলো উপরে / নিচে চলে যাওয়া এবং অবশ্যই কম্পিউটারের যে কোনও "ব্লিনক্লাইটস" সম্ভবত প্রকাশিত হয়)
অলিভিয়ার ডুলাক

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


15

পার্ল

তিনটি অপারেশন সময় নির্ধারণ করে আপনার হার্ডড্রাইভের প্রতিক্রিয়া সময় পরীক্ষা করে:

  • তার নিজস্ব উত্স পড়া
  • নিজেই মুছে ফেলা হচ্ছে
  • নিজেই আবার লিখছেন

শেষ অবধি, সময়টি একটি ভাসা হিসাবে প্যাক করা হয়, এবং 11 তম সবচেয়ে উল্লেখযোগ্য বিট ব্যবহৃত হয় (ম্যান্টিসার দ্বিতীয় গুরুত্বপূর্ণ বিট)।

use Time::HiRes qw(time);

$t1 = time;
open SELF, "<$0";
read SELF, $_, $^H;
close SELF;

unlink $0;

open SELF, ">$0";
print SELF $_;
close SELF;

print 1&unpack(xB3, pack(f, time-$t1))

1
এমন একটি প্রোগ্রাম যা ডিস্কে নিজেকে মুছে ফেলে এবং লেখায় এমন কিছু আমি কেবল পার্ল বা পাইথন প্রোগ্রামারকে কল্পনা করতে পারি। খুব সুন্দর ধারণা!
আইফ্রেইলিচ্ট

এটি এমন কোনও কিছু দেখাচ্ছে যা কোনও হার্ডওয়্যারকে স্পর্শ করবে না এবং কোনও ভিএম-এর মধ্যে চলাকালীন নিয়ন্ত্রক হবে না, এটি খুব সাধারণ একটি দৃশ্য।
পিটারিস

1
আপনি ক্যাশে (যা মেশিনের রাজ্য, নিয়ম # 2) এর পরিবর্তে ডিস্কের উপর নির্ভর করতে এটি ফ্লাশ ডিস্কে ফ্লাশ করতে চান
এমসাল্টারস

14

সজোরে আঘাত

echo $[`sensors|sed 's/[^1-9]/+/g'`0&1]

sensors ফ্যানের গতির পাশাপাশি বর্তমান সিস্টেমের তাপমাত্রা মুদ্রণ করে।

acpitz-virtual-0
Adapter: Virtual device
temp1:        +52.0°C  (crit = +98.0°C)

thinkpad-isa-0000
Adapter: ISA adapter
fan1:        3510 RPM

coretemp-isa-0000
Adapter: ISA adapter
Physical id 0:  +54.0°C  (high = +86.0°C, crit = +100.0°C)
Core 0:         +51.0°C  (high = +86.0°C, crit = +100.0°C)
Core 1:         +46.0°C  (high = +86.0°C, crit = +100.0°C)

sed 's/[^1-9]/+/g'প্রতিটি শূন্য এবং অ-অঙ্ককে প্লাস চিহ্নগুলিতে রূপান্তর করে এবং $[...0&1]ফলাফলের যোগফলের সমতাটি প্রতিধ্বনিত করে।

ডেনিসের উত্তর থেকে ধার করা রেজিেক্স এবং সমতা গণনা।


এই উত্তরটি একটি বিশেষভাবে সংক্ষিপ্ত সমাধানের জন্য একটি বিশেষ পরিমাণে ভূষিত করা হয়েছে (কেবলমাত্র যদি কেউ আশ্চর্য হয়)। এটি আমার মানদণ্ডের দ্বারা ফ্রাঙ্কির উত্তরের সাথে আবদ্ধ ছিল এবং প্রচুর পরিমাণে জিতেছিল।
Wrzlprmft

12

সজোরে আঘাত

(echo -en "ibase=16;";(find /proc/[0-9]*/s* -type f -maxdepth 2 ; find /sys /proc/[^0-9]* -type f) 2>&1 | xargs -n1 sha256sum  2>&1 | sha256sum | tr abcdef ABCDEF | sed 's/  -/%2/' )| bc

কেবলমাত্র যদি সমস্ত কিছু ব্যবহার করা হয় ...

নির্ভর করে

  • সবচেয়ে হার্ডওয়্যার সেন্সর সেন্সর রিডিং (প্রায় সব একরকম কোথাও তাদের মান এক্সপোজ /sysবা /proc)
  • সংখ্যা, মেমরি লেআউট এবং সিস্টেমে সমস্ত প্রক্রিয়ার রানটাইম (যা "সিস্টেমের অবস্থা" হিসাবে বিবেচিত হতে পারে তবে সাধারণত তারা নিজেরাই হার্ডওয়ারের সময় নির্ভর করে)
  • সিস্টেমের উপর নির্ভর করে, বিভিন্ন মান /proc/<pid>/s*(যেমন সময়সূচী / সময়সূচী) সেই প্রক্রিয়াগুলিকে বাঁচিয়ে আনার জন্য প্রয়োজনীয় হার্ডওয়ারের গতির উপর নির্ভর করে।
  • যে জিনিসগুলি আমি ভেবে দেখিনি সেগুলি সেই ফাইলগুলিতেও উপলব্ধ।

আমার সিস্টেমে রানটাইমটি 10 ​​ডলার, তবে অনেকগুলি পরিবর্তিত হতে পারে। বিশেষত এটিকে মূল হিসাবে চালাবেন না, বা বাদ দেওয়ার জন্য অন্তত এটি সংশোধন করুন /proc/kcore(যদি না আপনি সেখানে থাকা এন্ট্রপিকে অন্তর্ভুক্ত করতে প্রচুর সময় ব্যয় করতে ইচ্ছুক না হন, যা সম্ভবত সমস্ত কিছু অন্তর্ভুক্ত থাকবে)


9

শেল + ওয়াই-ফাই

sudo airmon-ng start wlan0 > /dev/null && sudo dumpcap -a duration:30 -i mon0 -w out.cap > /dev/null && sha512sum out.cap | grep -c "^[0-7]" && sudo airmon-ng stop mon0 > /dev/null

ওয়াই-ফাই কার্ডটি মনিটরের মোডে রাখে, 30 সেকেন্ডের মূল্যবান প্যাকেটগুলি ফেলে দেয় (প্রতিবেশী নেটওয়ার্কগুলি থেকে অপঠনযোগ্য এনক্রিপ্ট হওয়া ডেটা সহ) প্যাকেট ডেটার sha512 হ্যাশ নেয় এবং হ্যাশের প্রথম অক্ষরটি 0-7 হলে 1 প্রদান করে । ধরে নিলেন যে আপনার Wi-Fi কার্ডটি রয়েছে wlan0এবং বর্তমানে আপনার কোনও mon0ডিভাইস নেই।

যদি কাছাকাছি কোনও Wi-Fi ডিভাইস না থাকে তবে আউটপুট পূর্বাভাসযোগ্য হবে, কারণ এটি প্রতিবারের মতো হবে।


1
হুম, আমি ওয়াই-ফাই ডিভাইসের অনুপস্থিতি এতটাই অপ্রাকৃতভাবে গণনা করব না যে আপনি এটিকে অবহেলা করতে পারেন।
Wrzlprmft

3
@Wrzlprmft এটি আপনি কোথায় আছেন তা নির্ভর করে। জনাকীর্ণ শহুরে অঞ্চলে ওয়াইফাই নেটওয়ার্ক না থাকাটাই স্বাভাবিক। সার্বজনীন স্কেল, মোট ভ্যাকুয়ামের কাছাকাছি না হওয়া মোটামুটি অনুমান নয়, বা পৃথিবীতে সীমাবদ্ধ না হলে কম্পিউটার জলে ডুবেছে না তা ন্যায্য ধারণাও নয়।
ইয়ান ডি স্কট 0

1
@ আইয়ানডি.সকোট: আচ্ছা, আমার জন্য পরবর্তী ওয়াইফাই-মুক্ত অঞ্চলটি আসলে ভোজনস্তানে রয়েছে (আমাকে এটি জিজ্ঞাসা করবেন না কেন আমি এটি জানি)। এবং আমি কোথাও মাঝখানে বাস করছি না। যাইহোক, ওয়াইফাই-ফ্রি সারাউন্ডিংগুলিতে কম্পিউটারের সংখ্যা অবশ্যই জলের মধ্যে অনেকগুলি (কর্মরত) কম্পিউটারের সংখ্যা বা শূন্যতার পরিমাণকে বহু মাত্রার আদেশ দ্বারা অতিক্রম করে। (
এগুলি

8

ইন্টেলের দ্বারা নির্মিত আধুনিক 8086 সামঞ্জস্যপূর্ণ প্রসেসরে একটি সহজেই অ্যাক্সেসযোগ্য পেরিফেরাল থাকে যা যথাযথ এলোমেলোতা তৈরি করে। পেরিফেরাল ড্রাইভিং সেই rdrandনির্দেশের সাহায্যে করা হয় যা হয় একটি এলোমেলো বিট প্যাটার্ন উত্পন্ন করে বা পেরিফেরাল অনুপলব্ধ থাকে বা এনট্রোপির বাইরে থাকলে ক্যারি পতাকা সেট করে।

80386 লিনাক্সের জন্য নিম্নলিখিত সংক্ষিপ্ত প্রোগ্রামটি cpuidনির্দেশের মাধ্যমে পেরিফেরাল উপলব্ধ কিনা তা পরীক্ষা করে এবং এলোমেলো সংখ্যা তৈরি করার চেষ্টা করে। পেরিফেরাল বা একটি এলোমেলো সংখ্যা যদি না পাওয়া যায় তবে প্রোগ্রামটির স্থিতি দিয়ে শেষ হবে 1। যদি কোনও এলোমেলো সংখ্যা তৈরি করা যায়, হয় হয় 1বা একটি 0মুদ্রিত হয় এবং প্রস্থানটি স্থিতির সাথে প্রোগ্রামটি সমাপ্ত হয় 0

হিসাবে সংরক্ষণ করুন rand.sএবং একত্রিত

as --32 -o rand.o rand.s
ld -melf_i386 -o rand rand.o

পুরো সমাবেশটি এখানে:

        .globl _start
        .type _start,@function
_start:
        # check if the cpuid instruction is available by trying to
        # toggle the id flag in the eflags register
        pushfl
        mov (%esp),%eax
        btc $21,%eax    # toggle id bit
        push %eax
        popfl           # check if id bit was saved
        pushfl
        pop %eax        # load new flags
        pop %ecx        # load original flags
        xor %ecx,%eax   # difference is in %eax
        bt $21,%eax     # check if bit was flipped
        jnc .Lfailure

        # if we reach this part, we have a cpuid instruction
        # next, check if rdrand exists
        mov $1,%eax     # load cpuid leaf 1
        cpuid
        bt $30,%ecx     # is rdrnd available?
        jnc .Lfailure

        # let's try to get some random data
        rdrand %ax      # don't waste randomness; one bit would suffice
        jnc .Lfailure   # no randomness available
        and $1,%eax     # isolate one bit of randomness
        add $0x30,%al   # 0x30 = '0'
        push %eax
        mov $4,%eax     # prepare a write system call
        mov $1,%ebx
        mov %esp,%ecx   # where we placed the data before
        mov %ebx,%edx   # one byte
        int $0x80

        # okay, we're done here. Let's exit
        mov %ebx,%eax   # do an exit system call with status 0
        xor %ebx,%ebx
        int $0x80

.Lfailure:
        mov $1,%eax     # do an exit system call with status 1
        mov %eax,%ebx
        int $0x80

        .size _start,.-_start

এবং মেশিন কোডের ফলস্বরূপ 77 বাইটের একটি ডাম্প:

08048098 <_start>:
 8048098:   9c                      pushf  
 8048099:   8b 04 24                mov    (%esp),%eax
 804809c:   0f ba f8 15             btc    $0x15,%eax
 80480a0:   50                      push   %eax
 80480a1:   9d                      popf   
 80480a2:   9c                      pushf  
 80480a3:   58                      pop    %eax
 80480a4:   59                      pop    %ecx
 80480a5:   31 c8                   xor    %ecx,%eax
 80480a7:   0f ba e0 15             bt     $0x15,%eax
 80480ab:   73 2f                   jae    80480dc <_start+0x44>
 80480ad:   b8 01 00 00 00          mov    $0x1,%eax
 80480b2:   0f a2                   cpuid  
 80480b4:   0f ba e1 1e             bt     $0x1e,%ecx
 80480b8:   73 22                   jae    80480dc <_start+0x44>
 80480ba:   66 0f c7 f0             rdrand %ax
 80480be:   73 1c                   jae    80480dc <_start+0x44>
 80480c0:   83 e0 01                and    $0x1,%eax
 80480c3:   04 30                   add    $0x30,%al
 80480c5:   50                      push   %eax
 80480c6:   b8 04 00 00 00          mov    $0x4,%eax
 80480cb:   bb 01 00 00 00          mov    $0x1,%ebx
 80480d0:   89 e1                   mov    %esp,%ecx
 80480d2:   89 da                   mov    %ebx,%edx
 80480d4:   cd 80                   int    $0x80
 80480d6:   89 d8                   mov    %ebx,%eax
 80480d8:   31 db                   xor    %ebx,%ebx
 80480da:   cd 80                   int    $0x80
 80480dc:   b8 01 00 00 00          mov    $0x1,%eax
 80480e1:   89 c3                   mov    %eax,%ebx
 80480e3:   cd 80                   int    $0x80

12
"আপনি ব্যবহার করতে পারেন কোন [...] হার্ডওয়্যার [...] - যদি না তা র্যান্ডম নম্বরের প্রজন্মের জন্য দেয়ার উদ্দেশ্যে করা হচ্ছে ।" - লক্ষ্য হয় উপজ একটি হার্ডওয়্যার র্যান্ডম-সংখ্যা উত্পাদক, এক ব্যবহার না করার।
Wrzlprmft

18
@ Wrzlprmft rdrandএলোমেলো সংখ্যা জেনারেটর নয়। এটি এনএসএর জন্য জনগণের ক্রিপ্টোগ্রাফি নিয়ে গোলযোগ করার জন্য তৈরি একটি পেরিফেরাল।
FUZxxl

1
আসলে, আমি এই প্রোগ্রামটি লেখার আগে সেই বাক্যটি লক্ষ্য করিনি। আমার খারাপ।
FUZxxl

7

সজোরে আঘাত

সবচেয়ে অপ্রয়োজনীয় ব্যয়বহুল এলোমেলো সংখ্যা সংগ্রহের পদ্ধতির জন্য লক্ষ্য। এক মিলিয়ন বার ইমাক্স আনতে কত সময় লাগে, তারপরে ডেনিসের কৌশলটি একক বুলিয়ান হিসাবে নেওয়া সময়টি (আমার মেশিনে প্রায় 7 সেকেন্ড সময় নেয়) ব্যবহার করুন।

$[`(time (seq 1000000 | xargs -P1000 emacs  >/dev/null 2>&1)) |& sed 's/[^1-9]/+/g'`0&1]

1
গড় হিসাবে, বিচ্যুতি খুব ছোট হতে পারে…
সার্জে বোর্স

7

আরডুইনো মেগা 1280

সম্পাদনা করুন: আপডেট হওয়া সংস্করণ যা পিনগুলিতে কোনও প্লাগ লাগানোর বিরুদ্ধে শক্ত। ধারণাটি নির্ভর করে যে এটিএমইগা 1280 ওয়াচডগ দোলকের জন্য একটি পৃথক অভ্যন্তরীণ দোলক ব্যবহার করে। আমি কেবলমাত্র একটি ওয়াচডগ বিঘ্ন সেটআপ করি যা একটি পতাকা সেট করে, সিস্টেম ঘড়ির উপর ভিত্তি করে একটি কাউন্টার থাকে (আরডুইনোতে এটি একটি 16 মেগাহার্টজ বাহ্যিক স্ফটিক), এবং ক্লক জিটার / বৈকল্পিক কাজটি করার অনুমতি দেয়।

#include <avr/interrupt.h>

int time;
volatile bool wdt_ran;

// watchdog interrupt handler
ISR(WDT_vect, ISR_BLOCK)
{
  wdt_ran = true;
}

void setup()  
{
  // setup watchdog interrupt
  cli();
  MCUSR &= ~(1 << WDRF);
  WDTCSR |= (1<<WDCE) | (1<<WDE);
  WDTCSR = (1<<WDIE) | (1<<WDP2) | (1<<WDP1) | (1<<WDP0);
  sei();
  // Open serial communications and wait for port to open:
  Serial.begin(57600);
}

void loop()
{
  if(wdt_ran)
  {
    Serial.println(abs(time%2));
    wdt_ran = false;
  }
  ++time;
}

5

জাভাস্ক্রিপ্ট

http://jsfiddle.net/prankol57/9a6s0gmv/

ভিডিও ইনপুট নেয়।

আপনি যে স্ক্রিনশটটি এলোমেলো সংখ্যা গণনা করতে ব্যবহার করতে পারেন তা দেখতে পারেন।

var m = (navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia);

var constraints = {
  video: {
    mandatory: {
      maxWidth: 350,
      maxHeight: 350
    }
  },
  audio: false
};

var video = document.querySelector("video"), canvas = document.createElement("canvas");
document.body.appendChild(canvas);
canvas.width = 350;
canvas.height = 350;

function start() {
    m.call(navigator, constraints, function (stream) {
        video.src = window.URL.createObjectURL(stream);
    }, function() {
        alert("An error occured. Did you deny permission?");
    });
}

if (m) {
    start();
} else {
    alert('getUserMedia() is not supported in your browser');
}

function getRandomData() {
    var ctx = canvas.getContext("2d");
    ctx.drawImage(video, 0, 0);
    var data = ctx.getImageData(0, 0, 350, 350).data;
    var total = 0;
    for (var i = 0; i < data.length; ++i) {
        total += data[i];
        total %= 2;
    }
    alert("The random number is " + total);
}

document.querySelector("button").onclick = getRandomData;

1
আমি সবেমাত্র এফএফ-তে একটি বাগ পেয়েছি, "ভাগাভাগি থামান" ওয়েবক্যামটি চালু করে না!
ফ্রাঙ্ক

3

লিনাক্সে শেল

একটি হার্ড ড্রাইভের পড়ার গতি পরিমাপ করুন + এই ডিস্কটিতে প্রায়শই আপডেট হওয়া ডিরেক্টরিটির অ্যাক্সেসের সময়টি কোন লেআউটটি অনির্দেশ্য।

# Set this to the device node of whatever drive you want to measure
DRIVE_DEVICE=sda
# This must be a path that is
# a) on device "/dev/$DRIVE_PATH"
# b) frequently updated to add additional access time randomization due to
#    less-predictable disk layout due to less-predictable time, amount and
#    ordering uf updates, like logfile directories, maybe cache directories.
FIND_PATH=/var/log
# Better than using 'sync' - sync only the disk that we actually read from
# also sync both internal drive and system buffers
hdparm -f -F "/dev/$DRIVE_DEVICE"
# Note: bash's built-in time command doesn't support formats :/
# Note: the result is only going to be as good as the system's time command,
#       which isn't necessarily equally good on other U*ICes
t=$(command time -f '%e' -- find "$FIND_PATH" -printf '' 2>&1)
echo $((${t#*.}&1))

প্রয়োজন:

1) read and execute access to every directory under "$FIND_PATH"
2) sending (flush) control commands to a hard drive via a device node.
   Requires root access per default, but can be delegated to a less privileged user
   either by using sudo on this script or by applying
       chgrp 'some_system_group' "$DRIVE_DEVICE" &&
       chmod g+rx "$DRIVE_DEVICE"
   if this is acceptable on your system.

এই পদ্ধতির সিস্টেমে কোনও ডেটা পরিবর্তন না করার এবং প্রিমোর একের চেয়ে বেশি পার্লের প্রয়োজনীয়তা না করার সুবিধা রয়েছে।


3

খোল

লিনাক্সে পরীক্ষিত, তবে সম্ভবত আপনার ইউ * আইএক্সের / প্রোক / স্ট্যাট রয়েছে কি?

এটি কেবলমাত্র একটি একক অতিরিক্ত প্রক্রিয়া শুরু করে, কেবলমাত্র একটি একক অতিরিক্ত ফাইল পড়ে (ডিস্কেও নয়) এবং 37 টি অক্ষর সংক্ষিপ্ত। এটিও বেশ দ্রুত।

t=1`sum /proc/stat`;echo $[${t% *}&1]

কেউ ভাবতে পারেন যে এটি সমস্ত কার্নেল এবং ব্যবহারকারীল্যান্ড প্রক্রিয়া রাষ্ট্র দ্বারা নির্ধারিত হয়, তবে এটি হয় না, যেহেতু / প্রকোপ / স্ট্যাটে আইও-অপেক্ষার সময়, হার্ডওয়্যার বিঘ্নে বাধা দেওয়ার সময়, নিষ্ক্রিয় টাস্কে সময় কাটানো সময় এবং অন্য কোনও কিছু অন্তর্ভুক্ত থাকে বাহ্যিক হার্ডওয়্যার ইনপুট উপর নির্ভর করে।


এই উত্তরটি আমার মানদণ্ডের দ্বারা একটি বিশেষ সংক্ষিপ্ত উত্তরের জন্য অনুগ্রহের জন্য আবদ্ধ ছিল এবং প্রচুর পরিমাণে হেরে গেল।
Wrzlprmft

2

মতলব

মাইক্রোফোন সমাধান:

recObj=audiorecorder;recordblocking(recObj,10);rem(sum(getaudiodata(recObj)<0),2)

শব্দটি 10 ​​সেকেন্ড রেকর্ড করে, রেকর্ডিংয়ে নেতিবাচক নমুনার সংখ্যা খুঁজে পায় এবং এই সংখ্যাটি সমান হলে 0 এবং আউটপুটগুলিকে বিজোড় করে। 50% সম্ভাবনা সহ এইভাবে 0। পদ্ধতির অর্থ হ'ল এমনকি স্বল্প পরিমাণে গোলমাল, নিঃশব্দ রেকর্ডিংয়ে অপরিহার্য, এলোমেলো আউটপুট উত্পন্ন করতে যথেষ্ট হবে। নিম্নলিখিত সামান্য দীর্ঘতর কোডটি সংক্ষিপ্ত রেকর্ডিং ব্যবহার করে সংখ্যা জেনারেটরকে গতি দেয়, উচ্চ বিটরেটের সাথে ক্ষতিপূরণ দেওয়া হয়, যা আরও শব্দ দেয়।

recObj=audiorecorder(8000,16,1);recordblocking(recObj,0.1);rem(sum(getaudiodata(recObj)<0),2)

শান্ত অবস্থার অধীনে একটি পরীক্ষায়, আমি দেখতে পেয়েছি যে পরবর্তী কোডের 100 রানের মধ্যে কোডটি শূন্য 51 বার আউটপুট দেয়। গোলমাল পরিস্থিতিতে 100 রান শূন্য 40 বার উত্পাদন।

সম্পাদনা: মূল কোডটিতে কোনও ত্রুটি চিহ্নিত করার জন্য এমিলকে ধন্যবাদ :-)


1
যদি রেকর্ডটি নীরব না থাকে এবং শূন্যবিহীন নমুনা না থাকে তবে কী ঘটে?
এমিল

1
ভাল প্রশ্ন. কিছু শূন্যগুলি যে কোনও উপায়ে পপ আপ করার প্রবণতা রয়েছে, কারণ মানগুলি শূন্যের চারপাশে ঘূর্ণিত হয় (শব্দ কম্পন) এবং এর মধ্যে সীমিত সংখ্যক দশমিক। তবে এখন যেহেতু আপনি এটি উল্লেখ করেছেন এটি অবশ্যই 0 = 0 এর পরিবর্তে "<0" হওয়া উচিত, যাতে আমি তার পরিবর্তে নেতিবাচক নমুনার সংখ্যা গণনা করি। : -] এটিও এলোমেলো।
আবুলাফিয়া

0

সজোরে আঘাত

(ধন্যবাদ, ডেনিস।)

echo $[`w|sed 's/[^1-9]/+/g'`0&1]

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

@Wrzlprmft: wলগ ইন করা ব্যবহারকারীদের একটি তালিকা দেখায় যা খালি থাকতে পারে। সিস্টেম লোড সিপিইউ কাতার দৈর্ঘ্যের উপর ভিত্তি করে।
ডেনিস

ঠিক আছে, আমি wসঙ্গে প্রতিস্থাপন করতে পারে top
সোহম চৌধুরী

0

কম্পিউটারের অ্যাক্সিলোমিটারের কমপক্ষে উল্লেখযোগ্য বিট নেয় ( hdapsলিনাক্স মডিউলের প্রয়োজন):

#!/usr/bin/env python
import re
m = re.search('([-\d]+),([-\d]+)',
              open('/sys/devices/platform/hdaps/position', 'r').read())
print((int(m.group(1)) ^ int(m.group(2))) & 1)

এটি মূলত সেন্সরের গোলমাল পরিমাপ করে।


0

SmileBASIC

XON MOTION 'enable motion sensor
ACCEL OUT ,,Z 'get Z acceleration (up/down)
PRINT Z<-1 'if Z is less than -1, output 1, otherwise 0.

3DS এর গতি সেন্সর ব্যবহার করে। অ্যাক্সিলোমিটারের জেড অক্ষগুলি সাধারণত -1 (মহাকর্ষের কারণে) এর আশেপাশে থাকে এবং এলোমেলো শব্দের কারণে এটি কখনও কখনও তার উপরে বা নীচে হতে পারে be

মাইক্রোফোন ব্যবহার করে এমন একটি এখানে:

XON MIC 'enable microphone
DIM REC%[0] 'make array
MICSTART 0,3,1 'start recording. 0=8180Hz, 3=8 bit unsigned, 1=1 second
WAIT 1 'delay (1 frame is enough since we only check the first sample)
MICSAVE MIC 'save recording
PRINT MIC[0]>0 'if the first sample isn't negative, output 1

-3

সজোরে আঘাত

আমি সোহমের নিজস্ব পরামর্শ নিয়েছি (ব্যবহার করে top):

echo $[`top -bn1|sed 's/[^1-9]/+/g'`0&1]

সম্পাদনা: এটি সোহমের মতোই কাজ করে। এটি শীর্ষের আউটপুটে সমস্ত অ-সংখ্যাসূচক অক্ষরকে '+' এ পরিণত করে এবং তারপরে ফলাফলের স্ট্রিংয়ের সাম্যকে বের করে দেয়।

শীর্ষে থাকা 'বি' পতাকাটি এটি ব্যাচ মোডে চালিত করে যাতে এটি সমস্ত প্রক্রিয়াগুলির প্রতিবেদন করে, কেবল প্রথম স্ক্রিনফুল নয় এবং 'এন 1' কেবল শীর্ষের 1 পুনরাবৃত্তি চালানোর জন্য বলে।


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