Time to say goodbye...

תיאור

Time to say goodbye...

פתרון

האתגר הזה הציע שני API-ים:

/getuuid to "Generate a valid UUID in the system"  
/validate/{uuid}:{token} to "Validate a given token for a UUID"

ה-API של getuuid החזיר UUID אקראי יחד עם Token מתאים, בעל 6 ספרות. מטרת האתגר הייתה להשתמש ב-API של validate יחד עם ה-UUID מהתיאור ו-Token מתאים. כאשר ניסינו לשלוח חזרה את ה-UUID וה-Token שהתקבלו מהשרת, השרת הציג הודעת אישור תקינות (אך לא את הדגל, מכיוון שהדגל יוצג רק עבור ה-UUID הספציפי שבתיאור). הרמז הגדול ביותר שניתן היה לתת הוא לשכוח את כל מה שיודעים על TOTP, פונקציות גיבוב, מימושים מוכרים של 2FA, או אבטחת מידע בכלל. הפתרון, שהושג לאחר ניסוי וטעייה רבים, הוא ביצוע XOR של הספרות האחרונות של ה-UUID, לאחר ביצוע מודולו, באופן הבא:

***(int(UserUUID[-6:],16) % 1000000) ^ (int(time.time()) % 1000000)[-6:]***