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

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

הצפנת protobuf

כדי להצפין:

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

כדי לפענח:

  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

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