מה זה Tink?

Tink היא ספריית קריפטוגרפיה בקוד פתוח שנוצרה על ידי מהנדסי קריפטוגרפיה ומהנדסי אבטחה ב-Google. ממשקי ה-API המאובטחים והפשוטים של Tink מצמצמים טעויות נפוצות באמצעות תכנון ממוקד במשתמשים, הטמעה קפדנית ובדיקות קוד ובדיקות מקיפות. ראו את החלק Goals בדף הזה לתובנות נוספות על המטרות העסקיות ש-Tink נועד להשיג.

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

למה כדאי להשתמש ב-Tink?

הסיבות החשובות ביותר לשימוש ב-Tink הן:

  • קל להשתמש בו

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

  • הוא מאובטח

    ב-Tink מוסיפה אמצעי אבטחה לספריות ידועות כמו BoringSSL ו-Java Cryptography Architecture, וכן Java Cryptography Architecture. הן מוצגות בממשקים כדי שבודקים וכלים יוכלו לזהות פערים במהירות. ב-Tink גם מפריד בין ממשקי API שעלולים להיות מסוכנים, כדי שתוכלו לעקוב אחריהם.

  • היא תואמת

    קובצי מידע מוצפן (ciphertext) מסוג Tink תואמים לספריות קריפטוגרפיה קיימות. ספריית Tink תומכת גם בהצפנה או אחסון של מפתחות ב-Amazon KMS, ב-Google Cloud KMS, ב-Android Keystore וב-iOS Keychain.

מי משתמש ב-Tink?

השימוש ב-Tink נמצא בשימוש נרחב בחברות רבות, כולל Google, Square ו-Citadel, וגם מאות לקוחות של Google Cloud ושותפים של Google Pay. ספריית Tink גם מפעילה את ספריית Jetpack Security, שמאובטחת אפליקציות פופולריות רבות ל-Android כמו Slack, Adidas, AirBnb ו-Nextdoor.

שערי סיבולת

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

בקיצור, ל-Tink יש שתי מטרות:

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

המנגנונים העיקריים ש-Tink משתמשת בהם כדי להשיג את היעדים האלה הם:

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

בחלקים הבאים נרחיב על כך בפירוט.

גמישות קריפטוגרפית

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

ביקורות על אבטחה ונכסים מקומיים

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

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

class IdEncrypter {
  public static IdEncrypter createFromAead(Aead aead);

  public String encrypt(long id) throws GeneralSecurityException;
  public long decrypt(String encrypted) throws GeneralSecurityException;
};

העברה של Aead מקבלת את המאפיינים הבאים:

  1. הקוד מציין שכדי לבצע את פעולתו של IdEncrypter, נדרשת סכימת הצפנה עם מאפייני האבטחה של Aead. לחלופין, DeterministicAead לא מספיק – כדי להשתמש ב-IdEncrypter, צריך ליצור שתי הצפנות שונות של אותו מזהה. מצד שני, שימוש כפרמטר במופע של מצפין AES GCM (מופע אחד של Aead) יהיה מחמיר: כל Aead מספיק כדי ש-IdEncrypter יבצע את העבודה שלו, והוא לא צריך להיות אלגוריתם ספציפי אחד.
  2. בדיקת האבטחה יכולה לקחת בחשבון את הנקודה הזו. בודקי האבטחה לא צריכים לעבור על כל מאגר הקודים כדי לבדוק אם מישהו יצר מחלקה משנית של Aead שאינה מאובטחת לשימוש עם IdEncrypter. במקום זאת, ספריית Tink מספקת מאפייני אבטחה שיש לכל האובייקטים ב-Aead, והבודק יכול לבדוק אם הם מספיקים.

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