# NIP-44 v3 — Aszimmetrikus titkosítás Nostr-ra (Draft)

**Forrás:** https://github.com/nostr-land/nip44v3/blob/master/nip44v3.md

---

## Összegzés
A NIP-44 v3 a NIP-44 v2 továbbfejlesztése, új aszimmetrikus titkosítási sémát vezet be Nostr eseményekhez. Bináris plaintext → Base64 ciphertext (Nostr eventekbe illeszthető).

---

## Mit tud?

- **Authentikált adatok:** `kind` + `scope` mezők csatolhatók a ciphertext-hez → cross-context replay védelem, signerek korlátozhatják a titkosítás/visszafejtés hozzáférését
- **Padding:** korlátozott üzenetméret-elrejtés paddinggel (továbbfejlesztett algoritmus a v2-höz képest)
- **Verziószám:** a ciphertext első byte-ja `3` (v2-nél `2` volt) — visszafelé kompatibilitás megőrizve

## Mit NEM tud?

- **Nincs forward secrecy** — privát kulcs kiszivárgása esetén minden korábbi ciphertext visszafejthető
- **Nincs metadata rejtés** — author, timestamp látható marad
- **Nincs deniability** (tagadhatóság) önmagában
- **Durva üzenetméret** látszik paddinggel is

Ezeket az alkalmazásnak kell saját protokollokkal megoldania.

---

## Technikai részletek

### Kriptográfiai primitívek

| Komponens | Algoritmus |
|-----------|-----------|
| Kulcsszármaztatás | HKDF (SHA-256) |
| MAC | HMAC-SHA256 |
| Szimmetrikus titkosítás | ChaCha20 (96-bit zéró nonce) |
| Kulcscsere | ECDH (BIP-340 x-only pubkey, secp256k1) |
| Kódolás | Base64 (RFC4648) |

### Context (authentikált, de titkosítatlan)

- **`kind`**: unsigned 32-bit integer — az event kind, amiben az üzenet van (65535 feletti értékek reserváltak)
- **`scope`**: UTF-8 string — további scop-oláshoz

### Padding algoritmus

A v2-höz hasonló, de finomhangolva:
- `minimum_size`: 32 byte
- Small/large rész felosztás: 4 / 8 alegység
- Threshold: 32768 byte
- A célméret a következő 2-hatványra kerekít, majd rész-okra oszt

### Titkosítás lépései (röviden)

1. 32 byte random nonce generálása
2. `encryption_key` + `mac_key` származtatása HKDF-fel (ECDH shared secret-ből)
3. Plaintext prefixelése hosszal → padding zérókkal → ChaCha20 titkosítás
4. `nonce || kind || scope_len || scope || ciphertext` → HMAC
5. Végső: `base64_encode(0x03 || nonce || mac || kind || scope_len || scope || ciphertext)`

### Visszafejtés

- Verzióellenőrzés (0x03), MAC ellenőrzés (constant-time), padding validáció (minden zéró)
- A `kind` és `scope` kötelezően egyeznie kell az elvárttal → cross-context replay ellen védelem

---

## Mi változott a v2-höz képest?

1. **`kind` + `scope` context** — a v2-ben nem volt authentikált plusz adat, ez a legnagyobb újítás
2. **Továbbfejlesztett padding** — finomhangolt rész paraméterek
3. **Formális specifikáció** — pszeudokód szintű definíciók, erősebb típusosság

---

## Státusz

⚠️ **Draft** — még nem véglegesített NIP.
