기술
KeyMeld: iPhone과 Android를 위한 공용 키와 Zero Vault 아키텍처
KeyMeld는 Zero Vault 자체가 아닙니다. 이는 개발자가 백엔드 외부로 범용 키를 분리하고 iOS와 Android 클라이언트를 통합하며 Zero Vault 모델을 기반으로 애플리케이션 아키텍처를 구축하도록 돕는 별도의 SaaS 서비스입니다.
크로스 플랫폼 애플리케이션에는 사용자들이 보통 눈치채지 못하는 문제가 있습니다. 화면에서는 하나의 계정을 보여주며 어떤 기기에서도 동일하게 작동하길 기대합니다. 그러나 iPhone과 Android는 서로 다른 보호 메커니즘을 사용하며 로컬 키를 다르게 취급합니다.
iPhone에서는 애플 Keychain을 통해 로컬 키를 보호할 수 있습니다. Android에서는 Android Keystore를 사용합니다. 이 기술들은 민감한 키가 안전한 환경에 남아 있도록 설계되어 있지만, 서로 교환 가능하지는 않습니다.
사용자 입장에서는 큰 문제가 되지 않습니다. 간단히 iPhone에서 앱을 열고 Android에 설치한 후 계속 동일한 보호된 데이터로 작업하고 싶기 때문입니다.
개발자로서 여기서 아키텍처적 질문이 발생합니다: 로컬 기기의 키를 옮기지 않고, 자체 백엔드 데이터베이스에 복사본을 저장하지 않으며, 어떻게 두 플랫폼에서 공통 액세스를 구성할 것인가?
KeyMeld를 살펴보면서, 이 서비스가 iOS와 Android의 내부 보호 메커니즘을 건드리지 않고 별도의 범용 키를 제공한다는 것을 알게 되었습니다.
다양한 플랫폼을 위한 공용 키
로컬 기기 키는 특정 전화에 속하며 해당 운영체제의 보호 기능으로 관리됩니다. 이는 특정 기기 내에 안전하게 유지되며, 다른 기기로의 자유로운 이전은 설계되지 않았습니다.
KeyMeld의 범용 키는 별개의 개념입니다. 이는 특정 프로젝트, 계정, 보호된 공간을 위해 생성되며, 여러 플랫폼의 인증된 클라이언트 간에 공유됩니다.
이 서비스는 iPhone의 키를 가져오거나, Android로 이전하거나, 두 개의 다른 키를 하나로 통합하려 하지 않습니다. 플랫폼 보호는 독립적이며, 애플리케이션은 해당 프로젝트에 대한 공통 액세스 레벨을 얻게 됩니다.
이것이 바로 KeyMeld의 아키텍처적 역할입니다. iOS와 Android를 동일하게 만들거나 내부 메커니즘을 대체하지 않습니다. 대신, 범용 키와 함께 작동하는 공통 계층을 추가하여, 프로젝트가 플랫폼 간 전달을 스스로 해결하지 않아도 되도록 합니다.
다양한 제품과 계정에 대해 독립적인 키 컨투어(경계)가 생성됩니다. 따라서 각 프로젝트는 자체 접근 영역을 유지하며, 동일 기기 내 여러 계정도 분리됩니다.
Zero Vault는 프로젝트에 속합니다
무엇보다 Zero Vault는 KeyMeld의 이름이 아닙니다. 이는 연결된 제품이 구축할 수 있는 아키텍처 모델입니다.
KeyMeld는 독립된 SaaS 서비스로서, 애플리케이션 내부 백엔드에 설치하거나 프로젝트 데이터베이스 옆에 별도 모듈로 배치되지 않습니다. 범용 키는 별도의 SaaS 컨투어인 KeyMeld에서 관리하며, 자체 백엔드와는 분리됩니다.
이러한 모델이 유지되기 위해서는, 프로젝트와 KeyMeld 간 신뢰의 경계가 독립적이어야 합니다. 백엔드와 외부 서비스는 별도 자격증명, 권한, 관리 메커니즘을 사용합니다.
이 방식을 아키텍처적 관점에서 Zero Vault 모델이라 부를 수 있는데, 이 모델은 서버 데이터베이스에 클라이언트의 보호 저장소 키를 저장하지 않습니다.
Zero Vault는 백엔드가 전혀 아무것도 저장하지 않는다는 의미가 아닙니다. 계정, 설정, 비즈니스 데이터 등 다양한 필수 데이터를 유지하지만, 범용 키는 저장하지 않습니다.
서버 데이터베이스가 손상되더라도 범용 키는 노출되지 않으며, 계정 데이터와 함께 저장되지 않습니다. 그러나 이 모델은 어디까지나, 클라이언트 저장소와의 범용 키를 서버에 저장하지 않는 특정 목적을 해결하는 데 중점을 둡니다.
실제 사례: iPhone과 Android에 하나의 계정
로컬 보호된 데이터를 사용하는 애플리케이션을 가정해 봅시다. 예를 들어, 인증기, 기업 클라이언트, 또는 암호화된 정보를 기기에서 직접 처리하는 서비스입니다.
iPhone에서는 iOS 보호 메커니즘으로 로컬 키를 보호하고, Android에서는 자체 보호 메커니즘을 사용합니다. 내부 기기 키는 다르며, 이는 정상입니다.
이 경우, 개발자는 두 플랫폼에서 동일한 보호 데이터에 액세스하는 방법을 별도로 설계해야 합니다. 플랫폼별 저장소는 여전히 달라지고, 개발자는 이 두 구현을 수작업으로 연결해야 할 수 있습니다.
이것이 가능하지 않거나 복잡할 경우, 로컬 키를 서버로 이전하거나 복사본을 저장하는 방식이 시도될 수 있습니다.
KeyMeld는 로컬 키의 이전과 서버에 복사본 저장을 피하고, 공용 범용 키를 추가합니다.
iPhone과 Android 클라이언트는 인증된 프로젝트와 계정 내에서 동일한 범용 키에 접근할 수 있으며, 각각의 보호 메커니즘도 유지됩니다.
사용자에게는 하나의 계정을 여러 기기에서 사용하는 것과 같아 보입니다. 내부 메커니즘을 알 필요 없이 동일 계정으로 로그인하면 됩니다.
기기를 변경할 때, 기존 기기의 로컬 키를 내보내거나 새 기기용 보호 저장소를 별도로 만들 필요가 없습니다. 새 클라이언트는 같은 프로젝트에 연결되고, 동일한 범용 키를 사용합니다.
백엔드는 인증 요청을 처리하지만, 범용 키는 인증된 클라이언트에만 제공되며, 서버 데이터베이스에 저장되지 않습니다.
이 과정에서 KeyMeld는 애플리케이션 데이터베이스를 옮기거나, 사용자 간 동기화 시스템을 대체하지 않습니다. 이 서비스는 클라이언트에게 필요한 키를 제공하는 것에 집중하며, 데이터 저장과 갱신은 제품 자체 책임입니다.
세 가지 유형의 키와 비밀
아키텍처의 여러 부분을 혼동하지 않기 위해 세 가지 개념을 구별하는 것이 유용합니다.
로컬 기기 키는 특정 전화에 속하며, iOS 또는 Android의 보호 수단으로 관리됩니다.
범용 키는 하나의 프로젝트 및 계정에 인증된 클라이언트 간에 공유됩니다. 이것이 제품 수준에서 플랫폼 간 연결을 담당합니다.
관리용 비밀은 백엔드와 KeyMeld의 안전한 상호 작용을 위해 필요하며, 모바일 앱이나 브라우저에 전달되지 않습니다.
이 비밀과 범용 키는 각각 별도 역할을 수행하며, Zero Vault 아키텍처에서는 이 범용 키를 제품 데이터베이스에 저장하지 않습니다.
KeyMeld는 이름, 비밀번호, TOTP 저장소 또는 업무 관련 내용 등을 요구하지 않으며, 프로젝트, 계정, 클라이언트 권한이 중요합니다.
키 접근권은 제어 가능
범용 키 취득은 무조건적 권한이 아니며, 신뢰할 수 없는 기기이거나 계정이 변경되거나, 액세스 권한이 철회되면 KeyMeld는 더 이상 해당 클라이언트에 범용 키를 제공하지 않습니다.
이때, 이미 존재하는 로컬 키를 무조건 삭제하거나 파기하는 것은 아니며, 이후 키 획득 제어나 새로운 클라이언트 연결을 제한하는 것을 의미합니다.
사용자 입장에서는, 새 기기를 연결하거나 권한을 관리하는 과정이 하나의 시스템 하에 통합됩니다.
개발자는 iOS와 Android에 대해 별도로 로직을 구축하지 않고, 전체 Zero Vault 모델은 프로젝트가 범용 키를 자체 인프라에 저장하는지, 외부 SaaS인 KeyMeld와 구분하는지에 따라 결정됩니다.
KeyMeld가 하는 일이 아닌 것
KeyMeld는 비밀번호 관리자 또는 TOTP 저장소 역할을 하지 않으며, 앱의 클라우드 데이터베이스를 대체하거나 동기화 메커니즘을 바꾸지 않습니다.
Apple Keychain이나 Android Keystore를 대체하지 않으며, 로컬 플랫폼 보호 수단은 그대로 유지하면서, 제품에 공용 키의 추가 계층을 더하는 역할만 합니다.
또한, 사용자 인증 시스템이 아니며, 별도 서비스를 통해 신원 확인과 인증이 이루어질 수 있습니다. 예를 들어 MeldID와 같은 시스템이 있고, KeyMeld는 그와 별개로 인증된 클라이언트에 단일 범용 키를 제공하는 역할에 충실합니다.
마지막으로, KeyMeld는 자체적으로 Zero Vault를 자동으로 구축하지 않으며, 프로젝트에 외부 범용 키 컨투어를 제공합니다. 이를 유지하려면, 개발자는 자체 서버에 범용 키를 저장하지 않고, 신뢰 구역이 분리된 상태를 유지해야 합니다.
이 것이 필요할 수 있는 대상
이 접근 방식은 여러 플랫폼에서 작동하며 로컬 보호 데이터를 사용하는 애플리케이션에 적합합니다.
예를 들어, 인증기, 기업용 앱, SaaS, 여러 기기 지원 서비스, 또는 iPhone과 Android에서 동일하게 작동하는 계정을 요구하는 모든 프로젝트입니다.
개발자에게는 플랫폼별 로직을 줄이고 책임 분산이 가능하다는 점이 큰 장점입니다. 제품의 백엔드는 데이터를 저장하고, KeyMeld는 범용 키를 외부 SaaS로 제공하며 이후 배포를 관리합니다.
이 프로젝트를 접한 후, 저는 KeyMeld를 완전한 Zero Vault라고 부르기보다는, 개발자가 자체 제품을 위해 이러한 모델을 구축할 수 있는 도구로 보는 것이 더 적합하다고 생각합니다.
iOS와 Android는 각각의 보호 수단을 계속 사용하며, 클라이언트는 범용 키를 공유합니다. 백엔드가 그 키를 저장하지 않고 Infra와 SaaS가 분리돼 있다면, 서버는 고객 저장소의 키를 보관하는 금고가 되지 않습니다.
이것이 사용자에게는 여러 기기에서 동일 계정으로 접근 가능하게 해 주며, 개발자에게는 범용 키를 내부 백엔드 밖으로 분산하는 수단을 제공하며, 전체 프로젝트의 아키텍처는 서버가 고객 데이터의 키를 보관하지 않는 Zero Vault 개념에 부합합니다.
프로젝트 상세 정보: KeyMeld