{"id":"bbc36fa0356abfbd4a117c462a166954ba5a678e205e7dce4bc6b20ee8227723","pubkey":"2c917bfcfe4f3777ccacb4c968d6a3e9266d39a22db65c2cf2ca0c09fddf8638","created_at":1783578743,"kind":30817,"tags":[["d","throatstr-nip-stegotext-channels"],["title","ThroatStr NIP — Stegotext Channels"],["alt","Nostr Implementation Possibility: ThroatStr NIP — Stegotext Channels"],["client","NostrHub"]],"content":"# ThroatStr NIP — Stegotext Channels\n\n## Kind 38689 — Stego Receiver Profile (Addressable)\n\nPublished by the **recipient** (journalist/redaction) to advertise acceptance of anonymous submissions.\n\n### Event Structure\n\n```json\n{\n  \"kind\": 38689,\n  \"content\": \"<human-readable instructions for sources>\",\n  \"tags\": [\n    [\"d\", \"<profile-id>\"],\n    [\"stego-suite\", \"mec-v1/llmspec-<hash>\"],\n    [\"wrap\", \"nip59\"],\n    [\"enc\", \"nip44-v2\"],\n    [\"recv-key\", \"<dedicated submission pubkey hex>\"],\n    [\"relay\", \"wss://relay1.example.com\"],\n    [\"relay\", \"wss://relay2.example.com\"],\n    [\"carrier\", \"text\"],\n    [\"alt\", \"Stego receiver profile for anonymous source submissions\"]\n  ],\n  \"pubkey\": \"<recipient's main identity pubkey>\"\n}\n```\n\n### Tag Definitions\n\n| Tag | Required | Description |\n|-----|----------|-------------|\n| `d` | yes | Unique profile identifier (allows multiple receiver profiles per pubkey) |\n| `stego-suite` | no | Codec + model contract identifier (Phase 2) |\n| `wrap` | yes | Wrapping protocol: `nip59` (gift wrap mandatory) |\n| `enc` | yes | Encryption protocol: `nip44-v2` |\n| `recv-key` | yes | Dedicated submission pubkey (MUST differ from identity key) |\n| `relay` | no | Suggested ingest relay URLs (repeatable) |\n| `carrier` | no | Allowed carrier types: `text`, `file` |\n| `alt` | yes | NIP-31 human-readable description |\n\n### Protocol Invariants\n\n1. `recv-key` MUST be a different keypair from the recipient's identity key\n2. Gift wrap (NIP-59) is always mandatory for submissions\n3. Carriers (kind:1 notes) MUST NOT carry app-specific tags or markers\n4. Encryption (NIP-44) is always applied before any steganographic encoding\n\n## Submission Protocol (Phase 1 — Gift Wrap Channel)\n\nSources submit via NIP-59 Gift Wrap (kind:1059) addressed to the `recv-key`:\n\n1. Source composes message\n2. Message is encrypted with NIP-44 using an ephemeral key → recv-key\n3. Encrypted message is wrapped in a NIP-59 gift wrap (kind:13 seal + kind:1059 wrap)\n4. Gift wrap is published to large public relays\n5. Ephemeral key is destroyed — source retains no evidence\n\n### Receiver Decryption\n\n1. Receiver monitors for kind:1059 events addressed to their `recv-key`\n2. Decrypts outer wrap with recv-key private key\n3. Decrypts inner seal to retrieve the rumor (unsigned event)\n4. Displays message content securely\n\n## Security Properties\n\n- **Metadata protection**: Gift wrap hides sender, receiver, kind, and timestamp\n- **Forward deniability**: Unsigned rumor cannot be authenticated if leaked\n- **No sender persistence**: Ephemeral keys are destroyed after sending\n- **Key separation**: Compromise of recv-key does not compromise identity\n\n## Phase 2 — Steganographic Channel (Ebene A/B)\n\n### Steganographic Encoding\n\nThe stego codec implements Perfectly-Secure Steganography via arithmetic coding over autoregressive LLM token probability distributions (based on Schroeder de Witt et al., \"Perfectly Secure Steganography Using Minimum Entropy Coupling\", ICLR 2023).\n\n**Security guarantee**: When the payload is uniformly distributed (encrypted), the carrier text is distributionally identical to normal model output. No statistical test can distinguish stego output from real model output.\n\n### Stego Pipeline (Encoder)\n\n```\nplaintext → NIP-44 encrypt → high-entropy bytes → arithmetic coding over\nmodel distributions → carrier text → publish as kind:1 from ephemeral key\n```\n\n### Stego Pipeline (Decoder / Trial-Decode)\n\n```\ncandidate kind:1 notes → tokenize → arithmetic decode using same model →\ncandidate bytes → NIP-44 decrypt attempt → if MAC valid: message found\n```\n\n### `stego-suite` Tag Format\n\n```\n[\"stego-suite\", \"mec-v1/<config-hash>\"]\n```\n\nWhere `<config-hash>` is the SHA-256 of the canonical model configuration:\n```json\n{\n  \"modelId\": \"gpt-4o-mini\",\n  \"endpoint\": \"https://api.openai.com/v1/chat/completions\",\n  \"temperature\": 1.0,\n  \"topP\": 1.0,\n  \"topK\": 20,\n  \"maxTokens\": 512\n}\n```\n\nBoth sender and receiver MUST share the exact same config hash. A mismatch causes silent decode failure (security property: no information leaks about whether something IS a stegogram).\n\n### Carrier Events\n\nSteganographic carriers are published as **normal kind:1 text notes** with:\n- NO app-specific tags\n- NO markers or distinguishing content patterns\n- Ephemeral throwaway pubkey as author\n- Jittered timestamp (±2 hours)\n\n## Future Phases\n\n- **Phase 3**: Transport adapters (relay strategy, bitchat)\n- **Phase 4**: OpSec layer (amnesic mode, key rotation, panic functions)","sig":"e867d3f2174bd32b439fd8be3c083369c3812dcb1383f414151a9a5498e447875045337d56f7600267074f51c697ad61d9aa943d6b181c46a54e5127133d8de8"}