שימוש ב-Tink כדי לעמוד בדרישות האבטחה של FIPS 140-2

ה-Tink עצמו אינו אישור FIPS 140-2 אושר. עם זאת, הוא תומך בכמה מודלים של FIPS 140-2 אלגוריתמים שאושרו וההטמעות הבסיסיות יכולים לנצל מודולים קריפטוגרפיים מאומתים כמו BoringSSLs BoringCrypto. Tink כולל WORKSPACE לפיתוח BoringSSL במצב FIPS.

חשוב לשים לב שסביבת העבודה לא מספקת ערובה מעצם טבעה שהשימוש שלך ב-BoringSSL תואם ל-FIPS. מומלץ מאוד לקרוא את מדיניות האבטחה של BoringCrypto.

אלגוריתמים נתמכים

האלגוריתמים הבאים ב-Tink מאושרים בהתאם FIPS 140-2 (מידע נוסף זמין בכתובת נספח FIPS 140-2 נספח א'):

  • הצפנה מאומתת
    • AES-GCM
    • AES-CTR-HMAC-SHA256
  • MAC
    • HMAC-SHA256
    • AES-CMAC
  • חתימות דיגיטליות
    • ECDSA
    • RSA-SSA-PKCS1
    • RSA-SSA-PSS

מצב FIPS בלבד ב-C++

אם אתם נדרשים להשתמש באלגוריתמים שאושרו על ידי FIPS 140-2 ואומתו אפשר לבנות Tink במצב FIPS בלבד. ההגדרה הזו מגבילה לאלגוריתמים שאושרו וגם לבדוק אם ב-Tink נעשה שימוש באלגוריתם מאומת למודול הקריפטוגרפי.

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

  • פונקציות Register() רושמות רק אלגוריתמים עם FIPS יישום מאומת. המשמעות היא שרק אתם יכולים להשתמש ערכות מפתחות לאלגוריתמים שמשתמשים במודול קריפטוגרפי מאומת.
  • Tink בודק אם BoringSSL נבנה באמצעות המודול BoringCrypto. קריאות לרכיב ראשי מחזירות שגיאת INTERNAL כשהמודול לא זמינים.
  • השימוש בפרימיטיביים ב-subtle/ מוגבל לאלגוריתמים שמשתמשים מודול קריפטוגרפי מאומת.

BoringCrypto

Tink משתמש ב-BoringCrypto ב-C++ כדי לספק גישה למודול קריפטוגרפי מאומת. הנוכחי סטטוס האימות מחייב את המגבלות הנוספות הבאות על במצב FIPS בלבד:

  • AES-CMAC לא אומת ואינו זמין
  • RSA-SSA-PKCS1 מוגבל למודולוס של 3072 ביט
  • RSA-SSA-PSS מוגבל למודול של 3072 ביט

כדי להשתמש במודול BoringCrypto עם Bazel, אפשר לבטל את הוספת ההערה ההגדרה של local_repository עבור boringssl בC++ Workspace.

הפעלה בזמן הידור

כדי לבנות Tink במצב FIPS בלבד, מגדירים דגל בזמן הידור (compile) :

bazel build ... --//third_party/tink/cc/config:use_only_fips=True

אם רוצים לבדוק בזמן הריצה אם Tink נבנה במצב FIPS בלבד, אפשר לכלול את הכותרת internal/fips_utils.h שמספקת את הערך הקבוע kUseOnlyFips.

אם אתם לא מפתחים את Tink במצב FIPS בלבד, אפשר עדיין להשתמש בו אימותים של אלגוריתמים מסוימים, אבל לא מגבילים את השימוש אלגוריתמים אחרים.

הפעלה בזמן הריצה

כחלופה לבניית Tink במצב FIPS בלבד, ניתן לבצע קריאה crypto::tink::RestrictToFips() מ-config/tink_fips.h שמגדיר דגל בזמן הריצה כדי לאפשר את ההגבלות לפרימיטיביים של FIPS.

אזהרה: אם משתמשים באפשרות של זמן ריצה, אז crypto::tink::RestrictToFips() חייבים לקרוא להן לפני טיפול בחומר מפתח, רישום מנהל מפתחות או פונקציות אחרות של Tink. בנוסף, עליך לוודא ש-BoringSSL נבנה באמצעות המודול BoringCrypto, אחרת מערכת Tink לא מאפשרת לכם לעבד נתונים כלשהם.