Hi, since Gtk-Gnutella does not support Tigertree-Hashes (TTH) and won't do so anytime soon either, it might be useful to use other simpler means to guard against corruption and poisoning. TTH is not _the_ solution either as the typical download chunk size will be smaller than a TTH-verifiable chunk and the TTH must be retrieved from a trusted source to be useful. So in case of corruption it's not easy to determine which party send the corrupt data - whether it's on purpose or due to a bug.
The good old overlap check is pretty powerful in practice. A purposeful corruption requires that the remote has at least a part of the data. This is certainly not impossible but it's difficult to do this efficiently for many arbitrary files. Unfortunately, Gtk-Gnutella selects randomized startup points in the file to be downloaded. These are obviously not protected by overlap checks. In my opinion it would be useful to pick as many of them from a single peer. If the peer sends wrong data this can be detected quite early and Gtk-Gnutella may decide to restart the download completely before much data has been downloaded. If the first peer is truly evil, TTH cannot help either unless we download the TTH from multiple peers in the hope that the majority has the correct TTH. The same applies to the startup points. The round-trip time and overhead can further be reduced with this scheme by sending a request for multiple ranges instead of a single range. I think this would also complement TTH. -- Christian
pgpFsshDk3A5c.pgp
Description: PGP signature
