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

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

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

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

לשם מה משתמשים במספרים אקראיים

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

קשורים: מהי הצפנה, ואיך זה עובד?

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

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

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

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

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

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

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

מספרים מזויפים

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

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

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

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

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

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

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

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

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

קרדיט תמונה: rekre89 על פליקר, ליסה ברוסטר על פליקר, ראיין סומה על פליקר, הואנג'יהאווי על פליקר