feature
Motivation. Third-party IPFS gateways offer a lot of value to the ecosystem:
Given the above, I'd like to propose that gateways have the ability to serve proofs that they're behaving correctly. This way, gateways can't maliciously modify content before serving it to their clients. A gateway can only refuse to answer a request, in which case another gateway can be tried.
How the feature should work. Requests to a gateway with the header X-Ipfs-Secure-Gateway: 1 should switch to a binary format containing the proof.
The first part of the response, called a preamble, relates the request path domain.com/a/b/c to the hash of the response body. It may contain a DNSSEC proof mapping domain.com to dnslink=/ipfs/Qm... or an IPNS record, as well as the contents of any intermediate directories /a/b/c.
The second part of the response, called the body, is a depth-first traversal of the file's DAG. The client can hash the first block and see that it equals the output of the preamble, and then check that the second block corresponds to the first link of the first block, and so on.
Background.
Thanks for writing this up, I'm currently traveling but I'll take a look when I get back (next Wednesday?) if not sooner.
(that is, this'll take some focus work to dig into so I'll need to allocate a chunk of distraction-free time)
(we're trying to cut a release but I'll still try to look at this ASAP)
Again, I apologize for the extensive delay. The release should be out shortly (https://github.com/ipfs/go-ipfs/pull/6223) and we'll re-enter the feature cycle.
What is the status on this?
Content-addressing is about "getting authentic data from any source", and this PR goes in the right direction. :)
The status:
I'd like to revisit it when we get everything under control but I'm having trouble allocating time to it at the moment.
More generally, this feature doesn't really fit in with the overall goal of IPFS: to decentralize the internet. Basically, to make use of this feature, the user needs to install _something_. That leaves us with two choices:
The former helps provide better, secure access to the IPFS network but the _latter_ actually works towards our goal of decentralizing the internet. If the user needs to install something anyways, I'd rather move closer to our goal.
On the other hand, I do understand that running IPFS locally is not always possible for performance reasons. That's why I'd like to revisit this once we get the larger-scale network performance issues under control.
Additional design work needs to happen here, and probably some dev on the browser vendor side as well.
Open problems:
ipfs add (eg. different hash, trickle dag, chunk size etc)