# 신원

> NeuroChain 신원 — 제어 키를 교체할 수 있는 고정 주소, 그리고 가디언·임계값·소유자가 거부할 수 있는 타임락을 갖춘 소셜 복구. 모두 합의 안에서 적용됩니다.

Source: https://docs.nro.world/ko/ai/identity

`.human` 주소는 처음에는 하나의 공개 키에 대한 순수 함수입니다. **신원(identity)**은 주소가 키보다 오래 살아남게 합니다. 주소를 제어하는 키 집합이 체인 상태에 보관되므로, 키를 **교체**할 수 있고 잃어버렸을 때는 **복구**할 수 있습니다 — 주소, 잔액, 이름, 기록은 바뀌지 않습니다.

## 첫 교체 전과 후

| 상태 | 주소를 제어하는 주체 |
|------|----------------------|
| 교체한 적 없고 복구도 설정하지 않음 | 주소가 도출된 키(`address = f(public key)`) |
| 신원 레코드가 존재 | 레코드에 있는 키**만**. 원래 키는 제거되는 즉시 작동을 멈춤 |

레코드는 처음으로 키를 교체하거나 복구를 설정할 때 생성됩니다. 유료 이름(`.node`, `.app`, `.vault`, `.agent`)은 그 이름을 소유한 `.human` 지갑의 신원을 따릅니다.

```bash
curl -s "$GATEWAY/api/v1/identity/neuro:<15 hex>.human"
# { "address": "…", "keys": ["<pk1>", "<pk2>"], "version": 2, "rotated_at": 4210, "recovery": { … } }
```

## 키 교체

`owner`, `add`(추가할 공개 키, 또는 빈 값), `remove`(제거할 공개 키, 또는 빈 값)와 함께 `POST /api/v1/identity/rotate`를 호출하며, **현재 활성** 키로 다음에 서명합니다.

```
nc-rotate|<owner>|<add>|<remove>|<nonce>
```

- 마지막으로 남은 키는 제거할 수 없습니다.
- 서명이 정확한 변경 내용을 포함하므로, 도중에 누구도 이를 바꿀 수 없습니다.
- 모든 검증자에서 합의를 통해 적용됩니다.

새 기기로 옮기는 일반적인 방법: 기존 기기에서 새 키를 추가한 다음, 새 키로 기존 키를 제거합니다.

## 소셜 복구

모든 키를 잃어버렸다면 **가디언**이 접근 권한을 되찾아 줄 수 있습니다.

### 설정

`POST /api/v1/identity/recovery/setup` — 활성 키로 서명합니다.

| 필드 | 규칙 |
|------|------|
| `guardians` | 하나 이상의 `.human` 주소, 자신의 주소는 불가 |
| `threshold` | 승인해야 하는 가디언 수: 1부터 가디언 수까지 |
| `timelock` | 임계값에 도달한 후 기다리는 블록 수로, 여러분이 거부할 시간을 줌 |

복구는 `.human` 주소에서만 사용할 수 있습니다.

### 복구하기

1. **요청** — 새 기기에서 `target`(여러분의 주소)과 `new_key`로 `POST /api/v1/identity/recovery/request`를 호출하고, 새 키로 서명합니다. 상태 `pending`.
2. **승인** — 각 가디언이 `POST /api/v1/identity/recovery/approve`(`target`, `guardian`)를 호출합니다. 승인 수가 임계값에 도달하면 요청은 `executes_at = now + timelock`과 함께 `armed`가 됩니다.
3. **실행** — `executes_at`에 모든 검증자가 신원의 키를 `new_key`로 자동 교체합니다.

실행 전에는 언제든지:

| 누가 | 할 수 있는 일 | 엔드포인트 |
|------|---------------|------------|
| 여러분, 아무 활성 키로 | 거부 | `POST /api/v1/identity/recovery/cancel` |
| 가디언 | 반려 | `POST /api/v1/identity/recovery/reject` |
| 요청자 | 철회 | `POST /api/v1/identity/recovery/withdraw` |

조회: `GET /api/v1/identity/recovery/:addr`(설정과 진행 중인 요청), `GET /api/v1/identity/guardian-of/:addr`(여러분이 가디언인 대상), `GET /api/v1/identity/recovery/initiated/:pk`(새 키가 시작한 요청).

::: tip 타임락은 신중하게 선택하세요
타임락은 여러분이 시작하지 않은 복구를 알아차릴 수 있는 시간입니다. 너무 짧으면 공모한 가디언들이 여러분이 대응하기 전에 주소를 가져갈 수 있고, 너무 길면 실제 복구에도 그만큼 시간이 걸립니다.
:::

## 계획

신원 레코드는 키 이상의 것을 담도록 설계되었습니다: 온체인 행동으로 쌓은 평판, 그에 대한 영지식 증명, 그리고 다른 체인이 이를 읽을 수 있게 하는 IBC v2 패킷. 이 중 어느 것도 아직 존재하지 않습니다.
