Proof-of-Concept: Secure File Sharing via IPFS + Nostr DMs
Project description
🔐📁 FiNo - Secure File Sharing via IPFS + Nostr
FiNo (File + Nostr) is a decentralized, secure file sharing tool that combines IPFS storage with Nostr messaging for truly anonymous and censorship-resistant file transfers.
🌟 Features
- 🔐 End-to-End Encryption: AES-256-GCM + ECDH key exchange
- 🌐 Decentralized: No central servers, works globally
- 🆓 Completely Free: No API keys, no registration required
- ⚡ Real-Time: Instant file sharing via Nostr DMs
- 🔒 Privacy-Focused: No central servers, no tracking
- 🗜️ Smarter Transfers: Files are compressed (gzip) before encryption by default
- 🎨 Beautiful CLI: Rich-powered output with panels, colors and emojis
🚀 Quick Start
1. Install FiNo
pip install pyfino
2. Install IPFS (one-time setup)
# macOS
brew install ipfs
# Linux
curl -O https://dist.ipfs.io/go-ipfs/v0.36.0/go-ipfs_v0.36.0_linux-amd64.tar.gz
tar -xvzf go-ipfs_v0.36.0_linux-amd64.tar.gz
sudo mv go-ipfs/ipfs /usr/local/bin/
# Windows
# Download from https://ipfs.io/docs/install/
3. Initialize IPFS (one-time setup)
ipfs init
sudo brew services start ipfs # macOS
# or: ipfs daemon & # Linux/Windows
4. Generate your keys
fino gen-key
5. Send a file
fino send document.pdf --to npub1abc... --from nsec1xyz...
6. Receive files
fino receive --from nsec1xyz...
7. Show version
fino --version
🤔 How It Works (ELI5)
The Problem
- Traditional file sharing needs central servers (Google Drive, Dropbox)
- These can be shut down, censored, or hacked
- They know who you are and what you're sharing
The Solution
FiNo splits file sharing into two parts:
-
📁 File Storage (IPFS)
- Files are stored on a global network (like a giant, distributed hard drive)
- No single point of failure
- Files are accessible from anywhere in the world
- Free forever - no company owns it
-
📨 File Location (Nostr)
- The "address" of your file is sent via Nostr (like a decentralized email)
- Only the person you send it to can find the file
- No central server controls the messages
Behavior & Defaults
- Files are automatically compressed with gzip before encryption to reduce transfer size (media like .mp4/.jpg may not shrink).
- IPFS announce (provider routing) is performed in the background to minimize blocking; global discoverability may take a few seconds after send.
How It's Free
- IPFS: Community-run network, no company owns it
- Nostr: Decentralized messaging protocol, no company owns it
- No API keys: You're not using anyone's service
- No registration: You're just using open protocols
🔐 Security Features
- AES-256-GCM: Military-grade file encryption
- ECDH: Perfect forward secrecy for metadata
- Zero-knowledge: No one can see your files except the intended recipient
- End-to-end encryption: Files encrypted before transmission
- Compress-before-encrypt: Reduces plaintext patterns and metadata hints before encryption, and shrinks size for faster, cheaper transfers
- Decentralized: No central point of failure
📦 Installation Details
Requirements
- Python 3.8+
- IPFS daemon
- Internet connection
🚨 Important Notes
- Experimental software - Use at your own risk
- Keep your nsec private - Never share your private key
- Backup your keys - If you lose them, you can't access your files
- IPFS persistence - Files may be removed if not pinned by someone
⚡ Performance Tips
- Start the IPFS daemon before sending to keep it "warm":
ipfs daemon - Your sender upload speed is the main bottleneck for total time; compression helps most for text/JSON/CSV, not for videos/images/ZIPs.
- Receivers may need a few seconds after you send for background DHT announce to propagate; if a fetch fails immediately, retry once.
🔗 Useful Links
📄 License
MIT License - see LICENSE file for details.
⚠️ Disclaimer: This is experimental software for innovation research only. Use responsibly and in accordance with local laws.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pyfino-0.3.0.tar.gz.
File metadata
- Download URL: pyfino-0.3.0.tar.gz
- Upload date:
- Size: 18.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
90584ff7aab59d9cee04036f43f790dbbc0a37da0f2030d259ced97062b42809
|
|
| MD5 |
9799f9b7964f65b3542a3138ce7d350b
|
|
| BLAKE2b-256 |
4ea671fde996c6e3c549d114b9a310eb9e2c71c5e004a00403d3f037f453d967
|
File details
Details for the file pyfino-0.3.0-py3-none-any.whl.
File metadata
- Download URL: pyfino-0.3.0-py3-none-any.whl
- Upload date:
- Size: 19.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.1
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
790126e71fefe847029fff2c494395add130f73ad40eb33bd7d58e57acb40ad0
|
|
| MD5 |
6c430c0de826308e53ebd82fed5c4d6a
|
|
| BLAKE2b-256 |
ef098e8cdd6b0aabe65ee859b05f18153f5b7dd29669cb2cadfec07fba0bef2f
|