אני רוצה להגן על נתונים מובְנים

ממשקי API של Tink משתמשים ב-blobs בינאריים שרירותיים כקלט. כלומר, אם רוצים להצפין נתונים מובְנים, כמו מאגרי פרוטוקולים, צריך קודם לקודד אותם.

הצפנת protobuf

כדי להצפין:

  1. ממירים את ה-protobuf למערך בייטים.
  2. יש להצפין את הבייטים הסידוריים, ולאחר מכן לאחסן או לשלוח את המידע מוצפן (ciphertext) שנוצר. יש להשתמש:

כדי לפענח את ההודעה:

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

הגנה על אב-טיפוס מפני פגיעה

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

כדי להגן על פרוטובוף מפני פגיעה:

  1. ממירים את ה-protobuf למערך בייטים.
  2. חותמים על הבייטים בסדרה או מאמתים אותם. יש להשתמש:
  3. אחסון הבייטים הטוריים יחד עם החתימה (או MAC).

כדי לאמת:

  1. משיגים את ה-protobuf הטורי ואת החתימה שלו (או MAC).
  2. מאמתים את החתימה (או MAC).
  3. מבצעים פעולת deserialize של פרוטובוף.

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

להגן על פריטים מרובים של נתונים

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

אפשר גם לערוך את הסדר הבא:

serialize(data1 , data2 , …, datan) = 4-byte-data1's length || data1 || 4-byte-data2's length || data2 || … || 4-byte-dataN's length || dataN

לבסוף, יש להצפין (או לאמת) את מערך הבייטים שמתקבל.