보안 및 암호화

Mailwake 네이티브 푸시는 아웃포스트의 알림을 암호화하고 페어링된 iPhone에서 이를 복호화합니다. 이 문서에서는 Mailwake 1.0의 키, 암호화 흐름 및 데이터 경계에 대해 설명하므로 자신이 제어하는 것과 공식 서비스를 통과하는 것이 무엇인지 이해할 수 있습니다. 데이터 처리 및 보존은 개인 정보 보호 정책에 포함됩니다.

세 가지 데이터 경로

알림, 이메일 콘텐츠 읽기 및 서비스 ID는 별도의 경로를 사용합니다.

특징 데이터 경로 콘텐츠 처리
네이티브 메일 알림 우편함 → 아웃포스트 → 푸시 전달 서비스 → Apple APNs → iPhone 아웃포스트는 메일을 읽고 알림을 암호화합니다. iPhone은 이를 확인, 복호화 및 표시합니다.
주문형 이메일 콘텐츠 읽기 아이폰 → 아웃포스트 → 우편함, 같은 길로 돌아옴 아웃포스트는 이메일 콘텐츠를 구문 분석합니다. 앱이 현재 읽기 세션에 이를 표시합니다.
기기 및 구매 앱 ↔ 기기 및 구매 서비스 장치를 등록하고 구매를 확인합니다. 푸시 전달 서비스는 배송 전에 장치 승인 및 권한을 확인합니다.

귀하의 아웃포스트에서는 액세스 권한이 부여된 메일을 읽을 수 있습니다. 여기에서 엔드투엔드 암호화는 아웃포스트와 페어링된 장치 간의 네이티브 알림 콘텐츠를 다룹니다. 사서함 공급자, 아웃포스트 호스트 및 암호 복호화 장치는 각각 평문에 액세스할 수 있는 경계 내에 유지됩니다.

암호화 키를 보관하는 주체

아웃포스트 ID 키는 콘텐츠에 서명합니다. 아웃포스트는 P-256 서명 키를 로컬로 생성하고 이를 로컬 구성 키로 암호화합니다. 페어링된 장치와 푸시 전달 서비스는 소스를 확인하기 위해 공개 키를 받습니다. ID는 다시 시작해도 데이터 디렉터리에 유지됩니다.

기기는 두 개의 별도 P-256 키를 사용합니다. 서명 키는 기기 ID와 페어링 동의를 증명하고, 키 합의 개인 키는 알림을 복호화합니다. 앱은 사용 가능한 경우 Secure Enclave에서 키를 생성하고 다른 런타임 환경에서 소프트웨어 키를 사용합니다. 공유 키체인은 iCloud 키체인 동기화가 비활성화된 상태에서 AfterFirstUnlockThisDeviceOnly 보호를 사용하여 앱과 해당 확장 프로그램에 키 기록을 제공합니다. 백그라운드 키에 접근하려면 기기를 재시작한 후 한 번은 잠금을 해제해야 합니다.

아웃포스트와 푸시 전달 서비스는 장치 공개 키를 저장합니다. 장치는 암호 복호화 개인 키를 보유합니다. 공식 서비스와 APNs는 해당 개인 키를 보유하지 않습니다.

또한 아웃포스트는 데이터 디렉터리에서 secret.key를 사용하여 AES-256-GCM으로 사서함 자격 증명을 포함한 중요한 구성을 암호화합니다. 데이터베이스와 로컬 키는 함께 복구 가능한 데이터(함께 백업하세요)를 형성하고 호스트 및 백업에 대한 액세스를 보호합니다. 데이터베이스와 로컬 키를 모두 가진 사람은 이 구성을 복호화할 수 있습니다.

페어링이 신뢰를 구축하는 방법

푸시 페어링 QR 코드에는 아웃포스트 공개 키, 푸시 전달 서비스 주소 및 환경, 페어링 식별자, 5분 동안 유효한 일회용 자격 증명이 포함되어 있습니다. 앱은 비교를 위해 아웃포스트 암호화 지문을 보여줍니다. 아웃포스트 소유자가 보낸 신뢰할 수 있는 초대를 사용하고 확인하기 전에 연결 정보를 확인하세요.

장치는 동의에 서명하여 이를 아웃포스트, 기기의 암호화 공개 키, 일회성 자격 증명 및 만료에 바인딩합니다. 아웃포스트는 푸시 전달 서비스 등록을 완료하기 전에 해당 증거를 확인하고 장치 ID 및 공개 키를 잠급니다. 이후 알림에서는 이 확인된 관계를 사용하여 암호화 및 확인 키를 선택합니다.

관리 초대에는 푸시 페어링이 포함될 수 있지만 권한 부여는 별도로 유지됩니다. 네이티브 푸시, 구성 관리 및 이메일 콘텐츠 읽기는 각각 고유한 권한 범위를 갖습니다. 설정에 대해서는 App 연결를 참조하세요.

알림이 암호화되는 방식

각 암호화 작업에 대해 아웃포스트는 임시 P-256 키 쌍, 임의의 32바이트 솔트 및 임의의 12바이트 nonce를 생성합니다. 그런 다음:

  1. 임시 개인 키와 대상 장치의 공개 키를 사용하여 P-256 ECDH 키 합의을 수행하여 공유 비밀을 얻습니다.
  2. HKDF-SHA256을 사용하여 256비트 콘텐츠 키를 파생합니다. 파생 컨텍스트는 푸시 전달 서비스 대상, 페어링 ID 및 이벤트 ID를 바인딩합니다.
  3. 같은 컨텍스트를 추가 인증 데이터로 사용해 알림 JSON을 AES-256-GCM으로 암호화하고, 암호문과 128비트 인증 태그를 생성합니다.
  4. 아웃포스트의 P-256 서명 키와 SHA-256으로 암호화된 봉투 및 컨텍스트에 서명한 뒤, HTTPS로 푸시 전달 서비스에 전송합니다.
  5. 푸시 전달 서비스는 서명과 봉투 형식을 확인하고 암호문을 APNs 에 전달합니다. 장치는 먼저 페어링 시 확인된 아웃포스트 공개 키를 사용하여 서명을 확인한 다음, 자체 개인 키로 콘텐츠 키를 파생하고, 인증 태그를 확인한 후 복호화합니다.

알고리즘 식별자는 P256-HKDF-SHA256-A256GCM 입니다. 동일한 배달을 다시 시도하면 저장된 봉투와 이벤트 식별자가 재사용됩니다. 새로운 암호화 작업은 새로운 임시 키와 임의의 값을 생성합니다. 알림 서비스 확장은 일반 알림을 처리합니다. 위젯 확장은 서명된 암호문을 전달하고 활동 ID 및 수명 주기 필드를 암호화 컨텍스트에 바인딩하는 확인 코드 라이브 활동을 처리합니다.

암호화된 알림에는 선택적인 확인 코드 및 메시지 참조와 함께 사서함 레이블, 폴더, 보낸 사람, 제목 및 수신 시간이 포함됩니다. 전체 메일 본문은 아래의 별도 경로를 사용합니다. 서명 확인 또는 암호 복호화이 실패하면 장치는 안전한 자리 표시자를 유지합니다. 메일 평문는 성공적인 확인 후에만 표시됩니다.

본문은 HTTPS를 통해 직접 가져옵니다.

이메일 콘텐츠를 열면 확인된 아웃포스트 HTTPS 주소로 요청이 전송됩니다. 아웃포스트는 메일함에서 이메일 콘텐츠와 참조 인라인 이미지를 가져오기 전에 장치 자격 증명, 소유자의 명시적 콘텐츠 권한, 서명된 메시지 참조의 리소스 범위를 확인합니다. 이메일 내용을 읽는 것은 무료입니다. 푸시 페어링만으로는 메일 본문 접근가 허용되지 않습니다.

아웃포스트는 HTML에서 위험한 요소를 제거하고, 대체 표시용 텍스트를 제공합니다. 앱은 이미지 로딩 옵션을 통해 발신자의 서버에 접속할 수 있는 원격 이미지 로딩을 제어합니다. 일반 첨부 파일은 이 이메일 콘텐츠 읽기 흐름 외부에 있습니다.

아웃포스트는 요청 메모리에서 본문을 처리합니다. 응답은 Cache-Control: no-store를 사용하며 앱은 HTTP 캐시를 비활성화하고 리디렉션을 거부합니다. 읽기에 성공하면 본문과 메일별 이미지 허용 설정을 이 iPhone에 별도로 저장하여 오프라인이나 앱 재시작 후에도 읽을 수 있습니다. 파일은 iOS 파일 보호를 사용하며 백업에서 제외됩니다. 알림을 삭제하거나 보관 기간이 지나면 본문과 이미지 허용 설정도 삭제됩니다. 아웃포스트를 제거하면 저장된 본문은 삭제하고 알림 요약은 유지합니다. 원격 이미지 파일은 임시로 읽으므로 다시 열 때 네트워크 연결이 필요할 수 있습니다. 본문은 공식 서비스를 거치지 않고 앱에 직접 전달되며 진단과 로그에 포함되지 않습니다.

공식 서비스에서 볼 수 있는 것

참가자 역할에 따라 처리할 수 있는 데이터
당신의 아웃포스트 사서함 자격 증명, 평문 메일, 알림 설정, 공개 키 페어링 및 로컬 배달 기록
푸시 전달 서비스 아웃포스트, 장치 및 페어링 식별자 공개 키; APNs 토큰; 암호화된 봉투; 전달 시간 및 상태
기기 및 구매 서비스 서비스 ID, 장치 및 세션 정보, 구매 및 권한, 전달 진단 메타데이터
애플 APNs 푸시 토큰, 라우팅 및 배달 정보, 일반 경고 및 암호화된 페이로드
당신의 아이폰 장치 키, 복호화된 알림 및 로컬 기록, 승인된 이메일 콘텐츠

보낸 사람, 제목 및 확인 코드는 네이티브 알림 암호문 안에 있습니다. 암호문을 처리하는 중개자는 여전히 전달 관계, 타이밍 및 페이로드 크기를 관찰할 수 있습니다. 운영 전달 진단은 식별자, 상태, 오류 코드 및 타임스탬프를 사용합니다. 메일 콘텐츠는 위의 암호화 경계를 유지합니다. 또한 서비스는 개인정보 보호정책에 설명된 대로 해당 역할에 필요한 네트워크 정보를 처리합니다.

로컬 기록, 철회 및 보안 제한

아웃포스트의 보류 중인 배달 및 관리자 기록에는 별도의 저장 규칙이 있습니다. 로컬 기록에는 사서함 및 제목 요약이 포함될 수 있습니다. 앱은 시스템 파일 데이터 보호, 구성 가능한 보존 및 기록 지우기 작업을 통해 로컬 앱 그룹에 복호화된 알림 기록을 저장합니다. 본문은 위에서 설명한 별도의 보호된 캐시에 저장됩니다.

페어링을 해제하면 해당 관계를 통한 추가 전달이 중지됩니다. 콘텐츠 또는 관리 자격 증명을 취소하면 해당 액세스가 종료됩니다. 이미 전달되고 복호화된 콘텐츠는 장치에서 삭제되어야 합니다. 권한을 취소해도 이미 열람한 내용을 원격으로 회수할 수는 없습니다.

이 디자인은 아웃포스트 호스트, 페어링 초대 및 장치의 보안에 따라 달라집니다. 손상된 아웃포스트 또는 잠금 해제된 장치가 평문를 노출할 수 있는 동안 전송 중인 알림 콘텐츠를 보호합니다. 프로토콜은 수명이 긴 장치 키 합의 개인 키를 사용합니다. 해당 키가 손상되면 기록 암호문를 보유한 누군가가 오래된 알림을 복호화할 수 있습니다. 따라서 이 설계에서는 수신자의 장기 개인 키 손상에 대해 순방향 비밀성을 주장하지 않습니다.

Bark, Pushover 및 Webhook 채널은 해당 페이로드를 사용자가 구성한 서비스로 보냅니다. 위의 네이티브 암호화 프로토콜은 Mailwake 네이티브 채널에 적용됩니다. 타사 데이터 필드 및 미리보기 옵션은 알림 채널를 참조하세요.

Markdown · AGPL-3.0-only · Mailwake 기여자