Revault는 큰 파일을 약 5 MiB 크기의 세그먼트로 나눠 각각 고유한 인증 태그와 함께 암호화하므로, 파일 전체를 한 번에 메모리에 올릴 필요가 없습니다. 웹 앱에서 최대 1 GiB 파일을 다룰 수 있는 것도 이 덕분입니다.
왜 파일 전체를 한 번에 암호화하지 않나요?
대용량 파일에는 많은 양의 메모리가 필요하지 않습니다. Revault는 약 5MiB 세그먼트의 파일을 읽고, 브라우저에서 각 세그먼트를 암호화하고, IndexedDB에 암호문을 준비합니다. 원본 파일은 하나의 거대한 버퍼로 읽혀지지 않습니다.
세그먼트 단위로 처리하기 때문에 업로드가 중단되어도 파일 전체를 다시 암호화하지 않고, 이미 준비된 암호문에서 이어서 진행할 수 있습니다.
세그먼트의 순서와 완전성은 무엇이 보호하나요?
각 파일은 볼트 마스터 키에서 HKDF로 파생된 고유한 암호화 키를 사용합니다. 파생 컨텍스트에는 볼트 및 파일 식별자, 파일의 바이트 길이, 세그먼트 크기가 포함됩니다.
각 세그먼트의 12바이트 논스는 해당 파일에 대해 선택된 임의의 접두사, 4바이트 세그먼트 카운터, 마지막 세그먼트를 표시하는 플래그를 조합합니다. 세그먼트에는 128비트 GCM 태그가 붙습니다. 세그먼트가 뒤바뀌거나, 변경되거나, 잘려 나가면 검증에 실패합니다.
업로드가 중단되면 어떻게 되나요?
암호화가 완료되면 페이지 새로 고침 후 캐시된 암호 텍스트에서 네트워크 업로드를 재개할 수 있습니다. 재시도에서는 이전 nonce로 새 소스를 암호화하는 대신 동일한 암호화된 바이트를 보냅니다. 암호화 자체가 중단되면 불완전한 업로드를 취소하고 새로운 파일 ID로 다시 시작하세요.
다운로드는 어떻게 검증되나요?
다운로드할 때는 각 세그먼트를 내보내기 전에 인증합니다. 파일이 스트리밍되는 동안 검증이 이루어지므로, 다운로드 후반에 오류가 나면 불완전한 파일이 남을 수 있습니다. 파일을 사용하기 전에 다운로드가 정상적으로 완료되었는지 확인하세요.
어떤 제한이 있나요?
웹 앱의 각 파일은 최대 1 GiB까지 가능합니다. 이미지 및 동영상 미리보기에는 별도의 메모리 제한이 있습니다. 로컬 브라우저 저장공간을 삭제하면 업로드를 재개하는 데 필요한 암호문이 지워질 수 있습니다.
스트리밍 형식은 기본 Web Crypto 기본 요소를 사용하여 Tink의 문서화된 AES-GCM-HKDF 스트리밍 구성을 따릅니다. 파일 ID 및 예상 길이는 키 파생 컨텍스트에 바인딩됩니다. 세그먼트 카운터와 최종 마커는 순서와 완료를 보호합니다. 이 구현은 독립적인 암호화 감사를 받지 않았습니다.
스트림 헤더와 키 파생을 포함한 전체 구성은 보안 모델 페이지에서 설명합니다.