שימוש ב-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 Annex A):

  • הצפנה מאומתת
    • 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 בלבד, יש להגדיר התרעה בזמן ההידור:

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 לא תאפשר לעבד נתונים.