
T A: 복제(Replication)가 오디언스(Audience)를 변경해서는 안 된다
요약
데이터 복제 과정에서 접근 권한(Audience)이 변질되는 문제를 해결하기 위한 구조적 접근법을 다룹니다. 토폴로지와 오디언스를 직교화하여, 데이터 이동이 권한 변경을 유발하지 않는 암호화된 오디언스 아키텍처를 제안합니다.
핵심 포인트
- 데이터 복제(T)가 권한(A)을 변경하는 '역전' 현상 방지 필요
- 토폴로지와 오디언스의 직교성(Orthogonality) 확보가 핵심
- 로컬 퍼스트 및 E2E 시스템에서 ACL 재구축 문제 해결
- .me 프로토콜을 통한 중앙 집중형 아이덴티티와 분산형 데이터 모델 제시
만약 당신이 암호화된 데이터, 로컬 퍼스트 동기화(local-first sync), 또는 사용자의 비밀 정보를 보유한 AI 에이전트(AI agents)를 기반으로 구축하고 있다면 — 당신은 동일한 버그에 직면한 것입니다. 당신은 토폴로지(topology) T를 복제하지만, 오디언스(audience) A가 변경됩니다. 이것이 바로 역전(inversion)입니다. .me는 이를 구조적으로 해결합니다.
키워드: 암호화된 오디언스(encrypted audiences), 종단간 암호화(end-to-end encryption, E2E), 로컬 퍼스트 소프트웨어(local-first software), 개인 데이터 저장소(personal data store), 사용자 소유 데이터(user-owned data), 제로 지식 아키텍처(zero-knowledge architecture), 비밀 범위 지정(secret scoping), 네임스페이스 해석 프로토콜(namespace resolution protocol, NRP), 개인 시맨틱 커널(personal semantic kernel), 데이터 복제 대 권한 부여(data replication vs authorization).
모든 빌더가 마주치는 버그
당신은 모든 것을 올바르게 수행합니다:
- 데이터가 종단간 암호화(end-to-end encrypted)되어 있음
- 복제본(replica)을 호스팅하고, 두 번째 장치에 백업하며, 오프라인 동기화(offline sync)를 추가함
- 다른 에이전트(agent)에게 작업을 전달함
그런데 갑자기 가독성(readability)이 확장됩니다. 혹은 호스트가 이를 읽을 수 있게 됩니다. 또는 새로운 권한 시스템(permission system)이 필요해집니다.
형식적으로는 다음과 같습니다:
replicate(T) → change(A) // 버그
복제(Replication)가 오디언스(audience)를 변경합니다. 토폴로지(Topology)가 권한 부여(authorization)로 유출됩니다. 이 문제를 해결하지 못하는 모든 로컬 퍼스트(local-first), E2E, 에이전트 프레임워크는 결국 동기화(sync) 위에 ACL(Access Control Lists)을 다시 구축하게 됩니다.
우리가 원하는 것은 다음과 같습니다:
replicate(T) ↛ change(A) // T ⊥ A
토폴로지(Topology)와 오디언스(audience)는 직교(orthogonal)합니다. 데이터를 새로운 호스트, 새로운 장치, 새로운 모나드(monad), 백업 등 어디로든 이동시킬 수 있지만, 누가 그것을 읽을 수 있는지는 변경하지 않습니다.
이것이 바로 **암호화된 오디언스의 대수(The Algebra of Encrypted Audiences)**입니다. 정책(policy)이 아니라, 커널(kernel)의 구조적 속성입니다.
현재의 스택이 둘 다 역전시키는 이유
오늘날 대부분의 시스템은 다음과 같습니다:
identity = distributed (플랫폼당 N개의 파편화된 계정)
data = centralized (데이터를 캡처한 플랫폼에 종속됨)
당신은 12개의 로그인을 가지고 있지만, 당신의 사진은 공유 기능을 깨뜨리지 않고는 Google을 떠날 수 없습니다.
교정된 모델은 다음과 같습니다:
identity = centralized (하나의 루트)
data = distributed (T는 A와 독립적)
하나의 시드(seed). 하나의 아이덴티티 함수(identity function). 제약 없는 토폴로지(topology).
[.me](https://neurons-me.github.io/.me/)에서는:
identityHash(K) = keccak256("this.me/identity:v1::" + K.seed)
seed는 절대 커널(kernel)을 떠나지 않습니다. 모든 컨텍스트(context) — 업무, 가족, 에이전트 — 는 새로운 계정이 아니라 me.as(context)가 됩니다.
.me가 T ⊥ A를 구현하는 방식, 검증 완료
이것은 백서(whitepaper)상의 약속이 아닙니다. 커널(kernel) 내에서 소스 코드로 검증된 동작입니다:
const me = new ME() as any;
me.security _; // 경로 기반 비밀 범위 (path-bound secret scope)
...
_는 플래그(flag)가 아닌 구조적 비밀성(structural secrecy)입니다. 공개 인덱스(public index)에는 해당 접두사가 결코 채워지지 않습니다. 저장 계층(storage layer)에서의A / ¬A입니다.~는 파생(derivation)을 초기화합니다.__는 비밀을 복사하지 않고도 역참조(dereference)할 수 있는 구조적 포인터(structural pointers)를 생성합니다.explain()은console.log처럼 숨기는 것이 아니라, 감사 가능한 공개(auditable disclosure)입니다.
이제 당신은 replicate(T) — 모나드(monad)를 백업하고, 다른 호스트에 마운트하며, NRP를 통해 동기화하는 작업 — 를 수행할 수 있으며, 이때 A는 변하지 않습니다. 새로운 ACL(액세스 제어 목록)은 필요하지 않습니다.
벤치마크: 비밀 범위(secret-scope)의 은닉성은 대규모 환경에서도 유지됩니다 — 노드 수에 따른 secret scope p50/p95/p99 — 또한 공개 데이터와 비밀 데이터의 공존은 결코 유출되지 않습니다.
에이전트 빌더를 위한 조언: 당신의 에이전트에서 정보가 유출되는 이유
만약 당신의 에이전트가 사용자의 지갑, 키(keys), 메모리(memories)를 보유하고 있다면:
- 당신은 비밀 정보를 환경 변수(env)나 벡터 스토어(vector store)에 넣습니다.
- 도움을 주기 위해 대화 내용을 다른 에이전트로 복제(replicate)합니다.
- 오디언스(Audience)가 해당 에이전트 + 그 호스트 + 그 로그로 확장되어 버립니다.
당신은 또 다른 프록시(proxy)로 이를 임시방편으로 해결했을 것입니다. 당신에게 필요한 것은 me.wallet _입니다. 이는 내부적으로 계산되지만 공개 인덱스에서는 절대 해결(resolve)되지 않는 분기(branch)이며, 단 me.profile.card -> me.wallet은 권한이 부여되었을 때 이를 역참조할 수 있습니다.
4개의 에이전트가 동일한 그래프를 가지면서도, 4개의 복사본 없이 canProceed에 대해 4개의 서로 다른 답변을 내놓습니다. 이것이 바로 문맥을 이해하는 로봇들(Robots That Understand Context)입니다.

플랫폼 중심이 아닌 사용자 중심의 해결
*플랫폼 중심:
*
resolve(request) = platform.scope(request) // 플랫폼이 경계(boundary)가 됨
.me 중심:
resolve(request) = me.graph(request) // 사용자의 그래프가 경계가 됨
당신은 플랫폼을 위한 스키마(schema)를 선언하는 것이 아닙니다. 당신은 다음과 같이 선언합니다:
me.whatever.you.want("x")
me://whatever.you.want을 해결(resolve)할 수 있는 모든 인터페이스(surface) — CLI, GUI, NRP mesh, 또 다른 에이전트(agent) — 가 오디언스(audience)를 가지고 있다면 이를 찾아낼 수 있습니다.
이것은 역전된 의존성 인덱싱 (Inverted Dependency Indexing) + 네임스페이스 해결 프로토콜 (Namespace Resolution Protocol, NRP) 입니다. 이는 DNS가 아니라, me:// URI를 위한 메시(mesh) 인식형 홉 바이 홉 (hop-by-hop) 해결 방식입니다.
참조: User Centric System 및 Centralize The Self, Distribute The Data
스택(Stack): 커널(kernel), 공리(axioms), NRP, GUI
이것은 또 다른 개인 데이터 저장소(personal data store) 래퍼(wrapper)가 아닙니다.
- 개인 시맨틱 커널 (Personal semantic kernel): 호출 가능하며 무한히 체이닝(chaining)할 수 있는 단일 값
me.typeof me === "function"이며typeof me.profile.name === "function"입니다. - 10가지 공리 (10 axioms): Secret Root Stealth, Path-Bound Scopes, Noise Reset, 구조적 포인터 (Structural Pointers)
__/->, 이벤트로서의 쿼리 (Query as Event)?, 툼스톤 (Tombstone)-, 해시 체인 무결성 (Hash-chain integrity), LWW 결정론적 병합 (LWW deterministic merge). 모두 실전 테스트 완료:node tests/axioms.test.ts - NRP: 발견(Discover), 점수 산정(score), 전달(forward), 학습(learn). 모나드(monads)의 살아있는 네트워크.
- 데모 + GUI: neurons-me.github.io
여기서 시작하세요
만약 당신이 겪고 있는 문제 때문에 T ⊥ A가 1초 만에 이해되었다면:
- Axiom of Distinction을 읽으세요 — 3가지 공리, 60줄.
- Algebra of Encrypted Audiences를 읽으세요 — 그 메커니즘에 대하여.
.me를 클론(clone)하고, 직접me.security _를 실행해 보세요. 망가뜨려 보십시오.
me는 학습하기 위한 플랫폼이 아닙니다. 그것은 해결(resolve)해 나가야 할 패러다임입니다.
world → .me → meaning
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기