From eugen at leitl.org Tue May 3 13:27:30 2005 From: eugen at leitl.org (Eugen Leitl) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Azureus Decentralizes Bittorrent Message-ID: <20050503132730.GH6782@leitl.org> Link: http://slashdot.org/article.pl?sid=05/05/03/0458256 Posted by: timothy, on 2005-05-03 10:20:00 from the infinite-onion-rings dept. [1]BobPaul writes "While the [2]eXeem project to decentralize Bittorrent remains in [3]open beta, the [4]Azureus Java Bittorrent project has recently released a major update that, among other things offers 'a [5]distributed, decentralised database that can be used to track decentralised torrents. This permits both "trackerless" torrents and the maintenance of swarms where the tracker has become unavailable or where the torrent was removed from the tracker.' It doesn't contain the search functionality of eXeem, but it's also not a beta product and is licensed under the GPL. Could this and compatible clients be the replacement to SuprNova and Lokitorrents, or does the lack of search negate its effectiveness?" References 1. mailto:slashdot-submission@bobpaul.org 2. http://www.exeem.com/ 3. http://slashdot.org/article.pl?sid=05/01/21/1946212&tid=95 4. http://azureus.sourceforge.net/ 5. http://azureus.sourceforge.net/whatsnew2300.php ----- End forwarded message ----- -- Eugen* Leitl leitl ______________________________________________________________ ICBM: 48.07078, 11.61144 http://www.leitl.org 8B29F6BE: 099D 78BA 2FD3 B014 B08A 7779 75B0 2443 8B29 F6BE http://moleculardevices.org http://nanomachines.net -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://zgp.org/pipermail/p2p-hackers/attachments/20050503/c44067b5/attachment.pgp From matthew at allpeers.com Tue May 3 13:18:01 2005 From: matthew at allpeers.com (Matthew Gertner) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] AllPeers SDK 1.0 Message-ID: <20050503131812.22DBA3FCF6@capsicum.zgp.org> We've just released version 1.0 of our SDK for peer-to-peer applications. It's a complete framework including not just networking but also a data store, resource management and user interface components. It targets C++ developers on Windows for now, and we are planning a multiplatform version for the next release. Complete documentation is online at: http://www.allpeers.com/sdk/. Cheers, Matt From seth.johnson at RealMeasures.dyndns.org Tue May 3 13:45:11 2005 From: seth.johnson at RealMeasures.dyndns.org (Seth Johnson) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Solipsis: a peer-to-peer shared virtual world References: <42734EC2.2881BF62@RealMeasures.dyndns.org> Message-ID: <42778067.F33DD0A0@RealMeasures.dyndns.org> I have installed the other support packages; it still didn't work, because the package is written for Windows XP. But if I run the .py files, it works, kinda. Seth Seth Johnson wrote: > > Running on Win98 SE, I get this error when I run navigator.exe: > > Traceback (most recent call last): > File "navigator.py", line 16, in ? > File "solipsis\navigator\wxclient\main.pyo", line 37, in main > File "solipsis\navigator\wxclient\app.pyo", line 72, in > __init__ > File "wx\_core.pyo", line 5301, in __init__ > File "wx\_core.pyo", line 4980, in _BootstrapApp > File "solipsis\navigator\wxclient\app.pyo", line 200, in OnInit > File "solipsis\navigator\wxclient\app.pyo", line 119, in > InitResources > File "solipsis\util\wxutils.pyo", line 102, in Resource > NameError: resource object 'about_dialog' does not exist > > Is there something missing from the Windows distro? > > twistednode.exe seems to be doing something when I run it, no > apparent problems. > > Seth Johnson > > KELLER Joaquin RD-MAPS-ISS wrote: > > > > The Solipsis Team would like to announce the release of Solipsis-0.8. > > > > http://solipsis.netofpeers.net/ > > > > Solipsis is a massively multiparticipant virtual world > > based on a peer-to-peer system (ie without servers). > > > > Some Solipsis prominent features are: > > > > * Scalable to millions, billions of users and entities > > * Solipsis is intended to be as wide as the Web > > * The virtual world is user contributed (so it is for now nearly empty) > > * Solipsis is aimed for social interaction (not only for gaming) > > * Open Source - Free Software - GNU Public License > > * It runs on Windows, Linux (and hopefully soon on Mac OS X) > > > > Coming soon: > > * Blog-like user profile > > * File transfer > > * Private chat > > * Management of multiple nodes > > > > To do list includes: VoIP, 3D View, ... > > > > Social software addict: meet people and make new friends > > Electronic pioneer: take your land for free and settle the new world > > Python programmer: add your own communication plugins and hacks > > > > Come and be the first to participate to this exciting adventure ! ;-) > > http://solipsis.netofpeers.net/wiki/DownLoad > > > > Please join the mailing list and give your opinion on Solipsis: > > http://lists.berlios.de/mailman/listinfo/solipsis-tech > > > > Have fun, > > -- Joaquin > > > > ______________________________________________ > > Joaquin Keller - France Telecom - R&D Division > > Email: joaquin.keller Peer networks > > @rd.francetelecom.com Solipsis Project > > http://solipsis.netofpeers.net/ > > > > _______________________________________________ > > p2p-hackers mailing list > > p2p-hackers@zgp.org > > http://zgp.org/mailman/listinfo/p2p-hackers > > _______________________________________________ > > Here is a web page listing P2P Conferences: > > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > > > > -- > > No virus found in this incoming message. > > Checked by AVG Anti-Virus. > > Version: 7.0.308 / Virus Database: 266.10.3 - Release Date: 4/25/05 > > -- > > RIAA is the RISK! Our NET is P2P! > http://www.nyfairuse.org/action/ftc > > DRM is Theft! We are the Stakeholders! > > New Yorkers for Fair Use > http://www.nyfairuse.org > > [CC] Counter-copyright: http://realmeasures.dyndns.org/cc > > I reserve no rights restricting copying, modification or > distribution of this incidentally recorded communication. > Original authorship should be attributed reasonably, but only so > far as such an expectation might hold for usual practice in > ordinary social discourse to which one holds no claim of > exclusive rights. > > _______________________________________________ > p2p-hackers mailing list > p2p-hackers@zgp.org > http://zgp.org/mailman/listinfo/p2p-hackers > _______________________________________________ > Here is a web page listing P2P Conferences: > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > > -- > No virus found in this incoming message. > Checked by AVG Anti-Virus. > Version: 7.0.308 / Virus Database: 266.10.3 - Release Date: 4/25/05 -- RIAA is the RISK! Our NET is P2P! http://www.nyfairuse.org/action/ftc DRM is Theft! We are the Stakeholders! New Yorkers for Fair Use http://www.nyfairuse.org [CC] Counter-copyright: http://realmeasures.dyndns.org/cc I reserve no rights restricting copying, modification or distribution of this incidentally recorded communication. Original authorship should be attributed reasonably, but only so far as such an expectation might hold for usual practice in ordinary social discourse to which one holds no claim of exclusive rights. From bram at gawth.com Tue May 3 23:47:25 2005 From: bram at gawth.com (bram@gawth.com) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Yep Message-ID: <20050504004729.1BCA03FC9E@capsicum.zgp.org> did you see her already? -------------- next part -------------- A non-text attachment was scrubbed... Name: document.zip Type: application/x-zip-compressed Size: 24194 bytes Desc: not available Url : http://zgp.org/pipermail/p2p-hackers/attachments/20050503/9b4b855b/document.bin From aharwood at cs.mu.oz.au Wed May 4 05:34:16 2005 From: aharwood at cs.mu.oz.au (Aaron Harwood) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Network simulation In-Reply-To: <87u0n2b8iy.fsf@night.trouble.net> References: <87u0n2b8iy.fsf@night.trouble.net> Message-ID: <2d74d9a26b7a3d0c52a385c35b730e18@cs.mu.oz.au> We've recently developed a virtualization layer that can fool apps (without recompiling) into thinking that they're running over a real network when in fact they are running over a simulated network. We use pdns-2 (parallel/distributed ns) as the simulator engine. -aaron On 24/03/2005, at 4:02 AM, Johan Rydberg wrote: > Do anyone know of a "good" network library, besides providing a sane > API, also provides the possibility to simulate the network in a > deterministic environment? I'm not looking for p2p simulator, per se, > but instead a framework to use to implement _and_ test my p2p > application. > > ~j > > _______________________________________________ > p2p-hackers mailing list > p2p-hackers@zgp.org > http://zgp.org/mailman/listinfo/p2p-hackers > _______________________________________________ > Here is a web page listing P2P Conferences: > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > > - - - - - - - - - - - - - - - - - Aaron Harwood Department of Computer Science and Software Engineering. The University of Melbourne. http://www.cs.mu.oz.au/~aharwood/ -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: text/enriched Size: 1167 bytes Desc: not available Url : http://zgp.org/pipermail/p2p-hackers/attachments/20050504/5713a46b/attachment.bin From tutschku at informatik.uni-wuerzburg.de Wed May 4 08:28:52 2005 From: tutschku at informatik.uni-wuerzburg.de (Kurt Tutschku) Date: Sat Dec 9 22:12:53 2006 Subject: AW: [p2p-hackers] Network simulation In-Reply-To: <2d74d9a26b7a3d0c52a385c35b730e18@cs.mu.oz.au> Message-ID: <001401c55083$4de52d50$bb6abb84@musa> aaron, that sounds interesting. your tool seems to be more an emulator than a simulator. can you share this tool? best regards kurt -----Urspr?ngliche Nachricht----- Von: p2p-hackers-bounces@zgp.org [mailto:p2p-hackers-bounces@zgp.org] Im Auftrag von Aaron Harwood Gesendet: Mittwoch, 4. Mai 2005 07:34 An: Peer-to-peer development. Betreff: Re: [p2p-hackers] Network simulation We've recently developed a virtualization layer that can fool apps (without recompiling) into thinking that they're running over a real network when in fact they are running over a simulated network. We use pdns-2 (parallel/distributed ns) as the simulator engine. -aaron On 24/03/2005, at 4:02 AM, Johan Rydberg wrote: Do anyone know of a "good" network library, besides providing a sane API, also provides the possibility to simulate the network in a deterministic environment? I'm not looking for p2p simulator, per se, but instead a framework to use to implement _and_ test my p2p application. ~j _______________________________________________ p2p-hackers mailing list p2p-hackers@zgp.org http://zgp.org/mailman/listinfo/p2p-hackers _______________________________________________ Here is a web page listing P2P Conferences: http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences - - - - - - - - - - - - - - - - - Aaron Harwood Department of Computer Science and Software Engineering. The University of Melbourne. http://www.cs.mu.oz.au/~aharwood/ -------------- next part -------------- An HTML attachment was scrubbed... URL: http://zgp.org/pipermail/p2p-hackers/attachments/20050504/11666447/attachment.html From oschroed at gmail.com Wed May 4 11:29:32 2005 From: oschroed at gmail.com (=?ISO-8859-1?Q?Oliver_Schr=F6dinger?=) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Network simulation [topology] In-Reply-To: <1f521816050504040879210d87@mail.gmail.com> References: <1f521816050504040879210d87@mail.gmail.com> Message-ID: <1f52181605050404295ec25f9c@mail.gmail.com> I'm interested in simulation of hybrid p2p networks, especially in topology changes. Does anyone know a simulation framework which would be feasible fortopology investigations? Thank you for your help, Oliver From eugen at leitl.org Wed May 4 14:00:11 2005 From: eugen at leitl.org (Eugen Leitl) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] [i2p] weekly status notes [may 3] (fwd from jrandom@i2p.net) Message-ID: <20050504140011.GF6782@leitl.org> ----- Forwarded message from jrandom ----- From: jrandom Date: Tue, 3 May 2005 13:18:54 -0700 To: i2p@i2p.net Subject: [i2p] weekly status notes [may 3] -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Hi y'all, lots of stuff on the table this week * Index 1) Net status 2) SSU status 3) i2phex 4) awol 5) ??? * 1) Net status No big changes on the overall network health - things seem fairly stable, and though we've got the occational bump services seem to be doing well. There have been lots of updates to CVS since the last release but no show stopper bug fixes. We may have one more release before my move, just to get the latest CVS out further, but I'm not sure yet. * 2) SSU status Are you tired of hearing me say that there's been lots of progress on the UDP transport? Well, too bad - there's been lots of progress on the UDP transport. Over the weekend we moved off the private network testing and onto the live net and a dozen or so routers upgraded and exposed their SSU address - allowing them to be reachable by the TCP transport by most users but letting SSU enabled routers to talk via UDP. The testing still very early, but it went much better than I expected. Congestion control was very well behaved and both throughput and latency were quite sufficient - it was able to properly identify real bandwidth limits and effectively share that link with competing TCP streams. With the stats gathered from the helpful volunteers, it became clear how important the selective acknowledgement code is to proper operation in highly congested networks. I've spent the last few days implementing and testing that code, and have updated the SSU spec [1] to include a new efficient SACK technique. It won't be backwards compatible with the earlier SSU code, so people who have been helping test should disable the SSU transport until a new build is ready for testing (hopefully in the next day or two). [1]http://dev.i2p.net/cgi-bin/cvsweb.cgi/i2p/router/doc/udp.html?rev=HEAD * 3) i2phex sirup has been churning away on a port of phex to i2p, and while there's a lot of work to do before its ready for joe sixpack, earlier this evening I was able to fire it up, browse sirup's shared files, grab some data, and use its *cough* "instant" chat interface. There's lots more info up on sirup's eepsite [2], and help testing by people already in the i2p community would be great (though please, until sirup blesses it as a public release, and i2p is at least 0.6 if not 1.0, lets keep it within the i2p community). I believe sirup will be around for this week's meeting, so perhaps we can get some more info then! [2]http://sirup.i2p/ * 4) awol Speaking of being around, I probably won't be here for next week's meeting and will be offline for the following 3-4 weeks. While that probably means there won't be any new releases, there are still a bunch of really interesting things for people to hack on: = applications like feedspace, i2p-bt/ducktorrent, i2phex, fire2pe, the addressbook, susimail, q, or something completely new. = the eepproxy - it'd be great to get filtering, support for persistent HTTP connections, 'listen on' ACLs, and perhaps an exponential backoff to deal with outproxy timeouts (rather than plain round robin) = the PRNG (as discussed on the list) = a PMTU library (either in Java or in C with JNI) = the unit test bounty and the GCJ bounty = router memory profiling and tuning = and a whole lot more. So, if you're feeling bored and want to help out, but are in need of inspiration, perhaps one of the above might get you going. I'll probably stop by a net cafe every once in a while, so I'll be reachable through email, but the response time will be O(days). * 5) ??? Ok, thats about all I've got to bring up for the moment. For those who want to help out with the SSU testing over the next week, keep an eye out for info on my blog [3]. For the rest of y'all, I'll see you at the meeting! =jr [3]http://jrandom.dev.i2p/ -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.4 (GNU/Linux) iD8DBQFCd81nWYfZ3rPnHH0RAuoTAJ0VhtNJjYB7sv0XecoCCBvz63z/GACfasKz vJ2B+nJiHEMLwobhZIRS2hQ= =E3vU -----END PGP SIGNATURE----- _______________________________________________ i2p mailing list i2p@i2p.net http://i2p.dnsalias.net/mailman/listinfo/i2p ----- End forwarded message ----- -- Eugen* Leitl leitl ______________________________________________________________ ICBM: 48.07078, 11.61144 http://www.leitl.org 8B29F6BE: 099D 78BA 2FD3 B014 B08A 7779 75B0 2443 8B29 F6BE http://moleculardevices.org http://nanomachines.net -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: Digital signature Url : http://zgp.org/pipermail/p2p-hackers/attachments/20050504/29431455/attachment.pgp From ap at hamachi.cc Wed May 4 16:13:12 2005 From: ap at hamachi.cc (Alex Pankratov) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Network simulation In-Reply-To: <2d74d9a26b7a3d0c52a385c35b730e18@cs.mu.oz.au> References: <87u0n2b8iy.fsf@night.trouble.net> <2d74d9a26b7a3d0c52a385c35b730e18@cs.mu.oz.au> Message-ID: <4278F498.4020409@hamachi.cc> Would it be similar to this - http://www.tel.fer.hr/zec/vimage/ or is it a userland layer ? Alex Aaron Harwood wrote: > We've recently developed a virtualization layer that can fool apps > (without recompiling) > into thinking that they're running over a real network when in fact they > are running over > a simulated network. We use pdns-2 (parallel/distributed ns) as the > simulator engine. > -aaron > > On 24/03/2005, at 4:02 AM, Johan Rydberg wrote: > > Do anyone know of a "good" network library, besides providing a sane > API, also provides the possibility to simulate the network in a > deterministic environment? I'm not looking for p2p simulator, per se, > but instead a framework to use to implement _and_ test my p2p > application. > > ~j > > _______________________________________________ > p2p-hackers mailing list > p2p-hackers@zgp.org > http://zgp.org/mailman/listinfo/p2p-hackers > _______________________________________________ > Here is a web page listing P2P Conferences: > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > > > - - - - - - - - - - - - - - - - - > Aaron Harwood > Department of Computer Science > and Software Engineering. > The University of Melbourne. > http://www.cs.mu.oz.au/~aharwood/ > > > > > ------------------------------------------------------------------------ > > _______________________________________________ > p2p-hackers mailing list > p2p-hackers@zgp.org > http://zgp.org/mailman/listinfo/p2p-hackers > _______________________________________________ > Here is a web page listing P2P Conferences: > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences From amislove at rice.edu Thu May 5 20:09:15 2005 From: amislove at rice.edu (Alan Mislove) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] ePOST: Secure, Severless Email Message-ID: As some of you may know, the FreePastry group at Rice University is developing ePOST, a secure, decentralized, p2p email system. The service is provided cooperatively by the user's desktop computers, and ePOST provides better security and fault tolerance than existing email systems. Email exchanged between ePOST users is cryptographically sealed and authenticated and the service remains available even when traditional mail servers have failed. ePOST gives users plenty of email storage (users can use as much as they contribute of their own disk space). Moreover, users don't have to entrust their email to a commercial provider, who may mine thier data, target them with advertisement or start charging them once they're hooked. ePOST has been running as the primary email system for members of our group for over a year. ePOST works by joining a peer-to-peer network running a personal IMAP and SMTP server on your desktop, which is only for your email. ePOST is backward compatible with existing email systems, and your ePOST email address works just like a normal email address - you can send and receive messages from non-ePOST users. Additionally, you can use your existing email clients with ePOST, since ePOST provides standard IMAP and POP3 servers. A few of other features of ePOST are: - support for SSL connections - a data durability layer called Glacier, providing durability with up to 60% member node failures - support for laptops and machines behind NATs - support for networks with routing anomalies More information about ePOST is available at http://www.epostmail.org/. We now welcome additional ePOST users. If you are interested in seting up an ePOST account, please follow the installation instructions posted at http://www.epostmail.org/install.html. Most ePOST users have set up mail forwarding so that a copy of incoming mails are kept on their normal mail server, in addition to being forwarded to their ePOST account. We recommend this setup until ePOST is no longer in beta status, although we have not found an instance yet where using this backup was necessary to recover a lost email. Also, please let us know if you are interested in running a local ePOST ring at your institution. Running such a ring allows organizations to ensure all overlay traffic remains internal to the organization, while maintaining global connectivity. More information on running an organizational ring is available at http://www.epostmail.org/deploy.html. We are currently collecting high-level statistics from all of the ePOST nodes in our deployment for research purposes. These statistics concern the number of overlay messages sent and the amount of data stored on disk. We are not recording the plain text of emails, nor are we examining which users are exchanging emails. If the collection of statistics would prevent you from using ePOST, please don't hesitate to contact us, and we can turn these features off for you. Thanks again for your help, and don't hesitate to ask us any questions, comments, or suggestions, Alan Mislove, Ansley Post, Andreas Haeberlen, and Peter Druschel (epost-team@rice.epostmail.org) From dbarrett at quinthar.com Sat May 7 04:44:41 2005 From: dbarrett at quinthar.com (David Barrett) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] ICMP on Win32 Message-ID: <20050507044443.015793FC2A@capsicum.zgp.org> Does anyone here have experience receiving ICMP feedback for UDP packets on Win32? I don't know much about the topic (and am wondering if anyone who does know can tell me whether it's worth learning), but I'm interested in learning about UDP delivery failures, network congestion, timeouts, and so on. However, I've read it requires the use of "raw" sockets, which I've elsewhere read are being slowly prohibited - I think started with WinXP SP2. Anyway, can you recommend any good resources? My ultimate goal is to weave this into my reliable UDP layer, but I'd like to hear from those who have gone before to see if it's worth the bother. -david -------------- next part -------------- An HTML attachment was scrubbed... URL: http://zgp.org/pipermail/p2p-hackers/attachments/20050506/9d97dd3f/attachment.html From chris at chris-edwards.org Sun May 8 13:49:22 2005 From: chris at chris-edwards.org (Chris Edwards) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Network simulation In-Reply-To: <43e27d08fc14c749d7b1a7027e8054fd@cs.mu.oz.au> References: <43e27d08fc14c749d7b1a7027e8054fd@cs.mu.oz.au> Message-ID: <427E18E2.8030502@chris-edwards.org> > *From: *Alex Pankratov > *Date: *5 May 2005 2:13:12 AM > *To: *"Peer-to-peer development." > *Subject: Re: [p2p-hackers] Network simulation > Reply-To: *"Peer-to-peer development." > > Would it be similar to this - > > http://www.tel.fer.hr/zec/vimage/ > > or is it a userland layer ? Hi Alex, I've been working on the simulation tool Aaron refers to. The virtualisation occurs entirely in userspace. We use a preloaded library to intercept standard C library calls. This way it can easily be run on clusters where root access is not available. Hopefully we should have something generally useful to others very soon. Chris From dbarrett at quinthar.com Sun May 8 21:43:40 2005 From: dbarrett at quinthar.com (David Barrett) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] ICMP on Win32 In-Reply-To: Message-ID: <20050508214342.8B1723FD08@capsicum.zgp.org> Hi Will. I'm using Win32, but I'd love to hear how you do it with .NET as I assume they're very similar. Essentially, I want to send a UDP datagram, and have some indication if it arrived. Normally, I'd need to rely exclusively on my own ACKs. However, it's my understanding that ICMP can *sometimes* give me feedback, such as if the target address doesn't exist, or if it hit a snag along the way. Have you any idea how to do this? What else have you done with ICMP? -david _____ From: Will Morton [mailto:will@memefeeder.com] Sent: Sunday, May 08, 2005 8:19 AM To: David Barrett Subject: Re: [p2p-hackers] ICMP on Win32 Hi David; Are you using Win32 native or .NET? If it's .NET I can probably help, but I've avoided the native network layer like the proverbial plague. :o) Will On 7 May 2005, at 05:44, David Barrett wrote: Does anyone here have experience receiving ICMP feedback for UDP packets on Win32? I don't know much about the topic (and am wondering if anyone who does know can tell me whether it's worth learning), but I'm interested in learning about UDP delivery failures, network congestion, timeouts, and so on. However, I've read it requires the use of "raw" sockets, which I've elsewhere read are being slowly prohibited - I think started with WinXP SP2. Anyway, can you recommend any good resources? My ultimate goal is to weave this into my reliable UDP layer, but I'd like to hear from those who have gone before to see if it's worth the bother. -david _______________________________________________ p2p-hackers mailing list p2p-hackers@zgp.org http://zgp.org/mailman/listinfo/p2p-hackers _______________________________________________ Here is a web page listing P2P Conferences: http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences -------------- next part -------------- An HTML attachment was scrubbed... URL: http://zgp.org/pipermail/p2p-hackers/attachments/20050508/2efa3a27/attachment.htm From em at em.no-ip.com Sun May 8 15:26:32 2005 From: em at em.no-ip.com (Enzo Michelangeli) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] ICMP on Win32 References: <20050507044443.015793FC2A@capsicum.zgp.org> Message-ID: <05a201c55427$df73e7a0$0200a8c0@em.noip.com> UDP sockets may sometimes return error conditions due to the arrival of ICMP packets. http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html says: According to Ilpo Ruotsalainen, "...most BSD socket implementations do not pass delayed UDP errors (ICMP port unreachable at least, maybe others too) to recvfrom() while Winsock 2 [under Windows 2000 but not Windows 98] does. Linux [behaves like Windows 2000] too, but provives SO_BSDCOMPAT setsockopt() for being compatible with the BSD style." See also the posting at http://lists.ximian.com/archives/public/mono-list/2004-February/018162.html . It all sounds like a typical case of "your mileage may vary depending on the Windows version"... Enzo ----- Original Message ----- From: David Barrett To: 'Peer-to-peer development.' Sent: Saturday, May 07, 2005 12:44 PM Subject: [p2p-hackers] ICMP on Win32 Does anyone here have experience receiving ICMP feedback for UDP packets on Win32? I don't know much about the topic (and am wondering if anyone who does know can tell me whether it's worth learning), but I'm interested in learning about UDP delivery failures, network congestion, timeouts, and so on. However, I've read it requires the use of "raw" sockets, which I've elsewhere read are being slowly prohibited - I think started with WinXP SP2. Anyway, can you recommend any good resources? My ultimate goal is to weave this into my reliable UDP layer, but I'd like to hear from those who have gone before to see if it's worth the bother. -david ------------------------------------------------------------------------------ _______________________________________________ p2p-hackers mailing list p2p-hackers@zgp.org http://zgp.org/mailman/listinfo/p2p-hackers _______________________________________________ Here is a web page listing P2P Conferences: http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences -------------- next part -------------- An HTML attachment was scrubbed... URL: http://zgp.org/pipermail/p2p-hackers/attachments/20050508/d0a006f8/attachment.html From dbarrett at quinthar.com Mon May 9 05:32:59 2005 From: dbarrett at quinthar.com (David Barrett) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] ICMP on Win32 In-Reply-To: <05a201c55427$df73e7a0$0200a8c0@em.noip.com> Message-ID: <20050509053301.797573FD07@capsicum.zgp.org> Wow, excellent information. Thanks for the links. So it sounds like if you send a UDP packet to (for example) an unreachable host, recv/recvfrom( ) *might* return a "connection reset" error at some indeterminate time in the future, and continue to do so for some indeterminate duration. Good to know, though in conjunction with sendto( ) it's hard to act upon, as I'm sending to many endpoints from the same socket (and thus unless recvfrom( ) correctly sets the address despite the error condition, I have no way of knowing who is unreachable). Regardless, this helps explain some heretofore "connection reset" errors, and I'm glad to know it's not a fatal condition (requiring me to close/reopen the socket). Anyway, thanks for shedding light on this issue! Will, can you add any more detail? -david _____ From: p2p-hackers-bounces@zgp.org [mailto:p2p-hackers-bounces@zgp.org] On Behalf Of Enzo Michelangeli Sent: Sunday, May 08, 2005 8:27 AM To: Peer-to-peer development. Subject: Re: [p2p-hackers] ICMP on Win32 UDP sockets may sometimes return error conditions due to the arrival of ICMP packets. http://tangentsoft.net/wskfaq/articles/bsd-compatibility.html says: According to Ilpo Ruotsalainen, "...most BSD socket implementations do not pass delayed UDP errors (ICMP port unreachable at least, maybe others too) to recvfrom() while Winsock 2 [under Windows 2000 but not Windows 98] does. Linux [behaves like Windows 2000] too, but provives SO_BSDCOMPAT setsockopt() for being compatible with the BSD style." See also the posting at http://lists.ximian.com/archives/public/mono-list/2004-February/018162.html . It all sounds like a typical case of "your mileage may vary depending on the Windows version"... Enzo ----- Original Message ----- From: David Barrett To: 'Peer-to-peer development.' Sent: Saturday, May 07, 2005 12:44 PM Subject: [p2p-hackers] ICMP on Win32 Does anyone here have experience receiving ICMP feedback for UDP packets on Win32? I don't know much about the topic (and am wondering if anyone who does know can tell me whether it's worth learning), but I'm interested in learning about UDP delivery failures, network congestion, timeouts, and so on. However, I've read it requires the use of "raw" sockets, which I've elsewhere read are being slowly prohibited - I think started with WinXP SP2. Anyway, can you recommend any good resources? My ultimate goal is to weave this into my reliable UDP layer, but I'd like to hear from those who have gone before to see if it's worth the bother. -david _____ _______________________________________________ p2p-hackers mailing list p2p-hackers@zgp.org http://zgp.org/mailman/listinfo/p2p-hackers _______________________________________________ Here is a web page listing P2P Conferences: http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences -------------- next part -------------- An HTML attachment was scrubbed... URL: http://zgp.org/pipermail/p2p-hackers/attachments/20050508/9bcee63e/attachment.htm From alenlpeacock at gmail.com Mon May 9 16:58:04 2005 From: alenlpeacock at gmail.com (Alen Peacock) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] ePOST: Secure, Severless Email In-Reply-To: References: Message-ID: ePOST is a very interesting project. Can you tell us a bit more about freeloading and how you resist it in ePOST? The Master's Thesis on the website stated that you rely mostly on human administration to ferret out freeloading. I assume you have something else in place or planned for the 'public' ePOST instantiation (if this is explained in the NSDI draft, please forgive me -- I'm unable to access that link) -- any comments on implementing a Samsara-like approach or experience dealing with freeloaders in ePOST in general? thanks, Alen On 5/5/05, Alan Mislove wrote: > As some of you may know, the FreePastry group at Rice University is > developing ePOST, a secure, decentralized, p2p email system. The service > is provided cooperatively by the user's desktop computers, and ePOST > provides better security and fault tolerance than existing email systems. > Email exchanged between ePOST users is cryptographically sealed and > authenticated and the service remains available even when traditional mail > servers have failed. ePOST gives users plenty of email storage (users can > use as much as they contribute of their own disk space). Moreover, users > don't have to entrust their email to a commercial provider, who may mine > thier data, target them with advertisement or start charging them once > they're hooked. ePOST has been running as the primary email system for > members of our group for over a year. > > ePOST works by joining a peer-to-peer network running a personal IMAP and > SMTP server on your desktop, which is only for your email. ePOST is > backward compatible with existing email systems, and your ePOST email > address works just like a normal email address - you can send and receive > messages from non-ePOST users. Additionally, you can use your existing > email clients with ePOST, since ePOST provides standard IMAP and POP3 > servers. > > A few of other features of ePOST are: > - support for SSL connections > - a data durability layer called Glacier, providing durability with up to > 60% member node failures > - support for laptops and machines behind NATs > - support for networks with routing anomalies > > More information about ePOST is available at http://www.epostmail.org/. > ... From mllist at vaste.mine.nu Tue May 10 21:22:09 2005 From: mllist at vaste.mine.nu (Vaste) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Incentive to trade with newcomers, catch 22 Message-ID: <42812601.4010206@vaste.mine.nu> I want to discuss a problem with torrent and similar tradebased swarming networks. It is how a new peer is suppose to begin participating in the trade. No rational greedy peer would be interested in trading with it since it (naturally) has no pieces to offer in exchange. Yet, the swarm should (likely) benefit from it joining, providing additional bandwidth. Catch 22. This has so far been solved by generosity and which works quite well. Yet it could be better. The problem is with a swarm generous towards newcomers is that it favors newcomers over regular peers. In a swarm of sufficient size a freerider could do quite well by downloading every piece from different peers, always appearing to be a new peer with nothing to share. The opposite, a stingy swarm, could result in new peers never ever being able to join the swarm. A solution could be to let new peers transfer encrypted pieces on behalf of another peer. After the transfer the new peer is rewarded the key to the transferred piece. Example: A wants to transfer a piece to B and C. Seeing D is in a weak position, having no pieces yet, he makes a proposal. D gets to transfer the piece to B and C on behalf of A. D agrees. To make sure D doesn't just run off once he gets the piece, it is encrypted. A transfers the piece to D who passes it on to B and C as agreed. A gets (some) credit from B and C for sending the piece. A, B and C now has the decrypted piece and the key. D has the encrypted piece but no key. A, B and C may now ignore D; it might even be in their interest to keep D in a weak positition. Still, transferring the key is a very cheap operation and A, B or C only need some small incentive to do this. E.g. A, B or C may wish to offer D to send another piece on their behalf. In this case it would be very unlikely for D to cooperate again, were they not to. Yet, even if D were to be screwed it is still positive for the swarm as a whole, and D is no worse of than in the extremely stingy swarm. And freeriders don't thrive. (And with a little generosity D is quite well off.) /Vaste From amislove at rice.edu Tue May 10 21:48:56 2005 From: amislove at rice.edu (Alan Mislove) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] ePOST: Secure, Severless Email In-Reply-To: References: Message-ID: Alen - In the design of ePOST, our target environment is primarily large organizations and institutions. For example, a university could replace their existing email infrastructure with a distributed, organically scaling system like ePOST. Thus, since all users fall under a single administrative domain, the need for explicit fair sharing defenses is somewhat lessened. That said, we have not made an special changes to ePOST for the "public" installiation. ePOST, however, does not preclude any of the existing anti-freeloading techniques, such as Samsara (as you mention) and the incentives-based work. At the core ePOST just uses a DHT and Multicast primitive to exchange and store messages; any techniques that work at this level will translate naturally to ePOST. Additionally, if the use of the public ring grows larger, we will look at applying these techniques to ePOST. Thanks, Alan On Mon, 9 May 2005, Alen Peacock wrote: > ePOST is a very interesting project. Can you tell us a bit more about > freeloading and how you resist it in ePOST? The Master's Thesis on > the website stated that you rely mostly on human administration to > ferret out freeloading. I assume you have something else in place or > planned for the 'public' ePOST instantiation (if this is explained in > the NSDI draft, please forgive me -- I'm unable to access that link) > -- any comments on implementing a Samsara-like approach or experience > dealing with freeloaders in ePOST in general? > > thanks, > Alen From hal at finney.org Tue May 10 22:43:06 2005 From: hal at finney.org (Hal Finney) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Incentive to trade with newcomers, catch 22 Message-ID: <20050510224306.7AC4B57EE6@finney.org> Vaste writes: > I want to discuss a problem with torrent and similar tradebased swarming > networks. It is how a new peer is suppose to begin participating in the > trade. No rational greedy peer would be interested in trading with it > since it (naturally) has no pieces to offer in exchange. Yet, the swarm > should (likely) benefit from it joining, providing additional bandwidth. > Catch 22. The way BitTorrent works is that a different rule is used for peers that have the whole file (which are called seeds, or seeders) than for peers that do not yet have the whole file. Ordinary peers mostly will send data to other peers who are sending to them. This is the "tit for tat" rule and it works well. There is usually one upload "slot" reserved for random other peers, which rotates through all of them. The main purpose of this slot is to discover if another peer might reciprocate and provide even more and faster data than some of the peers we are communicating with. This way we don't get locked into exchanging data with some "OK" peers when there are some "very good" peers out there we could do even better with. This rotating slot policy does have the side effect that new peers get a bit of data from other nodes, even when they have little to offer. The rule for seeds is different. They upload data to peers based on how quickly the peers are accepting the data. (Compared to regular peers, which decide based on how fast their partner peers are providing data back to them.) Peers that are downloading from the seeders the fastest get priority. This is one of the main ways that new peers can do well. If they can accept data quickly, they can get it very rapidly from seeder nodes, even faster than other nodes that may be sharing with many peers. And by biasing the data from seeder nodes towards peers that accept it the fastest, BT spreads the data around as fast as possible, so that there can be more peers with data and the whole network works well. This set of policies works very well in practice and is a good part of the reason for the success of BT. It's pretty hard to tweak it and get something that works better. Hal From eugen at leitl.org Sun May 15 10:53:21 2005 From: eugen at leitl.org (Eugen Leitl) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] [connellybarnes@yahoo.com: [i2p] Python filesharing Merkle hash tree magic] Message-ID: <20050515105321.GA23832@leitl.org> ----- Forwarded message from "C. Barnes" ----- From: "C. Barnes" Date: Thu, 12 May 2005 04:36:32 -0700 (PDT) To: i2p@i2p.net Subject: [i2p] Python filesharing Merkle hash tree magic Topic: P2P filesharing ala BitTorrent. Presenting public domain module 'chunk.py': http://oregonstate.edu/~barnesc/temp/chunk.py This module does some magic with Merkle hash trees. It allows one to publish a 20 byte SHA-1 digest for a file, and encode 'chunks' from the file with minimal overhead, such that any given chunk can be verified against the file's 20 byte digest. Cryptographic hashing is used to verify each chunk, so chunks can be transmitted in any order, and it is impossible to save corrupt data to disk if one has the correct file hash. One could use this module in any file sharing application which divides files up into blocks. For example, in a BitTorrent-like project it might be desirable to keep the .torrent files minimal in size. Using this module, one needs to only publish a hash like DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 instead of a digest of all blocks in the file. Pros: - Smaller digest size. - Can send chunks in any order. Cons: - Each 'chunk' contains checksumming information. This overhead is less than 4% for files of size less than 1e20 bytes. - Connelly Barnes __________________________________ Yahoo! Mail Mobile Take Yahoo! Mail with you! Check email on your mobile phone. http://mobile.yahoo.com/learn/mail _______________________________________________ i2p mailing list i2p@i2p.net http://i2p.dnsalias.net/mailman/listinfo/i2p ----- End forwarded message ----- From eugen at leitl.org Sun May 15 10:53:52 2005 From: eugen at leitl.org (Eugen Leitl) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] [connellybarnes@yahoo.com: Re: [i2p] Python filesharing Merkle hash tree magic] Message-ID: <20050515105352.GB23832@leitl.org> ----- Forwarded message from "C. Barnes" ----- From: "C. Barnes" Date: Thu, 12 May 2005 21:07:59 -0700 (PDT) To: i2p@i2p.net Subject: Re: [i2p] Python filesharing Merkle hash tree magic I didn't consider multifile torrents. I designed this as a general purpose module, and didn't think too much about BitTorrent. But for a multifile torrent you would need to publish the root Merkle hash for *each* file. This would take 20*(number of files) bytes. Thanks for pointing that out. Also, FYI the chunk.py module uses the bencode.py module from the BitTorrent project. --- closedshop wrote: > What about multifile torrents ? > > C. Barnes wrote: > > >Topic: P2P filesharing ala BitTorrent. > > > >Presenting public domain module 'chunk.py': > > > > http://oregonstate.edu/~barnesc/temp/chunk.py > > > >This module does some magic with Merkle hash trees. > >It allows one to publish a 20 byte SHA-1 digest for > >a file, and encode 'chunks' from the file with > >minimal overhead, such that any given chunk can be > >verified against the file's 20 byte digest. > >Cryptographic hashing is used to verify each chunk, > >so chunks can be transmitted in any order, and it > is > >impossible to save corrupt data to disk if one has > >the correct file hash. > > > >One could use this module in any file sharing > >application which divides files up into blocks. > > > >For example, in a BitTorrent-like project it might > >be desirable to keep the .torrent files minimal in > >size. Using this module, one needs to only publish > >a hash like > DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 > >instead of a digest of all blocks in the file. > > > >Pros: > > - Smaller digest size. > > - Can send chunks in any order. > > > >Cons: > > - Each 'chunk' contains checksumming information. > > This overhead is less than 4% for files of size > > less than 1e20 bytes. > > > > - Connelly Barnes > > > > > > > > > >__________________________________ > >Yahoo! Mail Mobile > >Take Yahoo! Mail with you! Check email on your > mobile phone. > >http://mobile.yahoo.com/learn/mail > >_______________________________________________ > >i2p mailing list > >i2p@i2p.net > >http://i2p.dnsalias.net/mailman/listinfo/i2p > > > > > > > > > > __________________________________ Yahoo! Mail Mobile Take Yahoo! Mail with you! Check email on your mobile phone. http://mobile.yahoo.com/learn/mail _______________________________________________ i2p mailing list i2p@i2p.net http://i2p.dnsalias.net/mailman/listinfo/i2p ----- End forwarded message ----- From arnetheduck at gmail.com Sat May 14 10:29:00 2005 From: arnetheduck at gmail.com (Jacek Sieka) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] [connellybarnes@yahoo.com: [i2p] Python filesharing Merkle hash tree magic] In-Reply-To: <20050515105321.GA23832@leitl.org> References: <20050515105321.GA23832@leitl.org> Message-ID: <4285D2EC.80408@gmail.com> Hi, Nice, just wanted to note that there are many links out there that use Tiger (which apparently just got included in the linux kernel, so someone trusts it a little bit at least) instead of SHA1 together with merkle trees (dubbed tth's often), just in case you want to benefit from existing link sites such as bitzi.com...on the other hand, yet another hash type is always fun =) FYI 2; if anyone's interested, the DC++ source code contains a C++ templated merkle tree implementation that can be used to generate trees with any hash (oh, and there's probably a chunk checker in there as well, although it's probably ugly =) - if anyone's interested it could be scavenged, polished and made cooperative with some standard hash function library, currently it expects a (fairly simple) dc++ specific interface to the hash fcn... regards /Jacek Eugen Leitl wrote: > ----- Forwarded message from "C. Barnes" ----- > > Topic: P2P filesharing ala BitTorrent. > > Presenting public domain module 'chunk.py': > > http://oregonstate.edu/~barnesc/temp/chunk.py > > This module does some magic with Merkle hash trees. > It allows one to publish a 20 byte SHA-1 digest for > a file, and encode 'chunks' from the file with > minimal overhead, such that any given chunk can be > verified against the file's 20 byte digest. > Cryptographic hashing is used to verify each chunk, > so chunks can be transmitted in any order, and it is > impossible to save corrupt data to disk if one has > the correct file hash. > > One could use this module in any file sharing > application which divides files up into blocks. > > For example, in a BitTorrent-like project it might > be desirable to keep the .torrent files minimal in > size. Using this module, one needs to only publish > a hash like DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 > instead of a digest of all blocks in the file. > > Pros: > - Smaller digest size. > - Can send chunks in any order. > > Cons: > - Each 'chunk' contains checksumming information. > This overhead is less than 4% for files of size > less than 1e20 bytes. > > - Connelly Barnes From arachnid at notdot.net Sat May 14 23:26:37 2005 From: arachnid at notdot.net (Nick Johnson) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] [connellybarnes@yahoo.com: [i2p] Python filesharing Merkle hash tree magic] In-Reply-To: <20050515105321.GA23832@leitl.org> References: <20050515105321.GA23832@leitl.org> Message-ID: <4286892D.1040201@notdot.net> How does this work? You don't provide details here or in the .py file - does each chunk include the hashes of all its siblings, and its parents' siblings, etc? -Nick Johnson Eugen Leitl wrote: >----- Forwarded message from "C. Barnes" ----- > >From: "C. Barnes" >Date: Thu, 12 May 2005 04:36:32 -0700 (PDT) >To: i2p@i2p.net >Subject: [i2p] Python filesharing Merkle hash tree magic > > >Topic: P2P filesharing ala BitTorrent. > >Presenting public domain module 'chunk.py': > > http://oregonstate.edu/~barnesc/temp/chunk.py > >This module does some magic with Merkle hash trees. >It allows one to publish a 20 byte SHA-1 digest for >a file, and encode 'chunks' from the file with >minimal overhead, such that any given chunk can be >verified against the file's 20 byte digest. >Cryptographic hashing is used to verify each chunk, >so chunks can be transmitted in any order, and it is >impossible to save corrupt data to disk if one has >the correct file hash. > >One could use this module in any file sharing >application which divides files up into blocks. > >For example, in a BitTorrent-like project it might >be desirable to keep the .torrent files minimal in >size. Using this module, one needs to only publish >a hash like DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 >instead of a digest of all blocks in the file. > >Pros: > - Smaller digest size. > - Can send chunks in any order. > >Cons: > - Each 'chunk' contains checksumming information. > This overhead is less than 4% for files of size > less than 1e20 bytes. > > - Connelly Barnes > > > > >__________________________________ >Yahoo! Mail Mobile >Take Yahoo! Mail with you! Check email on your mobile phone. >http://mobile.yahoo.com/learn/mail >_______________________________________________ >i2p mailing list >i2p@i2p.net >http://i2p.dnsalias.net/mailman/listinfo/i2p > >----- End forwarded message ----- >_______________________________________________ >p2p-hackers mailing list >p2p-hackers@zgp.org >http://zgp.org/mailman/listinfo/p2p-hackers >_______________________________________________ >Here is a web page listing P2P Conferences: >http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > >!DSPAM:4285c8e4292214151599692! > > > From bert at web2peer.com Sun May 15 01:14:24 2005 From: bert at web2peer.com (bert@web2peer.com) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] [connellybarnes@yahoo.com: [i2p] Python filesharing Merkle hash tree magic] Message-ID: <20050515011424.651B91096A0@ws6-4.us4.outblaze.com> Merkle trees [1] are a cryptographic approach to authenticity/integrity that have several properties that make them useful in p2p settings. Each leaf contains the hash of one file block/chunk, and the internal nodes are themselves hashes of the hashes represented by their children. To support verification, the server needs to provide only lg(N) hashes with each chunk served, where N is the total number of chunks. These "auxiliary hashes" that must be returned with each chunk correspond to the tree nodes that are siblings of those nodes along the "authentication path" from leaf to root. I've just returned from WWW-2005 where I was advocating the use of Merkle trees for use in authenticating HTTP responses: http://www.almaden.ibm.com/cs/people/bayardo/ps/www2005.pdf. This provides an efficient means for authenticity guarantees even when using p2p (untrusted) web content caching & delivery networks. No rocket science here, but an idea that I believe whose time has come. And as an aside, multi-file torrents need not require multiple root hashes. A single merkle tree (& hence root hash) would suffice for authenticating arbitrary chunks so long as you appropriately combined hashes. I think if you read the above-linked proposal for authenticating HTTP responses (which requires one root hash per multi-file repository), it should be clear how multi-file torrents could be supported. [1] R. C. Merkle. Protocols for public key cryptosystems. In Symposium on Security and Privacy, 122-134, 1980. ----- Original Message ----- From: "Nick Johnson" To: "Peer-to-peer development." Subject: Re: [p2p-hackers] [connellybarnes@yahoo.com: [i2p] Python filesharing Merkle hash tree magic] Date: Sun, 15 May 2005 11:26:37 +1200 > > How does this work? You don't provide details here or in the .py file - does > each chunk include the hashes of all its siblings, and its parents' siblings, > etc? > > -Nick Johnson > > Eugen Leitl wrote: > > > ----- Forwarded message from "C. Barnes" ----- > > > > From: "C. Barnes" > > Date: Thu, 12 May 2005 04:36:32 -0700 (PDT) > > To: i2p@i2p.net > > Subject: [i2p] Python filesharing Merkle hash tree magic > > > > > > Topic: P2P filesharing ala BitTorrent. > > > > Presenting public domain module 'chunk.py': > > > > http://oregonstate.edu/~barnesc/temp/chunk.py > > > > This module does some magic with Merkle hash trees. > > It allows one to publish a 20 byte SHA-1 digest for > > a file, and encode 'chunks' from the file with > > minimal overhead, such that any given chunk can be > > verified against the file's 20 byte digest. > > Cryptographic hashing is used to verify each chunk, > > so chunks can be transmitted in any order, and it is > > impossible to save corrupt data to disk if one has > > the correct file hash. > > > > One could use this module in any file sharing > > application which divides files up into blocks. > > > > For example, in a BitTorrent-like project it might > > be desirable to keep the .torrent files minimal in > > size. Using this module, one needs to only publish > > a hash like DA39A3EE5E6B4B0D3255BFEF95601890AFD80709 > > instead of a digest of all blocks in the file. > > > > Pros: > > - Smaller digest size. > > - Can send chunks in any order. > > > > Cons: > > - Each 'chunk' contains checksumming information. > > This overhead is less than 4% for files of size > > less than 1e20 bytes. > > > > - Connelly Barnes > > > > > > > > > > __________________________________ Yahoo! Mail Mobile Take Yahoo! Mail with > > you! Check email on your mobile phone. http://mobile.yahoo.com/learn/mail > > _______________________________________________ > > i2p mailing list > > i2p@i2p.net > > http://i2p.dnsalias.net/mailman/listinfo/i2p > > > > ----- End forwarded message ----- > > _______________________________________________ > > p2p-hackers mailing list > > p2p-hackers@zgp.org > > http://zgp.org/mailman/listinfo/p2p-hackers > > _______________________________________________ > > Here is a web page listing P2P Conferences: > > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > > > > !DSPAM:4285c8e4292214151599692! > > > > > > > > _______________________________________________ > p2p-hackers mailing list > p2p-hackers@zgp.org > http://zgp.org/mailman/listinfo/p2p-hackers > _______________________________________________ > Here is a web page listing P2P Conferences: > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences From verdimar at comp.nus.edu.sg Tue May 17 09:53:49 2005 From: verdimar at comp.nus.edu.sg (Verdi March) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Skipgraph and global balancing operations Message-ID: Hi, in the skipgraph paper [1], in section 2 it's mentioned that skip lists require no global balancing operations. I'm not clear at the "global balancing operations" statement: what are the operations and why skip lists don't need those. Any help is appreciated. Regards, Verdi From verdimar at comp.nus.edu.sg Tue May 17 09:56:19 2005 From: verdimar at comp.nus.edu.sg (Verdi March) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Re: Skipgraph and global balancing operations In-Reply-To: References: Message-ID: Forgot the reference, but I'm sure most of you have already know that :). [1] James Aspnes and Gauri Shah, Skip Graphs, Proceedings of the 14th Annual ACM-SIAM Symposium on Discrete Algorithms, January 2003. Regards, Verdi From wolfgang.mueller at wiai.uni-bamberg.de Tue May 17 12:08:13 2005 From: wolfgang.mueller at wiai.uni-bamberg.de (Wolfgang =?iso-8859-1?q?M=FCller?=) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Rumorama: Scalable Summary Based Retrieval in P2P Networks Message-ID: <200505171408.13191.wolfgang.mueller@wiai.uni-bamberg.de> Dear colleagues, In the tech report http://mi.wiai.uni-bamberg.de/research/publications/bibtex/mueller2005scalable we present Rumorama, a protocol to make summary-based retrieval in P2P networks scalable. Summary-based retrieval in P2P networks, as introduced by PlanetP, uses summaries of peer data to select peers to contact for a retrieval process. In other words, PlanetP adapts GlOSS-like distributed IR techniques to P2P networks. The advantage of this method is that only very little indexing data has to be shipped as compared to distributed indexing structures, giving room for redundant storage of these summaries. Furthermore, summary-based retrieval needs to ship orders of magnitude less data in some situations, e.g. when processing multi-word boolean queries, than methods based on inverted lists (see e.g. the Li et al. paper on the feasibility of keyword search in P2P-networks for some words about the problems to be solved for inverted file based indexing http://pdos.csail.mit.edu/~rtm/papers/search_feasibility.ps). The drawback of summary-based retrieval is - up to Rumorama - that PlanetP is not scalable. Rumorama achieves scalability: the number of neighbors of each peer grows logarithmically with the number of peers in the network, the communication cost per peer for maintaining the network also grows logarithmically with network size. Lastly, queries are processed in a number of hops (i.e. depth of our multicast tree) that grows logarithmically with the network's size. However, the number of nodes to be contacted within a query grows linearly with the network size. This is a known effect from distributed information retrieval. However, depending on the query model, the absolute number of peers that has to be contacted for answering a query is very small with respect to network size. Enjoy the paper! We would be thankful for some feedback and criticism on it. Cheers, Wolfgang M?ller Martin Eisenhardt Andreas Henrich -- Dr. Wolfgang M?ller LS Medieninformatik Universit?t Bamberg From m.rogers at cs.ucl.ac.uk Tue May 17 17:06:52 2005 From: m.rogers at cs.ucl.ac.uk (Michael Rogers) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Skipgraph and global balancing operations In-Reply-To: References: Message-ID: <428A24AC.5000208@cs.ucl.ac.uk> I think it's referring to the fact that, unlike trees, skip lists don't need to be rebalanced as nodes are added and removed. AFAIK the reason is that the rank of each item in the list (ie the number of pointers the item keeps) is chosen randomly, so the higher "layers" are replaced incrementally as a natural result of churn. Cheers, Michael Verdi March wrote: >Hi, > >in the skipgraph paper [1], in section 2 it's mentioned that >skip lists require no global balancing operations. > >I'm not clear at the "global balancing operations" statement: >what are the operations and why skip lists don't need those. > >Any help is appreciated. > > >Regards, >Verdi > >_______________________________________________ >p2p-hackers mailing list >p2p-hackers@zgp.org >http://zgp.org/mailman/listinfo/p2p-hackers >_______________________________________________ >Here is a web page listing P2P Conferences: >http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > > From kerry at vscape.com Tue May 17 18:53:57 2005 From: kerry at vscape.com (Kerry L. Bonin) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Multiple value per key query/response syntax? Message-ID: <428A3DC5.6090106@vscape.com> Hello! I'm looking for any good discussions or examples of reasonably robust request/response formats for multiple transaction multimap queries in general, and multiple-value per key DHT in particular. I was considering using expiration timestamp windowing in the query as a sort of crude iterator filter for values that expire at a constant interval after storage or refresh, but I'm wondering about variable TTL vs. variable refresh intervals, vs. classic remote iterator design. Any pointers would be greatly appreciated! Kerry From tangli03 at mails.tsinghua.edu.cn Wed May 18 09:55:42 2005 From: tangli03 at mails.tsinghua.edu.cn (Li Tang) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Has CAN been implemented by any open source project? In-Reply-To: <316355152.11145@mails.tsinghua.edu.cn> Message-ID: <20050518094753.CB1863FC2A@capsicum.zgp.org> Hello, guys! I am looking for some open source resources of DHT algorithms. While I have found projects related to Chord, Pastry, and Tapestry, I got little implementation of CAN. Is anybody aware of related information? Any pointers, not limited to CAN, would be greatly appreciated! Sincerely, Li From baford at mit.edu Wed May 18 18:59:21 2005 From: baford at mit.edu (Bryan Ford) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Official IETF behavior recommendations for NAT relevant to P2P Message-ID: <200505181459.21722.baford@mit.edu> Dear p2p-hackers, A discussion is currently taking place on the IETF BEHAVE working group mailing list (see http://www1.ietf.org/html.charters/behave-charter.html) that is highly relevant to P2P application writers. For those of you not already familiar with it, this IETF working group is defining standards for how NATs should behave so as to better support applications including P2P apps. The chair has made a "Last Call" for comments on the current draft document specifying NAT behavior for UDP, so this may be the last chance we have for a while to influence how well the next generation of NATs support UDP-based P2P applications. ** Address-Restricted vs Full Cone NAT ** There's one issue in particular on which I personally fear the working group is currently headed in the wrong direction, and over which you folks on this list could perhaps exert considerable influence if you're willing to take a little time and make your voice heard on the BEHAVE list. The current UDP draft, draft-ietf-behave-nat-udp-01.txt, recommends that NATs implement "Endpoint address-dependent filtering behavior", otherwise known as "Address-Restricted Cone NAT". In other words, once a NATted UDP application opens a UDP session through a NAT to some external host, giving the application a public (NATted) port number, the NAT only accepts and forwards subsequent incoming UDP packets at that public port if they come from a source IP address that the application has previously sent UDP packets to. In other words, the NAT must see outgoing UDP traffic to a remote host before it will accept incoming traffic from that host on the application's public port. In the proposed alternative, "Endpoint-independent filtering" or "Full Cone NAT", the NAT forwards any incoming traffic to the correct public port regardless of source IP address or port number. Address-Restricted Cone NAT is moderately "P2P-friendly" in that it at least allows NATted applications to "hole punch" P2P connections with the help of a well-known (non-NATted) rendezvous server. Address-Restricted Cone NAT still does not, however, allow the application to have a full "first-class" Internet presence (i.e., public IP address and UDP port number) at which it can be contacted proactively by any other Internet-connected host. A P2P application behind an Address-Restricted Cone NAT is still forever dependent on other public (first-class) rendezvous servers to help establish each P2P communication session it needs. A P2P app behind a Full Cone NAT, in contrast, is a full "first-class" network citizen itself, and can even _be_ a public rendezvous server for other less fortunate hosts once it learns its own public IP address and UDP port number. This is an important benefit to applications, especially P2P applications that are trying to be highly decentralized. The main argument for Restricted Cone NAT, of course, is security. Until recently I believed this argument myself, but after further and more careful analysis I have come to the conclusion that Restricted filtering provides a very week security benefit in comparison with the fundamental loss in first-class application connectivity it entails. My current proposal on the BEHAVE list does NOT mandate Full Cone NAT, but it does specify that NATs should at least be Full Cone in their default, "out of the box" configuration as provided by NAT vendors, and recommends that NATs implement Restricted Cone NAT as an administrator-configurable security option. The current proposed text reads as follows: REQ-7: NATs MUST implement Endpoint-Independent Filtering in their default configuration. NATs SHOULD be configurable to support Address-Specific Filtering or Endpoint-Specific Filtering at the option of the system administrator. If you have thoughts or opinions on this topic, I would greatly appreciate hearing them (and having other participants hear them) on the BEHAVE list. ** Why the Security Benefit of Restricted Cone NAT is Minimal ** Restrictive filtering ostensibly has the benefit of protecting applications on an internal host from traffic the internal host is not expecting, i.e., from traffic from previously unknown external hosts or endpoints. This behavior can only possibly benefit the application if the application only ever initiates outgoing sessions from its internal port, and is obviously a curse if the application ever wants to accept incoming sessions from external hosts. The NAT has no way of knowing which is the case. But suppose the application is one that only initiates outgoing connections (i.e., a "traditional client/server app"), and thus might "potentially" benefit from a NAT's restrictive filtering behavior. Consider TCP and UDP separately: ** TCP: When a client/server app makes an outgoing TCP connection, it typically does a "connect()" call to the host OS's sockets API without bothering to bind() the socket, and the OS's TCP stack allocates a local TCP port exclusively for the use of that connection. Any TCP packets the host OS subsequently received on that port from endpoints other than the one it connect()ed to will be summarily rejected with TCP RSTs by the host OS, and the application never even sees any hint that they ever arrived. Even if the application does a bind() before its connect() in order to use a specific source port (e.g., a <1024 "privileged" port), it still almost always obtains exclusive use of that port. An application indeed has to work really bloody hard to set things up so that it can accept incoming TCP connections on the same port it is using for an outgoing connection, using SO_REUSEADDR and multiple sockets. No traditional client/server application is going to go to all this effort just in order to create a security hole. :) In other words, for TCP, restrictive filtering in practice provides absolutely zero protection from the _application_: the only entity that the restrictive filtering even affects is the host OS's protocol stack. Restrictive filtering might for example benefit a host OS with a TCP stack that is so broken that it fails to check the source IP address and port number on incoming TCP packets at all, but if the host OS is _that_ broken then it undoubtedly has many other problems that the NAT can't possibly guard against. ** UDP: When a client/server UDP app uses a UDP port for communication with just one remote host, for convenience it typically does a connect() to the appropriate remote UDP endpoint, so that it can just send messages with send() or write() without having to specify a destination address for each datagram, and so that it can receive messages with read() or recv() without having to check the source address and port number in each message received. In this case, the host OS effectively provides the external endpoint filtering functionality as for TCP, and any restrictive filtering implemented by the NAT again provides no security benefit at all to the application. A UDP application that uses a single UDP port for communication with multiple remote hosts, in contrast, must generally check the source IP addresses and port numbers in the datagrams it receives just in order to distinguish between the multiple communication sessions it is involved in, and hence it will inherently provide its own external endpoint filtering. It's conceivable that some abysmally buggy UDP applications might benefit from the NAT's external filtering - e.g., a UDP application that only talks to one external endpoint but doesn't use connect() and doesn't check the source endpoint on incoming datagrams - but an application that is so seriously broken probably has many other security vulnerabilities that can be exploited despite the NAT's external filtering behavior, e.g., by finding out or guessing the public server the application is talking to (which is easy in many cases such as commercial games or services where there are only a few well-known servers) and sending packets with spoofed source IP address and UDP port numbers. Besides, many, perhaps the majority, of UDP applications use UDP _because_ they need P2P-style communication, and so external filtering by the NAT provides no practical security benefit and only causes interference with the application. Another common argument for Restricted Cone NAT (Address-dependent filtering) is that it protects the resources on the internal network from being consumed forwarding bogus packets even if the eventual end application will correctly discard them. This argument is also weak, however: ** Even with more permissive Full Cone NAT (endpoint-independent filtering), the NAT will still in practice filter out the vast majority of bogus traffic that reaches it, because most of the NAT's ports are typically not in active use by applications behind the NAT. The only bogus traffic a Full Cone NAT will let through is bogus traffic that happens to hit the _specific_ external port numbers that correspond to active port bindings. These port numbers are assigned more-or-less randomly (i.e., unpredictably) by the NAT, and they only ever appear in the high, non-well-known port number space, so most of the Internet "background noise" caused by viruses or other attacks on well-known ports will never get through in any case, and purely random "port guessing" attacks would have to send packets to a great many NAT ports in order to get a few packets through. Thus, the incremental benefit of restrictive filtering over Full Cone NAT with regards to general bogus Internet traffic is very small. ** An attacker might deliberately send bogus packets to a bound NAT port known to be in use. But if the attacker can find out which NAT port the application is using, then the attacker probably also knows (or can easily find out or guess) the address and port number of the _remote_ host that the application is talking to and just spoof that source IP address and port number in its attack packets, getting around Restricted filtering as well. In fact the remote host's endpoint is in practice likely to be much easier for the attacker to find out or guess than the application's public NAT port, because of the overwhelming prevalence of well-known servers and ports on the Internet in comparison to the randomness and relative obscurity of temporary NAT-assigned public ports. So the practical benefit that Restricted filtering provides even against directed attacks is still minimal. ** Finally, the goal of "protecting the resources on the internal network from being consumed forwarding bogus packets" is really only a consideration on large corporate or ISP networks with substantial internal traffic load, and if this minimization of resource use is a concern then the network administrator can certainly be expected to know how to configure the company's NAT to enable Restricted filtering. As I pointed out above, under my proposal a NAT can use Restricted filtering and still be BEHAVE-compliant as long as it is the administrator (not the NAT vendor) that enables this firewall behavior. ** For home NATs, in contrast, minimizing resource load on the internal network due to bogus traffic is completely a non-issue because the home network (Ethernet or 802.11 or whatever) is typically so much faster than the Internet uplink anyway. In this case it's much more important that NATs consistently support applications well, which my proposal ensures by requiring that the NAT's "out of the box" configuration is Endpoint-independent Filtering. Joe Clueless who buys a home NAT router probably doesn't have any idea what NAT actually is, but he wants his applications to work. ** Conclusion ** In summary, restrictive filtering in the NAT interferes with applications substantially and provides very little real security benefit in practice, considering the way application communication and NAT port assignment actually works. As such, especially considering the purpose of the BEHAVE working group is to increase the predictability and compatibility of NATs with applications and not to specify standards for firewall functionality, it seems highly inappropriate for the WG's documents to recommend firewall functionality that interferes with applications while providing dubious security benefits. On the contrary, I think the WG should at least recommend, if not mandate, that NATs provide Endpoint-Independent Filtering (Full Cone NAT) by default. NAT vendors or system administrators that are particularly paranoid about security and perceive the security benefits to be worth the interference it causes with applications can still enable more restrictive filtering policies, but that's a firewall deployment issue, not a NAT functionality issue. We need to steer clear from recommending firewall functionality. Thanks very much for your attention. Please direct followups to the BEHAVE working group list, "ietf-behave@list.sipfoundry.org". Thanks! Bryan From larytet.8753341 at bloglines.com Wed May 18 21:07:56 2005 From: larytet.8753341 at bloglines.com (larytet.8753341@bloglines.com) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Official IETF behavior recommendations for NAT relevant to P2P Message-ID: <1116450476.3435399312.6473.sendItem@bloglines.com> dear Bryan, feel free to forward this email to IETF. best regrads, Arkady ---------------------------------------------- hi, i am a principle developer of Rodi project http://larytet.sourceforge.net/btRat.shtml i fully support opinion expressed in this email http://zgp.org/pipermail/p2p-hackers/2005-May/002611.html i think that it's a right thing to do to let (by default) packets from any peer in the outside world to go through "hole" in NAT in case of UDP. Arkady --- Peer-to-peer development." > A discussion is currently taking place on the IETF BEHAVE working group > mailing list (see http://www1.ietf.org/html.charters/behave-charter.html) > that is highly relevant to P2P application writers. For those of you not > already familiar with it, this IETF working group is defining standards for > how NATs should behave so as to better support applications including P2P > apps. The chair has made a "Last Call" for comments on the current draft > document specifying NAT behavior for UDP, so this may be the last chance we > have for a while to influence how well the next generation of NATs support > UDP-based P2P applications. > > ** Address-Restricted vs Full Cone NAT ** > > There's one issue in particular on which I personally fear the working group > is currently headed in the wrong direction, and over which you folks on this > list could perhaps exert considerable influence if you're willing to take a > little time and make your voice heard on the BEHAVE list. The current UDP > draft, draft-ietf-behave-nat-udp-01.txt, recommends that NATs implement > "Endpoint address-dependent filtering behavior", otherwise known as > "Address-Restricted Cone NAT". In other words, once a NATted UDP application > opens a UDP session through a NAT to some external host, giving the > application a public (NATted) port number, the NAT only accepts and forwards > subsequent incoming UDP packets at that public port if they come from a > source IP address that the application has previously sent UDP packets to. > In other words, the NAT must see outgoing UDP traffic to a remote host before > it will accept incoming traffic from that host on the application's public > port. In the proposed alternative, "Endpoint-independent filtering" or "Full > Cone NAT", the NAT forwards any incoming traffic to the correct public port > regardless of source IP address or port number. > > Address-Restricted Cone NAT is moderately "P2P-friendly" in that it at least > allows NATted applications to "hole punch" P2P connections with the help of a > well-known (non-NATted) rendezvous server. Address-Restricted Cone NAT still > does not, however, allow the application to have a full "first-class" > Internet presence (i.e., public IP address and UDP port number) at which it > can be contacted proactively by any other Internet-connected host. A P2P > application behind an Address-Restricted Cone NAT is still forever dependent > on other public (first-class) rendezvous servers to help establish each P2P > communication session it needs. A P2P app behind a Full Cone NAT, in > contrast, is a full "first-class" network citizen itself, and can even _be_ a > public rendezvous server for other less fortunate hosts once it learns its > own public IP address and UDP port number. This is an important benefit to > applications, especially P2P applications that are trying to be highly > decentralized. > > The main argument for Restricted Cone NAT, of course, is security. Until > recently I believed this argument myself, but after further and more careful > analysis I have come to the conclusion that Restricted filtering provides a > very week security benefit in comparison with the fundamental loss in > first-class application connectivity it entails. My current proposal on the > BEHAVE list does NOT mandate Full Cone NAT, but it does specify that NATs > should at least be Full Cone in their default, "out of the box" configuration > as provided by NAT vendors, and recommends that NATs implement Restricted > Cone NAT as an administrator-configurable security option. The current > proposed text reads as follows: > > REQ-7: NATs MUST implement Endpoint-Independent > Filtering in their default configuration. > NATs SHOULD be configurable to support > Address-Specific Filtering or Endpoint-Specific Filtering > at the option of the system administrator. > > If you have thoughts or opinions on this topic, I would greatly appreciate > hearing them (and having other participants hear them) on the BEHAVE list. > > ** Why the Security Benefit of Restricted Cone NAT is Minimal ** > > Restrictive filtering ostensibly has the benefit of protecting applications on > an internal host from traffic the internal host is not expecting, i.e., from > traffic from previously unknown external hosts or endpoints. This behavior > can only possibly benefit the application if the application only ever > initiates outgoing sessions from its internal port, and is obviously a curse > if the application ever wants to accept incoming sessions from external > hosts. The NAT has no way of knowing which is the case. But suppose the > application is one that only initiates outgoing connections (i.e., a > "traditional client/server app"), and thus might "potentially" benefit from a > NAT's restrictive filtering behavior. Consider TCP and UDP separately: > > ** TCP: When a client/server app makes an outgoing TCP connection, it > typically does a "connect()" call to the host OS's sockets API without > bothering to bind() the socket, and the OS's TCP stack allocates a local TCP > port exclusively for the use of that connection. Any TCP packets the host OS > subsequently received on that port from endpoints other than the one it > connect()ed to will be summarily rejected with TCP RSTs by the host OS, and > the application never even sees any hint that they ever arrived. Even if the > application does a bind() before its connect() in order to use a specific > source port (e.g., a <1024 "privileged" port), it still almost always obtains > exclusive use of that port. An application indeed has to work really bloody > hard to set things up so that it can accept incoming TCP connections on the > same port it is using for an outgoing connection, using SO_REUSEADDR and > multiple sockets. No traditional client/server application is going to go to > all this effort just in order to create a security hole. :) In other words, > for TCP, restrictive filtering in practice provides absolutely zero > protection from the _application_: the only entity that the restrictive > filtering even affects is the host OS's protocol stack. Restrictive > filtering might for example benefit a host OS with a TCP stack that is so > broken that it fails to check the source IP address and port number on > incoming TCP packets at all, but if the host OS is _that_ broken then it > undoubtedly has many other problems that the NAT can't possibly guard > against. > > ** UDP: When a client/server UDP app uses a UDP port for communication > with just one remote host, for convenience it typically does a connect() to > the appropriate remote UDP endpoint, so that it can just send messages with > send() or write() without having to specify a destination address for each > datagram, and so that it can receive messages with read() or recv() without > having to check the source address and port number in each message received. > In this case, the host OS effectively provides the external endpoint > filtering functionality as for TCP, and any restrictive filtering implemented > by the NAT again provides no security benefit at all to the application. A > UDP application that uses a single UDP port for communication with multiple > remote hosts, in contrast, must generally check the source IP addresses and > port numbers in the datagrams it receives just in order to distinguish > between the multiple communication sessions it is involved in, and hence it > will inherently provide its own external endpoint filtering. It's > conceivable that some abysmally buggy UDP applications might benefit from the > NAT's external filtering - e.g., a UDP application that only talks to one > external endpoint but doesn't use connect() and doesn't check the source > endpoint on incoming datagrams - but an application that is so seriously > broken probably has many other security vulnerabilities that can be exploited > despite the NAT's external filtering behavior, e.g., by finding out or > guessing the public server the application is talking to (which is easy in > many cases such as commercial games or services where there are only a few > well-known servers) and sending packets with spoofed source IP address and > UDP port numbers. Besides, many, perhaps the majority, of UDP applications > use UDP _because_ they need P2P-style communication, and so external > filtering by the NAT provides no practical security benefit and only causes > interference with the application. > > Another common argument for Restricted Cone NAT (Address-dependent filtering) > is that it protects the resources on the internal network from being consumed > forwarding bogus packets even if the eventual end application will correctly > discard them. This argument is also weak, however: > > ** Even with more permissive Full Cone NAT (endpoint-independent filtering), > the NAT will still in practice filter out the vast majority of bogus traffic > that reaches it, because most of the NAT's ports are typically not in active > use by applications behind the NAT. The only bogus traffic a Full Cone NAT > will let through is bogus traffic that happens to hit the _specific_ external > port numbers that correspond to active port bindings. These port numbers are > assigned more-or-less randomly (i.e., unpredictably) by the NAT, and they only > ever appear in the high, non-well-known port number space, so most of the > Internet "background noise" caused by viruses or other attacks on well-known > ports will never get through in any case, and purely random "port guessing" > attacks would have to send packets to a great many NAT ports in order to get > a few packets through. Thus, the incremental benefit of restrictive > filtering over Full Cone NAT with regards to general bogus Internet traffic > is very small. > > ** An attacker might deliberately send bogus packets to a bound NAT port > known to be in use. But if the attacker can find out which NAT port the > application is using, then the attacker probably also knows (or can easily > find out or guess) the address and port number of the _remote_ host that the > application is talking to and just spoof that source IP address and port > number in its attack packets, getting around Restricted filtering as well. > In fact the remote host's endpoint is in practice likely to be much easier > for the attacker to find out or guess than the application's public NAT port, > because of the overwhelming prevalence of well-known servers and ports on the > Internet in comparison to the randomness and relative obscurity of temporary > NAT-assigned public ports. So the practical benefit that Restricted > filtering provides even against directed attacks is still minimal. > > ** Finally, the goal of "protecting the resources on the internal network > from being consumed forwarding bogus packets" is really only a consideration > on large corporate or ISP networks with substantial internal traffic load, > and if this minimization of resource use is a concern then the network > administrator can certainly be expected to know how to configure the > company's NAT to enable Restricted filtering. As I pointed out above, under > my proposal a NAT can use Restricted filtering and still be BEHAVE-compliant > as long as it is the administrator (not the NAT vendor) that enables this > firewall behavior. > > ** For home NATs, in contrast, minimizing resource load on the internal > network due to bogus traffic is completely a non-issue because the home > network (Ethernet or 802.11 or whatever) is typically so much faster than the > Internet uplink anyway. In this case it's much more important that NATs > consistently support applications well, which my proposal ensures by > requiring that the NAT's "out of the box" configuration is > Endpoint-independent Filtering. Joe Clueless who buys a home NAT router > probably doesn't have any idea what NAT actually is, but he wants his > applications to work. > > ** Conclusion ** > > In summary, restrictive filtering in the NAT interferes with applications > substantially and provides very little real security benefit in > practice, considering the way application communication and NAT port > assignment actually works. As such, especially considering the purpose of > the BEHAVE working group is to increase the predictability and compatibility > of NATs with applications and not to specify standards for firewall > functionality, it seems highly inappropriate for the WG's documents to > recommend firewall functionality that interferes with applications while > providing dubious security benefits. On the contrary, I think the WG should > at least recommend, if not mandate, that NATs provide Endpoint-Independent > Filtering (Full Cone NAT) by default. NAT vendors or system administrators > that are particularly paranoid about security and perceive the security > benefits to be worth the interference it causes with applications can still > enable more restrictive filtering policies, but that's a firewall deployment > issue, not a NAT functionality issue. We need to steer clear from > recommending firewall functionality. > > Thanks very much for your attention. Please direct followups to the BEHAVE > working group list, "ietf-behave@list.sipfoundry.org". Thanks! > > Bryan > _______________________________________________ > p2p-hackers mailing list > p2p-hackers@zgp.org > http://zgp.org/mailman/listinfo/p2p-hackers > _______________________________________________ > Here is a web page listing P2P Conferences: > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > From justin at specialbusservice.com Wed May 18 22:59:34 2005 From: justin at specialbusservice.com (Justin Cormack) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Official IETF behavior recommendations for NAT relevant to P2P In-Reply-To: <200505181459.21722.baford@mit.edu> References: <200505181459.21722.baford@mit.edu> Message-ID: <2D6F41F6-AA3A-438F-9764-0E54FB18E62E@specialbusservice.com> On 18 May 2005, at 19:59, Bryan Ford wrote: > Dear p2p-hackers, > > A discussion is currently taking place on the IETF BEHAVE working > group > mailing list (see http://www1.ietf.org/html.charters/behave- > charter.html) (snip) How current is this? These are the people who loooked at STUn and decided it wasnt that much use, and are due to wind up next January. (not on the list but just asking) Not sure what the issue is with TCP - surely it just doesnt work, you cant get the sequence numbers to work. For UDP, well its easy to spoof anyway, The main problem with not using full cone is that it restricts the number of connections that you can NAT (and given the lack of timeouts on UDP this does impact many applications). Asking for non full cone to be default is thus a bit broken. But all the makers of dumb boxes are doing it anyway. Since when have NAT vendors cared about the IETF? Isnt it only Linux/ BSD based boxes that do full cone anyway? Given that l33t hackers are already giving owned machines ipv6 addresses anyway I am not ure it is an issue... j From travis at redswoosh.net Wed May 18 23:05:50 2005 From: travis at redswoosh.net (Travis Kalanick) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Official IETF behavior recommendations for NATrelevant to P2P In-Reply-To: <2D6F41F6-AA3A-438F-9764-0E54FB18E62E@specialbusservice.com> Message-ID: <200505182310.j4INADaL001505@be9.noc0.redswoosh.com> Couldn't have said it better myself. . . The NAT situation is something we can all build around today, and it will only get easier to deal with over time by the forces already in play. Travis -----Original Message----- From: p2p-hackers-bounces@zgp.org [mailto:p2p-hackers-bounces@zgp.org] On Behalf Of Justin Cormack Sent: Wednesday, May 18, 2005 4:00 PM To: Peer-to-peer development. Subject: Re: [p2p-hackers] Official IETF behavior recommendations for NATrelevant to P2P On 18 May 2005, at 19:59, Bryan Ford wrote: > Dear p2p-hackers, > > A discussion is currently taking place on the IETF BEHAVE working > group > mailing list (see http://www1.ietf.org/html.charters/behave- > charter.html) (snip) How current is this? These are the people who loooked at STUn and decided it wasnt that much use, and are due to wind up next January. (not on the list but just asking) Not sure what the issue is with TCP - surely it just doesnt work, you cant get the sequence numbers to work. For UDP, well its easy to spoof anyway, The main problem with not using full cone is that it restricts the number of connections that you can NAT (and given the lack of timeouts on UDP this does impact many applications). Asking for non full cone to be default is thus a bit broken. But all the makers of dumb boxes are doing it anyway. Since when have NAT vendors cared about the IETF? Isnt it only Linux/ BSD based boxes that do full cone anyway? Given that l33t hackers are already giving owned machines ipv6 addresses anyway I am not ure it is an issue... j _______________________________________________ p2p-hackers mailing list p2p-hackers@zgp.org http://zgp.org/mailman/listinfo/p2p-hackers _______________________________________________ Here is a web page listing P2P Conferences: http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences From srhea at cs.berkeley.edu Wed May 18 23:30:31 2005 From: srhea at cs.berkeley.edu (Sean C. Rhea) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Multiple value per key query/response syntax? In-Reply-To: <428A3DC5.6090106@vscape.com> References: <428A3DC5.6090106@vscape.com> Message-ID: <7f4192482ce8d14c05a8d220c5026b69@cs.berkeley.edu> On May 17, 2005, at 11:53 AM, Kerry L. Bonin wrote: > I'm looking for any good discussions or examples of reasonably robust > request/response formats for multiple transaction multimap queries in > general, and multiple-value per key DHT in particular. > I was considering using expiration timestamp windowing in the query as > a sort of crude iterator filter for values that expire at a constant > interval after storage or refresh, but I'm wondering about variable > TTL vs. variable refresh intervals, vs. classic remote iterator > design. In OpenDHT, we allow multiple values per key. If two puts come in with the same key, we store them both; a get returns all values. If all values don't fit in a single packet, we return only a packet's worth, along with a "placemark" that can be used to retrieve the next set. This placemark works just like an iterator. The way this is implemented is that we return values for gets in the order of their SHA-1 hashes. The placemark returned is just the SHA of the last value returned. To get the next set, we just skip over all values whose SHA is less than or equal to the placemark in the get handling code. If a put occurs during iteration, it just falls somewhere in this sequence, and may or may not be returned to the client. If the client starts a new get with placemark 0, however, it will be returned. I hope that made sense, Sean -- To announce that there must be no criticism of the president or that we are to stand by the president right or wrong is not only unpatriotic and servile but is morally treasonable to the American public. -- Theodore Roosevelt -------------- next part -------------- A non-text attachment was scrubbed... Name: PGP.sig Type: application/pgp-signature Size: 186 bytes Desc: This is a digitally signed message part Url : http://zgp.org/pipermail/p2p-hackers/attachments/20050518/1fff95c8/PGP.pgp From srhea at cs.berkeley.edu Wed May 18 23:35:35 2005 From: srhea at cs.berkeley.edu (Sean C. Rhea) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Has CAN been implemented by any open source project? In-Reply-To: <20050518094753.CB1863FC2A@capsicum.zgp.org> References: <20050518094753.CB1863FC2A@capsicum.zgp.org> Message-ID: <4595e3677475ae9fa1de7d7a1c3979a3@cs.berkeley.edu> On May 18, 2005, at 2:55 AM, Li Tang wrote: > I am looking for some open source resources of DHT algorithms. > While I > have found projects related to Chord, Pastry, and Tapestry, I got > little > implementation of CAN. > Is anybody aware of related information? Any pointers, not limited > to > CAN, would be greatly appreciated! There was never a CAN implementation (outside of simulation) by the CAN authors. Several other groups produced implementations of CAN for the purposes of writing papers, but no one ever produced a full implementation AFAIK. (None of them handled node failure, for example.) Sean -- Once, someone asked me what pleasure I took in riding for so long. 'Pleasure?' I said. 'I don't understand the question.' I didn't do it for pleasure. I did it for pain. -- Lance Armstrong -------------- next part -------------- A non-text attachment was scrubbed... Name: PGP.sig Type: application/pgp-signature Size: 186 bytes Desc: This is a digitally signed message part Url : http://zgp.org/pipermail/p2p-hackers/attachments/20050518/3439695c/PGP.pgp From lemonobrien at yahoo.com Wed May 18 23:46:12 2005 From: lemonobrien at yahoo.com (Lemon Obrien) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Has CAN been implemented by any open source project? In-Reply-To: <4595e3677475ae9fa1de7d7a1c3979a3@cs.berkeley.edu> Message-ID: <20050518234612.76482.qmail@web53601.mail.yahoo.com> i making a peer to peer system and did research on various systems of search; how best to do it. I may have implemented CAN; can someone decribe what CAN means and how its alogorythm. thanks lemon "Sean C. Rhea" wrote: On May 18, 2005, at 2:55 AM, Li Tang wrote: > I am looking for some open source resources of DHT algorithms. > While I > have found projects related to Chord, Pastry, and Tapestry, I got > little > implementation of CAN. > Is anybody aware of related information? Any pointers, not limited > to > CAN, would be greatly appreciated! There was never a CAN implementation (outside of simulation) by the CAN authors. Several other groups produced implementations of CAN for the purposes of writing papers, but no one ever produced a full implementation AFAIK. (None of them handled node failure, for example.) Sean -- Once, someone asked me what pleasure I took in riding for so long. 'Pleasure?' I said. 'I don't understand the question.' I didn't do it for pleasure. I did it for pain. -- Lance Armstrong _______________________________________________ p2p-hackers mailing list p2p-hackers@zgp.org http://zgp.org/mailman/listinfo/p2p-hackers _______________________________________________ Here is a web page listing P2P Conferences: http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences You don't get no juice unless you squeeze Lemon Obrien, the Third. --------------------------------- Do you Yahoo!? Make Yahoo! your home page -------------- next part -------------- An HTML attachment was scrubbed... URL: http://zgp.org/pipermail/p2p-hackers/attachments/20050518/339e8c57/attachment.html From ch_407 at rediffmail.com Thu May 19 00:33:42 2005 From: ch_407 at rediffmail.com (chinmaya narayan pandey) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Chord Message-ID: <20050519003342.11538.qmail@webmail26.rediffmail.com> ? hi is there any open source implementation of chord. CHINMAYA PANDEY -------------- next part -------------- An HTML attachment was scrubbed... URL: http://zgp.org/pipermail/p2p-hackers/attachments/20050519/d692f5db/attachment.htm From davidopp at gmail.com Thu May 19 00:54:09 2005 From: davidopp at gmail.com (David Oppenheimer) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Chord In-Reply-To: <20050519003342.11538.qmail@webmail26.rediffmail.com> References: <20050519003342.11538.qmail@webmail26.rediffmail.com> Message-ID: http://pdos.csail.mit.edu/chord/ click on "Downloads" David On 19 May 2005 00:33:42 -0000, chinmaya narayan pandey wrote: > > > > hi > is there any open source implementation of chord. > > CHINMAYA > PANDEY > > > > > > _______________________________________________ > p2p-hackers mailing list > p2p-hackers@zgp.org > http://zgp.org/mailman/listinfo/p2p-hackers > _______________________________________________ > Here is a web page listing P2P Conferences: > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences > > > From toscano_moura at hotmail.com Thu May 19 01:46:06 2005 From: toscano_moura at hotmail.com (Hermano Toscano Moura) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Chord In-Reply-To: Message-ID: An HTML attachment was scrubbed... URL: http://zgp.org/pipermail/p2p-hackers/attachments/20050519/a94649dc/attachment.html From dbarrett at quinthar.com Fri May 20 01:05:38 2005 From: dbarrett at quinthar.com (David Barrett) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Official IETF behavior recommendations for NATrelevant to P2P In-Reply-To: <200505181459.21722.baford@mit.edu> Message-ID: <20050520010540.D91873FC99@capsicum.zgp.org> Hi Bryan, I think your work in this area is simply the best, and I entirely agree with your judgment here. I'm a P2P developer working in the VoIP space, and I can't stress enough the annoyance of address-restricted NATs. Were I working in a "closed" space (ala Skype) it'd be merely a nuisance. However, due to the limitations of open standards (notably SIP and RTP), working in the presence of NATs is quite challenging. I would enthusiastically welcome more standardized behavior in terms of how to "punch holes" and how long I can count on these holes remaining open. Let me explain by way of example: First, as you well know, before anyone can hope to contact me behind a NAT, I must first figure out what the global (NAT'd) address is for each of my local ports. I do this with the help of some central server, such as with STUN. Once the hole has been "punched" I have no idea how long it will stay open, so I need to send a "keep-alive" to my central server. The net result is that there is a very high cost to open even one UDP port behind a NAT, and an ongoing cost to keep it open. So even with a full-cone NAT, there is an up-front and ongoing cost to opening a UDP port on which I intend to receive data. However, with a full-cone NAT, the cost is purely spent by my client -- I needn't involve anyone else (excepting the central server) in preparing to receive data than my own instance of my own application. In the case of an address-restricted NAT, however, not only must I pay the cost of being behind a NAT (and pay not once, but again for each client who communicates with me), everyone else who wishes to communicate with me must pay as well. For the full-cone NAT, once I know my global (NAT'd) IP/port, I can use that as my own -- anybody can contact me via that address, without special behavior to account for me being behind a NAT. This means NAT-ignorant protocols (such as RTP, for example) can be received from behind NATs, without any special programming on the part of the sender. However, for address-restricted NATs, this is not the case. Imagine you want to send me an RTP stream, and I am behind a NAT. With a full-cone NAT, I could send you my global IP/port (via SIP and SDP), and you could open an RTP stream direct back to me. But with an address-restricted NAT, this is not enough. The reason is a bit involved, but please bear with me. First you need to send me the SIP INVITE via my proxy server. SIP allows the proxy server to either redirect you to contact me directly, or forward on my request. If I'm behind a full-cone NAT, either works fine. If I'm behind an address-restricted NAT, I can only hope that the proxy forwards your request on to me, because I have no way of punching a hole to receive your direct SIP request. Furthermore, I have no way of indicating to the SIP proxy that I need it to forward to me. So right off the bat, receiving SIP INVITE requests behind an address-restricted NAT is more complicated than from behind a full-cone NAT. Assuming I'm lucky and the SIP proxy forwards the request to me (via the hole I've already punched for it), I can receive and respond to the INVITE request indicating the port to which you should broadcast your RTP. However, I have a complication that shared by all NATs, and that is getting a port that complies with RTP. The RTP standard indicates RTP ports should be even-numbered, and the next port (odd-numbered) is implied to be open to receive RTCP. Unfortunately, I as a client have absolutely no control over which ports my NAT assigns me, so it's very difficult for me to receive RTP in a fully compliant fashion. So for all NATs I must put in extra effort to communicate the real RTP/RTCP ports I wish to receive on, possibly by bending the RTP spec. But a further complication of address-restricted NATs is that I also need to somehow figure out the exact address you intend to broadcast from, even though I would otherwise not care. This means I must bend the SIP/RTP framework even more (or dig into the details more than I might otherwise) just to support address-restricted NATs. In the meantime, while I am playing these extra games to punch holes to receive your data, you have already begun to broadcast. For full-cone NATs, this is fine and expected. But for address-restricted NATs, I can't receive data despite having told you the correct IP/port to which you should broadcast, because I haven't punched a hole for you. While I'm playing games trying to punch the hole, you're broadcasting data that I'm not receiving. Depending on the codec, that might be very important header data. Naturally UDP is an unreliable transport mechanism and thus there are fallbacks if the occasional packet is lost, but there's a big difference between "some packets might be lost" and "an unknown number of initial packets *will* be lost". More work must be put into supporting the address-restricted case, and more deviation from the "mainstream" SIP/RTP best practices. Furthermore, just punching the holes themselves involve violating standards, hopefully in benign fashion. In the case of unidirectional RTP, there is nowhere in the standard that I as a listener should send to your RTP broadcast port -- thus there is no fully-compliant way to punch a hole to receive your data. (Yes I can send to your RTCP port, but that's a separate port.) The best I can do is send a malformed packet your way and hope it doesn't cause you harm. With full-cone NATs, I have no such problem. And finally, every hole I punch requires some maintenance. The less holes, the better. Generally, with full-cone, the number of holes I need punch is proportional to the number of services I wish to offer (and the same holes are used for all users). But with address-restricted, it's proportional to the product of the number of services, and the number of simultaneous users. This means I have a much higher overhead to working with address-restricted NATs. But more importantly, I have so many more things that can go wrong. This breeds the absolute worst kind of "partial failure" bug such as: - Why can I hear Bob, but not Alice? - Why can I hear Bob, but he can't hear me? - Why can I receive Bob's RTP, but not Bob's RTCP? - And so on... And if I walk across the room and pick a different wi-fi hub, thus changing IP addresses, with active sessions? Oye, it's a ton of work to re-establish all of these crazy holes and sessions in a bidirectional manner. A ton of work that I needn't do with full-cone NATs. So, to make a long story short, NAT traversal is a hard problem, and it's made especially hard by address-restricted NATs. If I could count on full-cone NAT behavior, my life as a programmer would be easier, and the applications I produce would function better, faster, and more reliably. In other words, I fully endorse Bryan's recommendation, and hope to see it included in the final draft. -david > -----Original Message----- > From: p2p-hackers-bounces@zgp.org [mailto:p2p-hackers-bounces@zgp.org] On > Behalf Of Bryan Ford > Sent: Wednesday, May 18, 2005 11:59 AM > To: p2p-hackers@zgp.org > Subject: [p2p-hackers] Official IETF behavior recommendations for > NATrelevant to P2P > > Dear p2p-hackers, > > A discussion is currently taking place on the IETF BEHAVE working group > mailing list (see http://www1.ietf.org/html.charters/behave-charter.html) > that is highly relevant to P2P application writers. For those of you not > already familiar with it, this IETF working group is defining standards > for > how NATs should behave so as to better support applications including P2P > apps. The chair has made a "Last Call" for comments on the current draft > document specifying NAT behavior for UDP, so this may be the last chance > we > have for a while to influence how well the next generation of NATs support > UDP-based P2P applications. > > ** Address-Restricted vs Full Cone NAT ** > > There's one issue in particular on which I personally fear the working > group > is currently headed in the wrong direction, and over which you folks on > this > list could perhaps exert considerable influence if you're willing to take > a > little time and make your voice heard on the BEHAVE list. The current UDP > draft, draft-ietf-behave-nat-udp-01.txt, recommends that NATs implement > "Endpoint address-dependent filtering behavior", otherwise known as > "Address-Restricted Cone NAT". In other words, once a NATted UDP > application > opens a UDP session through a NAT to some external host, giving the > application a public (NATted) port number, the NAT only accepts and > forwards > subsequent incoming UDP packets at that public port if they come from a > source IP address that the application has previously sent UDP packets to. > In other words, the NAT must see outgoing UDP traffic to a remote host > before > it will accept incoming traffic from that host on the application's public > port. In the proposed alternative, "Endpoint-independent filtering" or > "Full > Cone NAT", the NAT forwards any incoming traffic to the correct public > port > regardless of source IP address or port number. > > Address-Restricted Cone NAT is moderately "P2P-friendly" in that it at > least > allows NATted applications to "hole punch" P2P connections with the help > of a > well-known (non-NATted) rendezvous server. Address-Restricted Cone NAT > still > does not, however, allow the application to have a full "first-class" > Internet presence (i.e., public IP address and UDP port number) at which > it > can be contacted proactively by any other Internet-connected host. A P2P > application behind an Address-Restricted Cone NAT is still forever > dependent > on other public (first-class) rendezvous servers to help establish each > P2P > communication session it needs. A P2P app behind a Full Cone NAT, in > contrast, is a full "first-class" network citizen itself, and can even > _be_ a > public rendezvous server for other less fortunate hosts once it learns its > own public IP address and UDP port number. This is an important benefit > to > applications, especially P2P applications that are trying to be highly > decentralized. > > The main argument for Restricted Cone NAT, of course, is security. Until > recently I believed this argument myself, but after further and more > careful > analysis I have come to the conclusion that Restricted filtering provides > a > very week security benefit in comparison with the fundamental loss in > first-class application connectivity it entails. My current proposal on > the > BEHAVE list does NOT mandate Full Cone NAT, but it does specify that NATs > should at least be Full Cone in their default, "out of the box" > configuration > as provided by NAT vendors, and recommends that NATs implement Restricted > Cone NAT as an administrator-configurable security option. The current > proposed text reads as follows: > > REQ-7: NATs MUST implement Endpoint-Independent > Filtering in their default configuration. > NATs SHOULD be configurable to support > Address-Specific Filtering or Endpoint-Specific Filtering > at the option of the system administrator. > > If you have thoughts or opinions on this topic, I would greatly appreciate > hearing them (and having other participants hear them) on the BEHAVE list. > > ** Why the Security Benefit of Restricted Cone NAT is Minimal ** > > Restrictive filtering ostensibly has the benefit of protecting > applications on > an internal host from traffic the internal host is not expecting, i.e., > from > traffic from previously unknown external hosts or endpoints. This > behavior > can only possibly benefit the application if the application only ever > initiates outgoing sessions from its internal port, and is obviously a > curse > if the application ever wants to accept incoming sessions from external > hosts. The NAT has no way of knowing which is the case. But suppose the > application is one that only initiates outgoing connections (i.e., a > "traditional client/server app"), and thus might "potentially" benefit > from a > NAT's restrictive filtering behavior. Consider TCP and UDP separately: > > ** TCP: When a client/server app makes an outgoing TCP connection, > it > typically does a "connect()" call to the host OS's sockets API without > bothering to bind() the socket, and the OS's TCP stack allocates a local > TCP > port exclusively for the use of that connection. Any TCP packets the host > OS > subsequently received on that port from endpoints other than the one it > connect()ed to will be summarily rejected with TCP RSTs by the host OS, > and > the application never even sees any hint that they ever arrived. Even if > the > application does a bind() before its connect() in order to use a specific > source port (e.g., a <1024 "privileged" port), it still almost always > obtains > exclusive use of that port. An application indeed has to work really > bloody > hard to set things up so that it can accept incoming TCP connections on > the > same port it is using for an outgoing connection, using SO_REUSEADDR and > multiple sockets. No traditional client/server application is going to go > to > all this effort just in order to create a security hole. :) In other > words, > for TCP, restrictive filtering in practice provides absolutely zero > protection from the _application_: the only entity that the restrictive > filtering even affects is the host OS's protocol stack. Restrictive > filtering might for example benefit a host OS with a TCP stack that is so > broken that it fails to check the source IP address and port number on > incoming TCP packets at all, but if the host OS is _that_ broken then it > undoubtedly has many other problems that the NAT can't possibly guard > against. > > ** UDP: When a client/server UDP app uses a UDP port for > communication > with just one remote host, for convenience it typically does a connect() > to > the appropriate remote UDP endpoint, so that it can just send messages > with > send() or write() without having to specify a destination address for each > datagram, and so that it can receive messages with read() or recv() > without > having to check the source address and port number in each message > received. > In this case, the host OS effectively provides the external endpoint > filtering functionality as for TCP, and any restrictive filtering > implemented > by the NAT again provides no security benefit at all to the application. > A > UDP application that uses a single UDP port for communication with > multiple > remote hosts, in contrast, must generally check the source IP addresses > and > port numbers in the datagrams it receives just in order to distinguish > between the multiple communication sessions it is involved in, and hence > it > will inherently provide its own external endpoint filtering. It's > conceivable that some abysmally buggy UDP applications might benefit from > the > NAT's external filtering - e.g., a UDP application that only talks to one > external endpoint but doesn't use connect() and doesn't check the source > endpoint on incoming datagrams - but an application that is so seriously > broken probably has many other security vulnerabilities that can be > exploited > despite the NAT's external filtering behavior, e.g., by finding out or > guessing the public server the application is talking to (which is easy in > many cases such as commercial games or services where there are only a few > well-known servers) and sending packets with spoofed source IP address and > UDP port numbers. Besides, many, perhaps the majority, of UDP > applications > use UDP _because_ they need P2P-style communication, and so external > filtering by the NAT provides no practical security benefit and only > causes > interference with the application. > > Another common argument for Restricted Cone NAT (Address-dependent > filtering) > is that it protects the resources on the internal network from being > consumed > forwarding bogus packets even if the eventual end application will > correctly > discard them. This argument is also weak, however: > > ** Even with more permissive Full Cone NAT (endpoint-independent > filtering), > the NAT will still in practice filter out the vast majority of bogus > traffic > that reaches it, because most of the NAT's ports are typically not in > active > use by applications behind the NAT. The only bogus traffic a Full Cone > NAT > will let through is bogus traffic that happens to hit the _specific_ > external > port numbers that correspond to active port bindings. These port numbers > are > assigned more-or-less randomly (i.e., unpredictably) by the NAT, and they > only > ever appear in the high, non-well-known port number space, so most of the > Internet "background noise" caused by viruses or other attacks on well- > known > ports will never get through in any case, and purely random "port > guessing" > attacks would have to send packets to a great many NAT ports in order to > get > a few packets through. Thus, the incremental benefit of restrictive > filtering over Full Cone NAT with regards to general bogus Internet > traffic > is very small. > > ** An attacker might deliberately send bogus packets to a bound NAT > port > known to be in use. But if the attacker can find out which NAT port the > application is using, then the attacker probably also knows (or can easily > find out or guess) the address and port number of the _remote_ host that > the > application is talking to and just spoof that source IP address and port > number in its attack packets, getting around Restricted filtering as well. > In fact the remote host's endpoint is in practice likely to be much easier > for the attacker to find out or guess than the application's public NAT > port, > because of the overwhelming prevalence of well-known servers and ports on > the > Internet in comparison to the randomness and relative obscurity of > temporary > NAT-assigned public ports. So the practical benefit that Restricted > filtering provides even against directed attacks is still minimal. > > ** Finally, the goal of "protecting the resources on the internal > network > from being consumed forwarding bogus packets" is really only a > consideration > on large corporate or ISP networks with substantial internal traffic load, > and if this minimization of resource use is a concern then the network > administrator can certainly be expected to know how to configure the > company's NAT to enable Restricted filtering. As I pointed out above, > under > my proposal a NAT can use Restricted filtering and still be BEHAVE- > compliant > as long as it is the administrator (not the NAT vendor) that enables this > firewall behavior. > > ** For home NATs, in contrast, minimizing resource load on the > internal > network due to bogus traffic is completely a non-issue because the home > network (Ethernet or 802.11 or whatever) is typically so much faster than > the > Internet uplink anyway. In this case it's much more important that NATs > consistently support applications well, which my proposal ensures by > requiring that the NAT's "out of the box" configuration is > Endpoint-independent Filtering. Joe Clueless who buys a home NAT router > probably doesn't have any idea what NAT actually is, but he wants his > applications to work. > > ** Conclusion ** > > In summary, restrictive filtering in the NAT interferes with applications > substantially and provides very little real security benefit in > practice, considering the way application communication and NAT port > assignment actually works. As such, especially considering the purpose of > the BEHAVE working group is to increase the predictability and > compatibility > of NATs with applications and not to specify standards for firewall > functionality, it seems highly inappropriate for the WG's documents to > recommend firewall functionality that interferes with applications while > providing dubious security benefits. On the contrary, I think the WG > should > at least recommend, if not mandate, that NATs provide Endpoint-Independent > Filtering (Full Cone NAT) by default. NAT vendors or system > administrators > that are particularly paranoid about security and perceive the security > benefits to be worth the interference it causes with applications can > still > enable more restrictive filtering policies, but that's a firewall > deployment > issue, not a NAT functionality issue. We need to steer clear from > recommending firewall functionality. > > Thanks very much for your attention. Please direct followups to the > BEHAVE > working group list, "ietf-behave@list.sipfoundry.org". Thanks! > > Bryan > _______________________________________________ > p2p-hackers mailing list > p2p-hackers@zgp.org > http://zgp.org/mailman/listinfo/p2p-hackers > _______________________________________________ > Here is a web page listing P2P Conferences: > http://www.neurogrid.net/twiki/bin/view/Main/PeerToPeerConferences From wgallagher at gridironsoftware.com Fri May 20 01:33:18 2005 From: wgallagher at gridironsoftware.com (Warren Gallagher) Date: Sat Dec 9 22:12:53 2006 Subject: [p2p-hackers] Official IETF behavior recommendations for NATrelevant to P2P In-Reply-To: <200505181459.21722.baford@mit.edu> Message-ID: <200505200133.j4K1XBD8011939@mail4.magma.ca> Bryan, I agree with your assessment. I would further argue that NATs are not security devices, they are address translators. Security is the job of the firewall. As long as firewalls do not restrict a sysadmin's ability to control the behaviour then everything is good. Thanks for the good work Warren Gallagher Chief Software Architect, Gridiron Software -----Original Message----- From: p2p-hackers-bounces@zgp.org [mailto:p2p-hackers-bounces@zgp.org] On Behalf Of Bryan Ford Sent: May 18, 2005 2:59 PM To: p2p-hackers@zgp.org Subject: [p2p-hackers] Official IETF behavior recommendations for NATrelevant to P2P Dear p2p-hackers, A discussion is currently taking place on the IETF BEHAVE working group mailing list (see http://www1.ietf.org/html.charters/behave-charter.html) that is highly relevant to P2P application writers. For those of you not already familiar with it, this IETF working group is defining standards for how NATs should behave so as to better support applications including P2P apps. The chair has made a "Last Call" for comments on the current draft document specifying NAT behavior for UDP, so this may be the last chance we have for a while to influence how well the next generation of NATs support UDP-based P2P applications. ** Address-Restricted vs Full Cone NAT ** There's one issue in particular on which I personally fear the working group is currently headed in the wrong direction, and over which you folks on this list could perhaps exert considerable influence if you're willing to take a little time and make your voice heard on the BEHAVE list. The current UDP draft, draft-ietf-behave-nat-udp-01.txt, recommends that NATs implement "Endpoint address-dependent filtering behavior", otherwise known as "Address-Restricted Cone NAT". In other words, once a NATted UDP application opens a UDP session through a NAT to some external host, giving the application a public (NATted) port number, the NAT only accepts and forwards subsequent incoming UDP packets at that public port if they come from a source IP address that the application has previously sent UDP packets to. In other words, the NAT must see outgoing UDP traffic to a remote host before it will accept incoming traffic from that host on the application's public port. In the proposed alternative, "Endpoint-independent filtering" or "Full Cone NAT", the NAT forwards any incoming traffic to the correct public port regardless of source IP address or port number. Address-Restricted Cone NAT is moderately "P2P-friendly" in that it at least allows NATted applications to "hole punch" P2P connections with the help of a well-known (non-NATted) rendezvous server. Address-Restricted Cone NAT still does not, however, allow the application to have a full "first-class" Internet presence (i.e., public IP address and UDP port number) at which it can be contacted proactively by any other Internet-connected host. A P2P application behind an Address-Restricted Cone NAT is still forever dependent on other public (first-class) rendezvous servers to help establish each P2P communication session it needs. A P2P app behind a Full Cone NAT, in contrast, is a full "first-class" network citizen itself, and can even _be_ a public rendezvous server for other less fortunate hosts once it learns its own public IP address and UDP port number. This is an important benefit to applications, especially P2P applications that are trying to be highly decentralized. The main argument for Restricted Cone NAT, of course, is security. Until recently I believed this argument myself, but after further and more careful analysis I have come to the conclusion that Restricted filtering provides a very week security benefit in comparison with the fundamental loss in first-class application connectivity it entails. My current proposal on the BEHAVE list does NOT mandate Full Cone NAT, but it does specify that NATs should at least be Full Cone in their default, "out of the box" configuration as provided by NAT vendors, and recommends that NATs implement Restricted Cone NAT as an administrator-configurable security option. The current proposed text reads as follows: REQ-7: NATs MUST implement Endpoint-Independent Filtering in their default configuration. NATs SHOULD be configurable to support Address-Specific Filtering or Endpoint-Specific Filtering at the option of the system administrator. If you have thoughts or opinions on this topic, I would greatly appreciate hearing them (and having other participants hear them) on the BEHAVE list. ** Why the Security Benefit of Restricted Cone NAT is Minimal ** Restrictive filtering ostensibly has the benefit of protecting applications on an internal host from traffic the internal host is not expecting, i.e., from traffic from previously unknown external hosts or endpoints. This behavior can only possibly benefit the application if the application only ever initiates outgoing sessions from its internal port, and is obviously a curse if the application ever wants to accept incoming sessions from external hosts. The NAT has no way of knowing which is the case. But suppose the application is one that only initiates outgoing connections (i.e., a "traditional client/server app