구조화된 데이터를 보호하고 싶음

Tink API는 임의의 바이너리 blob을 입력으로 사용합니다. 즉, 프로토콜 버퍼와 같은 구조화된 데이터를 암호화하려면 먼저 데이터를 인코딩해야 합니다.

protobuf 암호화

암호화하는 방법은 다음과 같습니다.

  1. protobuf를 바이트 배열로 직렬화합니다.
  2. 직렬화된 바이트를 암호화한 후 결과로 생성된 암호문을 저장하거나 전송합니다. 다음을 사용합니다.

복호화 방법:

  1. 암호문을 복호화합니다.
  2. 1단계가 성공하면 protobuf를 역직렬화합니다.

protobuf의 조작 방지

대부분의 경우 protobuf 암호화는 인증만 사용하는 것보다 낫습니다.

protobuf를 변조로부터 보호하려면 다음 단계를 따르세요.

  1. protobuf를 바이트 배열로 직렬화합니다.
  2. 직렬화된 바이트에 서명하거나 인증합니다. 다음을 사용합니다.
  3. 직렬화된 바이트를 서명 (또는 MAC)과 함께 저장합니다.

확인 방법은 다음과 같습니다.

  1. 직렬화된 protobuf 및 서명 (또는 MAC)을 가져옵니다.
  2. 서명 (또는 MAC)을 확인합니다.
  3. protobuf를 역직렬화합니다.

유효한 서명 또는 MAC이 데이터 형식이 올바르다고 보장하지는 않습니다. 데이터를 파싱하는 구현은 항상 데이터가 손상되었을 수 있다고 예상해야 합니다.

여러 데이터 항목 보호

여러 데이터 항목을 보호하려면 직렬화 방법을 사용합니다. 모든 데이터 항목을 protobuf에 추가하고 위에서 설명한 대로 암호화 (또는 인증)합니다.

다음과 같이 직렬화할 수도 있습니다.

serialize(data1 , data2 , …, datan) = 4-byte-data1's length || data1 || 4-byte-data2's length || data2 || … || 4-byte-dataN's length || dataN

마지막으로 결과 바이트 배열을 암호화 (또는 인증)합니다.