One of the problems alluded to in the other mail was that SSK inserts and successful SSK requests are traceable to a global traffic analyst capable of detecting freenet traffic and packet sizes. Specifically, this is true because of the huge size of the messages. Which also exacerbates MTU problems. Details: SSK insert reques: 1274 bytes SSK data found: 1168 bytes
Even with padding, these become extremely obvious, unless there is a vast amount of small messages coalesced with them and concealing them. Which is not normally the case, and IMHO is not a reliable cloak even on high traffic nodes. So our profile currently looks like this: 64+64: 37 (lots of stuff) 128+64: 101 (CHK request, SSK request, swap reply, most opennet stuff, data insert, offers, get offered CHK, CHK insert request[, SSKInsertRequestNew]) 192+64: 165 (get offered SSK[, SSKDataFoundNew, SSKInsertRequestHeaders]) 256+64: 197 (swap commit/complete) 320+64: 229 (nothing) 1088+64: 1061 (bulk transmit, block transmit, time deltas, SSK pubkey[, SSKData, SSKDataInsert]) 1152+64: 1125 (nothing) 1216+64: 1189 (SSK data found) 1280+64: 1253 (nothing) 1344+64: 1317 (SSK insert request) Formatting: <payload size including overhead of 27 bytes>+<average random padding and hash size>: <size of message> (messages). Note that the [] above refer to my proposed new messages. Also the above demonstrates why I am unwilling to use multiples of 32 instead of 64 for padding. We are therefore reasonably safe from packet size analysis ... except for SSK data found and SSK insert, which are *easily* identifiable. And the latter's size is a problem. I propose to split up SSKInsertRequest and SSKDataFound as follows: SSKDataFoundNew: UID(8) + headers(136) = 144 SSKData: UID(8) + data (1024) = 1032 SSKInsertRequestNew: UID (8) + key (66) + htl (2) = 76 SSKInsertRequestHeaders: UID (8) + headers (136) = 144 SSKDataInsert: UID (8) + data (1024) So: For an SSK insert, we have a 76 byte insert request (could be a lot of things), which is then Accepted (8 bytes, again could be almost anything, but requests are accepted too). Then we send the data and the headers (144 and 1032). Right now, only certain messages are subject to congestion control and bandwidth limiting: bulk transmit packets and block transmit packets. We could send SSKData/SSKDataInsert as throttled packets (we might need to increase the timeout to compensate for this). If we do, the 1032 byte packet and the 144 byte packet will not usually be combined, so the former will not be distinguishable from a bulk/block transfer (if one is going on), and the latter could be a get-offered-SSK, or an offer-SSK combined with one or more other messages if we're lucky. Thus hopefully as soon as the attacker reaches a busy node he will lose the trail. We could further improve things by making 1088 the biggest packet payload we send. This would prevent the 1032 and 144 being combined into a signature 1176 byte packet when there is low traffic. It would cost a small amount of efficiency on links with high MTUs, but it would prevent major problems on links with low MTUs. So: 5 new messages. 2 of which go through PeerNode.sendThrottled(). Some rewriting of the SSK requestors/insertors code. Which can be tested using freenet/node/simulator/. Timeouts may need tweaking, we can allocate fairly generous ones to start with. -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 189 bytes Desc: not available URL: <https://emu.freenetproject.org/pipermail/devl/attachments/20080307/91f6da63/attachment.pgp>