Is IPFS Private? What Content Addressing Hides, and What It Doesn't

No. IPFS is not private. Anyone holding a CID can retrieve the file, and nothing about content addressing changes that. Privacy on IPFS requires encrypting before upload.
This is the single most expensive misconception in decentralized storage, and the category has not been careful about correcting it. "Decentralized" and "private" get used as though they were the same property. They are not related at all.
Here is what is actually true, what follows from it, and what you have to do if the data you are storing is sensitive.
What a CID actually protects
A CID is a hash derived from the content of a file. Change one byte and you get a different CID. That gives you two genuine and valuable properties:
Integrity. If you retrieve a file and it hashes to the CID you asked for, it is byte-for-byte the file that was stored. Nobody has altered it in transit or at rest. You do not have to trust the node that served it.
Verifiability. Anyone can perform that check independently. A CID published in a smart contract, a paper, or an audit log is a claim that anybody can verify without your cooperation.
Neither of those is confidentiality. A CID is a name, not a lock. Knowing the name is enough to fetch the bytes.
What it does not protect
If your file is unencrypted and its CID is known, it is readable. That is the whole mechanism. There is no access check anywhere in the retrieval path, because IPFS was not designed to have one.
Three consequences that surprise teams in production:
Public gateways make it trivial. A CID pasted into any public gateway URL returns the file to anyone with a browser. No wallet, no node, no client software.
"Unguessable" is not a security model. A CID is long, so people assume nobody will find it. But CIDs leak constantly — in transaction data, in API responses, in browser history, in logs, in the metadata of the NFT you just minted. Security that depends on a URL not being shared is not security, it is luck.
Deletion does not un-publish. You can unpin a file from your own storage, but any node that fetched and cached it still has the bytes, and the CID still resolves for them. Content that reached the public network cannot be recalled. This is a property of the network, not a shortcoming of any particular provider.
The part vendors gloss over
Filecoin and Walrus do not change this either. They store the bytes they are handed. Hand them plaintext and they store plaintext, durably and verifiably, exactly as instructed.
So "we store your data on Filecoin" tells you nothing about whether anyone can read it. Neither does "your data is decentralized." The question that matters is: at what point in the pipeline does the plaintext exist, and who can see it?
For most pinning services and gateway providers, the honest answer is that plaintext exists on their infrastructure. They receive your file, they hold it, they serve it. Whether they read it is a policy promise, not a structural guarantee.
What actual privacy requires
Encrypt before the data leaves your client. Everything else is a detail of how you do that well.
The naive version — encrypt with a key, store the ciphertext on IPFS — works, and immediately creates the real problem: where does the key live? If you keep it on a server, that server is now the thing that must never be breached, and you have rebuilt centralised trust on top of decentralised storage. If you give it to the user, you have built a system where losing a key means losing data, and where sharing a file means sharing a key you can never un-share.
Lighthouse solves this with threshold encryption. Files are encrypted client-side, in the browser or runtime, before upload. The key is then split using BLS threshold cryptography and distributed across independent key nodes. No single node ever holds a complete key.
To decrypt, a threshold of those nodes must each agree to release their share. Each one independently evaluates the access conditions the file owner set, against live chain state, before it does. There is no complete key sitting anywhere to steal, and no central authority that can be persuaded to hand one over.
What that produces:
- Lighthouse cannot read your files. We never hold plaintext and never hold a whole key.
- Storage node operators cannot read them. Operators on IPFS, Filecoin and Walrus receive ciphertext.
- A breach of Lighthouse infrastructure does not expose file contents. There is nothing there to take.
That is a structural property rather than a promise, which is the difference that matters when someone asks you to justify a storage choice.
Access control is the other half
Encryption answers "can this be read." Access control answers "by whom," and on-chain conditions let you answer it without running an auth server.
Decryption can be gated on:
- ERC-20 balance thresholds
- ERC-721 and ERC-1155 ownership
- Native token balances
- Return values from any custom contract you deploy, with comparators
- Block heights and time windows
- Passkeys and zkTLS proofs
Conditions combine with boolean aggregators, files can be shared with named addresses under independent conditions, and access can be revoked after it is granted.
The practical shape: a file is public by CID in the sense that anyone can fetch the ciphertext, and useless to everyone whose wallet does not satisfy the conditions. Verifiability and confidentiality at the same time, which are usually presented as a trade-off.
So when is unencrypted IPFS fine?
Often, and it is worth saying so. Store plaintext on IPFS when the content is genuinely public and you want it verifiable: NFT media that is meant to be seen, published datasets, static site assets, open research artifacts, software releases. In those cases content addressing is doing exactly the job it was designed for, and encryption would only get in the way.
Encrypt when the file is personal data, commercially sensitive, subject to regulation, or gated behind a payment or membership. If you would not put it at a public URL, do not put it unencrypted on IPFS — because that is what you are doing.
Get Started
- Upload encrypted data
- Encryption features: share, revoke, and condition access
- Token gating with custom contracts
- Create an API key and start on the free tier
Stay in Touch
To learn more about Lighthouse, visit the official website, read the documentation, or jump in on GitHub. You can also join the community on Discord, X, Telegram, or LinkedIn.











































































