다음으로, 비공식적으로, 그러나 더 공식적으로 Primitive, Interface와 같은 언어를 지원합니다.
기본 역할
프리미티브는 모든 알고리즘에 해당하는 수학 객체입니다. 안전하게 실행하기 위한 것입니다. 예를 들어 AEAD 프리미티브는 Tink에 필요한 보안 속성을 충족하는 암호화 알고리즘 Aead의 동영상 조회수입니다.
프리미티브가 프로그래밍 언어 또는 특정 프로그래밍 언어에 구속되지 않는다는 것을 강조합니다. 방법 액세스할 수 있습니다 대신 프리미티브를 순수하게 수학 객체입니다. 예를 들어 AEAD를 고려하면 기본적으로 함수 쌍으로 구성되는데, 하나는 암호화를 수행하고, 다른 하나는 암호화를 실행하는 복호화를 수행합니다
인터페이스
인터페이스는 사용자에게 프리미티브에 대한 액세스를 제공하는 방법입니다.
예를 들어 향후 Tink는 Mac
인터페이스를 제공할 것으로 예상됩니다.
또한 StreamingMac
인터페이스도 제공하는데요,
데이터를 저장하는 데 사용됩니다.
여기서는 인터페이스와 프리미티브를 명시적으로 구분합니다. 이렇게 해야 이 두 인터페이스가 제공하는 수학적 객체가 액세스는 동일합니다.
공식 정의
대부분의 독자는 위와 같은 직관적인 설명으로도 충분할 것입니다. 그럼에도 불구하고, 우리는 때때로 모든 고객에게 공식적이고 의식적인 서비스를 제공하는 것이 개념 정의에 대해 알아보겠습니다.
암호화 함수
암호화 기능의 개념은 암호화 기능의 개념만큼 중요하지 않습니다. 원시 데이터를 공식적으로 정의하려면 이를 도입해야 합니다.
- 암호화 함수
암호화 함수는
\[ f: {\bf K} \times {\bf R} \times {\bf I} \to {\bf O}\]
집합에서 \({\bf K}\) (키 공간), 집합 \({\bf R} = \{0,1\}^{\infty}\) (무한 비트 문자열 집합으로 가정하는 무작위성) set \({\bf I}\) (입력 공간)을 집합 \({\bf O}\) (출력 공간)으로 설정합니다.
특정 무작위성 매개변수를 추가한 이유는 나중에 명확해집니다.
예를 들어 이러한 개념이 이러한 개념을 어떻게 매핑될 수 있는지 AES-GCM. 유효한 각 키 크기 \(s_k\), nonce 크기 \(s_n\), 태그 크기 \(s_t\), AES-GCM은 두 개의 암호화 함수로 구성됩니다. 하나는 복호화용이고 하나는 복호화용입니다 둘 다 동일한 키 공간 \({\bf K} = \{0,1\}^{s_k}\)을 갖게 됩니다.
암호화 함수 \(\mathrm{Enc}\)의 경우 \(s_n\) 임의성을 사용하여 nonce를 선택합니다.
\({\bf B} = \{0,1\}^8\) 는 1바이트를 표시해 보겠습니다. 암호화 함수의 입력 공간은 \({\bf I} = {\bf B}^{*} \times {\bf B}^{*}\) 길이가 임의의 바이트 문자열 쌍의 쌍입니다. 쌍에서 첫 번째 요소는 메시지이고 두 번째 요소는 수집, 저장, 처리, 제공하는 작업을 수행할 수 있습니다 AES-GCM 표준은 임의의 길이를 허용하고 대신에 특별한 출력 공간에 추가합니다. \(\bot\) 그러면 출력 공간은 \({\bf O} = {\bf B}^* \cup \{\bot\}\)가 되어 표준에 제공된 대로 \((\mathrm{IV} \| \mathrm{ciphertext} \| \mathrm{tag})\) 성공적인 계산을 사용하고 \(\bot\): 일부 입력이 너무 긴 경우 따라서 고정 키의 경우 암호화 함수는 \(\mathrm{Enc}_k : {\bf R} \times {\bf B}^* \times {\bf B}^* \rightarrow {\bf B}^* \cup \{\bot\}\)유형이 됩니다.
복호화 함수의 경우 \(\mathrm{Dec}\) 키 공간은 동일합니다. 이 우연히 입력 공간( \({\bf I} ={\bf B}^* \times {\bf B}^*\))이 동일합니다. 그러나 이제 첫 번째 요소는 암호화 함수의 출력이 되는 것이므로 두 번째 항목은 여전히 연결된 데이터입니다.
출력 공간도 \({\bf O} = {\bf B}^* \cup \{\bot\}\) (우연히) 동일합니다. 해석은 다소 다르긴 하지만 \(\bot\) 는 일반적으로 인증 오류를 나타냅니다. (일부 입력이 너무 긴 경우 출력)
위의 형식화가 데이터 레이크를 공식화하는 유일한 옵션은 아닙니다. 있습니다. 예를 들어 nonce를 입력의 일부로 고려할 수 있습니다. 매우 다른 프리미티브가 됩니다. 또는 출력을 nonce가 포함된 삼중으로 정의할 수 있습니다. 암호문 및 태그 (연결 대신)를 포함합니다. 또는 키 공간을 \({\bf K} = \{0,1\}^{128} \cup \{0,1\}^{256}\)
- 암호화 알고리즘:
(대칭) 암호화 알고리즘은 튜플임
\[(f_1, ... f_k)\]
모든 함수의 키 공간이 동일한 암호화 기능이 포함됩니다 이 유형은 튜플 \((({\bf I}_1, {\bf O}_1), \ldots, ({\bf I}_k, {\bf O}_k))\)입니다.
예를 들어 키, nonce, 태그의 유효한 \((s_k, s_n, s_t)\) 3가지 트리플마다 AES-GCM\({}_{s_k, s_n, s_t}\) 은 두 가지 함수 \(\mathrm{Enc}\) 및 \(\mathrm{Dec}\) 위에 설명된 것과 같습니다.
프리미티브 및 인터페이스
다음으로 암호화 프리미티브를 정의합니다.
- 기본 역할
- 원시는 암호화 알고리즘의 집합으로, 모든 알고리즘이 \((({\bf I}_1, {\bf O}_1), \ldots, ({\bf I}_k, {\bf O}_k))\)가 동일하며 알고리즘의 키 공간은 쌍으로 분리됩니다.
예를 들어 Tink의 \(\mathrm{AEAD}\) 프리미티브를 생각해 보세요. 여러 개의 그 중에서 키 크기 128 및 256비트를 위한 AES-GCM과 nonce가 있는 알고리즘 크기 96비트, 일부 키 크기가 있는 AES-EAX 및 XChaCha20Poly1305입니다. 그들은 분리된 키 공간이지만 모두 동일한 암호화 기능을 제공 \(\mathrm{Enc}\) 및 \(\mathrm{Dec}\). (우리는 어떤 목적으로든 이 공식적인 논의에서 AES-GCM의 다양한 키 크기를 축소하지만 그렇게 할 수 있습니다).
프리미티브 정의
프리미티브를 생각하는 일반적인 방법은 먼저 원시 데이터가 모두 될 수 있다고 간주하기만 하면 이러한 알고리즘이 포함될 수 있습니다.
예를 들어 AEAD의 경우 \(\mathrm{Dec}_k(\mathrm{Enc}_k(m, a), a) = m\) 는 'always'입니다. 충족 (예: 일반 텍스트 \(m\) 이 길게) 또한 다음과 같은 보안 속성도 있습니다. 예를 들어 암호화는 의미상 안전합니다.
그러면 AEAD 프리미티브는 이러한 속성을 충족할 수 있습니다 다시 말해, 실제로는 속성을 기반으로 정의합니다. Google은 개인 정보 보호 장치가 있는 알고리즘에 대해 배웁니다.
인터페이스
Tink의 인터페이스는 을 사용하여 입력 공간에서 출력 공간의 요소를 계산합니다. 예를 들어 Java의 AEAD 인터페이스를 살펴보겠습니다.
public interface Aead {
byte[] encrypt(byte[] plaintext, byte[] associated_data) throws GeneralSecurityException;
byte[] decrypt(byte[] ciphertext, byte[] associated_data) throws GeneralSecurityException;
}
임의성에 대한 액세스 권한은 부여하지 않습니다. 대신 사용자가 입력 공간의 요소를 제공합니다. 임의성에 대한 액세스를 허용하지 않는 이유: 이 과정을 수강할 수 있습니다.1
Tink는 단일 프리미티브에 여러 인터페이스를 제공하는 경우도 있습니다.
요구사항이 다를 수 있으므로 이 방법은 매우 유용할 수 있습니다. 여전히
대가가 따릅니다. 일반적으로 제공하는 인터페이스가 많을수록
바로 상호 운용성입니다 예를 들어
사용자가 Tink를 기반으로
Aead
객체 (내부적으로 무언가를 암호화하기 위해). Tink에서
프리미티브와 다른 \(\mathrm{AEAD}\) 인터페이스를 사용하므로
사용자가
에 사용자가 선택한 키와
동시에 사용할 수 있습니다. 따라서 인터페이스를 추가하면 장단점이 있습니다.
-
AEAD 암호화에는 안전한 속성 차단하도록 설정할 수 있으며, 이는 암호화된 데이터에 대한 nonce의 재사용입니다. Tink의 Aead 인터페이스는 nonce 재사용을 방지합니다. 사용자는 암호화를 위한 입력으로 nonce를 제공할 수 없습니다. 암호화 작업마다 새로운 nonce가 무작위로 생성됩니다. ↩