Temel Öğeler ve Arayüzler

Ardından Tink'te kullanılan dilin iki önemli parçasını (resmî olmayan ama daha resmi olarak) tanımlıyoruz: Primitive ve Arayüz.

İlkel

Temel öğe, bir görevi güvenli bir şekilde gerçekleştiren tüm algoritmalara karşılık gelen matematik bir nesnedir. Örneğin, AEAD temel öğesi, Tnk'in bir Aead için gerektirdiği güvenlik özelliklerini karşılayan tüm şifreleme algoritmalarından oluşur.

Temel öğelerin bir programlama diline veya bu öğelere belirli bir erişim yöntemine bağlı olmadığını vurguluyoruz. Bunun yerine, ilkel öğe sırf matematiksel nesne olarak düşünülmelidir. Örneğin, AEAD'yi dikkate alırsak temelde biri şifreleme, diğeri şifre çözme işlevi gerçekleştiren fonksiyon çiftlerinden oluşur.

Arayüzler

Arayüz, kullanıcıların basit bir öğeye erişmesini sağlamak için kullanılan bir yöntemdir. Örneğin, gelecekte Tink'in bir Mac arayüzü ve aynı zamanda doğrudan belleğe yüklenmeyen verilerin mac'ini hesaplamayı sağlayan StreamingMac arayüzü sunmasını bekliyoruz.

Burada arayüzleri ve temel öğeleri açık bir şekilde ayırdığımızı unutmayın. Bu şekilde, bu iki arayüzün erişim sağladığı matematiksel nesnenin aynı olduğu açıkça belirtilmelidir.

Resmi tanımlar

Yukarıdaki kolay anlaşılır açıklamalar çoğu okuyucu için muhtemelen yeterli olacaktır. Yine de, bu kavramların resmi tanımlarını sunmanın bazen önemli olabileceğini düşünüyoruz.

Şifreleme işlevleri

Kriptografik fonksiyon kavramı, ilkel kavramı kadar önemli değildir, ancak temeli resmi olarak tanımlamak için kriptografik işlev kavramını tanıtmamız gerekir.

Şifreleme İşlevi

Şifreleme işlevi bir harita ve

\[ 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 dizeleri grubu olduğunu varsaydığımız rastgelelik) ve bir kümeden \({\bf I}\) (giriş alanı) \({\bf O}\) (çıktı alanı).

Neden belirli bir rastgelelik parametresi eklediğimizi daha sonra açıklayacağız.

Örnek olarak, bu kavramların AES-GCM ile nasıl eşlenebileceğine dair bir olasılık gösteriyoruz. Her bir geçerli anahtar boyutu \(s_k\), tek seferlik rastgele boyut \(s_n\)ve etiket boyutu için\(s_t\)AES-GCM, biri şifreleme, diğeri şifre çözme olmak üzere iki şifreleme işlevinden oluşur. Her ikisi de aynı anahtar alanına \({\bf K} = \{0,1\}^{s_k}\)sahip olur.

Şifreleme işlevinde \(\mathrm{Enc}\), tek seferlik rastgele sayının \(s_n\) ilk bitleri kullanılır.

\({\bf B} = \{0,1\}^8\) bir bayt göstersin. Şifreleme işlevinin giriş alanı, \({\bf I} = {\bf B}^{*} \times {\bf B}^{*}\) rastgele uzunluktaki bayt dizesi çiftlerinden oluşur. Çiftin ilk öğesi mesaj olmak üzere tasarlanmıştır, ikinci öğe ise ilişkili verilerdir. AES-GCM standardında girişlerin uzunluğu için bir üst sınır vardır, ancak rastgele uzunluklara izin vermeyi ve bunun yerine çıkış alanına özel bir hata sembolü \(\bot\) eklemeyi tercih ederiz. Daha sonra çıkış alanı \({\bf O} = {\bf B}^* \cup \{\bot\}\)haline gelir. Başarılı hesaplamaların sonucunu isteğe bağlı olarak standartta verilen birleştirme işlemi \((\mathrm{IV} \| \mathrm{ciphertext} \| \mathrm{tag})\) ve bazı girdilerin çok uzun olması ihtimaline karşı çıkış\(\bot\)şeklinde tanımlarız. Bu nedenle, 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ünde olur.

Şifre çözme işlevi için \(\mathrm{Dec}\) anahtar alanı aynıdır. Giriş alanı tesadüfen aynıdır: \({\bf I} ={\bf B}^* \times {\bf B}^*\), ancak artık ilk öğe şifreleme işlevinin çıktısı olacak şekilde düşünülmüştür, ikincisi ise hâlâ ilişkili verilerdir.

Çıktı alanı da aynı \({\bf O} = {\bf B}^* \cup \{\bot\}\) (tesadüfen) olur. Yorumlama biraz farklıdır, çünkü \(\bot\) genellikle bir kimlik doğrulama hatasını belirtir (ancak bazı girişlerin çok uzun olması durumunda çıkış olacaktır).

Yukarıdaki biçimlendirmenin, standardı biçimlendirmek için tek seçenek olmadığını vurguluyoruz. Örneğin, tek seferlik rastgelelikten (ve çok farklı bir temelle sonuçlanır) okumak yerine, tek seferlik rastgele sayının bir parçası olduğunu düşünebilirsiniz. Alternatif olarak, çıktı, birleştirme yerine tek seferlik rastgele metin, şifrelenmiş metin ve etiketi içeren bir üçlü olarak tanımlanabilir. Alternatif olarak, anahtar alanı (isteğe bağlı olarak)\({\bf K} = \{0,1\}^{128} \cup \{0,1\}^{256}\)ile kısıtlanabilir.

Kriptografik Algoritma:

(simetrik) şifreleme algoritması

\[(f_1, ... f_k)\]

kriptografik işlevlerden oluşur. Kriptografik algoritmanın türü, \((({\bf I}_1, {\bf O}_1), \ldots, ({\bf I}_k, {\bf O}_k))\)demetidir.

Örneğin, anahtar, tek seferlik rastgele sayı ve etiket boyutunun her bir geçerli üçlü \((s_k, s_n, s_t)\) öğesi için AES-GCM\({}_{s_k, s_n, s_t}\) , iki işleve sahip \(\mathrm{Enc}\) ve \(\mathrm{Dec}\) yukarıda açıklanan bir şifreleme algoritmasıdır.

Temel öğeler ve arayüzler

Şimdi, bir temel kriptografi öğesini tanımlıyoruz.

İlkel
İlkel, tüm algoritmaların aynı türde olduğu \((({\bf I}_1, {\bf O}_1), \ldots, ({\bf I}_k, {\bf O}_k))\)ve algoritmaların anahtar alanlarının ikili olarak ayrıldığı bir kriptografik algoritma grubudur.

Örneğin, Tink'teki \(\mathrm{AEAD}\) ilkeyi ele alalım. Birden fazla algoritma içerir. Bunların arasında, tek boyut 96 bit ile 128 ve 256 bit anahtar boyutları için AES-GCM, bazı anahtar boyutlarına sahip AES-EAX ve XChaCha20Poly1305 yer alır. Bunlar birbirinden bağımsız anahtar boşluklarına sahiptir ancak hepsi aynı şifreleme işlevlerini\(\mathrm{Enc}\) ve \(\mathrm{Dec}\)sağlar. (Bu resmi konuşmada AES-GCM'nin farklı anahtar boyutlarının bir şekilde daraltılmasının bir amacı yok, ancak elbette böyle bir amacımız olabilir).

Temel öğeleri tanımlama

Temel öğelerin genel düşünme şekli, ilk olarak kriptografi işlevlerinin özelliklerini tanımlamak ve ardından temel öğenin bu tür algoritmaların tümü olarak kabul edilmesidir.

Örneğin, AEAD için \(\mathrm{Dec}_k(\mathrm{Enc}_k(m, a), a) = m\) değeri "her zaman" karşılanır (ör. düz metin \(m\) çok uzunsa). Buna ek olarak, güvenlik özelliklerimiz de vardır. Örneğin, rastgele bir anahtar için şifreleme seamsal olarak güvenlidir.

Bu durumda AEAD temel öğesi, bu özellikleri karşılayan tüm kriptografik algoritmalar kümesidir. Diğer bir deyişle, pratikte belirli bir ilkel öğe tanımlandığında, bunu özelliklerine göre tanımlarız. Tanımdan da anlaşılacağı gibi bir algoritma listesi vermiyoruz.

Arayüzler

Tink'teki bir arayüz, giriş alanından çıkış alanının bir öğesinin hesaplanabilmesi açısından bir temel öğeye erişim sağlar. Örneğin, Java'daki AEAD arayüzünü düşünün:

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ı öğelerini sağlamasına imkan tanıyoruz. Rastgeleliğe erişime izin vermemek doğaldır.1

Tink bazen tek bir temel öğe için birden çok arayüz sunar. Koşullar zaman zaman farklılık gösterebileceğinden bu yöntem, son derece kullanışlı olabilir. Yine de bunu yapmanın bir bedeli vardır: Genel olarak, bir kullanıcı ne kadar çok arayüz sunarsa birlikte çalışabilirlik o kadar düşük olur. Örneğin, bir kullanıcının Tink'e dayalı bir kitaplık yazdığını ve kullanıcının bir Aead nesnesini içeriden geçmesini (bir şeyi dahili olarak şifrelemek için) gerektirdiğini düşünün. Tink, temel \(\mathrm{AEAD}\) öğe için çok sayıda farklı arayüz sunuyorsa kullanıcının hem kullanıcının seçtiği anahtar hem de kitaplık için aynı anda çalışan bir örneğinin hazır olmaması ihtimali yüksektir. Bu nedenle, daha fazla arayüz eklemek kazanç sağlar.


  1. AEAD şifreleri, seçilen şifreli metin saldırılarına karşı güvenli olma özelliğine sahiptir ve yalnızca tek seferlik rastgele sayı kullanılmadığında garanti edilir. Tink'teki Aead arayüzü, tek seferlik rastgele tekrar yapılmasını engelleyecek şekilde tasarlanmıştır: Kullanıcı, şifreleme için giriş olarak tek seferlik bir sayı sağlayamaz. Bunun yerine, her şifreleme işlemi için rastgele yeni bir tek seferlik rastgele sayı oluşturulur.