Daha sonra, resmî anlamda, ancak daha resmî anlamda olmak üzere Tink'te, Primitive ve Arayüz'de kullanılan dil.
Temel
Temel öğe, tüm algoritmalara karşılık gelen matematiksel bir nesnedir güvenli bir şekilde gerçekleştirmeyi öğrenmiştiniz. Örneğin, AEAD temel öğesi Tinek'in gerektirdiği güvenlik özelliklerini karşılayan bir karakterdir.
Temel elemanların bir programlama diline veya belirli bir programlama diline bağlı olmadığını vurguluyoruz. yolu erişebilir. Temel unsurların sadece bir sonucun matematiksel nesnedir. Örneğin, AEAD'yi göz önünde bulundurursak temelde Biri şifrelemeyi, diğeri ise şifrelemeyi yapan fonksiyon çiftlerinden şifre çözme işlemini gerçekleştirir.
Arayüzler
Arayüz, kullanıcıların temel bir öğeye erişmesini sağladığımız bir yöntemdir.
Örneğin, gelecekte Tink'in bir Mac
arayüzü sağlayacağını düşünüyoruz.
Ayrıca, Mac'inizin mac'ini hesaplamanıza olanak tanıyan StreamingMac
arayüzü de
doğrudan belleğe yüklenmeyen verilerdir.
Burada arayüzlerin ve temel öğelerin açık bir şekilde ayırt edildiğini unutmayın. Bu bu iki arayüzün sağladığı matematiksel nesnenin aynı olduğu söylenebilir.
Resmi tanımlar
Çoğu okuyucu için yukarıdaki sezgisel açıklamalar muhtemelen yeterli olacaktır. Yine de, bazen resmî bir bilgi sunmanın ve resmi bir karara varmanın tanımlarını öğreneceksiniz.
Kriptografik işlevler
Şifreleme işlevi kavramı, ilkel ama resmi olarak tanımlamak için bunu tanıtmamız gerekir.
- Şifreleme İşlevi
Şifreleme işlevi
\[ f: {\bf K} \times {\bf R} \times {\bf I} \to {\bf O}\]
bir kümeden \({\bf K}\) (anahtar alanı), bir kümeden \({\bf R} = \{0,1\}^{\infty}\) (sonsuz bit dizesi kümesi olduğunu varsadığımız rastgelelik) ve bir set \({\bf I}\) (giriş alanı), bir kümeye \({\bf O}\) (çıktı alanı) değerini girin.
Neden belirli bir rastgelelik parametresi eklediğimizi daha sonra açıklayacağız.
Örnek olarak, bu kavramların birbiriyle nasıl eşlenebildiğini AES-GCM'yi tıklayın. Her geçerli anahtar boyutu \(s_k\), tek seferlik rastgele sayı \(s_n\)ve etiket boyutu için \(s_t\), AES-GCM, biri diğeri de şifre çözme için kullanılıyor. Her ikisi de aynı anahtar alanına sahip olur \({\bf K} = \{0,1\}^{s_k}\).
Şifreleme işlevi için \(\mathrm{Enc}\), \(s_n\) rastgelelik, tek seferlik rastgele sayı seçmek için kullanılır.
Bir bayt gösterelim. \({\bf B} = \{0,1\}^8\) Şifreleme işlevinin giriş alanı, rastgele uzunluktaki bayt dizesi çiftlerinin \({\bf I} = {\bf B}^{*} \times {\bf B}^{*}\) eşidir. Çiftin ilk öğesi mesaj olacak; ikinci öğe ise ilişkili verilerdir. AES-GCM standardının ancak rastgele uzunluklara izin vermeyi ve bunun yerine özel hata sembolü \(\bot\) olarak ekleyebilirsiniz. Daha sonra çıkış alanı \({\bf O} = {\bf B}^* \cup \{\bot\}\)haline gelir; burada rastgele sonucu tanımlarız hesaplamada kullanılan başarılı hesaplamalar ve \((\mathrm{IV} \| \mathrm{ciphertext} \| \mathrm{tag})\) çıktı Bazı girişlerin çok uzun olması ihtimaline karşı\(\bot\). Dolayısıyla, sabit bir anahtar için şifreleme işlevi \(\mathrm{Enc}_k : {\bf R} \times {\bf B}^* \times {\bf B}^* \rightarrow {\bf B}^* \cup \{\bot\}\)türüne dönüşür.
Şifre çözme işlevi için \(\mathrm{Dec}\) anahtar alanı aynıdır. İlgili içeriği oluşturmak için kullanılan giriş alanı tesadüfen aynı: \({\bf I} ={\bf B}^* \times {\bf B}^*\), Ancak şimdi ilk öğe şifreleme işlevinin çıktısı olacak. ikincisi hâlâ ilişkili verilerdir.
Çıkış alanı da aynıdır \({\bf O} = {\bf B}^* \cup \{\bot\}\) (ancak tesadüftür). Yorumlama biraz farklıdır, \(\bot\) , genellikle bir kimlik doğrulama hatasını belirtir (ancak bu aynı zamanda çıkışı).
Yukarıdaki formülasyonun, raporu resmi bir yapıya kavuşturmak için tek seçenek olmadığını vurguluyoruz. standart. Örneğin, tek seferlik rastgele sayı girişin bir parçası olarak düşünülebilir (bu da çok farklı bir ilkelin ortaya çıkmasına yol açar) Alternatif olarak, çıktı, tek seferlik rastgele sayı içeren bir üçlü olarak da tanımlanabilir. şifrelenmiş metin ve etiket (birleştirme yerine). Ya da anahtar boşluğunu (biraz rastgele) \({\bf K} = \{0,1\}^{128} \cup \{0,1\}^{256}\)
- Kriptografik Algoritma:
(simetrik) şifreleme algoritması bir demettir
\[(f_1, ... f_k)\]
kriptografik fonksiyonlar içerir. İlgili içeriği oluşturmak için kullanılan Şifreleme algoritmasının türü ise üçlü işaretidir \((({\bf I}_1, {\bf O}_1), \ldots, ({\bf I}_k, {\bf O}_k))\).
Örneğin; anahtar, tek seferlik rastgele sayı ve etiket \((s_k, s_n, s_t)\) olan her geçerli üçlü değeri için AES-GCM,\({}_{s_k, s_n, s_t}\) son 30 güne ait iki işlev \(\mathrm{Enc}\) ve \(\mathrm{Dec}\) yukarıda açıklanmıştır.
Temel öğeler ve arayüzler
Ardından bir temel kriptografi tanımlayalım.
- Temel
- İlkel, bir dizi şifreleme algoritmasıdır. Algoritmalar aynı türde \((({\bf I}_1, {\bf O}_1), \ldots, ({\bf I}_k, {\bf O}_k))\)ve algoritmaların anahtar boşlukları ikili olarak ayrılıyor.
Örnek olarak Tink'teki \(\mathrm{AEAD}\) temel öğeyi ele alalım. Birden fazla Bunlar arasında, tek seferlik rastgele sayı 128 ve 256 bit anahtar boyutları için AES-GCM XChaCha20Poly1305 ve bazı anahtar boyutları için AES-EAX ve XChaCha20Poly1305 kullanılır. Bunlar ayrı anahtar boşlukları, ancak tümü aynı şifreleme işlevlerini sağlar \(\mathrm{Enc}\) ve \(\mathrm{Dec}\). (Bir şekilde amaç görmüyoruz Bu resmi tartışmada AES-GCM'nin farklı anahtar boyutlarını daraltabilir, ancak yapabiliriz).
Temel unsurları tanımlama
Temel elemanlar hakkında genellikle kullanılan yaklaşım, önce bu elementlerin özelliklerini tanımlamak kriptografik işlevler ve ardından temel öğeleri tüm öğeler yardımcı olur.
Örneğin, AEAD için \(\mathrm{Dec}_k(\mathrm{Enc}_k(m, a), a) = m\) "her zaman" memnun (ör. şifrelenmemiş metin \(m\) çok iyiyse uzun) yer alır. Ayrıca, güvenlik özelliklerimiz mevcuttur: örneğin, şifreleme semantik olarak güvenlidir.
Bu durumda AEAD temel öğesi, Veriye Dayalı İlişkilendirme'nin kullanıldığı tüm kriptografik bu özellikleri yerine getirir. Başka bir deyişle, uygulamada belirli bir özellikleri temel alarak tanımlarız. Her şeyin bir listesini algoritmalardan yararlanırız.
Arayüzler
Tink'teki bir arayüz, temel bir öğeye erişim izni verirken çıkış alanının bir elemanı hesaplamak için kullanılır. Örneğin, Java'daki AEAD arayüzünü göz önünde bulundurun:
public interface Aead {
byte[] encrypt(byte[] plaintext, byte[] associated_data) throws GeneralSecurityException;
byte[] decrypt(byte[] ciphertext, byte[] associated_data) throws GeneralSecurityException;
}
Rastgeleliğe erişim izni vermediğimizi unutmayın. Bunun yerine, kullanıcının giriş alanının öğelerini sağlar. Rastgeleliğe erişime izin vermeme bir eğitim türüdür.1
Tink, bazen tek bir temel öğe için birden fazla arayüz sunar.
Gereklilikler bazen farklılık gösterdiğinden, bu yöntem çok faydalı olabilir. Yine de bunu yaparken
bunun bir bedeli vardır: Genel olarak, kullanıcı ne kadar çok arayüz sunarsa,
önemli bir nokta. Mesela diyelim ki
kullanıcının Tink'e dayalı bir kitaplık yazdığını ve bunun için kullanıcının
Aead
nesnesi (bir öğeyi dahili olarak şifrelemek için). Tink çok fazla teklif veriyorsa
ilkelle farklı arayüzler kullanıyorsanız \(\mathrm{AEAD}\) yüksek
kullanıcının
kullanıcının seçtiği anahtar ve
aynı anda değiştirebilirsiniz. Bu nedenle, daha fazla arayüz eklemek ödünç değildir.
-
AEAD şifreleri güvenli oldukları özelliğe sahiptir şifreli metin saldırılarına karşı garanti edilir. Bu saldırı tekrar kullanılmasıdır. Tink'teki Aead arayüzü, tam ekran modunda tek seferlik rastgele sayı yeniden kullanımını engeller: Kullanıcı, şifreleme için giriş olarak tek seferlik bir tek seferlik rastgele sayı sağlayamaz. Bunun yerine, her şifreleme işlemi için rastgele yeni bir tek seferlik rastgele oluşturulur. ↩