22-12-2006, 20:39
|
|
|
|
חבר מתאריך: 05.08.06
הודעות: 2,860
|
|
עקרונית אני מכיר שתי שיטות עיקריות ליצירת מספרים אקראיים... ע"י PRNG וע"י TRNG.
ע"י PRNG
המנגנון שעומד מאחורי הגרלת מספרים מסוג זה נקרא PRNG - Psuedo Random Number Generator
שים לב לחלק Psuedo - זה אומר שזה לא באמת רנדומלי, אלא, איך לומר, "דמוי" רנדומלי.
בדרך הזאת, בדרך כלל ה PRNG מאותחל עם ערך התחלתי הנקרא Seed. בPRNG יש פונקציה שמבוססת על חשבון מודולרי בד"כ, שמקבלת מספר, ומחזירה מספר שלכאורה אין לו שום קשר למספר שהועבר, ובנוסף, ניתן להגיד שהיא כיאוטית לגמרי, כלומר אין לה שום מגמה.
כאשר מעבירים ל PRNG את הSeed, הוא משתמש בפונקציה הנ"ל והיא מחזירה מספר כלשהו, ולאחר מכן, בכל פעם שה PRNG מתבקש להגריל מספר, הוא מעביר לפונקציה את המספר הקודם או צירוף כלשהו של המספרים הקודמים לאחר פעולות. כך נוצר רצף של מספרים שניתן לומר עליהם שבקירוב טוב הם רנדומליים.
הבעיה היא שאם תוכנה הייתה מעבירה כל פעם את אותו הSeed, רצף המספרים היה תמיד אותו הדבר. לכן התוכנה משתמשת בערך לא קבוע. לרוב מדובר בזמן הנוכחי.
אבל לשימושי אבטחה והצפנה, לא מספיק להשתמש ב PRNG כי המספרים שנוצרים ממנו לא מספיק רנדומליים, ולשם כך יש את ה CSPRNG - Cryptographicaly Safe PRNG, שאמור להוציא מספרים רנדומליים ברמה הכי גבוהה.
ע"י TRNG
השיטה הזאת לא מתבססת על תוכנה, אלא על חומרה. זוהי חומרה מיוחדת שמחברים למחשב, ודוגמים ממנה את הרעש שנוצר על ידי נגד או מוליך למחצה, לפי עקרונות פיזיקליים שונים ועיקרון מדעי ידוע, לפיו ככל שפרק הזמן בין דגימות קטן יותר, כך מגמת הדגימות פחות ברורה.
|