כשמתחילים לעבוד עם Tink בפעם הראשונה, יש כמה מושגים מרכזיים שכדאי להבין לפני שמתחילים.
פרימיטיבים
ב-Tink משתמש בפרימיטיבים כאבני בניין קריפטוגרפיות שמנהלות אלגוריתם בסיסי כדי שהמשתמשים יוכלו לבצע משימות קריפטוגרפיות בבטחה. פרימיטיב מגדיר את הפרטים של אלגוריתם קריפטוגרפי ואת סוג המפתח.
פרימיטיבים שנתמכים על ידי Tink:
- הצפנה מאומתת עם Associated Data (AEAD): הדרך הנפוצה ביותר להצפנת נתונים, שמתאימה לרוב צורכי ההצפנה. קובץ AEAD מספק סודיות של טקסט ללא הצפנה ומאפשר אימות של התקינות והאותנטיות שלו. למידע נוסף, ראו הצפנה מאומתת עם נתונים משויכים (AEAD).
- הצפנה דטרמיניסטית: פרימיטיב שתמיד מייצר את אותו מידע מוצפן (ciphertext) לטקסט ללא הצפנה ולמפתח מסוימים. זה עלול להיות מסוכן, כי תוקפים צריכים לגלות רק איזה מידע מוצפן (ciphertext) תואם לקלט נתון של טקסט ללא הצפנה כדי לזהות אותו. ראו קובץ דטרמיניסטי של AEAD.
- חתימה דיגיטלית: אסימטרית (ראו הצפנת מפתחות אסימטריים) כדי לאשר את האותנטיות והשלמות של נתונים חתומים. למידע נוסף, ראו חתימה דיגיטלית.
- הצפנה היברידית: פרימיטיב שמשלב בין הצפנת מפתחות אסימטריים והצפנת מפתחות סימטריים (פרטים נוספים זמינים במאמרים הצפנת מפתחות אסימטריים והצפנת מפתחות סימטריים). הצפנה היברידית משלבת את היעילות של הצפנה סימטרית עם הנוחות של הצפנת מפתח ציבורי. כדי להצפין הודעה, נוצר מפתח סימטרי חדש ומשמש להצפנה של הנתונים בטקסט ללא הצפנה, והמפתח הציבורי של הנמען משמש להצפנה של המפתח הסימטרי בלבד. המידע המוצפן הסופי מורכב מהמידע המוצפן הסימטרי ומהמפתח הסימטרי המוצפן. למידע נוסף, ראו הצפנה היברידית.
- קוד אימות הודעות (MAC): אמצעי סימטרי (ראו הצפנת מפתח סימטרי) כדי לאשר את האותנטיות והשלמות של הנתונים. למידע נוסף, ראו קוד אימות הודעות (MAC).
- Streaming AEAD: פרימיטיב שמספק הצפנה מאומתת לסטרימינג של נתונים. שימושי כאשר הנתונים להצפין גדולים מדי ואי אפשר לעבד אותם בשלב אחד. ראו סטרימינג של AEAD.
למידע על התאימות, קראו את המאמר פרימיטיבים נתמכים לפי שפה.
מידע נוסף זמין במאמר עיצוב פרימיטיבי.
סוגים של מפתחות
סוג מפתח מטמיע פרימיטיב ספציפי. לרוב פרימיטיבים יש כמה סוגי מפתחות שאפשר לבחור, בהתאם לדרישות של האבטחה, זמן הריצה והשטח. לדוגמה, AES128_GCM הוא תקן AEAD שהוא מהיר ואפקטיבי לרוב הצרכים. מידע נוסף זמין במאמר סוגי מפתחות נתמכים לפי שפה.
ערכות מפתחות וידיות לערכות מפתחות
ב-Tink משתמש בערכות מפתחות לניהול מפתחות. קבוצת מפתחות היא למעשה קבוצה של מפתחות שמאפשרים רוטציית מפתחות. מאפיינים ראויים לציון של קבוצת מפתחות הם:
- לכל מפתח בקבוצת מפתחות יש מזהה ייחודי, שהוא ייחודי בתוך ערכת מפתחות. המזהה הזה מתווסף בדרך כלל כקידומת לכל מידע מוצפן (ciphertext), חתימה או תג שנוצרו כדי לציין באיזה מפתח נעשה שימוש (למידע נוסף, אפשר לקרוא איך Tink tags ciphertexts).
- רק מפתח אחד בכל פעם בקבוצת מפתחות הוא ראשי. מפתח ראשי בקבוצת מפתחות הוא המפתח שנמצא בשימוש כרגע.
- כל המפתחות בקבוצת מפתחות חייבים להיות הטמעות של אותו פרימיטיב (כמו AEAD), אבל יכולים להיות להם סוגים שונים של מפתחות (לדוגמה, מפתח AES-GCM ו-XCHACHA20-POLY1305).
כל הטמעה של Tink מספקת ממשקי API ליצירה או לעריכה של מפתחות מפתחות. עם זאת, אנחנו ממליצים להשתמש בכלי ה-CLI שלנו Tinkey.
משתמשים פועלים על קבוצת מפתחות באמצעות נקודות אחיזה למערך מפתחות. נקודת האחיזה של קבוצת המפתחות מגבילה את החשיפה של חומר המפתח הרגיש בפועל. הוא גם מפשט מערך מפתחות שמאפשר למשתמשים לקבל פרימיטיב ש "אורז" את כל ערכת המפתחות. לדוגמה, אפשר לקבל פרימיטיב AEAD של קבוצת מפתחות עם מפתחות N
; הצפנה ופענוח באמצעות הפרמיטיב שהושג ולאחר מכן שימוש במפתח הראשי בערכת המפתחות.
מידע נוסף זמין במאמר עיצוב ערכות מפתחות.