View Issue Details

IDProjectCategoryView StatusLast Update
0002179GNUnetGNSpublic2012-02-28 11:05
Reporterschanzen Assigned Toschanzen  
PriorityhighSeverityfeatureReproducibilityN/A
Status closedResolutionfixed 
Product VersionGit master 
Target Version0.9.2Fixed in Version0.9.2 
Summary0002179: GNS needs a dht block plugin
DescriptionFor the dht lookup GNS needs a block plugin that can verify the block and the signatures against the records contained within.

We need either 2 Different block types for zone transfers (has > 1 signature, 1 for every name the authority has) and single name records (1 signature, contains records with same name)

or

A single block layout that can handle both.
TagsNo tags attached.

Relationships

duplicate of 0002164 closedschanzen Missing block plugin for GNS record queries 

Activities

schanzen

2012-02-26 12:21

administrator   ~0005519

Last edited: 2012-02-26 12:50

Is it enough to check signatures in the block plugin? Say a block provides:

key = H(name) xor H(pubkey of zone)
pubkey of zone
record data
signature over record data with pubkey

Now anybody could inject records if we only check the signature against the record data with the provided pubkey. So we have to check pubkey of zone against H(pubkey of zone).
But is this "enough"?
If a GNS node that never head of this hash gets a block like this it will simply cache. no problem.
But if a node that already knows a zone with H(pubkey of zone) gets a block like this won't it have to check if the key in the namestore is the same as the one provided (hash collision)?
Even worse the resolver itself (not block plugin) needs to check this as well to be safe no? I guess GNUNET_NAMESTORE_record_put could do the sanity checks for the pubkey.

The whole problem boils down to hash collisions I think.
Suggestion:
make GNUNET_NAMESTORE_record_put check for hash collisions. And the GNS resolver will handle it in the continuation closure? On the other hand the block plugin needs an answer in a timely manner (not async) but I haven't started looking into that in detail yet.
I think the block plugin will:

0. Do some sanity check w/ key maybe (check pkey and H(pkey))
1. Check the signature of the record data with the provided pubkey using
   GNUNET_NAMESTORE_verify_signature
2. If valid cache the record data with GNUNET_NAMESTORE_record_put.
   If the namestore already has an entry with a different pubkey it will
   tell us in the closure and we will not cache. BUT: we already decided if this
   block is ok or not at this point in time!

Christian Grothoff

2012-02-26 13:11

manager   ~0005520

Resolver might not have to check because the local DHT's block plugin should check first, and that's within our trust domain. But, checking wouldn't hurt (except for performance) just to double-check against bugs.

Checking for hash collisions is not required, as we have 512-bit hashes.

schanzen

2012-02-28 10:06

administrator   ~0005529

Added plugin to svn head

schanzen

2012-02-28 10:06

administrator   ~0005530

--

Issue History

Date Modified Username Field Change
2012-02-25 13:28 schanzen New Issue
2012-02-25 13:28 schanzen Status new => assigned
2012-02-25 13:28 schanzen Assigned To => schanzen
2012-02-26 12:21 schanzen Note Added: 0005519
2012-02-26 12:43 schanzen Note Edited: 0005519
2012-02-26 12:50 schanzen Note Edited: 0005519
2012-02-26 13:11 Christian Grothoff Note Added: 0005520
2012-02-26 21:50 Christian Grothoff Severity major => feature
2012-02-26 21:52 Christian Grothoff Relationship added duplicate of 0002164
2012-02-28 10:06 schanzen Note Added: 0005529
2012-02-28 10:06 schanzen Note Added: 0005530
2012-02-28 10:06 schanzen Status assigned => resolved
2012-02-28 10:06 schanzen Fixed in Version => Git master
2012-02-28 10:06 schanzen Resolution open => fixed
2012-02-28 11:02 Christian Grothoff Product Version => Git master
2012-02-28 11:02 Christian Grothoff Fixed in Version Git master => 0.9.2
2012-02-28 11:02 Christian Grothoff Target Version => 0.9.2
2012-02-28 11:05 Christian Grothoff Status resolved => closed