gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r943 - GNUnet-docs/WWW/test


From: durner
Subject: [GNUnet-SVN] r943 - GNUnet-docs/WWW/test
Date: Tue, 14 Jun 2005 13:20:36 -0700 (PDT)

Author: durner
Date: 2005-06-14 13:20:33 -0700 (Tue, 14 Jun 2005)
New Revision: 943

Modified:
   GNUnet-docs/WWW/test/encoding.php3
   GNUnet-docs/WWW/test/namespace.php3
Log:
Reformat

Modified: GNUnet-docs/WWW/test/encoding.php3
===================================================================
--- GNUnet-docs/WWW/test/encoding.php3  2005-06-14 20:12:29 UTC (rev 942)
+++ GNUnet-docs/WWW/test/encoding.php3  2005-06-14 20:20:33 UTC (rev 943)
@@ -6,11 +6,13 @@
 
 H2("The GNUnet AFS Encoding");
 // FIXME: update for 0.7.0
+BP();
 W("This page is intended to describe the revised GNUnet content encoding which 
was implemented in version 0.5.0.");
 
-P();
+EP();
 
 H3("What is the GNUnet AFS Encoding");
+BP();
 W("The GNUnet AFS Encoding is the way GNUnet encodes files for anonymous 
sharing.");
 W("The first version of the encoding was presented in %s.",
   extlink_("download/esed.ps","Efficient Sharing of Encrypted Data"));
@@ -18,14 +20,14 @@
 W("This page is discussing the problems with the ESED encoding and tries to 
come up with solutions.");
 W("The resulting scheme is called ESED II.");
 
-P();
+EP();
 H3("Problems with ESED");
 echo "<dl>\n";
 DT("Content Migration");
 echo "<dd>";
 W("1k blocks in ESED can only migrate when they are requested.");
 W("If a node would push ESED blocks out into the network, the triple-hash does 
not protect against malicious nodes constructing bad pairs.");
-P();
+BR();BR();
 W("There are two attacks, and only one would work.");
 W("We describe both attacks and elaborate why they work (or why not).");
 BR();
@@ -87,11 +89,13 @@
 W("This requires us to integrate the code for insertion and downloading.");
 W("This is mostly a code design question, though.");
 echo "</dd></dl>\n";
-P();
+BR();BR();
 HR();
-P();
+BR();BR();
 H3("Ideas");
+BP();
 W("Here is the initial set of ideas:");
+EP();
 echo "<ul><li>";
 W("Use a %s (%s) to avoid disk accesses for data that is not locally 
available.",
   ARRAY(extlink_("http://www.nist.gov/dads/HTML/bloomfilt.html","bloom 
filter"),
@@ -107,11 +111,11 @@
 W("A 25-node super-query would reduce the lookup database for 8 GB from 256 MB 
to a &quot;super-lookup-cache&quot; of only 10 MB.");
 W("25 blocks per super-summary-hash would have the advantage that the IBlock 
format would work out exactly with the 1k scheme (25 CHKs a 40 bytes, 1 
super-hash a 20 bytes, 1 crc with 4 bytes).");
 echo "</li></ul>";
-P();
+BR();BR();
 HR();
-P();
+BR();BR();
 H3("The new implementation");
-
+BP()
 W("The good news is, that except for re-synchronizing the stream, the new 
implementation addresses all problems noted above.");
 W("The new encoding encrypts every 1k block using the hash of the block, 
called the key-hash (Ripe160, Blowfish) and stores that block under the hash of 
the encrypted block, called the query-hash (straight forward Freenet style 
CHK).");
 W("The IBlock above then contains both the key-hash and the query-hash.");
@@ -183,6 +187,7 @@
 W("Only if no matching block was found in the .X files and if the 
reconstruction attempt failed, gnunet-download actually starts downloading the 
blocks.");
 W("Note that this slows down gnunet-download at the beginning a bit since the 
insert-check may be costly, especially if the file is large (we may want to 
make it optional).");
 
+EP();
 
 include("html_footer.php3");
 ?>

Modified: GNUnet-docs/WWW/test/namespace.php3
===================================================================
--- GNUnet-docs/WWW/test/namespace.php3 2005-06-14 20:12:29 UTC (rev 942)
+++ GNUnet-docs/WWW/test/namespace.php3 2005-06-14 20:20:33 UTC (rev 943)
@@ -6,15 +6,19 @@
 // FIXME: update for 0.7.0?
 H2("Subspaces and Directories in GNUnet");
 
-P();
+BP();
 
 W("Please note that this document reflects the discussion before the actual 
implementation of namespaces and directories.");
 W("The final implementation is documented elsewhere.");
 W("Nevertheless, almost everything written here still applies.");
 
+EP();
+
 H3("Introduction");
 
+BP();
 W("The goal of this proposal is to allow an author <i>A</i> to publish lists 
of) files and their CHKs, along with metadata (file descriptions), such that 
that:");
+EP();
 
 echo "<ol><li>";
 W("no malicious user <i>M</i> is be able to publish as <i>A</i>, and");
@@ -22,34 +26,37 @@
 W("searches for content provided by <i>A</i> must never be matched by any 
other content.");
 echo "</li></ol>";
 
+BP();
 W("<strong>Proposition:</strong> Use author specific queries, called 
<em>SQueries</em>, that only return <em>SBlocks</em> (blocks that were 
cryptographically signed by the author).");
 W("The SBlocks contain a (list of) signed CHK keys that can then be used to 
retrieve a <em>Directory</em>.");
 W("A directory is a file that contains meta-data for a list of files in a 
standardized format.");
 W("The metadata can then be used to retrieve the actual files.");
+EP();
 
-P();
 H3("GNUnet AFS subspaces");
 
+BP();
 W("In order to create a new subspace, an author must first create a 
public-private key pair.");
 W("We will refer to this key pair as the <em>pseudonym</em> of the author.");
 W("Every author can create any number of pseudonyms.");
 W("The hash of the public key is used as the <em>subspace identifier</em>.");
 W("Every inserted SBlock in the subspace carries a cryptographic signature to 
prove that it is actually a valid block in the subspace.");
-BR();
+P();
 
 W("Whenever an SBlock is transported via a node, the peer verifies the 
signature and drops the block if the signature is invalid.");
 W("In order to ensure that peers can check the signature without any 
additional information, the public key of the author must be included in the 
SBlock.");
 W("Peers never store or transmit SBlocks that do not pass the signature 
check.");
 W("Peers never give credit for SBlocks with invalid signatures.");
 
-P();
+EP();
 H4("Format of an SBlock");
 
+BP();
 W("The format of an SBlock is intended to fit within the general format of 
search-results.");
 W("But where the search-results contain the filename, description and 
mime-type, the SBlock must provide the signature and the public key.");
 W("Content in the subspace is identified by SBlocks that have the following 
format:");
 
-P();
+EP();
 PRE("typedef struct {\n" .
     "  unsigned short SBLOCK_MAGIC;\n" .
     "  unsigned short SBLOCK_VERSION; \n" .
@@ -65,7 +72,7 @@
     "  Signature signature; /* 256 b */\n" .
     "  PublicKey subspace; /* 264 b */\n" .
     "} SBlock; /* total: 1024 bytes */");
-P();
+BP();
 
 W("In the SBlock, the <em>signature</em> is the RSA signature of 
<tt>H(E<sub>K</sub>(MAGIC, fileIdentifier, description, filename, mimetype, 
creationTime, updateInterval, nextIdentifier, identifierIncrement))</tt>.");
 W("The SBlock is transmitted with the data portion being encrypted, thus we 
must sign the encrypted data such that intermediaries can verify the 
signature.");
@@ -89,27 +96,27 @@
 W("If periodic updates are announced (both timers non-zero and not minus one), 
the <tt>nextIdentifier</tt> is the presumed identifier for the updated content 
that is available at <tt>creationTime + updateInterval</tt>.");
 W("If (for each of the 5 integers of HashCode160) <tt>nextIdentifier (N) = 
identifier (K) + identifierIncrement (I)</tt>, then the updates are made 
available periodically and the most recent available version has the identifier 
<tt>identifier (K) + identifierIncrement (I) * ((now - creationTime) / 
updateInterval)</tt>.");
 
-P();
+EP();
 HR();
-P();
+BP();
 H5("Example:");
+BP();
 W("Suppose the creation time is 400 and the update interval is 60.");
 W("If then the identifier is the tuple (64, 236, 34, 63, 723) and the next 
identifier is (65, 268, 37, 67, 721) and the identifier increment is (1, 2, 3, 
4, -2) the identifer from the time 520 to the time 579 will be computed to be 
the identifier plus 2 times the increment, which yields (66, 240, 40, 71, 
719).");
 W("Note that the numbers in practice will be much larger.");
 W("If in the addition any of the 5 integers overflows, the overflow is not 
carried over to the next integer but simply ignored.");
-P();
+EP();
 HR();
-P();
+BP();
 
 W("A <em>FileIdentifier</em> is a struct that contains the information 
required to download a file, or more specifially a GNUnet CHK, filesize and a 
CRC.");
 
-P();
+EP();
 PRE("typedef struct {\n" .
     "CHK_Hashes chk;\n" .
     "size_t file_length;\n" .
     "int crc;\n" .
     "} FileIdentifier; /* total: 48 bytes */\n");
-P();
 
 H5("Query example");
 
@@ -123,37 +130,45 @@
 regardless of identifier, and ]
 */
 
+BP();
 W("Query for");
+EP();
 
 PRE("gnunet://afs/subspace/identifier\n" .
     "=> SQuery(subspace,identifier)\n" .
     "=> match e.g. 
&quot;A439SBCKF832JFE84KDF0359DFLEWLKRKW353,H(&rsquo;somestring.html&rsquo;)&quot;");
 
+BP();
 W("returns exactly matching SBlocks.");
 W("However, this scheme does not prevent the author from inserting multiple 
different SBlocks with same subspace-identifier pair.");
 W("On the network, the identifier will always be a hash code.");
 W("If the author provides a specific string, the hash of that string is 
used.");
 W("Otherwise, the identifier can be generated by computing H(H(content)), and 
presenting H(content) for user as the identifier part, which will be hashed 
again when used.");
+EP();
 
 /* [ Other option would be to have a different URL prefix for strings and 
hashes. ] */
-P();
 H4("Economy");
 
+BP();
 W("Because nodes have to verify the passing SBlocks, these requests should be 
made a bit more expensive.");
 W("Peers should never credit other peers that forward invalid blocks, thereby 
making it so that it is in the best interest of every peer to check the 
signature before wasting bandwidth or storage space on it.");
+EP();
 
 H3("GNUnet AFS directories");
 
+BP();
 W("A GNUnet directory is a standardized format of a file containing 
information about multiple files.");
 W("Like normal files, directories can be found with a search that returns 
either an SBlock (with the directory bit set) or a variant of the RootNode 
where also a bit in the minor version is changed to indicate that the file is a 
directory.");
+EP();
 
 H4("Format of directory files");
 
+BP();
 W("The format of the directory files is a sequence of 1k blocks each 
containing either a RootNode or an SBlock (which are always padded to 1k).");
 W("Other meta-block types may be defined in the future.");
 W("The directory file starts with one special 1k block of the following 
format:");
 
-P();
+EP();
 PRE("typedef struct {" .
     "  char[8] MAGIC;   /* &quot;\211GND\\r\\n\\032\\n&quot; */\n" .   
     "  int version; /* &quot;0000&quot; */\n" .        
@@ -161,7 +176,7 @@
     "  char description[MAX_DESC_LEN]; /* 256 b */\n" .
     "  char reserved[752]; /* padding to 1k */\n" .
     "} DirectoryFileHeader; /* total: 1024 bytes */");
-P();
+BP();
 
 W("The blockCount is the number of 1k blocks that follow.");
 W("If the file is larger than 1024*(blockCount+1) the rest of the file is to 
be ignored by current clients and may be used for future extentions to the 
format.");
@@ -172,13 +187,15 @@
 W("SBlock information can be added to a directory separately.");
 W("The mime-type does not need to be stored explicitly since the MAGIC code 
and the version identify the file type.");
 
-P();
+EP();
 H3(" Storing and retrieving data ");
 
-P();
 H4("Inserting");
+BP();
 W("To insert several files, protected via subspace");
+EP();
 echo "<ol><li>\n";
+BP();
 W("Insert all files regularly (keys optional), and remember their 
RootNodeHeaders.");
 echo "</li><li>\n";
 W("Create and insert a list of previously inserted files as Directory using 
the RootNodeHeaders as its blocks");
@@ -187,22 +204,26 @@
 echo "</li></ol>\n";
 W("Optionally, the Directory can also be inserted as a regular file under 
chosen keywords and with the appropriate meta-data.");
 
-P();
+EP();
 H4("Querying");
 
+BP();
 W("AFS clients should be able to distinguish between actual files, SBlocks and 
Directories using the type information stored in the Directory.");
 P();
 
 W("The AFS user interface should provide an easy-to-use interface for browsing 
SBlocks and Directory hierarchies.");
 
+EP();
 H3("Allowing pseudoupdateable content");
 
+BP();
 W("The subspace-directory scheme allows (pseudo) updateable content, as in 
Freenet.");
 W("Note that the need for these methods is diminished slightly if we allow for 
queries matching whole subspace.");
 
-P();
+EP();
 H3("Discussion");
 
+BP();
 W("Some remarks:");
 echo "<ul><li>";
 W("The subspace scheme allows meta-data of lists and files to be inserted 
preventing false insertions by third parties.");
@@ -220,7 +241,6 @@
 W("The returned meta-data block contains a special bit which will indicate 
that what the download will retrieve is not an ordinary file but a directory.");
 echo "</li></ul>";
        
-P();
 H4("Questions and Answers");
 echo "<dl>\n";
 DT("How do we achieve deniability for the SBlocks?");
@@ -228,7 +248,7 @@
 W("The first 488 bytes of an SBlock should be encrypted using the 3HASH scheme 
(encrypt with the identifier I, search for H(I), reply is the tuple 
E<sub>I</sub>(SBlock<sub>488</sub>), and SBlock<sub>H(I), sig</sub> (the second 
half with the hash of the SBlock identifier, the public key and the signature 
must be in plaintext for verification).");
 W("Note that this encryption just prevents filtering of SBlocks based on 
plaintext keywords or file identifiers; the pseudonym and the query to match 
against must always be available in plaintext (to allow signature verification) 
and thus pseudonyms of well-known evildoers can always be censored by any 
well-meaning citizen.");
 W("Yet, the pointed-to content and the meta-data are both protected and as we 
know, every good evildoer will have lots of pseudonyms (RSA keys) available.");
-P();
+BR();BR();
 W("Also, an identifier <tt>I</tt> of the SBlock must be known to anybody 
searching for an SBlock since <tt>I</tt> is required to decrypt parts of the 
SBlock and H(I) forms, together with the hash of the pseudonym, the query.");
 W("The identifier of an SBlock is thus similar to the plaintext keyword for a 
3HASH query: it must be obtained out-of-band.");
 BR();
@@ -270,11 +290,12 @@
 W("However, our main emphasis is to allow publishing, browsing and downloading 
of file collections, partly or entirely, without forcing the user to 
artificially archive the content (multiple representations of same content is 
wasteful from the network&rsquo;s viewpoint) or publish separate, 
unstandardized content listings in addition to the actual files.");
 echo "</dd><dt>";
 
-P();
 H3("Acknowledgments ");
 
+BP();
 W("Some of the ideas presented here cannibalized and adapted from end-user 
level knowledge of the %s.",
        extlink_("http://www.freenetproject.org/","Freenet Project"));
+EP();
 
 /*
  revisions:





reply via email to

[Prev in Thread] Current Thread [Next in Thread]