Argh, no, this doesn't work, because the pubkey is known, and there is no way 
for the node to verify that the content is in fact valid. An attacker can not 
only cause collisions, he can preemptively block known content by inserting 
bogus data to where it would be posted.

So what does that leave?

On Thursday 23 April 2009 01:48:46 Matthew Toseland wrote:
> 1) Duplicate the top block with SSKs: 
> SSK,3@<pubkey>,<cryptokey>,<extra>/<filename> would insert e.g. 
> SSK@<pubkey>,<cryptokey>,<extra>/<filename>-N for a series of N's.

Make cryptokey the hash of the content, avoids different-content attacks.

> 2) CHKs with extra routing keys:
> CHK@<routing key 1>,<routing key 2>,<routing key 3>,<crypto key>,<extra>

Replace crypto key with the hash of the content, and derive the crypto key for 
each block:
cryptokey_N = H ( H(data) + "N" )

3) Reinserting the top block when a download has finished, and also at some 
point after inserting the data. IMHO this may help, but it does not address 
the core problem. We need redundancy over *different areas of the keyspace*.

4) An FCP command to reinsert a file, given a known top-block key. If we 
cannot reconstruct as-is, we fail, but if we can, we reinsert that block 
(exactly as is, like a binary blob), and the rest of the CHK-based blocks 
under it.

Maybe a combination of 1) and 4) ?

On first insert:
User inserts the data as DSK,3@/filename.
The node creates a random pubkey, and hashes the content of the top block to 
get the cryptokey. It inserts each block, and returns 
DSK,3@<pubkey>,<cryptokey>,<extra>/filename

The filename could be ignored if we want.

On reinsert:
The original URI must be specified, and have been downloaded. If it is kept on 
the download queue then we can simply click a button to reinsert.

For SSKs:
User inserts the data as SSK,3@<privkey>,<cryptokey>,<extra>/<filename>

We insert to SSK@<pubkey>,<cryptokey>,<extra>/<filename>-<N> for N in 0, 1, 2.

Since the URI is not content-derived, there is the possibility of the inserter 
will insert different content to each slot. AFAICS this cannot be avoided.

The major disadvantages are:
- When reinserting we MUST know the original URI.
- There is no way to heal the alternate top-blocks.

IMHO the latter is more serious than the former, but full convergence would be 
ideal. Option 2 has neither of these problems, but does have very long URIs. 
Mostly keys are copied and pasted, so maybe that isn't a big problem?

If people are happy with option 2 (very long CHKs), I can implement it 
reasonably quickly...
> 
> Neither of these schemes is acceptable IMHO. The former allows for an 
attacker 
> to insert different content to different keys, and get some info about 
> targets that way, and it is non-convergent, not allowing for reinserts. The 
> latter doubles the length of the already way too long CHKs.
> 
> I propose a new key type which is convergent, has URIs shorter than existing 
> CHKs, and any number of duplicate blocks: the Content Multiplication Key 
(for 
> want of a better name, alternatives are welcome).
> 
> DETAILS:
> 
> Insert the splitfile normally, except for the top block. The top block must 
> fit inside a 1KB SSK payload. 
> 
> Hash the content of the top block:
> 
> hash of content: H(data)
> 
> Create a private key:
> 
> privkey = MAKE_PRIVKEY ( H ( H(data) + "0" ) )
> 
> Create the base crypto key:
> 
> ckey_base = H ( H ( data + "1" ) )
> 
> Create a series of crypto keys:
> 
> ckey_N = H ( ckey_base + "N" )
> 
> Insert to a series of SSKs:
> 
> SSK@<privkey>,<ckey_N>,<extra>
> 
> Announce the key:
> 
> UMK,N@<H(data)>,<extra>/<filename>
> (Where N is the number of copies inserted)
> 
> The filename is ignored. This will make the Frost folk happy.
> 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 835 bytes
Desc: This is a digitally signed message part.
URL: 
<https://emu.freenetproject.org/pipermail/devl/attachments/20090423/2f28e9a3/attachment.pgp>

Reply via email to