המאגר הביומטרי : בור מלא זאבים

יש שתי בעיות עם טביעות אצבעות, false negative וfalse positive.

  • false negative (שלילי שגוי) : כאשר בהנתן דוגמא של טביעת אצבע, אנחנו לא מוצאים התאמה במאגר למרות שהמאגר מכיל התאמה.
  • false positive (חיובי שגוי) : כאשר בהינתן דוגמא של טביעת אצבע, אנחנו מתאימים אותה לטביעת אצבע לא מתאימה במאגר.

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

מכיוון שלא כל הממצאים יופיעו בכל טביעה (טביעה חלקית, זווית לחיצה וכו') וגם אם יופיעו כולם, הם לא יהיו במרחקים שווים אחד מהשני, משתמשים בהתאמה מקורבת, בגבולות threshold מסויים.
התאוריה הרווחת היא שאין שני אנשים עם טביעות אצבע זהות (למרות שאף אחד לא באמת בדק את כל אוכלוסית העולם). גם אם אנחנו מקבלים את התאוריה, היא עדיין לא אומרת שאלגוריתם הבדיקה לא יכריז על שתי טביעות ממקורות שונים כזהות כי הן דומות מספיק.|
יש תיעוד של כמה מקרים של זיהוי חיובי שגוי, שהצליחו לקלקל לכמה אזרחים תמימים את הבוקר, או את השבוע, או את העשור. (וניתן להניח שיש גם כמה טעויות שלא התגלו ודפקו לאנשים את החיים).
אז שגיאות קורות, אבל אולי הן נדירות מאוד?
נניח לשם השעשוע שבהינתן שתי טביעת אצבע מאנשים שונים, הסבירות ששתיהן יזוהו כשיכות לאותו אדם היא אחד למליון, נשמע טוב?
עכשיו, נניח שבונים מאגר ביומטרי של כל אזרחי המדינה (קצת יותר משבע מליון איש נכון לסוף 2008):
עם סבירות של אחד למליון, בהינתן טביעת אצבע, יהיו לה בממוצע שבע התאמות חיוביות שגויות במאגר.

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

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

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

מומלץ לקרוא את כל הכתבה בYNET.

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

איך נמנע זיוף זהות?

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

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

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

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

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

ועל זה נאמר:
זאב! זאב!

אז, לא – לדעתי זה לא מספיק.

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

projects.firefang.net

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

אגב, הלוגו החביב בחסות creatr.

כרגע יש בו שני פרוייקטים:
1. Zync : משלב בין rsync וzfs, כדי לגבות שרתים מרוחקים.
2. MySQL Monk : מנטר את מצב הרפליקציה של שרתי MySQL ושולח אימייל אם הם מתחילים לזייף (הסלייב נשרך יותר מדי מאחורי המאסטר, או שאחד השרתים למטה).

שני הפרוייקטים הנ"ל מתבססים על Swush כשפת הקונפיגורציה שלהם.
הAPI של Swush כבר מספיק עשיר ויציב, וממש כיף לי להשתמש בו.

והזוכה בתחרות הספאם האידיוטי…

הספאם הכי אדיוטי שראיתי לאחרונה (כמו שנחת באחד הטיקטים של פיירסטטס) :

I just wanted to drop in and mention hello to everyone. I desired to
acquaint myself, my name is Ashley. Hello all, my name is Andrew.howdy to
all, I am new here and my name is Chris.

I decided to post now because I think forum as a whole is very structural
and social. I love reading all of the themes and topics here and
considering that I am not much of a poster, I came to the conclusion to
make my very first topic.

To return back to the community, I have determined I wanted to post a
recent positive experience that I have had with another site I had help
me. This website was up front and extremely professional.

That company is *****************com and they give remote assistance
http://www.*****************.com – pc repair

אופן סולאריס: תצורה, שיתוף קבצים וגיבויים

מכונת האיכסון שלי, להלן איירון, כבר די מוכנה.

תצורת דיסקים ומערכת הקבצים

זו התצורה הנוכחית של הZFS באיירון:
[code lang="bash"]
omry@iron:~/dev/zync$ zpool status
pool: rpool
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
rpool ONLINE 0 0 0
mirror ONLINE 0 0 0
c8d0s0 ONLINE 0 0 0
c9d0s0 ONLINE 0 0 0

errors: No known data errors

pool: storage
state: ONLINE
scrub: none requested
config:

NAME STATE READ WRITE CKSUM
storage ONLINE 0 0 0
mirror ONLINE 0 0 0
c8d0p2 ONLINE 0 0 0
c9d0p2 ONLINE 0 0 0
mirror ONLINE 0 0 0
c9d1 ONLINE 0 0 0
c8d1 ONLINE 0 0 0

errors: No known data errors
omry@iron:~$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
rpool 7.46G 31.7G 81K /rpool
storage 1.54T 672G 1.53T /storage
storage/backup 9.35G 672G 9.35G /storage/backup

[/code]

מה מעניין פה?
מערכת הקבצים של מחיצת השורש – הrpool, נמצאת על שני דיסקים (ליתר דיוק – על מחיצות של שני דיסקים), בתצורת ראי, מה שאומר שאם אחד מהם קורס, המערכת ממשיכה לעבוד. כמובן שבמצב כזה כדי להחליף את הדיסק התקול כמה שיותר מהר.

שאר המקום בשני הדיסקים הראשונים, וכל המקום בשני הדיסקים השניים הוקצה למערכת הקבצים storage, שמשמשת לאכסון, לגיבוי של מחשבים אחרים וכנראה גם כמערכת קבצים מרכזית של ספריית הבית שלי.
בהתחלה שקלתי ללכת על תצורת RAIDZ כדי לנצל כמה שיותר מקום.
הבעיה הגדולה מבחינתי עם RAIDZ היא שהדיסקים שמרכיבים את הpool צריכים להיות באותו גודל (אחרת מפסידים את המקום העודף בדיסקים הגדולים יותר).
מהסיבה הזו הלכתי על RAID10, עם שני זוגות של מירורים בנפח כולל של כ2.5 טרה בייט.
ביום שיהיה לי שם צפוף, אני אוכל לזרוק עוד צמד דיסקים פנימה ולקבל מקום נוסף מיד (בלי להזיז נתונים, להגדיל מערכות קבצים או דברים מעצבנים אחרים).

שיתוף קבצים בין מחשבים

יש לי עוד שני מחשבים, אחד מריץ רק לינוקס, ואחד מריץ לינוקס וחלונות (במכונה וירטואלית בשביל iTunes ימח שמו), ובדואל בוט בשביל משחקים.
כדי לשתף קבצים עם הלינוקסים, הגדרתי שיתוף בNFS.
את NFS פיתחו בסאן, והמימוש שלהם הוא המימוש הטוב ביותר של NFS, הבעיה היא שהמימוש של לינוקס הוא לא ממש לפי התקן, לפחות אם נאמין לשמועה הרווחת.
בזמן העברת קבצים מלינוקס לאופן-סולריס על גבי NFS נתקלתי בבעיות, ההעתקה הופסקה מעצמה בהעתקת קבצים גדולים עם שגיאה קלט/פלט סטנדרטית : די מטריד.
אחרי שווידאתי שהבעיה היא בNFS (העתקתי את הקובץ הגדול באמצעות SCP ווידאתי שהוא תקין עם md5sum) התחלתי לשחק בפרמטרים של NFS בצד הלינוקס, באיזה פרוטוקול הוא מתחבר (NFS4? NFS3? אולי אפילו NFS2 השם ישמור?), באיזה תעבורה? UDP או TCP.
בסוף גיליתי את התצורה שעובדת וגם נותנת ביצועים טובים:
NFS3 עם TCP, ועם חוצצי קבלה ושליחה בגודל 32K (בשביל הביצועים, לא היה להם השפעה על השגיאה).
השורה הרלוונטית /etc/fstab בלינוקס נראית ככה:

[code lang="bash"]
iron:/storage   /storage        nfs     rw,soft,timeo=3,rsize=32768,wsize=32768,proto=tcp 0     0
[/code]

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

גיבוייים של מכונות לינוקס

אין ספק שאיירון היא המכונה הכי עמידה שיש לי בכל מה שקשור לאכסון קבצים ועמידות לקריסת דיסקים (דיסקים קורסים, זו עובדת חיים).
מכיוון שכך, זה רק טבעי שאני ארצה לגבות של מכונות הלינוקס שלי אל איירון.
בעבר תיארתי את אסטרגיית הגיבוי שלי של מכונות לינוקס.
בגדול הרעיון הוא לבצע rsync של הקבצים הרלוונטיים, ולשלב את זה עם רוטציה של ספריות סנאפשוט בזמנים שונים. כדי למנוע בזבוז מיותר של מקום – משתמשים בhard links כך שקובץ שלא שונה מהגיבוי האחרון תופס מקום פעם אחת בלבד.
זה נחמד, אבל די מסורבל : צריך להעתיק את העץ מחדש כל פעם, ולמחוק עצים מיותרים, ובנוסף השיטה של החיסכון במקום לא מושלמת – כי קובץ ששונה רק בביט אחד יתפוס את כל המקום של הקובץ מחדש.
עם הסנאפשוטים של ZFS אפשר לעשות משהו הרבה יותר פשוט ואלגנטי, שגם יותר חסכוני במקום והרבה יותר מהיר.
הרעיון הוא פשוט לסנכרן את הספריה או הספריות הרלוונטיות מהשרת (או השרתים) אל ספריית היעד, ולקחת סנטפשוט של ZFS. כדי למנוע התפוצצות סנטפשוטים, אפשר פשוט למחוק סנאפשוטים ישנים.
כתבתי תוכנה פשוטה בשם zync שמממשת את הרעיון הזה.
כתובה בג'אווה, וקובץ ההגדרות שלה כתוב בswush, אז הוא קריא ונחמד.
הנה קובץ הגדרות לדוגמא:
[code lang="java"]
@swush 1.0

zync
{
backup
{
host : root@10.0.0.2
directory : /

# Exclude files or dirs
exclude
{
/cdrom
/mnt
/dev
/media
/proc
/sys
/tmp
/var/cache
/var/log
/var/lib/mysql
}
}

rsync
{
command : /usr/bin/rsync
destination : "/storage/backup/${host}"
options
{
-a
–force
–delete-excluded
–delete
}
}

zfs
{
backup_file_system : storage/backup
snapshot
{
delete_older : 30d
}
}
}
[/code]

zync כבר די מוכנה לדעתי, ואני מתחיל לגבות איתה את מכונות הלינוקס שלי, כולל את השרת שמריץ את הבלוג.

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

הרוסים באים

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

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

סחתיין עליך, יא מיני-סטאלין.

FireSale

האינטרנט בפייר-סייל, טוויטר למטה! פייסבוק למטה! עוד מעט גם גוגל ואמאזון! 🙂