[Top][All Lists]
[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 "super-lookup-cache" 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.
"A439SBCKF832JFE84KDF0359DFLEWLKRKW353,H(’somestring.html’)"");
+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; /* "\211GND\\r\\n\\032\\n" */\n" .
" int version; /* "0000" */\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’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:
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r943 - GNUnet-docs/WWW/test,
durner <=