מקשים

בספריות קריפטוגרפיות רבות, המפתחות מזוהים לעיתים קרובות רק על ידי כמה רצפים של בייטים. ניקח לדוגמה פונקציות OpenSSL כמו EVP_EncryptInit_ex, ששונות מאלה של הבייטים המרכזיים, גם מחייבות חישוב של IV: או שיטת Javax.crypto Cipher.init, שיש בה גם רצף מפתחות וגם AlgorithmParameterSpec. לעיתים קרובות קשה להשתמש בפונקציות כאלה כראוי, והעברה של פרמטרים שגויים יכולה להיות לה השלכות חמורות.

המטרה של Tink היא להיות שונה, והוא מצפה שהמפתח תמיד יכלול גם את חומר המפתח וגם את המטא-נתונים (הפרמטרים).

לדוגמה, מפתח מלא של AESD מציין באופן מדויק את אופן הפעולה של הצפנה ופענוח: הוא מציין את שתי הפונקציות \(\mathrm{Enc}\) ו-\(\mathrm{Dec}\), ואת אופן ההצפנה של המידע (למשל, וקטור האתחול, שאחריו מופיע התג).

מפתח AES ב-Tink הוא לא רק רצף בייטים באורך 128, 192 או 256 ביט, אלא הוא גם מאחסן את מפרט האלגוריתם התואם הדרוש לחישוב המפתח, בצורת אובייקט פרמטרים. לכן, מפתח AES-EAX מלא ומפתח מלא של AES-GCM הם אובייקטים שונים ב-Tink.