Podstawowe elementy i interfejsy

Następnie definiujemy (nieformalnie, a potem bardziej oficjalnie) dwa ważne punkty język używany w Tink, funkcjach podstawowych i interfejsie.

Podstawowy

Obiekt podstawowy to obiekt matematyczny, który odpowiada wszystkim algorytmom. wykonując jakieś zadanie w bezpieczny sposób. Na przykład obiekt podstawowy AEAD składa się ze wszystkich elementów algorytmy szyfrowania spełniające właściwości zabezpieczeń wymagane przez Tink aead.

Podkreślamy, że elementy podstawowe nie są powiązane z językiem programowania ani z konkretnym sposób dostęp do nich. Trzeba traktować obiekt podstawowy jako obiektem matematycznym. Na przykład: jeśli weźmiemy pod uwagę AEAD, zasadniczo będzie to składa się z par funkcji: jedna szyfruje dane, a druga – przeprowadza odszyfrowywanie.

Interfejsy

Interfejs to sposób, w jaki zapewniamy użytkownikom dostęp do elementu podstawowego. Spodziewamy się na przykład, że w przyszłości Tink zapewni interfejs Mac, ale też interfejs StreamingMac, który pozwala na komputer które nie są wczytywane bezpośrednio do pamięci.

Trzeba wyraźnie odróżnić interfejsy i elementy podstawowe. To powinno wyjaśnij, że obiekt matematyczny, któremu te dwa interfejsy dają są takie same.

Formalne definicje

Większości czytelników wystarczą powyższe, intuicyjne wyjaśnienia. Uważamy jednak, że czasami może okazać się ważne, by formalnie definicje tych pojęć.

Funkcje kryptograficzne

Koncepcja funkcji kryptograficznej nie jest tak ważna jak zwykły, ale musimy go wprowadzić, by oficjalnie zdefiniować go jako obiekt podstawowy.

Funkcja kryptograficzna

Funkcja kryptograficzna to mapa

\[ f: {\bf K} \times {\bf R} \times {\bf I} \to {\bf O}\]

ze zbioru \({\bf K}\) (obszaru klawiszy), zbioru \({\bf R} = \{0,1\}^{\infty}\) (losowość, którą zakładamy, że jest zbiorem nieskończonych ciągów bitowych) oraz ustaw \({\bf I}\) (obszar wejściowy) na zbiór \({\bf O}\) (obszar wyjściowy).

Później stanie się jasne, dlaczego dodaliśmy określony parametr losowości.

Pokażemy na przykład, w jaki sposób te pojęcia można przypisać AES-GCM. Dla każdego prawidłowego rozmiaru klucza \(s_k\), rozmiaru liczby jednorazowej \(s_n\)i rozmiaru tagu \(s_t\), AES-GCM składa się z dwóch funkcji kryptograficznych, do szyfrowania, a drugiej do odszyfrowywania. Obie będą miały ten sam obszar klawiszy \({\bf K} = \{0,1\}^{s_k}\).

W przypadku funkcji szyfrowania \(\mathrm{Enc}\)pierwsze \(s_n\) bity zostanie użyta losowość do wyboru liczby jednorazowej.

Niech \({\bf B} = \{0,1\}^8\) wskazujemy bajt. Przestrzeń wejściowa funkcji szyfrowania to pary \({\bf I} = {\bf B}^{*} \times {\bf B}^{*}\) par ciągów bajtów o dowolnej długości. Pierwszym elementem jest przekaz, a drugim powiązane dane. Standard AES-GCM ma górny limit długości z danymi wejściowymi, ale wolimy zezwolić na dowolną długość i zamiast tego dodać specjalne symbol błędu \(\bot\) do obszaru wyjściowego. Przestrzeń wyjściowa zmieni się wtedy w \({\bf O} = {\bf B}^* \cup \{\bot\}\), gdzie dowolnie definiujemy wynik funkcji udane obliczenia jako konkatenację, \((\mathrm{IV} \| \mathrm{ciphertext} \| \mathrm{tag})\) jak podano w standardzie, a dane wyjściowe \(\bot\), na wypadek, gdyby niektóre dane wejściowe były za długie. Dlatego w przypadku klucza stałego funkcja szyfrowania zmienia typ na \(\mathrm{Enc}_k : {\bf R} \times {\bf B}^* \times {\bf B}^* \rightarrow {\bf B}^* \cup \{\bot\}\).

W przypadku funkcji odszyfrowywania \(\mathrm{Dec}\) przestrzeń kluczy jest taka sama. przestrzeń wejściowa jest przypadkowo taka sama: \({\bf I} ={\bf B}^* \times {\bf B}^*\), ale teraz pierwszym elementem powinny być dane wyjściowe funkcji szyfrowania, a drugi to nadal powiązane dane.

Przestrzeń wyjściowa również jest taka sama \({\bf O} = {\bf B}^* \cup \{\bot\}\) (przypadkowo). Interpretacja jest nieco inna, , ponieważ \(\bot\) zwykle oznacza błąd uwierzytelniania (chociaż jest to również dane wyjściowe w przypadku, gdy niektóre dane wejściowe są za długie).

Podkreślamy, że powyższa formalizacja nie jest jedyną opcją formalizacji standardowy. Można na przykład uznać liczbę jednorazową za część danych wejściowych, odczytuje go od losowości (co powoduje zupełnie inny element podstawowy). Można również zdefiniować dane wyjściowe jako potrójną liczbę zawierającą liczbę jednorazową, tekst szyfrowany i tag (zamiast konkatenacji). Albo jeden może ogranicz (trochę arbitralnie) przestrzeń klucza do \({\bf K} = \{0,1\}^{128} \cup \{0,1\}^{256}\)

Algorytm kryptograficzny:

(symetryczny) algorytm kryptograficzny to krotka;

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

funkcji kryptograficznych, gdzie wszystkie funkcje mają taką samą przestrzeń kluczy. typ algorytmu kryptograficznego to krotka \((({\bf I}_1, {\bf O}_1), \ldots, ({\bf I}_k, {\bf O}_k))\).

Na przykład dla każdej prawidłowej wartości potrójnej \((s_k, s_n, s_t)\) klucza, liczby jednorazowej i tagu AES-GCM\({}_{s_k, s_n, s_t}\) to algorytm kryptograficzny, 2 funkcje \(\mathrm{Enc}\) i \(\mathrm{Dec}\) opisane powyżej.

Elementy podstawowe i interfejsy

Następnie definiujemy obiekt kryptograficzny.

Podstawowy
Element zwykły to zestaw algorytmów kryptograficznych, w których wszystkie algorytmy mają ten sam typ \((({\bf I}_1, {\bf O}_1), \ldots, ({\bf I}_k, {\bf O}_k))\), a przestrzenie kluczowe algorytmów są rozdzielone parami.

Weźmy na przykład obiekt \(\mathrm{AEAD}\) podstawowy w bibliotece Tink. Zawiera wiele elementów są to między innymi AES-GCM dla kluczy 128- i 256-bitowych z liczbą jednorazową o rozmiarze 96 bitów, AES-EAX z niektórymi rozmiarami kluczy i XChaCha20Poly1305. Mają rozdzielają przestrzenie kluczy, ale wszystkie pełnią te same funkcje kryptograficzne \(\mathrm{Enc}\) i \(\mathrm{Dec}\). (Nie widzimy w jakiś sposób celu zwięzłość różnych rozmiarów platformy AES-GCM w tej formalnej dyskusji. co można zrobić).

Definiowanie elementów podstawowych

Podstawową cechą elementów podstawowych jest zdefiniowanie właściwości elementów funkcji kryptograficznych i traktować po prostu podstawę jako podstawę dla tych algorytmów.

Na przykład dla AEAD powiedzmy, że \(\mathrm{Dec}_k(\mathrm{Enc}_k(m, a), a) = m\) to 'always'”. zadowolony(a) (z wyjątkiem sytuacji, gdy zwykły tekst \(m\) jest zbyt ). Mają też właściwości zabezpieczeń. na przykład dla jest losowym kluczem, szyfrowanie jest bezpieczne semantycznie.

Element podstawowy AEAD jest więc zbiorem wszystkich algorytmów kryptograficznych, dla tych właściwości. Innymi słowy, w praktyce, gdy definiujemy określony W tym celu definiujemy go na podstawie właściwości. Nie podajemy zgodnie z definicją.

Interfejsy

Interfejs w Tink zapewnia dostęp do elementu podstawowego w tym sensie, że pozwala do obliczenia elementu przestrzeni wyjściowej z przestrzeni wejściowej. Przykład: pomyślmy o interfejsie AEAD w Javie:

public interface Aead {
  byte[] encrypt(byte[] plaintext, byte[] associated_data) throws GeneralSecurityException;
  byte[] decrypt(byte[] ciphertext, byte[] associated_data) throws GeneralSecurityException;
}

Pamiętaj, że nie zapewniamy dostępu do losowości. Użytkownicy mogą natomiast elementów obszaru wprowadzania danych. Odmowa dostępu do losowości jest z celowo.1

Tink czasami oferuje wiele interfejsów dla jednego elementu podstawowego. To może być bardzo przydatne, ponieważ wymagania czasem się różnią. Nadal robię Ma to jakieś ceny: zasadniczo im więcej interfejsów oferuje dany interfejs, jest interoperacyjność. Przykładowo załóżmy, że ktoś tworzy bibliotekę w oparciu o Tink, która wymaga od użytkownika przesłania Aead (aby zaszyfrować coś wewnętrznie). Jeśli Tink oferuje za dużo innych interfejsów do \(\mathrm{AEAD}\) metody podstawowej, że użytkownik nie ma gotowej instancji obsługującej klucz wybrany przez użytkownika i z biblioteki. Dlatego dodanie większej liczby interfejsów jest kompromisem.


  1. Mechanizmy AEAD mają cechy, które są bezpieczne przed wybranymi atakami szyfrowanymi, co jest gwarantowane tylko w przypadku ponownego użycia liczby jednorazowej. Interfejs Aead w Tink został zaprojektowany tak, zapobiega ponownemu użyciu liczby jednorazowej: użytkownik nie może podać liczby jednorazowej jako danych wejściowych do szyfrowania, dla każdej operacji szyfrowania jest generowana losowo nowa liczba jednorazowa.