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