Show HN: ReVault – 새로운 보안 아카이브 포맷
reVault는 사용하기 쉽도록 설계된, 기본적으로 보안이 적용되는(secure-by-default) 새로운 아카이브 포맷인 락박스(lockbox)입니다. 저는 reVault를 약 2년 동안 개발해 왔습니다. 원래 Dart로 작성되었으나, AI의 발전에 힘입어 Rust를 사용하여 이식하기로 결정했습니다.
현재 베타 버전이므로, 특히 다양한 언어 바인딩에 대한 피드백을 받고 있습니다.
락박스는 기본적으로 암호화되고(encrypted), 서명되며(signed), 압축됩니다. 각 기능은 선택적으로 비활성화할 수 있습니다.
- 하이브리드 양자내성(post-quantum) 또는 암호 구문(passphrase) 암호화, 메타데이터 포함.
- Zstd 압축.
- 가능한 한 순수 Rust 라이브러리 사용.
저희는 대체 수단이 생기는 대로 남아있는 C 코드를 단계적으로 제거할 계획입니다. 이 프로젝트는 OpenAI의 Daybreak 사이버 보안 도구를 사용하여 검사되었습니다. 매뉴얼은 작업 중이며, 다음에서 확인할 수 있습니다: https://docs.revault.onepub.dev/
reVault는 Linux, macOS 및 Windows, x64 및 arm64, 그리고 Wasm을 지원합니다. 코어는 Rust로 되어 있으며, C/C++, Java, Dart, Python, Ruby, JS/TypeScript, Go, C#, Kotlin, Lua, PHP, Swift용 바인딩을 제공합니다.
락박스 내부에는 다음을 저장할 수 있습니다:
- 파일(Files), 디렉토리(directories), 권한(permissions) 및 심볼릭 링크(symlinks).
- 변수(Variables).
- 양식(Forms).
변수, 양식 및 락박스 자체에 설명을 추가할 수 있습니다. reVault는 키, 연락처의 키, 락박스 별칭(aliases) 및 양식 정의를 보관하기 위해 포터블 볼트(portable vault, 구조화된 콘텐츠를 가진 또 다른 락박스)를 사용합니다.
이는 플랫폼의 보안 저장소와 연결되므로, 데스크톱에 로그인하는 것만으로도 볼트를 잠금 해제할 수 있습니다. 매번 락박스에 접근할 때 암호 구문을 입력할 필요가 없습니다. 이 기능은 비활성화할 수도 있습니다.
여러 단축키를 사용할 수 있습니다. 락박스를 생성하면 파일 이름 또는 사용자가 지정한 이름을 기반으로 볼트에 별칭이 저장됩니다:
lbx create /some/path/mybox.lbox
lbx mybox open --duration 1h
lbx mybox var set KEY VALUE
기본 락박스를 설정해두면 이름을 생략할 수 있습니다:
lbx session default mybox
lbx var get KEY
디렉터리 트리를 락박스(lockbox)로 미러링하고, 해당 디렉터리가 변경될 때 업데이트할 수 있습니다:
lbx store.lbox mirrors project create --from ./project --to /projects/project
lbx store.lbox mirrors update
이 API를 사용하면 파일을 파일 시스템으로 추출하지 않고도 읽기, 쓰기 및 탐색(seek)할 수 있습니다. 각 락박스는 목차(table of contents)를 가지고 있어, 여러 기가바이트에 달하는 락박스에서 단일 파일을 추출하는 것이 빠릅니다.
복구 (Recovery)
업데이트는 트랜잭션(transactional) 방식이며, 실패한 업데이트에 대해서는 자동 롤백(rollback)이 이루어집니다. 이 포맷은 복구(recovery)를 위해 설계되었습니다: 콘텐츠가 페이지(pages) 단위로 저장되어, 락박스의 일부가 손상되더라도 영향을 받지 않은 콘텐츠를 복구할 수 있습니다.
공유 (Sharing)
암호화된 락박스는 공유할 수 있다면 더욱 유용합니다.
reVault는 공개 키를 교환하기 위한 오픈 소스 키 서버(keyserver)를 가지고 있으며, 두 번째 신뢰 채널을 통해 검증이 이루어집니다. 아직 실험 단계입니다.
OnePub에서 단일 키 서버를 운영할 서버를 기부했습니다. 리소스 기부에 관심이 있다면, 저는 두 번째 예비 서버(redundant server)를 구축하고 싶습니다. 순수 Rust로 작성되었으며 100MB 미만의 RSS를 사용하고 속도 제한(rate limits)을 지원합니다.
기본 프로필의 공개 키를 게시하려면:
이 게시 코드를 연락처에 전달하세요. 그들은 다음 명령어로 귀하의 키를 가져올 수 있습니다:
lbx vault contacts receive <publish-code> <contact-name>
프로필의 지문(fingerprint)을 표시하고 두 번째 신뢰 채널을 통해 교환하세요:
lbx vault profiles fingerprint
반대 방향으로 이 과정을 반복하여 그들의 키를 얻습니다. 키를 확보했다면, 기본 락박스에 대한 접근 권한을 부여하세요:
그런 다음 암호화된 락박스를 Alice에게 이메일로 보낼 수 있습니다.
CLI를 설치하고 시작하려면:
cargo install revault_cli
lbx vault init
lbx completion install
Completion 설치는 사용자의 셸(shell)을 감지합니다. 문제 진단이 필요하면 다음 명령어를 사용하세요:
언어 바인딩(language bindings)은 각자의 패키지 저장소에 게시되었습니다. 저는 이 프로젝트 자체의 장점들, 특히 API와 언어 바인딩에 대한 건설적인 비판을 원합니다. AI 사용에 대한 논쟁에는 관심이 없습니다.