2020년 6월 23일 화요일

RPMB (Replay Protection Memory Block)

EMMC, UFS 및 NVMe와 같은 스토리지 기술은 범용 프로토콜 및 프레임 레이아웃을 가진 RPMB 하드웨어 파티션을 지원합니다.

RPMB 파티션은 표준 블록 계층을 통해 액세스할 수 없지만 WRITE, READ, GET_WRITE_COUNTER 및 PROGRAM_KEY와 같은 특정 명령 세트를 통해 액세스할 수 있습니다.
이러한 파티션은 인증 및 재생 보호 액세스 (Replay Protected Access)를 제공하므로 보안 스토리지로 적합합니다.

RPMB 계층은 Block Frame Signature을 안전하게 계산할 수 있는 TEE (Trusted Execution Environment) 장치를 위한 API를 제공합니다.

TEE (Trusted Execution Environment) 장치가 재생 보호 (Replay Protection) 데이터를 저장하고자 하는 경우, 요청된 데이터로 RPMB 프레임을 생성하고 프레임의 HMAC를 계산한 다음 RPMB 계층을 통해 저장 장치에 데이터를 저장하도록 요청합니다.

일반적으로 RPMB 파티션에 액세스 (예 : 읽기 또는 쓰기)하기 전에 RPMB 인증 키를 eMMC / UFS 또는 NVMe 장치의 RPMB 컨트롤러에 프로그래밍해야 합니다.

이 키는 한 번만 프로그래밍해야 하며 (최소한 RPMB 사양에 따라) 프로그래밍 명령 / 요청에서 RPMB 키를 일반 텍스트로 보내야 하므로 일반적으로 안전한 환경에서 프로비저닝해야 합니다. 예를 들면 공장 제조 라인 또는 eMMC / UFS / NVMe를 교체한후 현장의 신뢰할 수 있는 펌웨어 환경을 말합니다.

프로그래밍후 이 RPMB 키도 잘 보호해야 하므로 일반적으로 RPMB 사용시 OP-TEE, Google Android Trusty 또는 x86 Intel 플랫폼용 TEE (신뢰할 수 있는 실행 환경)가 제공됩니다. 그러나 이러한 TEE 환경에는 일반적으로 RPMB 드라이버가 없으며 이 키를 보호를 위해 TEE (또는 안전한 세계) 내에 안전하게 유지하는 반면, RPMB 드라이버 자체는 일반적인 비보안 환경에 있어야 합니다.

그런 다음, TEE는 RPMB 키를 사용하여 RPMB 데이터에 서명하고 HMAC-SHA256 인증 서명 (MAC)과 함께 RPMB 데이터를 Linux over IPC (보안 세계 TEE 및 secure world Linux)로 보냅니다. Linux 커널 드라이버는 인증 쓰기를 위해 해당 데이터 조각 (RPMB 프레임)을 RPMB 물리적 장치로 함께 전송하는 책임을 집니다.


REPLAY 보호와 관련하여 읽기 / 쓰기 액세스를 위해 다음과 같이 달성할 수 있습니다. 스토리지 컨트롤러 H/W 내장 쓰기 카운터 (Write Counter)가 쓰기 액세스에 대한 재생 보호에 사용됩니다. 인증 쓰기 (Authenticated Write)가 성공할 때마다 H/W 쓰기 카운터 (Write Counter)는 1씩 증가합니다 (처음에는 0임). 쓰기 카운터 (Write Counter)는 절대 감소하지 않으므로 재생 쓰기 액세스 (Replayed Write Access)는 거부됩니다. 이렇게 하면 데이터가 최신 상태를 유지할 수 있지만 카운터가 최대값 (32 비트)에 도달하면 모든 쓰기 액세스가 거부되는데, 이때 RPMB는 읽기 전용 스토리지가 됩니다.

소프트웨어 생성 난수 (nonce)는 읽기 액세스에서 재생 방지 (Replay Protection)에 사용되지만, 읽기 액세스에서는 TEE의 소프트웨어가 데이터를 인증하고 확인할 책임이 있으므로 데이터 재생을 방지하기 위해 동일한 난수 또는 허술한 무작위 난수를 사용해서는 안됩니다.

댓글 없음:

댓글 쓰기