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
- 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
- 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
- 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
- lightning
- python
- react-native
- steganography
- typescript
Log in or sign up for Devpost to join the conversation.