<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[GCTIP Forums - All Forums]]></title>
		<link>http://forums.gctip.org/</link>
		<description><![CDATA[GCTIP Forums - http://forums.gctip.org]]></description>
		<pubDate>Fri, 24 May 2013 22:37:54 -0700</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[YouTube and Content ID]]></title>
			<link>http://forums.gctip.org/thread-121-post-425.html#pid425</link>
			<pubDate>Fri, 07 Sep 2012 16:26:12 -0700</pubDate>
			<dc:creator>lauren</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-121-post-425.html#pid425</guid>
			<description><![CDATA[This thread is a starting point for discussions of YouTube and related Content ID issues.]]></description>
			<content:encoded><![CDATA[This thread is a starting point for discussions of YouTube and related Content ID issues.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Domain hijacking prevention]]></title>
			<link>http://forums.gctip.org/thread-103-post-424.html#pid424</link>
			<pubDate>Thu, 12 Jul 2012 15:16:03 -0700</pubDate>
			<dc:creator>AllenGould</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-103-post-424.html#pid424</guid>
			<description><![CDATA[Also worth noting that beyond a need for a unique address for the machine you want to talk to, there may not be a benefit to enforcing any sort of unique name.<br />
<br />
Look at a phone address book - I know many people who don't (or can't) remember the ten-digit phone number anymore. You write down the number once, associate it with a name, and then you use the name from then on. Somehow we have survived without enforcing unique worldwide names in that instance.]]></description>
			<content:encoded><![CDATA[Also worth noting that beyond a need for a unique address for the machine you want to talk to, there may not be a benefit to enforcing any sort of unique name.<br />
<br />
Look at a phone address book - I know many people who don't (or can't) remember the ten-digit phone number anymore. You write down the number once, associate it with a name, and then you use the name from then on. Somehow we have survived without enforcing unique worldwide names in that instance.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Psuedo-unique id based on peer names]]></title>
			<link>http://forums.gctip.org/thread-116-post-417.html#pid417</link>
			<pubDate>Tue, 12 Jul 2011 16:26:47 -0700</pubDate>
			<dc:creator>bug1</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-116-post-417.html#pid417</guid>
			<description><![CDATA[Hi all, i had an idea last night, not sure if it is useful for what we are doing, but i will throw it out there anyway.<br />
<br />
The basic concept is we identify ourselves based our peers, we get a unique identifier but with routing information embedded in it.<br />
<br />
Instead of using globally unique identifiers, (UUID is 16 bytes), we only use say 4 bytes for a "locally unique identifier (LUID)" (which i just made up) name.<br />
<br />
We combine our 4 byte LUID with the LUID of 3 of our trusted peers, and bingo we have a 16 bytes identifier which should be globally unique. <br />
<br />
eg. Say we have <br />
My name: AB<br />
LUID of Trusted Peer 1: CD<br />
LUID of Trusted Peer 2: EF<br />
LUID of Trusted Peer 3: GH<br />
<br />
My UUID would be ABCDEFGH<br />
The UUID of CD might be CDABGHIJ<br />
<br />
All local names will have collisions, so it cant be used to identify you globally like an IP address can.<br />
<br />
Also, it may allow mechanisms for easy renaming, if i change my from AB to XY, and i still have the same trusted peers i become XYCDEFGH, maybe looking for AB in CD, EF and GH will still find me.<br />
<br />
I consider it a half-baked idea at their stage, so i dont know how it might fit in, maybe it can inspire an idea in someone else.]]></description>
			<content:encoded><![CDATA[Hi all, i had an idea last night, not sure if it is useful for what we are doing, but i will throw it out there anyway.<br />
<br />
The basic concept is we identify ourselves based our peers, we get a unique identifier but with routing information embedded in it.<br />
<br />
Instead of using globally unique identifiers, (UUID is 16 bytes), we only use say 4 bytes for a "locally unique identifier (LUID)" (which i just made up) name.<br />
<br />
We combine our 4 byte LUID with the LUID of 3 of our trusted peers, and bingo we have a 16 bytes identifier which should be globally unique. <br />
<br />
eg. Say we have <br />
My name: AB<br />
LUID of Trusted Peer 1: CD<br />
LUID of Trusted Peer 2: EF<br />
LUID of Trusted Peer 3: GH<br />
<br />
My UUID would be ABCDEFGH<br />
The UUID of CD might be CDABGHIJ<br />
<br />
All local names will have collisions, so it cant be used to identify you globally like an IP address can.<br />
<br />
Also, it may allow mechanisms for easy renaming, if i change my from AB to XY, and i still have the same trusted peers i become XYCDEFGH, maybe looking for AB in CD, EF and GH will still find me.<br />
<br />
I consider it a half-baked idea at their stage, so i dont know how it might fit in, maybe it can inspire an idea in someone else.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Sovereign computing]]></title>
			<link>http://forums.gctip.org/thread-115-post-416.html#pid416</link>
			<pubDate>Mon, 20 Jun 2011 03:08:10 -0700</pubDate>
			<dc:creator>ccidral</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-115-post-416.html#pid416</guid>
			<description><![CDATA[After reading about IDONS, I remembered a very interesting project regarding freedom on the internet, and I think it's closely related to IDONS. The concept is called Sovereign Computing, coined by Klaus Wuestefeld. There's already an implementation going on, called Sneer.<br />
<br />
Links:<br />
<br />
<a href="http://sovereigncomputing.net" target="_blank">http://sovereigncomputing.net</a><br />
<br />
<a href="http://sneer.me" target="_blank">http://sneer.me</a><br />
<br />
<a href="http://www.advogato.org/article/808.html" target="_blank">http://www.advogato.org/article/808.html</a>]]></description>
			<content:encoded><![CDATA[After reading about IDONS, I remembered a very interesting project regarding freedom on the internet, and I think it's closely related to IDONS. The concept is called Sovereign Computing, coined by Klaus Wuestefeld. There's already an implementation going on, called Sneer.<br />
<br />
Links:<br />
<br />
<a href="http://sovereigncomputing.net" target="_blank">http://sovereigncomputing.net</a><br />
<br />
<a href="http://sneer.me" target="_blank">http://sneer.me</a><br />
<br />
<a href="http://www.advogato.org/article/808.html" target="_blank">http://www.advogato.org/article/808.html</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[The European Commission is calling for a massive internet filtering effort]]></title>
			<link>http://forums.gctip.org/thread-101-post-415.html#pid415</link>
			<pubDate>Tue, 14 Jun 2011 14:25:36 -0700</pubDate>
			<guid isPermaLink="false">http://forums.gctip.org/thread-101-post-415.html#pid415</guid>
			<description><![CDATA[It starts with illegal filesharing and then pretty soon it will be anything they don't like. this isn't good for the internet, the internet thrives because its free and accessible to anyone, unlike TV and Radio!]]></description>
			<content:encoded><![CDATA[It starts with illegal filesharing and then pretty soon it will be anything they don't like. this isn't good for the internet, the internet thrives because its free and accessible to anyone, unlike TV and Radio!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-405.html#pid405</link>
			<pubDate>Tue, 29 Mar 2011 22:55:07 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-405.html#pid405</guid>
			<description><![CDATA[Found a good paper on non-parallelizable puzzles. <a href="http://doc.utwente.nl/69557/1/On_Non-Parallelizable_Deterministic_Client_Puzzle_Scheme_with_Batch_Verification_Modes.pdf" target="_blank">http://doc.utwente.nl/69557/1/On_Non-Par..._Modes.pdf</a>]]></description>
			<content:encoded><![CDATA[Found a good paper on non-parallelizable puzzles. <a href="http://doc.utwente.nl/69557/1/On_Non-Parallelizable_Deterministic_Client_Puzzle_Scheme_with_Batch_Verification_Modes.pdf" target="_blank">http://doc.utwente.nl/69557/1/On_Non-Par..._Modes.pdf</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Domain hijacking prevention]]></title>
			<link>http://forums.gctip.org/thread-103-post-404.html#pid404</link>
			<pubDate>Mon, 28 Mar 2011 03:55:19 -0700</pubDate>
			<guid isPermaLink="false">http://forums.gctip.org/thread-103-post-404.html#pid404</guid>
			<description><![CDATA[I think some of these hijackings are done when people do not update their e-mail address.]]></description>
			<content:encoded><![CDATA[I think some of these hijackings are done when people do not update their e-mail address.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Application Layers - The DNSSEC Chicken and Egg Challenge]]></title>
			<link>http://forums.gctip.org/thread-97-post-403.html#pid403</link>
			<pubDate>Tue, 22 Mar 2011 23:16:47 -0700</pubDate>
			<dc:creator>scot5conley</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-97-post-403.html#pid403</guid>
			<description><![CDATA[If the registrant is using a DNS managed service provider, they should contact the provider for instructions to turn on DNSSEC. If the registrant is operating their own DNS set up, there are a number of steps to perform.]]></description>
			<content:encoded><![CDATA[If the registrant is using a DNS managed service provider, they should contact the provider for instructions to turn on DNSSEC. If the registrant is operating their own DNS set up, there are a number of steps to perform.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-402.html#pid402</link>
			<pubDate>Sun, 20 Mar 2011 17:17:29 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-402.html#pid402</guid>
			<description><![CDATA[Having just quoted the Scrolls idea, I went and reread it. This time, the author added a link to a FAQ and other pages about the idea, one of which had an idea I think is worthwhile to add to my design: non-parallelizable HashCash. The HashCash design is such that it is trivially parallelizable; this makes it vulnerable to an attacker farming out the computation to a GPU or a botnet. If it is not parallelizable, though, their max speed is the same as any other user with same-speed single-threaded hardware.]]></description>
			<content:encoded><![CDATA[Having just quoted the Scrolls idea, I went and reread it. This time, the author added a link to a FAQ and other pages about the idea, one of which had an idea I think is worthwhile to add to my design: non-parallelizable HashCash. The HashCash design is such that it is trivially parallelizable; this makes it vulnerable to an attacker farming out the computation to a GPU or a botnet. If it is not parallelizable, though, their max speed is the same as any other user with same-speed single-threaded hardware.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-401.html#pid401</link>
			<pubDate>Sun, 20 Mar 2011 14:04:56 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-401.html#pid401</guid>
			<description><![CDATA[<blockquote><cite><span> (03-20-2011 04:31 AM)</span>overload Wrote: <a href="http://forums.gctip.org/post-400.html#pid400" class="quick_jump">&nbsp;</a></cite>I want to make sure that this design can make idons resistant to the strongest pressures from the strongest of opponents, so pardon me here if it looks I'm being picky. I just want to make sure that all attacks I can think of are being taken into account.</blockquote>
No problem, your feedback is definitely helpful.<br />
<br />
<blockquote><cite><span> (03-20-2011 04:31 AM)</span>overload Wrote: <a href="http://forums.gctip.org/post-400.html#pid400" class="quick_jump">&nbsp;</a></cite>(snip rather convincing example)<br />
<br />
Not sure how to implement preferred servers in dht; it looks like dht is designed against this feature. The best I can come up is for freedomleaks to generate many node ids that are similar to the freedomleaks symbol ids and use them across the globe, but then anyone using idons could do the same thing and the next sybil attacks in dht kick in.</blockquote>
It's true that DHTs are designed against choosing who hosts things. However, perhaps we could use something that I mentioned in another thread: delegation. You would 'trust' a delegate, who would do lookups on your behalf. They would be free to serve specific records from themselves rather than (or in addition to) the ones from the DHT. This could be problematic in terms of security, as you are basically trusting them absolutely as far as name resolution is concerned, but that can be alleviated by *also* doing lookups yourself and using the union of the results. However, any 'preferred servers' scheme has a drawback: You must have a stable way to refer to the preferred server. You can't use a name in this case because when you need it, you can't look up names yet. Therefore, you'll need raw IP addresses and port numbers, which are often unstable and rarely easy to remember.<br />
<br />
<blockquote><cite><span> (03-20-2011 04:31 AM)</span>overload Wrote: <a href="http://forums.gctip.org/post-400.html#pid400" class="quick_jump">&nbsp;</a></cite>I think I see a big problem when using cryptopuzzles to protect against sybil attacks. Cryptopuzzles can be effective by requiring a single server to spend hours or days or months of computation before being able to produce a valid node id. However, attackers can use zombie networks that would be able to pump thousands/millions of node ids to the cryptopuzzle-protected dht by using thousands and millions of zombie computers acting on their behalf. Once created the rogue nodeids can be used to completely disrupt the whole of the dht and so idons permanently. <br />
<br />
Since the remaining suggested protection agains sybil attacks rely on a single certificate authority, and therefore is out of consideration, I don't see how dht and therefore idons would be able to resist a reasonably orchestrated sybil attack by a zombie network that would cost probably a few hundred dollars.</blockquote>
It's true that a Sybil attack would probably be the most effective one against this design; however I have yet to see a distributed name service that has a stronger defense against Sybil attacks than using cryptopuzzles. 'Scrolls' ( <a href="http://www.aaronsw.com/weblog/squarezooko" target="_blank">http://www.aaronsw.com/weblog/squarezooko</a> ), for instance, use the entirety of the name history for the entire network as the cryptopuzzle an attacker must solve - but the thing that makes this harder over time could be simulated (to a degree) by gradually increasing N.]]></description>
			<content:encoded><![CDATA[<blockquote><cite><span> (03-20-2011 04:31 AM)</span>overload Wrote: <a href="http://forums.gctip.org/post-400.html#pid400" class="quick_jump">&nbsp;</a></cite>I want to make sure that this design can make idons resistant to the strongest pressures from the strongest of opponents, so pardon me here if it looks I'm being picky. I just want to make sure that all attacks I can think of are being taken into account.</blockquote>
No problem, your feedback is definitely helpful.<br />
<br />
<blockquote><cite><span> (03-20-2011 04:31 AM)</span>overload Wrote: <a href="http://forums.gctip.org/post-400.html#pid400" class="quick_jump">&nbsp;</a></cite>(snip rather convincing example)<br />
<br />
Not sure how to implement preferred servers in dht; it looks like dht is designed against this feature. The best I can come up is for freedomleaks to generate many node ids that are similar to the freedomleaks symbol ids and use them across the globe, but then anyone using idons could do the same thing and the next sybil attacks in dht kick in.</blockquote>
It's true that DHTs are designed against choosing who hosts things. However, perhaps we could use something that I mentioned in another thread: delegation. You would 'trust' a delegate, who would do lookups on your behalf. They would be free to serve specific records from themselves rather than (or in addition to) the ones from the DHT. This could be problematic in terms of security, as you are basically trusting them absolutely as far as name resolution is concerned, but that can be alleviated by *also* doing lookups yourself and using the union of the results. However, any 'preferred servers' scheme has a drawback: You must have a stable way to refer to the preferred server. You can't use a name in this case because when you need it, you can't look up names yet. Therefore, you'll need raw IP addresses and port numbers, which are often unstable and rarely easy to remember.<br />
<br />
<blockquote><cite><span> (03-20-2011 04:31 AM)</span>overload Wrote: <a href="http://forums.gctip.org/post-400.html#pid400" class="quick_jump">&nbsp;</a></cite>I think I see a big problem when using cryptopuzzles to protect against sybil attacks. Cryptopuzzles can be effective by requiring a single server to spend hours or days or months of computation before being able to produce a valid node id. However, attackers can use zombie networks that would be able to pump thousands/millions of node ids to the cryptopuzzle-protected dht by using thousands and millions of zombie computers acting on their behalf. Once created the rogue nodeids can be used to completely disrupt the whole of the dht and so idons permanently. <br />
<br />
Since the remaining suggested protection agains sybil attacks rely on a single certificate authority, and therefore is out of consideration, I don't see how dht and therefore idons would be able to resist a reasonably orchestrated sybil attack by a zombie network that would cost probably a few hundred dollars.</blockquote>
It's true that a Sybil attack would probably be the most effective one against this design; however I have yet to see a distributed name service that has a stronger defense against Sybil attacks than using cryptopuzzles. 'Scrolls' ( <a href="http://www.aaronsw.com/weblog/squarezooko" target="_blank">http://www.aaronsw.com/weblog/squarezooko</a> ), for instance, use the entirety of the name history for the entire network as the cryptopuzzle an attacker must solve - but the thing that makes this harder over time could be simulated (to a degree) by gradually increasing N.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-400.html#pid400</link>
			<pubDate>Sun, 20 Mar 2011 05:31:07 -0700</pubDate>
			<dc:creator>overload</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-400.html#pid400</guid>
			<description><![CDATA[I want to make sure that this design can make idons resistant to the strongest pressures from the strongest of opponents, so pardon me here if it looks I'm being picky. I just want to make sure that all attacks I can think of are being taken into account.<br />
<br />
<blockquote><cite><span> (03-19-2011 08:31 PM)</span>eternaleye Wrote: <a href="http://forums.gctip.org/post-398.html#pid398" class="quick_jump">&nbsp;</a></cite><blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>This makes it difficult for me to provide my authoritative source(s) of 'kennings' db (which I know is up-to-date etc),</blockquote>
Part of the point of using a DHT is that there is no *single* authoritative source, because any single source can be coerced.</blockquote>
By "authoritative source", what I mean is the owner of the data, not something like the dns registrar. I agree that a single source can be coerced: my single dns registrar can be coerced to change my data it is supposed to publish, and I could be coerced to change my data. But while it's possible to detect the former using eg. signatures, there's no way to design against the latter, because there's no way to detect if I'm being coerced or not when I change my data using my private key. <br />
<br />
I'll use preferred instead of authoritative to avoid confusion, and I'll illustrate with an example why I think that being able to provide preferred sources of kennings is importat. Imagine a site called "freedomleaks" which publishes internal corruption of governments to the world. It will certainly attract lots of governments wanting to shut it down. Using this dht design, they could threat the (thousand of?) random nodes hosting the symbol ids for "freedomleaks", demanding these random nodes to remove the "freedomleaks" symbol entries or else their families and business will be affected. The random nodes will most likely give in. Since freedomleaks is already putting up a fight, it would not remove any symbols from any freedomleaks' servers in case these servers existed at all. But in the current design, it is not very useful for freedomleaks to have their own idons servers, because they will most likely not have a node id suitable for hosting freedomleaks symbol ids. If freedomleaks could point their own servers as preferred nodes when resolving freedomleaks, then governments would need to go after the freedomleaks servers, which could be cunningly spread all over the world, antarctic, moon, wherever, before being able to shut down freedomleaks. Of course, the random nodes are still useful as a fallback in case the freedomleaks servers are overwhelmed with too many requests or any other reason, but freedomleaks would rather trust their own servers to hold to their <br />
symbols than random nodes.<br />
<br />
Not sure how to implement preferred servers in dht; it looks like dht is designed against this feature. The best I can come up is for freedomleaks to generate many node ids that are similar to the freedomleaks symbol ids and use them across the globe, but then anyone using idons could do the same thing and the next sybil attacks in dht kick in.<br />
<br />
<blockquote><cite><span> (03-19-2011 08:31 PM)</span>eternaleye Wrote: <a href="http://forums.gctip.org/post-398.html#pid398" class="quick_jump">&nbsp;</a></cite><blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>1b) It seems like it might be possible for anyone to join the dht with thousands of malicious node ids ... effectively creating black holes in the dht ...</blockquote>
This is a well-researched concern. I recommend reading the paper "S/Kademlia: A Practicable Approach Towards Secure Key-Based Routing," especially the section on "Sybil attacks."</blockquote>
<br />
I had a look at this paper, and in page 3 it says:<br />
<br />
"Sybil attack: In completely decentralized systems there<br />
is no instance that controls the quantity of nodeIds an at-<br />
tacker can obtain. Thus an attacker can join the network<br />
with lots of nodeIds until he controls a fraction m of all<br />
nodes in the network. <span style="font-weight: bold;">Douceur [8&#93; proved that this attack<br />
can not be prevented but only impeded.</span> "<br />
<br />
and in page 4 it says:<br />
"We now need to impede the<br />
Sybil and Eclipse attack. This is done by either using a<br />
crypto puzzle or a signature from a central certificate au-<br />
thority...:<br />
• Supervised signature: If a signature’s public key addi-<br />
tionally is signed by a trustworthy <span style="font-weight: bold;">certificate authority</span> <br />
<span style="font-weight: bold;">[so, no supervision should be used, since idons shouldn't depend on any single authority anywhere&#93;</span>,<br />
this signature is called supervised signature.<br />
• Crypto puzzle signature: In the absence of a trustwor-<br />
thy authority we need to impede the Eclipse and Sybil<br />
attack with a crypto puzzle. <span style="font-weight: bold;">In [3&#93; the use of crypto<br />
puzzles for nodeId generation is rejected because they<br />
cannot be used to entirely prevent an attack.</span> But in<br />
our opinion they are the most effective approach for<br />
distributed nodeId generation...<br />
"<br />
<br />
I think I see a big problem when using cryptopuzzles to protect against sybil attacks. Cryptopuzzles can be effective by requiring a single server to spend hours or days or months of computation before being able to produce a valid node id. However, attackers can use zombie networks that would be able to pump thousands/millions of node ids to the cryptopuzzle-protected dht by using thousands and millions of zombie computers acting on their behalf. Once created the rogue nodeids can be used to completely disrupt the whole of the dht and so idons permanently. <br />
<br />
Since the remaining suggested protection agains sybil attacks rely on a single certificate authority, and therefore is out of consideration, I don't see how dht and therefore idons would be able to resist a reasonably orquestrated sybil attack by a zombie network that would cost probably a few hundred dollars.<br />
<br />
<blockquote><cite><span> (03-19-2011 08:31 PM)</span>eternaleye Wrote: <a href="http://forums.gctip.org/post-398.html#pid398" class="quick_jump">&nbsp;</a></cite><blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>2) abuse of storage: it seems like I could start pumping an unlimited number of kennings into this dht,</blockquote>
... Names may be usable for this, by choosing a randomized Name and pointing it at a pre-existing Identity. ... this can be trivially made moot by ... and b.) including some sort of challenge into posting a Name, such as a trailing 64-bit integer that is random, and adding the constraint that the value (ie, { timestamp, Name, identity, signature( { timestamp, Name, identity } ), random64bit } must have a hash that has N leading zeroes. This constraint, shamelessly stolen from HashCash, nips this attack in the bud.<br />
<br />
The same challenge system would also make Records infeasible to use for such an attack.</blockquote>
I believe that, in the case of impeding creation of too many symbol ids, cryptopuzzles are an improvement because then a zombie network would only inject symbol ids for individual users of the dht network at a time, instead of affecting the whole dht network as with node ids. Therefore, paying a zombie network doesn't seem economically viable for a single user: it is much cheaper for the user to just buy a hard disk than to pay a zombie network to store his backup as dht kennings.]]></description>
			<content:encoded><![CDATA[I want to make sure that this design can make idons resistant to the strongest pressures from the strongest of opponents, so pardon me here if it looks I'm being picky. I just want to make sure that all attacks I can think of are being taken into account.<br />
<br />
<blockquote><cite><span> (03-19-2011 08:31 PM)</span>eternaleye Wrote: <a href="http://forums.gctip.org/post-398.html#pid398" class="quick_jump">&nbsp;</a></cite><blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>This makes it difficult for me to provide my authoritative source(s) of 'kennings' db (which I know is up-to-date etc),</blockquote>
Part of the point of using a DHT is that there is no *single* authoritative source, because any single source can be coerced.</blockquote>
By "authoritative source", what I mean is the owner of the data, not something like the dns registrar. I agree that a single source can be coerced: my single dns registrar can be coerced to change my data it is supposed to publish, and I could be coerced to change my data. But while it's possible to detect the former using eg. signatures, there's no way to design against the latter, because there's no way to detect if I'm being coerced or not when I change my data using my private key. <br />
<br />
I'll use preferred instead of authoritative to avoid confusion, and I'll illustrate with an example why I think that being able to provide preferred sources of kennings is importat. Imagine a site called "freedomleaks" which publishes internal corruption of governments to the world. It will certainly attract lots of governments wanting to shut it down. Using this dht design, they could threat the (thousand of?) random nodes hosting the symbol ids for "freedomleaks", demanding these random nodes to remove the "freedomleaks" symbol entries or else their families and business will be affected. The random nodes will most likely give in. Since freedomleaks is already putting up a fight, it would not remove any symbols from any freedomleaks' servers in case these servers existed at all. But in the current design, it is not very useful for freedomleaks to have their own idons servers, because they will most likely not have a node id suitable for hosting freedomleaks symbol ids. If freedomleaks could point their own servers as preferred nodes when resolving freedomleaks, then governments would need to go after the freedomleaks servers, which could be cunningly spread all over the world, antarctic, moon, wherever, before being able to shut down freedomleaks. Of course, the random nodes are still useful as a fallback in case the freedomleaks servers are overwhelmed with too many requests or any other reason, but freedomleaks would rather trust their own servers to hold to their <br />
symbols than random nodes.<br />
<br />
Not sure how to implement preferred servers in dht; it looks like dht is designed against this feature. The best I can come up is for freedomleaks to generate many node ids that are similar to the freedomleaks symbol ids and use them across the globe, but then anyone using idons could do the same thing and the next sybil attacks in dht kick in.<br />
<br />
<blockquote><cite><span> (03-19-2011 08:31 PM)</span>eternaleye Wrote: <a href="http://forums.gctip.org/post-398.html#pid398" class="quick_jump">&nbsp;</a></cite><blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>1b) It seems like it might be possible for anyone to join the dht with thousands of malicious node ids ... effectively creating black holes in the dht ...</blockquote>
This is a well-researched concern. I recommend reading the paper "S/Kademlia: A Practicable Approach Towards Secure Key-Based Routing," especially the section on "Sybil attacks."</blockquote>
<br />
I had a look at this paper, and in page 3 it says:<br />
<br />
"Sybil attack: In completely decentralized systems there<br />
is no instance that controls the quantity of nodeIds an at-<br />
tacker can obtain. Thus an attacker can join the network<br />
with lots of nodeIds until he controls a fraction m of all<br />
nodes in the network. <span style="font-weight: bold;">Douceur [8] proved that this attack<br />
can not be prevented but only impeded.</span> "<br />
<br />
and in page 4 it says:<br />
"We now need to impede the<br />
Sybil and Eclipse attack. This is done by either using a<br />
crypto puzzle or a signature from a central certificate au-<br />
thority...:<br />
• Supervised signature: If a signature’s public key addi-<br />
tionally is signed by a trustworthy <span style="font-weight: bold;">certificate authority</span> <br />
<span style="font-weight: bold;">[so, no supervision should be used, since idons shouldn't depend on any single authority anywhere]</span>,<br />
this signature is called supervised signature.<br />
• Crypto puzzle signature: In the absence of a trustwor-<br />
thy authority we need to impede the Eclipse and Sybil<br />
attack with a crypto puzzle. <span style="font-weight: bold;">In [3] the use of crypto<br />
puzzles for nodeId generation is rejected because they<br />
cannot be used to entirely prevent an attack.</span> But in<br />
our opinion they are the most effective approach for<br />
distributed nodeId generation...<br />
"<br />
<br />
I think I see a big problem when using cryptopuzzles to protect against sybil attacks. Cryptopuzzles can be effective by requiring a single server to spend hours or days or months of computation before being able to produce a valid node id. However, attackers can use zombie networks that would be able to pump thousands/millions of node ids to the cryptopuzzle-protected dht by using thousands and millions of zombie computers acting on their behalf. Once created the rogue nodeids can be used to completely disrupt the whole of the dht and so idons permanently. <br />
<br />
Since the remaining suggested protection agains sybil attacks rely on a single certificate authority, and therefore is out of consideration, I don't see how dht and therefore idons would be able to resist a reasonably orquestrated sybil attack by a zombie network that would cost probably a few hundred dollars.<br />
<br />
<blockquote><cite><span> (03-19-2011 08:31 PM)</span>eternaleye Wrote: <a href="http://forums.gctip.org/post-398.html#pid398" class="quick_jump">&nbsp;</a></cite><blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>2) abuse of storage: it seems like I could start pumping an unlimited number of kennings into this dht,</blockquote>
... Names may be usable for this, by choosing a randomized Name and pointing it at a pre-existing Identity. ... this can be trivially made moot by ... and b.) including some sort of challenge into posting a Name, such as a trailing 64-bit integer that is random, and adding the constraint that the value (ie, { timestamp, Name, identity, signature( { timestamp, Name, identity } ), random64bit } must have a hash that has N leading zeroes. This constraint, shamelessly stolen from HashCash, nips this attack in the bud.<br />
<br />
The same challenge system would also make Records infeasible to use for such an attack.</blockquote>
I believe that, in the case of impeding creation of too many symbol ids, cryptopuzzles are an improvement because then a zombie network would only inject symbol ids for individual users of the dht network at a time, instead of affecting the whole dht network as with node ids. Therefore, paying a zombie network doesn't seem economically viable for a single user: it is much cheaper for the user to just buy a hard disk than to pay a zombie network to store his backup as dht kennings.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-399.html#pid399</link>
			<pubDate>Sat, 19 Mar 2011 22:13:16 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-399.html#pid399</guid>
			<description><![CDATA[Okay, so here's the design updated for the changes I made due to feedback (I also fixed it stripping out the indentation):<br />
<br />
<br />
256-bit S/Kademlia<br />
Basic building block: Kennings<br />
Hash: SHA-256 (Plan to transition to SHA3-256 when it is released)<br />
On changing the hash function, alter the first-byte values for all Kenning types to the next unused values (see symbol definitions per type)<br />
<br />
Note on S/Kademlia:<br />
See paper "S/Kademlia: A Practicable Approach Towards Secure Key-Based Routing"<br />
Available at <a href="http://www.spovnet.de/files/publications/SKademlia2007.pdf" target="_blank">http://www.spovnet.de/files/publications...ia2007.pdf</a><br />
<br />
Kennings are composed of a 'symbol' and any number of 'values'<br />
Kennings 'decay' - they disappear after 30 days if the counter is not reset (see 'Add' message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;The counter starts from the timestamp in the value<br />
&nbsp;&nbsp;&nbsp;&nbsp;Values with timestamps more than 1 day in the future *MUST* not be accepted by conforming nodes<br />
3 types of Kennings: Identifiers, Names, and Records<br />
<br />
Identifiers:<br />
&nbsp;&nbsp;&nbsp;&nbsp;An identifier's symbol is a 256-bit ( hash of a PGP public key's fingerprint ) with the first byte set to '0'<br />
&nbsp;&nbsp;&nbsp;&nbsp;Each value *MUST* be a PGP key signed with the key whose fingerprint the symbol represents<br />
&nbsp;&nbsp;&nbsp;&nbsp;The format must be:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTC timestamp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PGP public key<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signature of the tuple ( timestamp, publickey ) using the key whose fingerprint the symbol is derived from<br />
&nbsp;&nbsp;&nbsp;&nbsp;NOTE: This does not necessarily mean self-signed - one can have a new key, signed by the old key.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This allows expiration of keys and migration to new ones.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This also allows many identifiers to show a common owner - have all of them reference and be referenced by the same PGP key in addition to their own key.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This *ALSO* allows an implementation of communities, in a sense - any site belonging to a community would reference and be referenced by a 'community key'. Anyone who wants to 'join' can 'accept' the community key, transitively accepting all members of the community.<br />
<br />
Names:<br />
&nbsp;&nbsp;&nbsp;&nbsp;A name's symbol is a 256-bit ( hash of a human-readable string ) with the first byte set to '1'<br />
&nbsp;&nbsp;&nbsp;&nbsp;Each value *MUST* be a of the sollowing form:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A timestamp in UTC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Name as a utf-8 string<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A reference to an Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A signature of the tuple ( timestamp, Name, Identifier ) using the public key of the identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A random 64-bit value<br />
&nbsp;&nbsp;&nbsp;&nbsp;And must meet the constraint that the hash (same hash as for Kenning symbols) of the value must have N leading zero bits. (N to be defined)<br />
<br />
Records:<br />
&nbsp;&nbsp;&nbsp;&nbsp;All records 'belong' to an Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;A record's symbol is a 256-bit ( hash of the concatenation of the symbol of the Identifier it belongs to and the record type ), with the first byte set to '2'<br />
&nbsp;&nbsp;&nbsp;&nbsp;The format of each value depends on the type of record, with A, AAAA, MX, etc. records acting much as in DNS. However, all these values have these common invariants:<br />
&nbsp;&nbsp;&nbsp;&nbsp;Each value *MUST* contain a 'backreference' to the owning Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;Each value *MUST* be signed with the PGP key for the owning Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;Specifically, values must be of the form:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTC timestamp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type-dependent data<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signature of the tuple ( timestamp, Identifier, data ) with the public key of the Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random 64-bit value<br />
&nbsp;&nbsp;&nbsp;&nbsp;And must meet the constraint that the hash (same hash as for Kenning symbols) of the value must have N leading zero bits. (N to be defined)<br />
<br />
Messages:<br />
&nbsp;&nbsp;&nbsp;&nbsp;As this is based on a DHT, we need to define what operations on symbols are valid.<br />
&nbsp;&nbsp;&nbsp;&nbsp;Lookup:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Given a symbol, retrieve all of that symbol's values<br />
&nbsp;&nbsp;&nbsp;&nbsp;Add:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Given a symbol and a complete value, add the value to the list for that symbol<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The node acting on this message *MUST* validate the relevant signatures<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If an 'Add' message is received for a value that already exists, set the delay counter's start point to the new timestamp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;To be clear, 'already exists' means that all information aside from:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The timestamp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The signature<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The random 64-bit value (if it is present)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*MUST* be the same.<br />
&nbsp;&nbsp;&nbsp;&nbsp;Delete:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Given a symbol and a complete value that has been signed *AGAIN* by the same PGP key, delete the value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Again, the node acting on this *MUST* validate signatures<br />
<br />
<br />
As far as who the peers in the DHT are, I have a pretty elegant idea: Have them be the servers the Identifiers reference!<br />
The Kennings need to be republished periodically anyway, and who better to do it than the very servers they point to?<br />
This also greatly reduces the amount of churn in the network, since servers go down very rarely.<br />
<br />
Here's an imagined workflow:<br />
<br />
Person A wishes to publish a website and mailserver, accessible via IPv4 and IPv6.<br />
He generates his personal key, let's call it 0x1234.<br />
He then generates a key for his webserver (0xF00D) and his mailserver (0xBEEF)<br />
<br />
He sends the Add message a few times, creating the Identifiers for each of the 3 keys.<br />
He then signs 0x1234 with 0xF00D, and Add's it to the 0xF00D identifier as well<br />
He also signs it with 0xBEEF and Add's it to 0xBEEF's Identifier<br />
<br />
He then adds an A and AAAA record belonging to each of 0xF00D and 0xBEEF's Identifiers, with the relevant IP addresses<br />
Next, he sends an Add message creating a Name, say 'goodfoodsite' referencing 0xF00D<br />
And another creating 'goodfoodmail' referencing 0xBEEF<br />
Finally, he adds an MX record on 0xF00D referencing 'goodfoodmail'<br />
<br />
Another:<br />
<br />
Person B wants to visit 'goodfoodsite'<br />
<br />
He opens his browser and goes there<br />
His browser looks up the Name 'goodfoodsite', and finds two values - 0xF00D and 0xDEAD<br />
Neither is known to the browser. 0xDEAD has no values other than a self signed key, but 0xF00D references 0x1234<br />
Since Person B knows Person A personally (heh), he's already accepted his public key 0x1234<br />
The browser has an accepted selection, so it looks up 0xF00D's AAAA record<br />
It then contacts that IP address, and loads the webpage.]]></description>
			<content:encoded><![CDATA[Okay, so here's the design updated for the changes I made due to feedback (I also fixed it stripping out the indentation):<br />
<br />
<br />
256-bit S/Kademlia<br />
Basic building block: Kennings<br />
Hash: SHA-256 (Plan to transition to SHA3-256 when it is released)<br />
On changing the hash function, alter the first-byte values for all Kenning types to the next unused values (see symbol definitions per type)<br />
<br />
Note on S/Kademlia:<br />
See paper "S/Kademlia: A Practicable Approach Towards Secure Key-Based Routing"<br />
Available at <a href="http://www.spovnet.de/files/publications/SKademlia2007.pdf" target="_blank">http://www.spovnet.de/files/publications...ia2007.pdf</a><br />
<br />
Kennings are composed of a 'symbol' and any number of 'values'<br />
Kennings 'decay' - they disappear after 30 days if the counter is not reset (see 'Add' message)<br />
&nbsp;&nbsp;&nbsp;&nbsp;The counter starts from the timestamp in the value<br />
&nbsp;&nbsp;&nbsp;&nbsp;Values with timestamps more than 1 day in the future *MUST* not be accepted by conforming nodes<br />
3 types of Kennings: Identifiers, Names, and Records<br />
<br />
Identifiers:<br />
&nbsp;&nbsp;&nbsp;&nbsp;An identifier's symbol is a 256-bit ( hash of a PGP public key's fingerprint ) with the first byte set to '0'<br />
&nbsp;&nbsp;&nbsp;&nbsp;Each value *MUST* be a PGP key signed with the key whose fingerprint the symbol represents<br />
&nbsp;&nbsp;&nbsp;&nbsp;The format must be:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTC timestamp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PGP public key<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signature of the tuple ( timestamp, publickey ) using the key whose fingerprint the symbol is derived from<br />
&nbsp;&nbsp;&nbsp;&nbsp;NOTE: This does not necessarily mean self-signed - one can have a new key, signed by the old key.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This allows expiration of keys and migration to new ones.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This also allows many identifiers to show a common owner - have all of them reference and be referenced by the same PGP key in addition to their own key.<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This *ALSO* allows an implementation of communities, in a sense - any site belonging to a community would reference and be referenced by a 'community key'. Anyone who wants to 'join' can 'accept' the community key, transitively accepting all members of the community.<br />
<br />
Names:<br />
&nbsp;&nbsp;&nbsp;&nbsp;A name's symbol is a 256-bit ( hash of a human-readable string ) with the first byte set to '1'<br />
&nbsp;&nbsp;&nbsp;&nbsp;Each value *MUST* be a of the sollowing form:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A timestamp in UTC<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Name as a utf-8 string<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A reference to an Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A signature of the tuple ( timestamp, Name, Identifier ) using the public key of the identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A random 64-bit value<br />
&nbsp;&nbsp;&nbsp;&nbsp;And must meet the constraint that the hash (same hash as for Kenning symbols) of the value must have N leading zero bits. (N to be defined)<br />
<br />
Records:<br />
&nbsp;&nbsp;&nbsp;&nbsp;All records 'belong' to an Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;A record's symbol is a 256-bit ( hash of the concatenation of the symbol of the Identifier it belongs to and the record type ), with the first byte set to '2'<br />
&nbsp;&nbsp;&nbsp;&nbsp;The format of each value depends on the type of record, with A, AAAA, MX, etc. records acting much as in DNS. However, all these values have these common invariants:<br />
&nbsp;&nbsp;&nbsp;&nbsp;Each value *MUST* contain a 'backreference' to the owning Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;Each value *MUST* be signed with the PGP key for the owning Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;Specifically, values must be of the form:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;UTC timestamp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type-dependent data<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signature of the tuple ( timestamp, Identifier, data ) with the public key of the Identifier<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Random 64-bit value<br />
&nbsp;&nbsp;&nbsp;&nbsp;And must meet the constraint that the hash (same hash as for Kenning symbols) of the value must have N leading zero bits. (N to be defined)<br />
<br />
Messages:<br />
&nbsp;&nbsp;&nbsp;&nbsp;As this is based on a DHT, we need to define what operations on symbols are valid.<br />
&nbsp;&nbsp;&nbsp;&nbsp;Lookup:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Given a symbol, retrieve all of that symbol's values<br />
&nbsp;&nbsp;&nbsp;&nbsp;Add:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Given a symbol and a complete value, add the value to the list for that symbol<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The node acting on this message *MUST* validate the relevant signatures<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If an 'Add' message is received for a value that already exists, set the delay counter's start point to the new timestamp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;To be clear, 'already exists' means that all information aside from:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The timestamp<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The signature<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The random 64-bit value (if it is present)<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;*MUST* be the same.<br />
&nbsp;&nbsp;&nbsp;&nbsp;Delete:<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Given a symbol and a complete value that has been signed *AGAIN* by the same PGP key, delete the value<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Again, the node acting on this *MUST* validate signatures<br />
<br />
<br />
As far as who the peers in the DHT are, I have a pretty elegant idea: Have them be the servers the Identifiers reference!<br />
The Kennings need to be republished periodically anyway, and who better to do it than the very servers they point to?<br />
This also greatly reduces the amount of churn in the network, since servers go down very rarely.<br />
<br />
Here's an imagined workflow:<br />
<br />
Person A wishes to publish a website and mailserver, accessible via IPv4 and IPv6.<br />
He generates his personal key, let's call it 0x1234.<br />
He then generates a key for his webserver (0xF00D) and his mailserver (0xBEEF)<br />
<br />
He sends the Add message a few times, creating the Identifiers for each of the 3 keys.<br />
He then signs 0x1234 with 0xF00D, and Add's it to the 0xF00D identifier as well<br />
He also signs it with 0xBEEF and Add's it to 0xBEEF's Identifier<br />
<br />
He then adds an A and AAAA record belonging to each of 0xF00D and 0xBEEF's Identifiers, with the relevant IP addresses<br />
Next, he sends an Add message creating a Name, say 'goodfoodsite' referencing 0xF00D<br />
And another creating 'goodfoodmail' referencing 0xBEEF<br />
Finally, he adds an MX record on 0xF00D referencing 'goodfoodmail'<br />
<br />
Another:<br />
<br />
Person B wants to visit 'goodfoodsite'<br />
<br />
He opens his browser and goes there<br />
His browser looks up the Name 'goodfoodsite', and finds two values - 0xF00D and 0xDEAD<br />
Neither is known to the browser. 0xDEAD has no values other than a self signed key, but 0xF00D references 0x1234<br />
Since Person B knows Person A personally (heh), he's already accepted his public key 0x1234<br />
The browser has an accepted selection, so it looks up 0xF00D's AAAA record<br />
It then contacts that IP address, and loads the webpage.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-398.html#pid398</link>
			<pubDate>Sat, 19 Mar 2011 21:31:10 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-398.html#pid398</guid>
			<description><![CDATA[<blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>1) node ids: the description above explains how to generate key ids, but it is not clear to me how to generate and manage the node ids that will contain these key ids.</blockquote>
Yes, there will need to be a spec on how to generate node IDs. Moreover, it needs to be verifiable - that way attackers trying to purposefully choose a specific node ID can be identified and ignored.<br />
<br />
<blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>1a) in kademlia dht, it is usually expected that new nodes will have one random node id, and that symbols with similar enough ids will be stored in those nodes. However, since the symbol ids are hashes, they will be effectively random as well, meaning that they will be spread around random nodes, and I cannot specify my preferred nodes. This makes it difficult for me to provide my authoritative source(s) of 'kennings' db (which I know is up-to-date etc), or to do geographical redundancy of the db, since the k nodes randomly chosen to store my kennings could by chance be all in Egypt and go down at once. A solution might be allowing a server to have many node ids, which I could made similar enough to all my symbol ids so as to store all of them in the same server.</blockquote>
Part of the point of using a DHT is that there is no *single* authoritative source, because any single source can be coerced. The randomness is necessary to prevent a malicious entity from intentionally gaining control over the entirety of the duplicates for a given Kenning, and misusing that control. Basically, we're sacrificing control for security. The chances of all K duplicates being in a single area decreases much faster than linearly as K increases - a reasonable value will make it close enough to zero as not to matter. This is statistical geographic redundancy, rather than deterministic geographical redundancy (which is weak against several classes of attacks). Also, regarding the concern of the DB being up to date, this is an invalid concern - Unlike DNS, where most users configure a caching DNS server as their primary and only use the authoritative one when the cache lookup fails (google DNS, opendns, etc), and the cache can become stale, this design has all users using the authoritative source in all cases. Thus, the results *cannot* be out of date. If you want to increase the type of reliability you seem to be valuing, you could create a caching proxy for this system that stores records when you look them up and is under your control, so that if the authoritative sources all go down you couls still retrieve the data. However, this would actually make one of your concerns (freshness) *worse* due to reintroducing the problems with caching DNS resolvers.<br />
<br />
<blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>1b) It seems like it might be possible for anyone to join the dht with thousands of malicious node ids (or a suitable % of number of the dht nodes, whatever is larger) that will send any kennings they receive to /dev/null, effectively creating black holes in the dht, since nodes in kademlia are supposed to keep only up to k node id refs, where k is a small number ~20, and all k refs could be pointing to black hole nodes.</blockquote>
This is a well-researched concern. I recommend reading the paper "S/Kademlia: A Practicable Approach Towards Secure Key-Based Routing," especially the section on "Sybil attacks."<br />
<br />
<blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>2) abuse of storage: it seems like I could start pumping an unlimited number of kennings into this dht, containing sectors of my file system, and start abusing the storage of others to store my personal data. There's this 30-day limit for the kennings, which alleviate this problem somehow, but apart from small technical details of detecting if the timestamp in the add message is 100 years in the future etc (so that it won't be deleted for 100 years), 30 days is enough time to allow refreshing a reasonable amount of data in the current scheme, probably a few TBs or more depending on the bandwidth available to whoever is pumping the data. If everybody starts pumping that much data, there won't be enough space in all the dht nodes. This could also flush out the real data out of each dht node, which would only have a limited storage space and would only be able to keep the last TB or so of (garbage?) data.</blockquote>
This is not as easy as you seem to be thinking it is. For one, they only have 3 types of Kenning they could spam: Identities, Names, and Records.<br />
<br />
Identities cannot be used in this manner: they would have to generate a fresh public key for every one, which is time-consuming.<br />
<br />
Names may be usable for this, by choosing a randomized Name and pointing it at a pre-existing Identity. However, the amount of space they take up would be negligible, they would expire after 30 days, and this can be trivially made moot by a.) including the Name itself in the signed data of the value, and b.) including some sort of challenge into posting a Name, such as a trailing 64-bit integer that is random, and adding the constraint that the value (ie, { timestamp, Name, identity, signature( { timestamp, Name, identity } ), random64bit } must have a hash that has N leading zeroes. This constraint, shamelessly stolen from HashCash, nips this attack in the bud.<br />
<br />
The same challenge system would also make Records infeasible to use for such an attack.<br />
<br />
Also, the 'never expires' trick could be nullified by saying "Kennings with timestamps more than 1 day in the future are invalid and must not be accepted."]]></description>
			<content:encoded><![CDATA[<blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>1) node ids: the description above explains how to generate key ids, but it is not clear to me how to generate and manage the node ids that will contain these key ids.</blockquote>
Yes, there will need to be a spec on how to generate node IDs. Moreover, it needs to be verifiable - that way attackers trying to purposefully choose a specific node ID can be identified and ignored.<br />
<br />
<blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>1a) in kademlia dht, it is usually expected that new nodes will have one random node id, and that symbols with similar enough ids will be stored in those nodes. However, since the symbol ids are hashes, they will be effectively random as well, meaning that they will be spread around random nodes, and I cannot specify my preferred nodes. This makes it difficult for me to provide my authoritative source(s) of 'kennings' db (which I know is up-to-date etc), or to do geographical redundancy of the db, since the k nodes randomly chosen to store my kennings could by chance be all in Egypt and go down at once. A solution might be allowing a server to have many node ids, which I could made similar enough to all my symbol ids so as to store all of them in the same server.</blockquote>
Part of the point of using a DHT is that there is no *single* authoritative source, because any single source can be coerced. The randomness is necessary to prevent a malicious entity from intentionally gaining control over the entirety of the duplicates for a given Kenning, and misusing that control. Basically, we're sacrificing control for security. The chances of all K duplicates being in a single area decreases much faster than linearly as K increases - a reasonable value will make it close enough to zero as not to matter. This is statistical geographic redundancy, rather than deterministic geographical redundancy (which is weak against several classes of attacks). Also, regarding the concern of the DB being up to date, this is an invalid concern - Unlike DNS, where most users configure a caching DNS server as their primary and only use the authoritative one when the cache lookup fails (google DNS, opendns, etc), and the cache can become stale, this design has all users using the authoritative source in all cases. Thus, the results *cannot* be out of date. If you want to increase the type of reliability you seem to be valuing, you could create a caching proxy for this system that stores records when you look them up and is under your control, so that if the authoritative sources all go down you couls still retrieve the data. However, this would actually make one of your concerns (freshness) *worse* due to reintroducing the problems with caching DNS resolvers.<br />
<br />
<blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>1b) It seems like it might be possible for anyone to join the dht with thousands of malicious node ids (or a suitable % of number of the dht nodes, whatever is larger) that will send any kennings they receive to /dev/null, effectively creating black holes in the dht, since nodes in kademlia are supposed to keep only up to k node id refs, where k is a small number ~20, and all k refs could be pointing to black hole nodes.</blockquote>
This is a well-researched concern. I recommend reading the paper "S/Kademlia: A Practicable Approach Towards Secure Key-Based Routing," especially the section on "Sybil attacks."<br />
<br />
<blockquote><cite><span> (03-19-2011 07:50 PM)</span>overload Wrote: <a href="http://forums.gctip.org/post-397.html#pid397" class="quick_jump">&nbsp;</a></cite>2) abuse of storage: it seems like I could start pumping an unlimited number of kennings into this dht, containing sectors of my file system, and start abusing the storage of others to store my personal data. There's this 30-day limit for the kennings, which alleviate this problem somehow, but apart from small technical details of detecting if the timestamp in the add message is 100 years in the future etc (so that it won't be deleted for 100 years), 30 days is enough time to allow refreshing a reasonable amount of data in the current scheme, probably a few TBs or more depending on the bandwidth available to whoever is pumping the data. If everybody starts pumping that much data, there won't be enough space in all the dht nodes. This could also flush out the real data out of each dht node, which would only have a limited storage space and would only be able to keep the last TB or so of (garbage?) data.</blockquote>
This is not as easy as you seem to be thinking it is. For one, they only have 3 types of Kenning they could spam: Identities, Names, and Records.<br />
<br />
Identities cannot be used in this manner: they would have to generate a fresh public key for every one, which is time-consuming.<br />
<br />
Names may be usable for this, by choosing a randomized Name and pointing it at a pre-existing Identity. However, the amount of space they take up would be negligible, they would expire after 30 days, and this can be trivially made moot by a.) including the Name itself in the signed data of the value, and b.) including some sort of challenge into posting a Name, such as a trailing 64-bit integer that is random, and adding the constraint that the value (ie, { timestamp, Name, identity, signature( { timestamp, Name, identity } ), random64bit } must have a hash that has N leading zeroes. This constraint, shamelessly stolen from HashCash, nips this attack in the bud.<br />
<br />
The same challenge system would also make Records infeasible to use for such an attack.<br />
<br />
Also, the 'never expires' trick could be nullified by saying "Kennings with timestamps more than 1 day in the future are invalid and must not be accepted."]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-397.html#pid397</link>
			<pubDate>Sat, 19 Mar 2011 20:50:37 -0700</pubDate>
			<dc:creator>overload</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-397.html#pid397</guid>
			<description><![CDATA[I believe the following issues still need to be addressed (forgive me if they already have and I just didn't understand it):<br />
<br />
1) node ids: the description above explains how to generate key ids, but it is not clear to me how to generate and manage the node ids that will contain these key ids. Specifically:<br />
<br />
1a) in kademlia dht, it is usually expected that new nodes will have one random node id, and that symbols with similar enough ids will be stored in those nodes. However, since the symbol ids are hashes, they will be effectively random as well, meaning that they will be spread around random nodes, and I cannot specify my preferred nodes. This makes it difficult for me to provide my authoritative source(s) of 'kennings' db (which I know is up-to-date etc), or to do geographical redundancy of the db, since the k nodes randomly chosen to store my kennings could by chance be all in Egypt and go down at once. A solution might be allowing a server to have many node ids, which I could made similar enough to all my symbol ids so as to store all of them in the same server.<br />
<br />
1b) It seems like it might be possible for anyone to join the dht with thousands of malicious node ids (or a suitable % of number of the dht nodes, whatever is larger) that will send any kennings they receive to /dev/null, effectively creating black holes in the dht, since nodes in kademlia are supposed to keep only up to k node id refs, where k is a small number ~20, and all k refs could be pointing to black hole nodes.<br />
<br />
2) abuse of storage: it seems like I could start pumping an unlimited number of kennings into this dht, containing sectors of my file system, and start abusing the storage of others to store my personal data. There's this 30-day limit for the kennings, which alleviate this problem somehow, but apart from small technical details of detecting if the timestamp in the add message is 100 years in the future etc (so that it won't be deleted for 100 years), 30 days is enough time to allow refreshing a reasonable amount of data in the current scheme, probably a few TBs or more depending on the bandwidth available to whoever is pumping the data. If everybody starts pumping that much data, there won't be enough space in all the dht nodes. This could also flush out the real data out of each dht node, which would only have a limited storage space and would only be able to keep the last TB or so of (garbage?) data.]]></description>
			<content:encoded><![CDATA[I believe the following issues still need to be addressed (forgive me if they already have and I just didn't understand it):<br />
<br />
1) node ids: the description above explains how to generate key ids, but it is not clear to me how to generate and manage the node ids that will contain these key ids. Specifically:<br />
<br />
1a) in kademlia dht, it is usually expected that new nodes will have one random node id, and that symbols with similar enough ids will be stored in those nodes. However, since the symbol ids are hashes, they will be effectively random as well, meaning that they will be spread around random nodes, and I cannot specify my preferred nodes. This makes it difficult for me to provide my authoritative source(s) of 'kennings' db (which I know is up-to-date etc), or to do geographical redundancy of the db, since the k nodes randomly chosen to store my kennings could by chance be all in Egypt and go down at once. A solution might be allowing a server to have many node ids, which I could made similar enough to all my symbol ids so as to store all of them in the same server.<br />
<br />
1b) It seems like it might be possible for anyone to join the dht with thousands of malicious node ids (or a suitable % of number of the dht nodes, whatever is larger) that will send any kennings they receive to /dev/null, effectively creating black holes in the dht, since nodes in kademlia are supposed to keep only up to k node id refs, where k is a small number ~20, and all k refs could be pointing to black hole nodes.<br />
<br />
2) abuse of storage: it seems like I could start pumping an unlimited number of kennings into this dht, containing sectors of my file system, and start abusing the storage of others to store my personal data. There's this 30-day limit for the kennings, which alleviate this problem somehow, but apart from small technical details of detecting if the timestamp in the add message is 100 years in the future etc (so that it won't be deleted for 100 years), 30 days is enough time to allow refreshing a reasonable amount of data in the current scheme, probably a few TBs or more depending on the bandwidth available to whoever is pumping the data. If everybody starts pumping that much data, there won't be enough space in all the dht nodes. This could also flush out the real data out of each dht node, which would only have a limited storage space and would only be able to keep the last TB or so of (garbage?) data.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-396.html#pid396</link>
			<pubDate>Thu, 17 Mar 2011 21:32:32 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-396.html#pid396</guid>
			<description><![CDATA[Oh, I see what you mean. Total agreement here; In fact I said just about the same thing a bit back in the thread.]]></description>
			<content:encoded><![CDATA[Oh, I see what you mean. Total agreement here; In fact I said just about the same thing a bit back in the thread.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-395.html#pid395</link>
			<pubDate>Thu, 17 Mar 2011 21:21:11 -0700</pubDate>
			<dc:creator>lauren</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-395.html#pid395</guid>
			<description><![CDATA[I'm not suggesting that the existing DNS libraries be extended for anything.  I'm suggesting that during the transition phase there will need to be a library with hooks to direct IDONS addresses to the actual IDONS libraries, and legacy DNS addresses to the legacy DNS libraries.  The actual IDONS and DNS libraries stay completely separate.<br />
<br />
--Lauren--]]></description>
			<content:encoded><![CDATA[I'm not suggesting that the existing DNS libraries be extended for anything.  I'm suggesting that during the transition phase there will need to be a library with hooks to direct IDONS addresses to the actual IDONS libraries, and legacy DNS addresses to the legacy DNS libraries.  The actual IDONS and DNS libraries stay completely separate.<br />
<br />
--Lauren--]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-394.html#pid394</link>
			<pubDate>Thu, 17 Mar 2011 21:14:07 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-394.html#pid394</guid>
			<description><![CDATA[Lauren, I wholeheartedly agree that they should be as fully isolated as possible. I do, however, doubt that the existing DNS resolution libraries would be able to be extended to whatever IDONS ends up being.]]></description>
			<content:encoded><![CDATA[Lauren, I wholeheartedly agree that they should be as fully isolated as possible. I do, however, doubt that the existing DNS resolution libraries would be able to be extended to whatever IDONS ends up being.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-393.html#pid393</link>
			<pubDate>Thu, 17 Mar 2011 12:22:42 -0700</pubDate>
			<dc:creator>lauren</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-393.html#pid393</guid>
			<description><![CDATA[My strong preference is to isolate "ICANN-compatibility" (that is, the current TLD infrastructure) from the IDONS framework per se, except for minimally necessary temporary lookup hooks into the existing BIND libraries, that would be available in parallel during the transition period.  Other than that, IDONS should not (in my opinion) be operating on the legacy TLD identifiers in any way.  <br />
<br />
This "separated" approach helps to avoid a number of significant potential technical and "political" problems.<br />
<br />
--Lauren--]]></description>
			<content:encoded><![CDATA[My strong preference is to isolate "ICANN-compatibility" (that is, the current TLD infrastructure) from the IDONS framework per se, except for minimally necessary temporary lookup hooks into the existing BIND libraries, that would be available in parallel during the transition period.  Other than that, IDONS should not (in my opinion) be operating on the legacy TLD identifiers in any way.  <br />
<br />
This "separated" approach helps to avoid a number of significant potential technical and "political" problems.<br />
<br />
--Lauren--]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-392.html#pid392</link>
			<pubDate>Thu, 17 Mar 2011 11:22:35 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-392.html#pid392</guid>
			<description><![CDATA[I just realized that the Add and Delete messages in the protocol I stated have a security hole: An attacker could perpetuate a stale value of a symbol indefinitely, and even if the owner sent a Delete message, they could reinstate it. The obvious solution is for Add messages to include a UTC timestamp, and have the 30-day expiration count from that timestamp (which is inside the signed portion of the data and thus unforgeable). Also, Delete messages must be stored until the expiration date of the record they delete, to prevent a replay attack of the record it deleted.<br />
<br />
It should be noted that an Add message differing only in the timestamp (iff the timestamp is newer than the old one) [of course the signature will differ as well, since the signed data changed&#93; is counted as a refresh.]]></description>
			<content:encoded><![CDATA[I just realized that the Add and Delete messages in the protocol I stated have a security hole: An attacker could perpetuate a stale value of a symbol indefinitely, and even if the owner sent a Delete message, they could reinstate it. The obvious solution is for Add messages to include a UTC timestamp, and have the 30-day expiration count from that timestamp (which is inside the signed portion of the data and thus unforgeable). Also, Delete messages must be stored until the expiration date of the record they delete, to prevent a replay attack of the record it deleted.<br />
<br />
It should be noted that an Add message differing only in the timestamp (iff the timestamp is newer than the old one) [of course the signature will differ as well, since the signed data changed] is counted as a refresh.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-391.html#pid391</link>
			<pubDate>Tue, 15 Mar 2011 04:08:34 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-391.html#pid391</guid>
			<description><![CDATA[<blockquote><cite><span> (03-15-2011 01:08 AM)</span>bug1 Wrote: <a href="http://forums.gctip.org/post-389.html#pid389" class="quick_jump">&nbsp;</a></cite>Alternatively we could come up with a way to invalidate ICANN style domain names, which people might try working around by using different characters anyway, eg 'bankofamerica,com' 'bankofamerica com'</blockquote>
<br />
Disallowing the dot is the only really foolproof way of doing that.<br />
I do think we need a way of specifying which identifier to look up directly, rather than via a Name, but that's probably solvable just by using an underscore followed by a hex representation of the key fingerprint. (The underscore is to prevent conflict with ICANN names and alternate forms of IP addresses, since they forbid it, with the side benefit of matching nicely with the coding practice of using leading underscores to indicate internal values)<br />
<br />
(Did you know you can enter the hex or decimal representation of an IP address as a single integer in some browsers and it'll work?)]]></description>
			<content:encoded><![CDATA[<blockquote><cite><span> (03-15-2011 01:08 AM)</span>bug1 Wrote: <a href="http://forums.gctip.org/post-389.html#pid389" class="quick_jump">&nbsp;</a></cite>Alternatively we could come up with a way to invalidate ICANN style domain names, which people might try working around by using different characters anyway, eg 'bankofamerica,com' 'bankofamerica com'</blockquote>
<br />
Disallowing the dot is the only really foolproof way of doing that.<br />
I do think we need a way of specifying which identifier to look up directly, rather than via a Name, but that's probably solvable just by using an underscore followed by a hex representation of the key fingerprint. (The underscore is to prevent conflict with ICANN names and alternate forms of IP addresses, since they forbid it, with the side benefit of matching nicely with the coding practice of using leading underscores to indicate internal values)<br />
<br />
(Did you know you can enter the hex or decimal representation of an IP address as a single integer in some browsers and it'll work?)]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-390.html#pid390</link>
			<pubDate>Tue, 15 Mar 2011 02:12:41 -0700</pubDate>
			<dc:creator>bug1</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-390.html#pid390</guid>
			<description><![CDATA[Or we could have a higher level library (as you suggest) that checks both and warns when there is a discrepency with the results.]]></description>
			<content:encoded><![CDATA[Or we could have a higher level library (as you suggest) that checks both and warns when there is a discrepency with the results.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-389.html#pid389</link>
			<pubDate>Tue, 15 Mar 2011 02:08:38 -0700</pubDate>
			<dc:creator>bug1</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-389.html#pid389</guid>
			<description><![CDATA[Hmm, it introduces a reference to a central authority, but i expect users would be able to disregard that reference.<br />
<br />
The problem i was think of, is if Dr Evil starts signing heaps of ICANN style domain names and pushing them into this system, users might search for say Bank of America, results might include "bankofamerica.com" and "Bank of America", if some people ended up following the bankofamerica.com signed by Dr Evil it might take them to a phishing site that cleans their account.<br />
<br />
I think if we going to allow freeform names, it would be better for everyone if we encouraged someone honest to setup a legacy system early and give their key a chance to develop some trust before someone evil tries to do it.<br />
<br />
Alternatively we could come up with a way to invalidate ICANN style domain names, which people might try working around by using different characters anyway, eg 'bankofamerica,com' 'bankofamerica com']]></description>
			<content:encoded><![CDATA[Hmm, it introduces a reference to a central authority, but i expect users would be able to disregard that reference.<br />
<br />
The problem i was think of, is if Dr Evil starts signing heaps of ICANN style domain names and pushing them into this system, users might search for say Bank of America, results might include "bankofamerica.com" and "Bank of America", if some people ended up following the bankofamerica.com signed by Dr Evil it might take them to a phishing site that cleans their account.<br />
<br />
I think if we going to allow freeform names, it would be better for everyone if we encouraged someone honest to setup a legacy system early and give their key a chance to develop some trust before someone evil tries to do it.<br />
<br />
Alternatively we could come up with a way to invalidate ICANN style domain names, which people might try working around by using different characters anyway, eg 'bankofamerica,com' 'bankofamerica com']]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-388.html#pid388</link>
			<pubDate>Mon, 14 Mar 2011 23:10:51 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-388.html#pid388</guid>
			<description><![CDATA[<blockquote><cite><span> (03-14-2011 09:31 PM)</span>bug1 Wrote: <a href="http://forums.gctip.org/post-387.html#pid387" class="quick_jump">&nbsp;</a></cite>Maybe we could support legacy (ICANN) domain names by having an identifier that looks up the hash of the domain name and checks if its been signed by an unofficial identifier that we could create.</blockquote>
<br />
The idea has potential, but it has a major flaw: It reintroduces central authority.<br />
<br />
The official identifier's key would need to be kept secret, or else people could use it to spoof domains. This means there can be only one source of this data, who could be subpoena'd etc. It would probably be better to specifically say that there is no compatibility mode, and applications wanting to support both systems must look up each explicitly. Maybe we could have a low-level library that only deals with this proposed system, and a higher level one that's plugin-based an has plugins for both this system and DNS and abstracts name resolution completely. Building that library would probably be made easier by the fact that both systems support roughly the same set of record types.<br />
<br />
In that case, we may want to rename record types specific to this system so that they are in a namespace that's uncontrolled in DNS, like X- headers in email.]]></description>
			<content:encoded><![CDATA[<blockquote><cite><span> (03-14-2011 09:31 PM)</span>bug1 Wrote: <a href="http://forums.gctip.org/post-387.html#pid387" class="quick_jump">&nbsp;</a></cite>Maybe we could support legacy (ICANN) domain names by having an identifier that looks up the hash of the domain name and checks if its been signed by an unofficial identifier that we could create.</blockquote>
<br />
The idea has potential, but it has a major flaw: It reintroduces central authority.<br />
<br />
The official identifier's key would need to be kept secret, or else people could use it to spoof domains. This means there can be only one source of this data, who could be subpoena'd etc. It would probably be better to specifically say that there is no compatibility mode, and applications wanting to support both systems must look up each explicitly. Maybe we could have a low-level library that only deals with this proposed system, and a higher level one that's plugin-based an has plugins for both this system and DNS and abstracts name resolution completely. Building that library would probably be made easier by the fact that both systems support roughly the same set of record types.<br />
<br />
In that case, we may want to rename record types specific to this system so that they are in a namespace that's uncontrolled in DNS, like X- headers in email.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-387.html#pid387</link>
			<pubDate>Mon, 14 Mar 2011 22:31:31 -0700</pubDate>
			<dc:creator>bug1</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-387.html#pid387</guid>
			<description><![CDATA[Maybe we could support legacy (ICANN) domain names by having an identifier that looks up the hash of the domain name and checks if its been signed by an unofficial identifier that we could create.<br />
<br />
i.e. we suggest people trust a key that represents traditional domain names.<br />
<br />
If people dont want it they would be free to not trust it, so we wouldnt be forcing things on them.<br />
<br />
If someone wanted to create there own, say, microsoft.com they could, but people who trust this signed key that represents the legacy system wouldnt get surprised by an what might be considered an imposter. If they want to create their own human name that conflicts with ICANN they could, but they would have to get people to trust their signature more than the legacy system.]]></description>
			<content:encoded><![CDATA[Maybe we could support legacy (ICANN) domain names by having an identifier that looks up the hash of the domain name and checks if its been signed by an unofficial identifier that we could create.<br />
<br />
i.e. we suggest people trust a key that represents traditional domain names.<br />
<br />
If people dont want it they would be free to not trust it, so we wouldnt be forcing things on them.<br />
<br />
If someone wanted to create there own, say, microsoft.com they could, but people who trust this signed key that represents the legacy system wouldnt get surprised by an what might be considered an imposter. If they want to create their own human name that conflicts with ICANN they could, but they would have to get people to trust their signature more than the legacy system.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-386.html#pid386</link>
			<pubDate>Mon, 14 Mar 2011 20:25:06 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-386.html#pid386</guid>
			<description><![CDATA[Grr, my computer froze so I couldn't edit before the timeout. I was going to clarify that bidirectional links would be required for "same person" relationships, while there would be a "Trusts" recordtype of the same format to indicate that the owner of the identifier trusts the owner of the public key in the value.]]></description>
			<content:encoded><![CDATA[Grr, my computer froze so I couldn't edit before the timeout. I was going to clarify that bidirectional links would be required for "same person" relationships, while there would be a "Trusts" recordtype of the same format to indicate that the owner of the identifier trusts the owner of the public key in the value.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-385.html#pid385</link>
			<pubDate>Mon, 14 Mar 2011 19:43:47 -0700</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-385.html#pid385</guid>
			<description><![CDATA[<blockquote><cite><span> (03-14-2011 04:39 PM)</span>bug1 Wrote: <a href="http://forums.gctip.org/post-384.html#pid384" class="quick_jump">&nbsp;</a></cite>There are bits that i dont understand, but one issue in particular i would like to be clear on is how name collision is handled.<br />
<br />
So for example if hundreds of people want 'goodfoodsite' as a human identifer, they all produce the same hash, and associate it with their unique key.<br />
<br />
People search for goodfoodsite by hashing it and searching for the hash (in the DHT tree ?), they find hundreds of hits with different unique identifiers.<br />
<br />
They then have to decide for themselves which of the sites to go to based on other information associated with that identifier, possibly trust metrics based on key signings. <br />
<br />
Is that correct ?</blockquote>
<br />
Precisely. What I think would be the best way to handle it is to have a common library, and have 'accepting' a key occur via a call to the library, rather than in in each application in its own manner. That way, it could store trusted keys in a persistent per-user manner, similar to how untrusted HTTPS certificates are stored by browsers today, but across multiple applications - so for instance if you visit GMail from the web and trust Google's key (pointed to by GMail's key), your mail client will automatically trust the correct, official Google server.<br />
<br />
Thinking on this, it may be good to require identity-to-identity-links to have a bidirectional link, to prevent people from capitalizing on a widely-trusted identity.]]></description>
			<content:encoded><![CDATA[<blockquote><cite><span> (03-14-2011 04:39 PM)</span>bug1 Wrote: <a href="http://forums.gctip.org/post-384.html#pid384" class="quick_jump">&nbsp;</a></cite>There are bits that i dont understand, but one issue in particular i would like to be clear on is how name collision is handled.<br />
<br />
So for example if hundreds of people want 'goodfoodsite' as a human identifer, they all produce the same hash, and associate it with their unique key.<br />
<br />
People search for goodfoodsite by hashing it and searching for the hash (in the DHT tree ?), they find hundreds of hits with different unique identifiers.<br />
<br />
They then have to decide for themselves which of the sites to go to based on other information associated with that identifier, possibly trust metrics based on key signings. <br />
<br />
Is that correct ?</blockquote>
<br />
Precisely. What I think would be the best way to handle it is to have a common library, and have 'accepting' a key occur via a call to the library, rather than in in each application in its own manner. That way, it could store trusted keys in a persistent per-user manner, similar to how untrusted HTTPS certificates are stored by browsers today, but across multiple applications - so for instance if you visit GMail from the web and trust Google's key (pointed to by GMail's key), your mail client will automatically trust the correct, official Google server.<br />
<br />
Thinking on this, it may be good to require identity-to-identity-links to have a bidirectional link, to prevent people from capitalizing on a widely-trusted identity.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-384.html#pid384</link>
			<pubDate>Mon, 14 Mar 2011 17:39:22 -0700</pubDate>
			<dc:creator>bug1</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-384.html#pid384</guid>
			<description><![CDATA[There are bits that i dont understand, but one issue in particular i would like to be clear on is how name collision is handled.<br />
<br />
So for example if hundreds of people want 'goodfoodsite' as a human identifer, they all produce the same hash, and associate it with their unique key.<br />
<br />
People search for goodfoodsite by hashing it and searching for the hash (in the DHT tree ?), they find hundreds of hits with different unique identifiers.<br />
<br />
They then have to decide for themselves which of the sites to go to based on other information associated with that identifier, possibly trust metrics based on key signings. <br />
<br />
Is that correct ?]]></description>
			<content:encoded><![CDATA[There are bits that i dont understand, but one issue in particular i would like to be clear on is how name collision is handled.<br />
<br />
So for example if hundreds of people want 'goodfoodsite' as a human identifer, they all produce the same hash, and associate it with their unique key.<br />
<br />
People search for goodfoodsite by hashing it and searching for the hash (in the DHT tree ?), they find hundreds of hits with different unique identifiers.<br />
<br />
They then have to decide for themselves which of the sites to go to based on other information associated with that identifier, possibly trust metrics based on key signings. <br />
<br />
Is that correct ?]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Quick draft of an idea I had; please discuss]]></title>
			<link>http://forums.gctip.org/thread-105-post-383.html#pid383</link>
			<pubDate>Sat, 12 Mar 2011 23:33:58 -0800</pubDate>
			<dc:creator>eternaleye</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-105-post-383.html#pid383</guid>
			<description><![CDATA[Primary architecture: 256-bit Kademlia DHT<br />
Basic building block: "Kenning"<br />
Hash: SHA-256 (Plan to transition to SHA3-256 when it is released)<br />
On changing the hash function, alter the first-byte values for all Kenning types to the next unused values (see symbol definitions per type)<br />
<br />
Kennings are composed of a 'symbol' and any number of 'values'<br />
Kenning values 'decay' - they disappear after 30 days if the counter is not reset (see 'Add' message)<br />
3 types of Kennings: Identifiers, Names, and Records<br />
<br />
Identifiers:<br />
    An identifier's symbol is a 256-bit ( hash of a PGP public key's fingerprint ) with the first byte set to '0'<br />
    Each value *MUST* be a PGP key signed with the key whose fingerprint the symbol represents<br />
    NOTE: This does not necessarily mean self-signed - one can have a new key, signed by the old key.<br />
        This allows expiration of keys and migration to new ones.<br />
        This also allows many identifiers to show a common owner - have all of them reference the same PGP key in addition to their own key.<br />
        This *ALSO* allows an implementation of communities, in a sense - any site belonging to a community can reference a 'community key'. Anyone who wants to 'join' can 'accept' the community key, transitively accepting all members of the community.<br />
<br />
Names:<br />
    A name's symbol is a 256-bit ( hash of a human-readable string ) with the first byte set to '1'<br />
    Each value *MUST* be a reference to an Identifier, signed with the relevant PGP key<br />
<br />
Records:<br />
    All records 'belong' to an Identifier<br />
    A record's symbol is a 256-bit ( hash of the concatenation of the symbol of the Identifier it belongs to and the record type ), with the first byte set to '2'<br />
    The format of each value depends on the type of record, with A, AAAA, MX, etc. records acting much as in DNS. However, all these values have these common invariants:<br />
    Each value *MUST* contain a 'backreference' to the owning Identifier<br />
    Each value *MUST* be signed with the PGP key for the owning Identifier<br />
<br />
Messages:<br />
    As this is based on a DHT, we need to define what operations on symbols are valid.<br />
    Lookup:<br />
        Given a symbol, retrieve all of that symbol's values<br />
    Add:<br />
        Given a symbol and a complete value, add the value to the list for that symbol<br />
        The node acting on this message *MUST* validate the relevant signatures<br />
        If an 'Add' message is received for a value that already exists, reset the 'decay' counter<br />
    Delete:<br />
        Given a symbol and a complete value that has been signed *AGAIN* by the same PGP key, delete the value<br />
        Again, the node acting on this *MUST* validate signatures<br />
<br />
<br />
As far as who the peers in the DHT are, I have a pretty elegant idea: Have them be the servers the Identifiers reference!<br />
The Kennings need to be republished periodically anyway, and who better to do it than the very servers they point to?<br />
This also greatly reduces the amount of churn in the network, since servers go down very rarely.<br />
<br />
Here's an imagined workflow:<br />
<br />
Person A wishes to publish a website and mailserver, accessible via IPv4 and IPv6.<br />
He generates his personal key, let's call it 0x1234.<br />
He then generates a key for his webserver (0xF00D) and his mailserver (0xBEEF)<br />
<br />
He sends the Add message a few times, creating the Identifiers for each of the 3 keys.<br />
He then signs 0x1234 with 0xF00D, and Add's it to the 0xF00D identifier as well<br />
He also signs it with 0xBEEF and Add's it to 0xBEEF's Identifier<br />
<br />
He then adds an A and AAAA record belonging to each of 0xF00D and 0xBEEF's Identifiers, with the relevant IP addresses<br />
Next, he sends an Add message creating a Name, say 'goodfoodsite' referencing 0xF00D<br />
And another creating 'goodfoodmail' referencing 0xBEEF<br />
Finally, he adds an MX record on 0xF00D referencing 'goodfoodmail'<br />
<br />
Another:<br />
<br />
Person B wants to visit 'goodfoodsite'<br />
<br />
He opens his browser and goes there<br />
His browser looks up the Name 'goodfoodsite', and finds two values - 0xF00D and 0xDEAD<br />
Neither is known to the browser. 0xDEAD has no values other than a self signed key, but 0xF00D references 0x1234<br />
Since Person B knows Person A personally (heh), he's already accepted his public key 0x1234<br />
The browser has an accepted selection, so it looks up 0xF00D's AAAA record<br />
It then contacts that IP address, and loads the webpage.]]></description>
			<content:encoded><![CDATA[Primary architecture: 256-bit Kademlia DHT<br />
Basic building block: "Kenning"<br />
Hash: SHA-256 (Plan to transition to SHA3-256 when it is released)<br />
On changing the hash function, alter the first-byte values for all Kenning types to the next unused values (see symbol definitions per type)<br />
<br />
Kennings are composed of a 'symbol' and any number of 'values'<br />
Kenning values 'decay' - they disappear after 30 days if the counter is not reset (see 'Add' message)<br />
3 types of Kennings: Identifiers, Names, and Records<br />
<br />
Identifiers:<br />
    An identifier's symbol is a 256-bit ( hash of a PGP public key's fingerprint ) with the first byte set to '0'<br />
    Each value *MUST* be a PGP key signed with the key whose fingerprint the symbol represents<br />
    NOTE: This does not necessarily mean self-signed - one can have a new key, signed by the old key.<br />
        This allows expiration of keys and migration to new ones.<br />
        This also allows many identifiers to show a common owner - have all of them reference the same PGP key in addition to their own key.<br />
        This *ALSO* allows an implementation of communities, in a sense - any site belonging to a community can reference a 'community key'. Anyone who wants to 'join' can 'accept' the community key, transitively accepting all members of the community.<br />
<br />
Names:<br />
    A name's symbol is a 256-bit ( hash of a human-readable string ) with the first byte set to '1'<br />
    Each value *MUST* be a reference to an Identifier, signed with the relevant PGP key<br />
<br />
Records:<br />
    All records 'belong' to an Identifier<br />
    A record's symbol is a 256-bit ( hash of the concatenation of the symbol of the Identifier it belongs to and the record type ), with the first byte set to '2'<br />
    The format of each value depends on the type of record, with A, AAAA, MX, etc. records acting much as in DNS. However, all these values have these common invariants:<br />
    Each value *MUST* contain a 'backreference' to the owning Identifier<br />
    Each value *MUST* be signed with the PGP key for the owning Identifier<br />
<br />
Messages:<br />
    As this is based on a DHT, we need to define what operations on symbols are valid.<br />
    Lookup:<br />
        Given a symbol, retrieve all of that symbol's values<br />
    Add:<br />
        Given a symbol and a complete value, add the value to the list for that symbol<br />
        The node acting on this message *MUST* validate the relevant signatures<br />
        If an 'Add' message is received for a value that already exists, reset the 'decay' counter<br />
    Delete:<br />
        Given a symbol and a complete value that has been signed *AGAIN* by the same PGP key, delete the value<br />
        Again, the node acting on this *MUST* validate signatures<br />
<br />
<br />
As far as who the peers in the DHT are, I have a pretty elegant idea: Have them be the servers the Identifiers reference!<br />
The Kennings need to be republished periodically anyway, and who better to do it than the very servers they point to?<br />
This also greatly reduces the amount of churn in the network, since servers go down very rarely.<br />
<br />
Here's an imagined workflow:<br />
<br />
Person A wishes to publish a website and mailserver, accessible via IPv4 and IPv6.<br />
He generates his personal key, let's call it 0x1234.<br />
He then generates a key for his webserver (0xF00D) and his mailserver (0xBEEF)<br />
<br />
He sends the Add message a few times, creating the Identifiers for each of the 3 keys.<br />
He then signs 0x1234 with 0xF00D, and Add's it to the 0xF00D identifier as well<br />
He also signs it with 0xBEEF and Add's it to 0xBEEF's Identifier<br />
<br />
He then adds an A and AAAA record belonging to each of 0xF00D and 0xBEEF's Identifiers, with the relevant IP addresses<br />
Next, he sends an Add message creating a Name, say 'goodfoodsite' referencing 0xF00D<br />
And another creating 'goodfoodmail' referencing 0xBEEF<br />
Finally, he adds an MX record on 0xF00D referencing 'goodfoodmail'<br />
<br />
Another:<br />
<br />
Person B wants to visit 'goodfoodsite'<br />
<br />
He opens his browser and goes there<br />
His browser looks up the Name 'goodfoodsite', and finds two values - 0xF00D and 0xDEAD<br />
Neither is known to the browser. 0xDEAD has no values other than a self signed key, but 0xF00D references 0x1234<br />
Since Person B knows Person A personally (heh), he's already accepted his public key 0x1234<br />
The browser has an accepted selection, so it looks up 0xF00D's AAAA record<br />
It then contacts that IP address, and loads the webpage.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[AP calls "Wikileaks cyberbrawl" a "battle of amateurs"]]></title>
			<link>http://forums.gctip.org/thread-88-post-382.html#pid382</link>
			<pubDate>Sat, 05 Mar 2011 08:49:51 -0800</pubDate>
			<dc:creator>lauren</dc:creator>
			<guid isPermaLink="false">http://forums.gctip.org/thread-88-post-382.html#pid382</guid>
			<description><![CDATA[External sites can change or delete their pages at any time, rendering links dead.  That's in the nature of the Web.  <a href="http://www.thesunnews.com/2010/12/14/1867835/cyber-clash-ranks-as-amateur.html">Here's a link to the same article at another site</a> (I've also updated the original link above).<br />
<br />
--Lauren--]]></description>
			<content:encoded><![CDATA[External sites can change or delete their pages at any time, rendering links dead.  That's in the nature of the Web.  <a href="http://www.thesunnews.com/2010/12/14/1867835/cyber-clash-ranks-as-amateur.html">Here's a link to the same article at another site</a> (I've also updated the original link above).<br />
<br />
--Lauren--]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[AP calls "Wikileaks cyberbrawl" a "battle of amateurs"]]></title>
			<link>http://forums.gctip.org/thread-88-post-381.html#pid381</link>
			<pubDate>Sun, 27 Feb 2011 22:38:43 -0800</pubDate>
			<guid isPermaLink="false">http://forums.gctip.org/thread-88-post-381.html#pid381</guid>
			<description><![CDATA["Wikileaks cyberbrawl" a "battle of amateurs"  is nice article. I have read once but now there is no article available on that site. Why? what should I do if I want to read it again?]]></description>
			<content:encoded><![CDATA["Wikileaks cyberbrawl" a "battle of amateurs"  is nice article. I have read once but now there is no article available on that site. Why? what should I do if I want to read it again?]]></content:encoded>
		</item>
	</channel>
</rss>