
탈중앙화 ID 시스템에서 데이터 토폴로지(Data Topology)와 암호학적 오디언스(Cryptographic Audience)를 분리하는
요약
탈중앙화 ID 시스템에서 데이터의 물리적 저장 위치(Topology)와 접근 권한(Audience)을 분리하는 설계 원칙을 설명합니다. 암호화 메커니즘을 통해 데이터 복제가 권한 확장을 초래하지 않도록 보장하는 구현 방식을 다룹니다.
핵심 포인트
- 데이터 토폴로지(T)와 오디언스(A)의 개념적 분리 필요성
- 데이터 복제 행위가 읽기 권한의 범위를 확장해서는 안 됨
- 구조적 경로와 암호학적 멤버십을 분리하는 구현 메커니즘
- 유도 체인 재설정을 통한 암호학적 상속 끊기 기법
대부분의 저장 시스템은 두 가지 서로 다른 개념을 은밀하게 혼동합니다: 데이터가 물리적으로 어디에 존재하는가와 누가 그것을 읽을 수 있는 권한이 있는가 하는 점입니다. 권한 비트(permission bits)가 설정된 폴더에 파일을 넣으면, 이 두 가지 사실은 동일한 계층에서 동일한 메커니즘에 의해 강제됩니다.
폴더를 새로운 머신으로 이동하면, 액세스 결정(access decision) 또한 함께 이동하거나 소실됩니다. 내구성을 위해 복제(replication) 범위를 넓히면, 구조적으로 데이터를 유출하지 않을 것이라고 신뢰해야 하는 프로세스의 집합도 함께 넓어지게 됩니다.
탈중앙화 ID (Decentralized identity) 시스템은 이를 의도적으로 고려하여 설계하지 않는 한 이 문제를 그대로 물려받게 됩니다. 여기서는 단순히 설명만 하는 것이 아니라, 실제 커널(kernel)에 구현된 해결 메커니즘을 소개합니다.
두 변수를 별도로 명명하십시오.
T, 토폴로지 집합 (topology set) — 암호문(ciphertext)의 조각을 물리적으로 보유하고 있는 머신 또는 프로세스.
A, 오디언스 집합 (audience set) — 실제로 이를 복호화할 수 있는 주체(principals).
이 메커니즘이 보장해야 하는 핵심 관계는 다음과 같습니다:
replicate(T) ↛ change(A)
암호문을 백업, CDN 엣지 캐시, 또는 두 번째 장치로 복제하는 행위 자체가, 그것을 읽기 위한 키를 유도할 수 있는 사람의 범위를 확장해서는 안 됩니다. 암호화(Encryption)는 토폴로지에서 데이터를 제거하는 것이 아닙니다. 가독성(readability)에 대한 멤버십을 제한하는 것입니다.
실제 연산자
.me에서 오디언스 멤버십은 경로의 구조적 속성(structural property)이며, 쓰기 시점에 단일 연산자인 _를 통해 선언됩니다:
me.wallet[""]("secret");
me.wallet.income(100);
...
me("wallet")이 undefined가 되는 것은 무언가가 삭제되었기 때문이 아니라, 구조적으로 공개 인덱스(public index)에서 제외되었기 때문입니다. 다른 커널 인스턴스나 비밀 정보가 없는 동일한 코드에서도 두 경로 모두에서 undefined를 반환받게 됩니다.
_("secret")은 그 자체로 두 번째 사람에게 멤버십을 부여하지 않습니다. 이는 멤버십이 무엇을 필요로 하는지를 정의할 뿐입니다. 실제 두 번째 주체를 오디언스에 포함시키는 것은 별도의 의도적인 단계입니다: ECDH-ES + HKDF-SHA-256 + AES-256-GCM을 사용하여 해당 범위의 비밀(scope secret)을 그들의 P-256 공개 키로 래핑(wrapping)하는 과정이며, 이는 올바른 수신자와 의도적으로 손상된 수신자 모두를 대상으로 테스트되었습니다 — 구현 내용은 src/crypto.ts에서 확인할 수 있습니다.
의도적인 상속 끊기 (Breaking inheritance on purpose)
더 좁은 경로(Narrower paths)는 기본적으로 부모의 스코프(scope)를 상속받습니다. 때로는 동일한 구조적 경로 아래에 있는 두 개의 비밀(secrets)이 아무것도 공유하지 않아야 할 때가 있습니다. 이때 두 번째 연산자인 ~를 사용하면 선택된 경계에서 유도 체인(derivation chain)을 재설정합니다:
me.wallet["_"]("alpha");
me.wallet["~"]("noise");
me.wallet["_"]("beta");
...
구조적으로는 두 경로 모두 동일한 부모 아래에 위치합니다. 하지만 암호학적으로(Cryptographically) 이들은 서로 관련 없는 오디언스(audiences)에 속합니다.
정직한 비용 (The honest cost)
스코프가 지정된 모든 읽기(scoped read)는 캐시된 정책 조회(cached policy lookup)가 아니라 실제 키 유도(key derivation)를 실행합니다. 가설이 아닌 벤치마크 결과에 따르면, 중간 규모의 스케일에서 공개 읽기(public read)보다 대략 1~2 자릿수(orders of magnitude) 정도 느립니다. 그 대가로 얻는 이점은 다음과 같습니다: 변조된 비밀 블롭(secret blob)이 잘못된 데이터를 반환하는 대신, 복호화(decryption)에 실패한다는 점입니다. 즉,
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기