כלי סיסמאות חזרה למחולל

מדריך אבטחה

יצירת סיסמאות בצד הלקוח עם Web Crypto ודגימת דחייה

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

תקציר

PwdGen משתמש בשיטת יצירת התייחסות בצד הלקוח: הדפדפן או זמן הריצה מספקים בתים אקראיים דרך Web Crypto, דגימת דחייה ממפה בתים אלה לאינדקסים חסרי הטיה, וערבול Fisher-Yates מפיץ את מחלקות התווים הנדרשות על פני הסיסמה הסופית. השיטה היא בכוונה קטנה, ניתנת לביקורת וניתנת לשחזור על פני יישום האינטרנט, מתאם ה-API, ה-CLI והחבילה המוכנה pwdgen-core.

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

מקור האקראיות

המחולל מבקש ערכים אקראיים חזקים מבחינה קריפטוגרפית דרך crypto.getRandomValues(). יישומי Web Crypto צפויים להשתמש במחולל מספרים פסאודו-אקראיים בטוח מבחינה קריפטוגרפית (CSPRNG) המוזרע באנטרופיה איכותית המסופקת על ידי סביבת המארח. בפועל, דפדפנים מטילים אחריות זו על מתקני מערכת ההפעלה וספקים קריפטוגרפיים של הפלטפורמה.

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

למה לא Math.random()

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

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

דגימת דחייה

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

PwdGen משתמש בדגימת דחייה:

  1. משוך מספר שלם ללא סימן באורך 32 סיביות.
  2. חשב את הכפולה הגדולה ביותר של גודל האלפבית שנכנסת בטווח 32 הסיביות.
  3. דחה ערכים מעל גבול זה.
  4. החל מודולו רק על הטווח השלם הנותר.

זה שומר על בחירת תווים חסרת הטיה מבלי להכניס הטיית מודולו מדידה.

כיסוי תווים ואנטרופיה

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

אומדן האנטרופיה התאורטי הוא:

bits = length × log2(uniqueAlphabetSize)

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

גבול פרטיות

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

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

יישום בר שחזור

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

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

מקורות