Skip to content

feat(pir_shielded_pool): PoC proposal, PIR for shielded pools (path retrieval & note discovery) #68

Description

@Meyanis95

Draft proposal for discussion. Posting as an issue to gather feedback before writing a full REQUIREMENTS.md / SPEC.md. Open questions are intentional.

Motivation

  • Shielded pools (Railgun / Privacy Pools style) give on-chain privacy, but client interactions can leak the same secrets they protect:
    • Path retrieval: to spend a note, the client needs its Merkle inclusion path. Asking an RPC/indexer reveals which note is about to be spent.
    • Note discovery: detecting incoming notes naively requires trial-decrypting every note, or revealing identity to a discovery service.
  • PIR (and adjacent primitives like OMR / FMD) plug these leaks. The design space is wide; latency and cost trade-offs aren't obvious until built.

Relation to iptf-map

  • Strengthens pattern-shielding: the pattern's privacy rating is partial partly because metadata leaks at the indexer/relayer layer. This PoC closes that gap for the query path.
  • Extends approach-private-payments: the approach already lists iptf-pocs/pocs/private-payment/shielded-pool as its reference; PIR-backed retrieval is a natural follow-on PoC and could be added as a sub-pattern under this approach.
  • Composes with:

What the PoC would demonstrate

  • Client/server flow for Merkle-path retrieval via PIR against a shielded-pool state tree.
  • (Stretch) Note-discovery flow on the same substrate.
  • Benchmarks vs. naive retrieval: latency, server CPU, bandwidth, client compute.

Candidate building blocks (reuse, don't reimplement)

PIR is a heavy primitive on its own. The PoC should wrap and benchmark an existing library, not build a PIR scheme from scratch. Candidate stacks:

  • SimplePIR / DoublePIR: reference impl at github.com/ahenzinger/simplepir (Go, MIT, ~1.2k LoC). Single-server, lattice-based, cheap client, heavy server.
  • FrodoPIR: paper eprint.iacr.org/2022/981; C++ port at github.com/itzmeanjan/frodoPIR. Essentially SimplePIR with different lattice params; small dependency surface.
  • Spiral (Menon–Wu 2022): alternative single-server scheme; check authors' repo if benchmarked.
  • Oblivious Message Retrieval (OMR): Liu–Tromer 2022, useful specifically for the discovery angle. Check the authors' reference repo.
  • FMD (Fuzzy Message Detection, Penumbra): weaker but cheap discovery baseline; useful as a comparison point.
  • Sharded PIR design for the Ethereum state (ethresear.ch/t/sharded-pir-design-for-the-ethereum-state/24552): community proposal that sharded PIR can scale to Ethereum-state-sized databases. Directly relevant if our shielded-pool tree is large or grows on L1 timescales; informs how to partition the state for tractable server-side PIR cost.

Open questions

  • Target substrate: extend the existing pocs/private-payment/shielded-pool (Noir/UltraHonk) PoC, hook into Aztec's tag-based discovery layer, or stand up a minimal toy tree?
  • One PoC covering retrieval + discovery, or split into two (multi-approach pattern à la CLAUDE.md)?
  • Trust model for the PIR server(s): same entity as RPC, separate indexer, or decentralized?
  • Is end-to-end latency for single-server PIR realistic for a UX demo, or do we only benchmark in isolation?
  • Do we explicitly position this as a step toward, or inspired by, Tachyon's design, or stay scheme-agnostic?

Prior art

  • Project Tachyon (Zcash): tachyon.z.cash, new post-quantum shielded pool that bakes in PIR; closest existing initiative to what this PoC would demonstrate. Aztec is collaborating with the Tachyon team on a PIR-based note-discovery design.
  • Aztec note discovery: docs.aztec.network/.../note_discovery, plus the Aztec Note Discovery Summary HackMD. The current tag-based scheme has the exact IP/correlation leak this PoC targets.
  • SimplePIR / DoublePIR (Henzinger et al., USENIX Security 2023).
  • FrodoPIR (PoPETs 2023).
  • OMR (Liu–Tromer 2022).
  • Penumbra FMD design.
  • Sharded PIR design for the Ethereum state (ethresear.ch).

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions