업로드 전에 보호가 시작됩니다.
파일 내용, 파일 이름, MIME 유형, 썸네일, 볼트 이름, 폴더 이름 및 구조는 업로드되기 전에 장치에서 암호화됩니다. 서비스는 암호문과 래핑된 키를 저장합니다. 저장된 기록만 획득한 침입자는 일반 텍스트 저장소 키, 장치 비밀 또는 복구 키를 획득하지 못합니다.
이는 볼트를 생성하거나 잠금 해제할 때 브라우저, 운영 체제, 제공된 애플리케이션 코드 및 난수 생성기를 신뢰할 수 있다고 가정합니다. 미사용 암호화는 장치에서 실행되는 악성 코드로부터 잠금 해제된 볼트를 보호할 수 없습니다.
모든 볼트에 대한 독립 키
각 볼트는 무작위로 생성된 256비트 AES 마스터 키로 시작됩니다. 키는 제스처에서 직접 파생되는 것이 아니라 브라우저의 난수 암호화 생성기에 의해 생성됩니다. 별도의 볼트 키는 단일 볼트 키 공개의 효과를 제한합니다.
장치 패턴은 순서가 지정된 도트 시퀀스와 임의의 256비트 장치 암호를 결합합니다. PBKDF2는 새로운 128비트 솔트인 HMAC-SHA-256와 600,000번의 반복을 통해 256비트 래핑 키를 파생합니다. 그런 다음 AES-256-GCM는 해당 래핑 키 아래의 마스터 키를 암호화합니다. 서비스는 암호화된 래퍼, 해당 솔트 및 공개 파생 매개변수를 수신합니다. 장치 비밀은 이 브라우저의 로컬 IndexedDB 데이터베이스에 남아 있습니다.
패턴은 5 × 5 격자와 최소 6개의 개별 점만 사용합니다. 이전 패턴 형식은 지원되지 않습니다. 새 패턴을 등록하려면 기존 볼트에 복구 키가 필요합니다. 그리드 크기는 비밀번호 강도를 보장하지 않습니다. 예측 가능한 동작은 여전히 추측하기 쉽습니다. 장치 비밀은 서버 기록만 갖고 있는 사람에 대한 보호 기능을 추가하지만 하드웨어 지원 키는 아닙니다. 로컬 암호와 래퍼를 모두 복사하는 사람은 오프라인 패턴 추측을 시도할 수 있습니다.
패스키는 공개 키 질문 응답을 사용하여 계정을 인증합니다. 계정 인증은 볼트 키를 파생하거나 파일을 해독하지 않습니다. 유효한 계정 세션과 성공적인 저장소 잠금 해제는 일반적인 애플리케이션 흐름에서 별도의 요구 사항입니다.
| 목적 | 건설 |
|---|---|
| Vault 마스터 키 | 무작위 256비트 AES 키 |
| 키 래핑 | PBKDF2-HMAC-SHA-256 · 600,000번의 반복 · 128비트 솔트 → AES-256-GCM |
| 메타데이터 및 썸네일 | AES-256-GCM · 랜덤 96비트 nonce · 128비트 인증 태그 |
| 파일 키 파생 | HKDF-SHA-256 · 파일별 랜덤 256비트 솔트 · 256비트 AES 출력 |
| 복구 비밀 | 192개의 임의 비트, 6개의 16진수 문자 그룹으로 표시됨 |
기밀성 및 변조 감지
볼트 메타데이터, 파일 메타데이터, 썸네일 및 래핑된 키는 128비트 인증 태그와 함께 AES-256-GCM를 사용합니다. 모든 독립적인 암호화는 새로운 무작위 96비트 nonce를 사용합니다. 복호화는 일반 텍스트를 반환하기 전에 태그를 확인합니다. 수정된 암호문이나 잘못된 키로 인해 인증이 실패합니다.
추가로 인증된 데이터는 암호화된 각 객체를 해당 형식 버전, 저장소 식별자, 객체 식별자 및 목적에 바인딩합니다. 예를 들어 썸네일과 파일 메타데이터 레코드는 서로 다른 컨텍스트를 사용합니다. 암호화된 객체를 다른 저장소로 이동하거나 이를 다른 객체로 대체하면 인증된 컨텍스트가 변경되고 확인에 실패합니다.
인증된 컨텍스트는 식별자를 숨기지 않으며 최신성을 증명하지 않습니다. 유효한 이전 레코드에는 여전히 유효한 태그가 있을 수 있습니다. 애플리케이션 개정 확인은 일반적인 동시 업데이트를 감지하지만 이는 완전히 오래된 상태를 재생하는 악성 서비스에 대한 암호화 방어가 아닙니다.
대용량 파일은 인증된 세그먼트를 사용합니다.
파일 콘텐츠는 브라우저 암호화 기본 요소를 사용하여 구현된 Tink에서 설명하는 AES-256-GCM-HKDF-SHA-256 스트리밍 구성을 사용합니다. 각각의 새 파일 스트림에는 길이 마커, 임의의 32바이트 솔트 및 임의의 7바이트 nonce 접두사가 포함된 40바이트 헤더가 있습니다.
HKDF는 볼트 마스터 키에서 별도의 파일 암호화 키를 파생합니다. 해당 컨텍스트에는 볼트 및 파일 식별자, 일반 텍스트 바이트 길이 및 구성된 세그먼트 크기가 포함됩니다. 각 세그먼트의 12바이트 nonce는 무작위 접두사, 4바이트 세그먼트 카운터 및 최종 세그먼트 플래그를 결합합니다. 세그먼트에는 128비트 GCM 태그가 있습니다.
애플리케이션은 약 5MiB의 제한된 세그먼트에서 파일을 처리합니다. 세그먼트 위치, 최종 세그먼트 플래그 및 예상 바이트 길이로 인해 교체, 변경 또는 잘린 세그먼트가 확인에 실패합니다. 다운로드는 각 세그먼트를 릴리스하기 전에 인증합니다. 스트림 후반에 오류가 발생하면 다운로드가 완료되지 않을 수 있으므로 성공적인 완료가 중요합니다. 업로드 재시도는 동일한 세그먼트 nonce로 새 콘텐츠를 암호화하는 대신 이미 암호화된 바이트를 재사용합니다.
공사는 다음과 같습니다. Tink AES-GCM-HKDF 스트리밍 사양. Revault의 구현 및 세그먼트 구성은 Tink에서 독립적으로 감사하거나 인증되지 않았습니다.
복구는 동일한 키에 대한 두 번째 경로입니다.
복구 비밀은 24개의 무작위 바이트에서 생성되어 192비트의 무작위 입력을 제공합니다. PBKDF2-HMAC-SHA-256와 자체 솔트를 사용하여 래핑 키를 독립적으로 파생하고, AES-256-GCM로 동일한 볼트 마스터 키를 암호화합니다. 복구 비밀과 암호화된 저장소의 복사본을 얻은 사람은 누구나 해당 저장소의 암호를 해독할 수 있습니다.
복구 비밀은 설정 중에 표시되며 서비스에 의해 일반 텍스트로 저장되지 않습니다. 암호화된 파일과 별도로 보관하세요. 브라우저 데이터를 지우면 장치 비밀번호가 제거됩니다. 액세스를 복구하려면 계정의 암호화된 클라우드 복사본과 복구 키 또는 내보낸 암호화된 백업과 해당 복구 키가 필요합니다. 공급자가 보유한 마스터 복호화 키가 없습니다.
복구 키트에는 비밀 및 키 래퍼가 포함되어 있지만 파일 콘텐츠는 없습니다. 암호화된 백업에는 브라우저의 장치 비밀번호 없이 인증된 인벤토리와 암호화된 파일 세그먼트가 포함됩니다. 가져오기는 암호화된 데이터를 확인하고 새 식별자와 키를 사용하여 새 저장소를 만듭니다.
패턴을 변경하면 이 기기의 래퍼가 대체됩니다. 볼트 마스터 키를 순환하거나, 다른 장치를 취소하거나, 이전 백업을 무효화하거나, 기존 복구 비밀을 변경하지 않습니다. 저장소 키 또는 복구 비밀이 손상된 경우 데이터를 새 키가 있는 새 저장소로 이동하세요.
기본 공유는 독립적인 암호화를 사용합니다.
모바일 공유는 기본적으로 선택한 파일 버전의 키를 새 공유 키로 보호하고 암호화된 파일 바이트를 재사용합니다. 선택적 추가 격리는 파일을 다시 암호화합니다. 원본 보관함 키는 비공개로 유지됩니다. 동일한 암호문으로 공유를 연관 지을 수 있으며 어떤 모드도 수신자가 저장한 사본을 회수할 수 없습니다.
iOS는 비공개 읽기 전용 초대를 사용하여 이 암호문을 별도의 CloudKit 레코드 계층 구조에 배치할 수 있습니다. 볼트의 동기화 영역을 공유하지 않습니다. 크로스 플랫폼 기본 공유는 SHA-256 체크섬이 있는 제한된 서버 부분을 사용합니다. 독립적인 무작위 256비트 읽기 및 관리 기능은 서버에 해시로 저장됩니다. 암호 해독 비밀은 별도로 전달되며 업로드되지 않습니다. 통제 주식은 발송인이 선택한 시간(30일 이내)에 만료됩니다. 서비스는 액세스 세션을 원자적으로 계산하고 선택한 최대값, 만료 및 취소를 시행합니다. 다운로드 세션은 최대 15분 동안 지속되며 공유 만료를 초과하지 않습니다.
수신자는 암호화된 모든 세그먼트를 인증하고 발신자의 별도 비밀로 격리된 공유 저장소를 엽니다. 계정, 개인 금고 또는 패턴이 필요하지 않습니다. 개인 금고는 잠겨진 상태로 유지됩니다. 내보내기가 허용되면 수신자는 해당 공유 비밀로 열리는 암호화된 .qvault 복사본을 저장할 수 있습니다. 그렇지 않으면 수출 통제가 없습니다. 임시 세션은 진행 중인 액세스의 유효성을 검사합니다. 이는 애플리케이션 제어입니다. 스크린샷, 수정된 클라이언트 및 보관된 사본은 암호화 방식으로 방지할 수 없습니다. 공유는 지속적인 소스 업데이트가 없는 스냅샷입니다. 무제한 CloudKit 초대는 액세스 횟수나 자동 만료를 적용하지 않습니다. 액세스는 소유자가 공유를 중지할 때까지 지속됩니다. 원본을 제거해도 별도의 공유는 취소되지 않으며, 취소해도 이미 보관된 복사본은 회수할 수 없습니다.
선택적 저장소 활동
기본 감사 로그는 기본적으로 꺼져 있으며 각 장치의 자격 증명 모음별로 구성됩니다. 최신 500개의 로컬 이벤트는 볼트의 마스터 키와 전용 인증 컨텍스트로 암호화됩니다. 키, 패턴, 파일 콘텐츠 및 기타 저장소의 데이터를 제외하고 동기화하지 않으며 삭제하거나 비활성화할 수 있습니다. 이는 변조 방지 증거가 아닙니다. 실패한 잠금 해제는 볼트에 할당되지 않습니다.
로깅이 활성화된 상태로 생성된 새로 제어된 공유는 공유 서비스에서 최대 100개의 액세스 세션 타임스탬프를 유지합니다. 관리 기능만이 이를 검색할 수 있습니다. 로그에는 수신자 ID나 암호 해독 비밀이 포함되어 있지 않습니다. 로컬 로깅을 비활성화하면 향후 공유에 영향을 미칩니다. 기존 공유 로그는 취소 또는 만료 및 정리될 때까지 원래 설정을 유지합니다.
암호화된 침입 사진(선택 사항)
소유자는 각 장치의 각 저장소에 대해 별도로 침입 알림을 활성화할 수 있습니다. 세 가지 뛰어난 패턴을 거친 후 전경 앱은 허가, 카메라 가용성 및 1분의 쿨다운에 따라 전면 카메라 사진을 캡처할 수 있습니다. 시스템 카메라 표시기는 계속 표시됩니다. 최근 10개의 알림은 로컬에 저장되며 사진에 추가되거나 업로드되지 않습니다. 일치하지 않는 패턴은 대상 볼트를 식별하지 않으므로 선택한 각 볼트는 별도로 암호화된 장치 시도 기록을 수신합니다.
전용 RSA-3072 공개 키는 SHA-256 및 MGF1-SHA-256과 함께 OAEP를 사용하여 각 경고에 대해 새로운 256비트 AES-GCM 키를 래핑합니다. 이는 볼트가 잠겨 있는 동안 암호화를 허용합니다. 해당 개인 키는 전용 인증 컨텍스트를 사용하여 해당 저장소의 마스터 키로 암호화됩니다. 해당 저장소를 잠금 해제해야만 사진의 암호를 해독할 수 있습니다. 경고는 일반 활동 로깅과 별도로 감사 보기에 표시되며 침입 경고 설정에서 지울 수 있습니다. 이는 변조 방지 증거가 아닙니다.
자신의 버킷에 암호화된 업로드
볼트의 스토리지 설정은 이 브라우저를 사용자가 지정한 S3 호환 HTTPS 엔드포인트에 직접 연결할 수 있습니다. 선택한 장치 파일은 동일한 파일 구성을 사용하여 로컬로 암호화됩니다. 각각은 인증되고 암호화된 인벤토리와 래핑된 볼트 키를 포함하는 별도의 이식 가능한 .qvault 개체가 됩니다. 임의의 개체 이름은 원본 파일 이름이 노출되는 것을 방지합니다. 복원하려면 다운로드한 개체와 볼트 복구 키가 필요합니다.
엔드포인트 구성 및 자격 증명은 전용 인증 컨텍스트를 사용하여 볼트 마스터 키로 암호화되고 이 장치의 IndexedDB에 보관됩니다. Revault의 API로 동기화되거나 전송되지 않습니다. 요청 서명은 AWS 서명 버전 4, HMAC-SHA-256 및 제한된 각 요청 본문의 해시를 사용합니다. 8MiB 다중 부분 부분은 이미 암호화된 바이트를 스토리지 공급자에게 직접 전달합니다. 버킷 액세스는 해당 공급자의 권한과 CORS 정책에 따라 계속 관리됩니다.
공급자는 액세스 키 식별자, 개체 경로, 바이트 크기, 업로드 시간 및 연결 정보를 볼 수 있습니다. 버킷을 비공개로 유지하고 해당 자격 증명의 범위를 필수 작업으로 지정하세요. 업로드된 개체는 Revault 클라우드 동기화 및 공유와 별개입니다. 완료되지 않은 업로드를 중단하기 위한 잠금 또는 취소 시도 탭이 닫히거나 연결이 끊어지면 분리된 부분이 남을 수 있으므로 불완전 업로드 수명 주기 규칙을 구성하세요. Safe Exit는 다른 볼트의 로컬 스토리지 자격 증명을 제거하지만 해당 버킷에서 객체를 삭제하지는 않습니다.
Safe Exit는 로컬 액세스를 제거합니다.
이 브라우저에서 하나의 볼트를 Safe Exit 볼트로 지정할 수 있습니다. 해당 볼트의 패턴을 입력하면 트리거 확인이나 완료 알림 없이 정상적으로 열립니다. 다른 저장소의 로컬 스냅샷, 암호화된 청크, 장치 비밀 및 대기 중인 변경 사항이 제거됩니다. 동기화되지 않은 데이터는 손실될 수 있습니다.
영구 로컬 경계는 해당 Vault가 이 브라우저의 동기화를 통해 자동으로 나열되거나 복원되는 것을 방지합니다. 암호화된 클라우드 복사본과 다른 장치의 복사본은 변경되지 않습니다. 복구는 한 번에 하나의 볼트로 명시적으로 이루어지며 새 장치 패턴을 등록하려면 볼트의 복구 키가 필요합니다.
이는 로컬 액세스 제거이며 물리적 삭제나 법의학적 은폐가 보장되지는 않습니다. 브라우저 프로필, 파일 시스템 스냅샷, 이전 다운로드, 스크린샷, 서비스 기록 및 기타 장치에 증거가 보관될 수 있습니다. 이 브라우저의 로컬 데이터를 지우면 로컬 격리 경계도 지워집니다. 새로 설치하면 인증 후 계정의 클라우드 볼트를 다시 나열할 수 있습니다.
눈에 보이는 것은 무엇인가
암호화는 스토리지에 관한 모든 사실이 아닌 콘텐츠를 보호합니다. 이 서비스는 계정 연결, 임의 개체 식별자, 개체 수, 바이트 크기, 개정, 타임스탬프, 암호화된 래퍼, 스트림 헤더 및 요청 활동을 관찰할 수 있습니다. 네트워크 및 운영 기록을 통해 연결 정보가 드러날 수 있습니다. 이는 익명성 시스템이 아니며 트래픽 분석 저항을 제공하지 않습니다.
전송 암호화는 애플리케이션이 HTTPS를 통해 제공될 때 전송 중인 요청을 보호합니다. 이는 저장된 파일 콘텐츠를 서비스에서 암호화된 상태로 유지하는 클라이언트 측 암호화와는 별개입니다.
보호가 끝나는 곳
비공개 브라우징은 일반적으로 비공개 세션이 종료되면 로컬 저장소를 삭제합니다. 영구 저장소 요청은 시크릿 세션을 영구적으로 만들지 않습니다. 동기화된 클라우드 복사본은 유지되지만 로컬 패턴, 동기화되지 않은 변경 사항, 캐시된 파일 및 Safe Exit 설정은 손실될 수 있습니다. 새 비공개 세션에는 새 패턴을 등록하려면 계정 액세스와 복구 키가 필요합니다.
애플리케이션이 잠겨 있으면 메모리 내 저장소 키 참조를 삭제하고 비공개 미리보기 URL을 취소합니다. 숨겨져 있거나 5분 동안 활동이 없으면 자동으로 잠깁니다. 기본 앱은 또한 백그라운드에서 잠기며, 임시 미리보기를 제거하고, 작업이 완료되면 소유한 키 버퍼를 지웁니다. 브라우저, Swift 및 JVM 메모리 관리는 모든 키 복사본이나 디코딩된 미디어 버퍼의 즉각적인 삭제를 보장할 수 없습니다.
맬웨어, 안전하지 않은 확장 프로그램, 손상된 애플리케이션 코드 또는 잠금 해제된 화면을 보는 사람은 일반 텍스트와 비밀을 캡처할 수 있습니다. 암호화는 계정 서비스 거부, 삭제된 클라우드 개체, 랜섬웨어, 복구 비밀의 손실 또는 서비스의 데이터 보류를 방지할 수 없습니다. 별도의 암호화된 백업을 유지하고 장치 자체를 보호하세요.
Revault는 독립적인 보안 감사를 받지 않았습니다. 이는 구현된 암호화 설계에 대한 설명이지 모든 침입에 대한 인증이나 보증이 아닙니다.