בספריות קריפטוגרפיות רבות, מפתחות מזוהים לעיתים קרובות רק לפי כמה רצפי בייט. לדוגמה, פונקציות OpenSSL כמו EVP_EncryptInit_ex
, שצריכות את IV לצורך החישוב בנוסף לבאיטים של המפתח, או השיטה Cipher.init
של javax.crypto, שמקבלת גם רצף מפתחות וגם AlgorithmParameterSpec
. לרוב קשה להשתמש בפונקציות כאלה בצורה נכונה, והעברת הפרמטרים הלא נכונים עלולה להוביל לתוצאות חמורות.
המטרה של Tink היא להיות שונה, והיא מצפה שמפתח תמיד יכלול גם את חומר המפתח וגם את המטא-נתונים (הפרמטרים).
לדוגמה, מפתח AEAD מלא מציין בפירוט מדויק איך פועלות ההצפנה והפענוח – הוא מציין את שתי הפונקציות \(\mathrm{Enc}\) ו-\(\mathrm{Dec}\), ואת אופן הקידוד של הטקסט המוצפן (למשל, וקטור אתחול, ואחריו ההצפנה ואחריו התג).
מפתח AES ב-Tink הוא לא רק רצף בייטים באורך 128, 192 או 256 ביטים, אלא הוא גם מאחסן את מפרטי האלגוריתם התואמים הנדרשים לחישוב המפתח, בצורת אובייקט parameters. לכן, מפתח AES-EAX מלא ומפתח AES-GCM מלא הם אובייקטים שונים ב-Tink.