Inspiration

We’ve been fascinated by steganography—the art of hiding messages in plain sight, for a long time. When we first learned about e-cash and its properties as a bearer asset, we couldn’t shake an image from a TV show of a guy finding creative ways to hide his Bearer Shares, trusting that whoever held them truly owned the company. It struck us that we could do something similar for digital money: “hide” Bitcoin transactions inside everyday images so that only sender and recipient know where to look—and thwart anyone trying to censor or surveil them.

What We Learned

Early on, we discovered a saying that crystallized our approach: “Cryptography protects the message; steganography protects the messenger.” By combining both, we realized we could build a system where transactions are encrypted and concealed. Along the way, we dove deep into:

  • e-cash protocols (Cashu and Fedimint)
  • Steganography techniques, from simple LSB encoding to more advanced methods
  • Cross-platform bridging, evaluating Rust-to-TypeScript bindings (Uniffi) versus WebAssembly constraints

How We Built It

  1. Proof of Concept (CLI)
  • Started with wrapnuts, a command-line tool that hides data in images.
  • Verified it could carry serialized Cashu tokens, then sketched out a user-friendly mobile app
  1. Platform Research
  • Discovered that many steganography libraries are outdated or platform-restricted.
  • Explored a Rust core exposed via Uniffi, the space is still "bleeding edge" so we need more time
  1. Current Implementation
  • To stay within the hackathon time frame, we shipped a simple LSB encoder/decoder served over HTTP.
  • The app encrypts Cashu tokens, embeds them in an image’s least significant bits, and delivers the stego-image via standard messaging apps.
  • Our plan is to continue researching and end on a steg implementation that's native to the UI so no network boundaries need to be crossed and hence trusted

Challenges & Trade-Offs

  • Library support: Many steg libraries are outdated or platform-restricted, so we built our own minimal LSB module.
  • Bridging languages: Rust ↔ TypeScript via Uniffi was promising but needs more research and development.
  • Security vs. usability: Advanced techniques (e.g. DCT steganography) offer stronger concealment but increase processing time and app complexity.

What’s Next

  • [ ] Finish the bridge Rust and TypeScript and prove the concept of a library that's actively maintained and rich in features available for apps and websites
  • [ ] Enable other types of media like text messages and audio
  • [ ] Redesign our UX from the ground to appeal even more to non-technical users

Built With

Share this project:

Updates