summaryrefslogtreecommitdiff
path: root/draft-schanzen-r5n.xml
diff options
context:
space:
mode:
Diffstat (limited to 'draft-schanzen-r5n.xml')
-rw-r--r--draft-schanzen-r5n.xml69
1 files changed, 69 insertions, 0 deletions
diff --git a/draft-schanzen-r5n.xml b/draft-schanzen-r5n.xml
index e7630f5..4b8e04c 100644
--- a/draft-schanzen-r5n.xml
+++ b/draft-schanzen-r5n.xml
@@ -1261,6 +1261,75 @@ ComputeOutDegree(REPL_LVL, HOPCOUNT, L2NSE):
1261 </dd> 1261 </dd>
1262 </dl> 1262 </dl>
1263 </section> 1263 </section>
1264
1265 <section anchor="p2p_path">
1266 <name>Path</name>
1267 <t>
1268 If the <tt>RecordRoute</tt> flag is set, the travel of a <tt>PutMessage</tt>
1269 or a <tt>ResultMessage</tt> through the overlay network is recorded in the
1270 <tt>PATH</tt> field of the message. <tt>PATH</tt> is a list of path elements.
1271 A new path element is appended to the existing <tt>PATH</tt> before
1272 a peer sends the message to the next peer.
1273 </t>
1274 <t>
1275 A path element contains a signature and the public key of the peer that
1276 created the element. The signature is computed over the public keys of the
1277 previous peer (from which the message was received) and next peer (the
1278 peer the message is send to). A new message has no previous peer and
1279 uses the <tt>NULL</tt> public key for the signature.
1280 </t>
1281 <t>
1282 Assuming peer A sends a new <tt>PUT</tt> message to peer B, which forwards
1283 the message to peer C, which forwards to peer D which finally stores the data.
1284 The <tt>PATH</tt> field of the message received at peer D contains three
1285 path elements (build from top to bottom):
1286 </t>
1287 <figure anchor="figure_path" title="Example PATH">
1288 <artwork name="" type="" align="left" alt=""><![CDATA[
1289+--------------------+-------+
1290| Sig A( 0,Pub B) | Pub A |
1291+--------------------+-------+
1292+--------------------+-------+
1293| Sig B(Pub A,Pub C) | Pub B |
1294+--------------------+-------+
1295+--------------------+-------+
1296| Sig C(Pub B,Pub D) | Pub C |
1297+--------------------+-------+
1298 ]]></artwork>
1299 </figure>
1300 <t>
1301 When appending a new path element, a peer <bcp14>MUST</bcp14> verify the
1302 path integrity. It first checks that the peer sending the message has the
1303 public key recorded in the last path element. It then checks all contained
1304 signatures.
1305 </t>
1306 <t>
1307 If an invalid signature is detected, the path is truncated keeping only
1308 element fields following the faulty signature and setting the TRUCATED
1309 flag. Assume that peer C detects a faulty signature in path element #2,
1310 the trunacted path has two entries:
1311 </t>
1312 <figure anchor="figure_path_truncated" title="Example truncated PATH">
1313 <artwork name="" type="" align="left" alt=""><![CDATA[
1314+-------+ +----------------------+-------+
1315| Pub B | | Sig C (Pub B, Pub D) | Pub C |
1316+-------+ +----------------------+-------+
1317 ]]></artwork>
1318 </figure>
1319 <t>
1320 The TRUNCATED flag indicates that the first path element does not contain
1321 a signature but only the public key of the peer where the signature fails.
1322 </t>
1323 <t>
1324 The <tt>PATH</tt> is stored along with the payload data from the <tt>PUT</tt>
1325 message at the final peer. When the peer delivers the data based on a
1326 <tt>GET</tt> request, it initializes the <tt>PATH</tt> field with the stored
1327 path value and appends a new path element. The first part of <tt>PATH</tt>
1328 in a <tt>GET</tt> response mesage is called the <tt>PutPath</tt>, followed
1329 by the <tt>GetPath</tt>.
1330 </t>
1331 </section>
1332
1264 <section anchor="p2p_pathelement"> 1333 <section anchor="p2p_pathelement">
1265 <!-- TODO-GROTHOFF: Discuss this change again. The text is currently not correct 1334 <!-- TODO-GROTHOFF: Discuss this change again. The text is currently not correct
1266 it is very difficult to understand. Is it worth 32 byte; 1335 it is very difficult to understand. Is it worth 32 byte;