דף הבית » איך ל » כיצד מחשבים מייצרים מספרים אקראיים

    כיצד מחשבים מייצרים מספרים אקראיים

    מחשבים מייצרים מספר אקראי לכל דבר, החל בקריפטוגרפיה ועד משחקי וידאו והימורים. ישנן שתי קטגוריות של מספרים אקראיים - מספרים "אקראיים" אמיתיים ומספרים pseudorandom - ואת ההבדל חשוב לביטחון של מערכות הצפנה.

    מחשבים יכולים ליצור מספרים אקראיים באמת על ידי התבוננות בנתונים חיצוניים, כגון תנועות עכבר או רעש מאוורר, אשר אינו צפוי, וליצור נתונים ממנו. זה ידוע בשם אנטרופיה. פעמים אחרות, הם מייצרים מספרים "pseudorandom" באמצעות אלגוריתם כך התוצאות מופיעות אקראיות, למרות שהם לא.

    נושא זה הפך להיות יותר שנוי במחלוקת לאחרונה, עם אנשים רבים תוהה אם מובנה של אינטל חומרה מספר אקראי גנרטור מספר אינטל הוא אמין. כדי להבין מדוע זה לא יכול להיות אמין, אתה צריך להבין איך מספרים אקראיים הם genreated מלכתחילה, ומה הם משמשים עבור.

    מה מספרים אקראיים משמשים

    מספרים אקראיים שימשו במשך אלפי שנים. בין אם זה מרפרף מטבע או מתגלגל הקוביות, המטרה היא להשאיר את התוצאה הסופית עד סיכוי אקראי. מחוללי מספרים אקראיים במחשב דומים - הם מנסים להשיג תוצאה אקראית, בלתי צפויה.

    מחוללי מספרים אקראיים שימושיים למטרות רבות ושונות. מלבד יישומים ברורים כמו יצירת מספרים אקראיים למטרות הימורים או יצירת תוצאות בלתי צפויות במשחק מחשב, אקראיות חשוב קריפטוגרפיה.

    קריפטוגרפיה דורשת מספרים שתוקפים לא יכולים לנחש. אנחנו לא יכולים פשוט להשתמש באותם מספרים שוב ושוב. אנחנו רוצים ליצור את המספרים האלה בצורה בלתי צפויה מאוד, כך שתוקפים לא יכולים לנחש אותם. מספרים אקראיים אלה חיוניים להצפנה מאובטחת, בין אם אתה מקודד קבצים משלך או רק באמצעות אתר HTTPS באינטרנט.

    מספרים אקראיים אמיתיים

    ייתכן שאתה תוהה איך המחשב יכול למעשה ליצור מספר אקראי. מהיכן באה "אקראיות" זו. אם זה רק חתיכת קוד מחשב, האם זה לא אפשרי את המספרים המחשב מייצר יכול להיות צפוי?

    בדרך כלל אנו מקבצים את מספרי המחשבים האקראיים שיוצרים שני סוגים, בהתאם לאופן שבו הם נוצרים: מספרים אקראיים "אמיתיים" ומספרים אקראיים אקראיים.

    כדי ליצור מספר "אקראי" אמיתי, המחשב מודד סוג כלשהו של תופעה פיזית המתרחשת מחוץ למחשב. לדוגמה, המחשב יכול למדוד את ריקבון רדיואקטיבי של אטום. על פי תורת הקוונטים, אין שום דרך לדעת בוודאות מתי יתרחש ריקבון רדיואקטיבי, כך שזה בעצם "אקראיות טהורה" מן היקום. התוקף לא יוכל לחזות מתי יתרחש ריקבון רדיואקטיבי, כך שהם לא יידעו את הערך האקראי.

    לקבלת דוגמה יומיומית יותר, המחשב יכול להסתמך על רעש אטמוספרי או פשוט להשתמש בזמן המדויק שבו אתה לוחץ על המקשים בלוח המקשים כמקור לנתונים בלתי צפויים או לאנטרופיה. לדוגמה, המחשב שלך עשוי להבחין כי לחצת על מקש בדיוק בשעה 0.23423523 שניות אחרי 2 בלילה ... לתפוס מספיק פעמים ספציפיות הקשורות אלה לחיצות על מקש ואתה תהיה מקור של אנטרופיה אתה יכול להשתמש כדי ליצור "נכון" אקראי מספר. אתה לא מכשיר צפוי, כך התוקף לא יכול לנחש את הרגע המדויק כאשר אתה לוחץ על המקשים האלה. התקן / dev / אקראי על לינוקס, אשר מייצר מספרים אקראיים, "בלוקים" ולא מחזיר תוצאה עד שהוא אוסף מספיק אנטרופיה להחזיר מספר אקראי באמת.

    מספרים מדוייקים

    מספרים Pseudorandom הם חלופה "אקראיים" מספרים אקראיים. מחשב יכול להשתמש בערך זרע ובאלגוריתם ליצירת מספרים שנראים אקראיים, אך הם ניתנים לחיזוי. המחשב אינו אוסף נתונים אקראיים מהסביבה.

    זה לא בהכרח דבר רע בכל מצב. לדוגמה, אם אתה משחק משחק וידאו, זה לא ממש משנה אם האירועים המתרחשים במשחק זה הם cased על ידי מספרים "אקראיים" אמיתי או מספרים pseudorandom. מצד שני, אם אתה משתמש בהצפנה, אתה לא רוצה להשתמש במספרים pseudorandom כי התוקף יכול לנחש.

    לדוגמה, נניח שהתוקף יודע את האלגוריתם ואת ערך הזרע, משתמש בגנרטור מספר פסאודו-אקראי. ו נניח אלגוריתם ההצפנה מקבל מספר pseudorandom מן האלגוריתם הזה ומשתמש בו כדי ליצור מפתח הצפנה מבלי להוסיף כל אקראיות נוספת. אם התוקף יודע מספיק, הם יכולים לעבוד לאחור ולקבוע את מספר pseudorandom האלגוריתם ההצפנה בוודאי בחרה במקרה זה, לשבור את ההצפנה.

    NSA ו- Intel של חומרה מחולל מספרים אקראיים

    כדי להקל על המפתחים ולעזור ליצור מספרים אקראיים מאובטחים, שבבי Intel כוללים מחולל מספרים אקראיים המבוסס על חומרה המכונה RdRand. שבב זה משתמש במקור אנטרופיה על המעבד ומספק מספרים אקראיים לתוכנה כאשר התוכנה מבקשת אותם.

    הבעיה כאן היא שמספר המספרים האקראיים הוא בעצם קופסה שחורה ואנחנו לא יודעים מה קורה בתוכו. אם RdRand הכיל אחורית NSA, הממשלה תוכל לשבור מפתחות הצפנה שנוצרו עם נתונים שסופקו על ידי אותו מחולל מספרים אקראיים בלבד.

    זהו חשש רציני. בדצמבר 2013, המפתחים של FreeBSD הוסרו תמיכה בשימוש RdRand ישירות כמקור של אקראיות, ואמר שהם לא יכלו לסמוך על זה. [מקור] הפלט של התקן RdRand יזין לתוך אלגוריתם אחר המוסיף אנטרופיה נוספת, כדי להבטיח כי כל backdoors של מחולל מספרים אקראיים לא משנה. לינוקס כבר עבדה כך, תוך כדי רנדומציה נוספת של הנתונים האקראיים שמקורם ב- RdRand, כך שלא ניתן יהיה לצפות אותם גם אם יש דלת אחורית. [מקור] ב AMA האחרונות ("שאל אותי משהו") על Reddit, מנכ"ל אינטל בריאן Krzanich לא לענות על שאלות אלה חששות. [מקור]

    כמובן, סביר להניח שזה לא רק בעיה עם שבבי אינטל. מפתחי FreeBSD קראו את השבבים של Via לפי השם. מחלוקת זו מראה מדוע יצירת מספרים אקראיים כי הם אקראיים באמת לא צפוי כל כך חשוב.


    כדי ליצור מספרים אקראיים "אמיתיים", מחוללי מספרים אקראיים אוספים "אנטרופיה", או נתונים אקראיים לכאורה מהעולם הפיזי שסביבם. עבור מספרים אקראיים שלא באמת צריך להיות אקראי, הם עשויים פשוט להשתמש באלגוריתם ערך זרע.

    תמונה אשראי: rekre89 על פליקר, ליסה ברוסטר על פליקר, ריאן סומה על Flickr, huangjiahui על Flickr