<div dir="ltr"><div class="gmail_default" style="font-size:small">So, the last thing I need to write for the Mesh is a presentation layer. This has the primary function of providing authentication over HTTP and encryption and authentication over UDP.<br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">The UDP packet format is intentionally as opaque as possible, there are two basic types of packet</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">1) Control (limited to connection establishing/re-establishing)</div><div class="gmail_default" style="font-size:small">2) Data<br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">A Data packet is distinguished from control by bit 7 on the first byte being set or clear.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">A service receives a data packet as a triple:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">{SourceIP, SourcePort, 

packet 

}</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">This is used by the host to map the packet to a connection for processing. If this fails because of NAT cone shapes being wrong or remapping occurs, we will use a ticket to reassociate.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">The connection has a primary key established through the control channel The primary key and nonce are used as input to a KDF to generate the Key and IV for GCM or OFB encryption of the packet.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">The format of the data packet is:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">byte[nn] nonce </div><div class="gmail_default" style="font-size:small">byte[nt] authTag</div><div class="gmail_default" style="font-size:small">byte[nc]ciphertext</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">where nn= 16, nt = 16, nc = 1200-32</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">The ciphertext uses a more flexible tag-length-value encoding. The basic layout will be:</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><stream id></div><div class="gmail_default" style="font-size:small"><stream sequence#></div><div class="gmail_default" style="font-size:small"><resend count></div><div class="gmail_default" style="font-size:small"><payload></div><div class="gmail_default" style="font-size:small"><padding></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">The basic idea here being that we simply fill each packet out to the max. But should this be set to all zeros or should this be randomized.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">Zeros: simple, minimizes opportunity for side channel games</div><div class="gmail_default" style="font-size:small">Random: minimizes known plaintext for attacker.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">If I do go with random, is there a cheap way to generate random padding I should be thinking of? I don't need this to be particularly random. </div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small">One possibility is to put the zeros through GCM with a different key. Seems wasteful though.</div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div><div class="gmail_default" style="font-size:small"><br></div></div>