کلیدها

در بسیاری از کتابخانه های رمزنگاری، کلیدها اغلب تنها با چند توالی بایت شناسایی می شوند. به عنوان مثال توابع OpenSSL مانند EVP_EncryptInit_ex را در نظر بگیرید که به غیر از بایت های کلیدی، به IV نیز برای محاسبه نیاز دارند. یا روش javax.crypto Cipher.init که هم یک دنباله کلید و هم یک AlgorithmParameterSpec را می گیرد. استفاده صحیح از چنین توابعی اغلب دشوار است و عبور از پارامترهای اشتباه می تواند عواقب جدی داشته باشد.

هدف Tink متفاوت بودن است و انتظار دارد که یک کلید همیشه از مواد کلیدی و فراداده (پارامترها) تشکیل شود.

برای مثال، یک کلید کامل AEAD با جزئیات دقیق نحوه عملکرد رمزگذاری و رمزگشایی را مشخص می‌کند - دو تابع \(\mathrm{Enc}\) و\(\mathrm{Dec}\)را مشخص می‌کند، و نحوه کدگذاری متن رمز را مشخص می‌کند (مثلاً بردار مقداردهی اولیه، به دنبال آن رمزگذاری و به دنبال آن برچسب) .

یک کلید AES در Tink نه تنها یک توالی بایت به طول 128، 192 یا 256 بیت است، بلکه مشخصات الگوریتم مربوطه مورد نیاز برای محاسبه کلید را نیز در قالب یک شی پارامتر ذخیره می کند. از این رو، یک کلید کامل AES-EAX و یک کلید کامل AES-GCM اشیاء مختلف در Tink هستند.