<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>EExxppllooiittiinngg HHTTMMLL55 TTeecchhnnoollooggiieess ffoorr DDiissttrriibbuutteedd PPaarraassiittiicc WWeebb SSttoorrggee?</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Martin Krulis</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Zbynek Falt</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Filip Zavoral? Martin Krulis</string-name>
          <email>ral@ksi.mff.cRuneip.ucbzlic</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Zbynek Falt</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Filip Zavoral</string-name>
          <email>zavoralg@ksi.mff.cuni.cz</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Parallel Architectures/Applications/Algorithms Research Group</institution>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2014</year>
      </pub-date>
      <fpage>71</fpage>
      <lpage>80</lpage>
      <abstract>
        <p>Current web technologies have been leaping forward, especially since the introduction of HTML5. The web browsers of the day implement various APIs for the client-side scripts, such as elaborate data storage or advanced network connectivity. We propose, how to combine these technologies to create distributed data storage using the web environment. We have implemented a prototype framework as a proof of concept and explored the most problematic issues which require to be researched further. Systems that would use this storage may bene t from the fact that the users do not need to install or con gure any type of client application, since the only thing required is the web browser. Web-based distributed data storage can be used as an extension of server storage, for data caching, and in various other applications.</p>
      </abstract>
      <kwd-group>
        <kwd>html5</kwd>
        <kwd>web storage</kwd>
        <kwd>distributed</kwd>
        <kwd>data</kwd>
        <kwd>parasitic</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>Introduction</title>
      <p>
        World wide web played a role of open interactive platform for information
exchange, business, or entertainment for over twenty years. It begun as a simple
technology for presenting text documents, but it has evolved signi cantly in the
past decades. In the last few years, its technologies leaped forward as HTML5
[
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] emerged, which is not only a new version of the HTML language, but it also
integrates speci cations for client side scripting and APIs for advanced browser
features. It shifted the web browsers from simple web page presenters into an
application platform, which even become basis for lightweight operating systems [
        <xref ref-type="bibr" rid="ref2">2</xref>
        ].
      </p>
      <p>The ability of executing scripts in the browser raises many security issues,
since the user have virtually no way how to verify that these scripts do not
perform malicious routines and will not pose a threat. The client scripting
environments in the browsers must nd a very ne balance between security and
provided functionality, which is required by complex client-server applications.
Furthermore, the browsers must implement these speci cations correctly to
ensure at least some level of protection.</p>
      <p>The HTML5 technologies are designed to support more complex client-side
scripts for more elaborated client-server web applications. Particularly, HTML5
advanced these browsers capabilities:</p>
      <p>GUI design, graphics, and multimedia support,
communication capabilities (Server-sent events, WebSockets, WebRTC),
client-side data and le management (File API, Web Storage, Indexed DB),
client-side computations (Web Workers, WebCL).</p>
      <p>The line between legitimate resource utilization and their exploitation is quite
thin and not formally de ned. Therefore, it is reasonable to assume that these
technologies will remain in the browsers for the perceivable future time, despite
the possibility they might be misused by parasitic applications.
1.1</p>
      <sec id="sec-1-1">
        <title>Contributions and Outline</title>
        <p>Our particular interest turns towards data storage capabilities and
communication capabilities of the browsers. Many current users of the web have a lot of
free disk space in their computers and su cient connectivity. This space may be
utilized to store or cache data of the web applications they use. It may also be
exploited by a web application, or its embedded component such as ad banner,
to secretly infest the users hard drive with their own data.</p>
        <p>This paper explores the limitations of current HTML5 technologies and
propose a way how these technologies may be used or misused to create a distributed
data storage. We have implemented a prototype framework that tests the
feasibility of this idea. The prototype let us identify the most problematic areas of
this domain and outline possible solutions for them. We have also proposed
possible applications which may use these technologies for legitimate reasons and
in a parasitic way { i.e., stealing the disk space from the users.</p>
        <p>The paper is organized as follows. Section 2 revises related work. The HTML5
technologies relevant to our work are presented in Section 3. Section 4 proposes
a design of distributed data storage and outlines possible problems that will
require further research. Possible applications are presented in Section 5 and
Section 6 concludes the paper.
2</p>
      </sec>
    </sec>
    <sec id="sec-2">
      <title>Related Work</title>
      <p>
        Utilizing unused resources from desktop computers is not a new idea. Many
systems, such as Entropia [
        <xref ref-type="bibr" rid="ref3">3</xref>
        ] or SETI@home [
        <xref ref-type="bibr" rid="ref4">4</xref>
        ], have successfully used idle
CPU in the past. With new HTML5 technologies, this task become even easier.
For instance a WeevilScout framework [
        <xref ref-type="bibr" rid="ref5">5</xref>
        ] was built to utilize computational
power of the web browsers [
        <xref ref-type="bibr" rid="ref6">6</xref>
        ] for bioinformatic tasks.
      </p>
      <p>
        In this work, we focus on utilizing the spare storage capacities of ordinary
computers to form a distributed data storage. Distributed storage systems of the
day have evolved from providing basic means of remote data, to o ering services
like high availability, anonymity, redundancy, and archival [
        <xref ref-type="bibr" rid="ref7 ref8">7, 8</xref>
        ].
      </p>
      <p>
        Several projects already looked into scavenging unused storage on desktop
computers. Farsite [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ] is a replication-based serverless distributed le system
built on Windows desktops that uses the Byzatine-fault protocol to manage le
and directory metadata. Freeloader [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ] framework aggregates unused desktop
storage space into a shared cache space for hosting large scienti c datasets.
It utilizes le stripping across a set of machines in order to provide high data
throughput. Storage@home [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ] is a distributed storage infrastructure developed
to solve the problem of backing up and sharing large data using a distributed
model of volunteer managed hosts.
      </p>
      <p>
        As a peer-to-peer storage system, CFS [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ] stores data blocks reliably using
distributed hash tables. It arranges blocks over a number of nodes to provide
fault tolerance, high scalability, and load balancing. Ivy [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ] is a le system using
logs to saving both data and meta-data. The logs are saved in the distributed
hash table across the unreliable peers. The Freenet [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ] le sharing network stores
anonymized documents and allows them to be retrieved later by an associated
key. Files on Freenet are split into multiple small blocks, with additional blocks
added to provide redundancy. Also peer-to-peer le sharing networks such as
BitTorrent [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ] or DC++ [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] can be considered as representants of such a class
of distributed storage systems. Using decentralized network, the users share their
les with other members.
      </p>
      <p>Although all these storage systems proved their usability and applicability,
they su er from one substantial drawback from a user's point of view: they
require to install a client software. To our best knowledge, no distributed storage
system operates without the need of such additional client component.
3</p>
    </sec>
    <sec id="sec-3">
      <title>HTML5 and New</title>
    </sec>
    <sec id="sec-4">
      <title>Web Technologies</title>
      <p>In this section, we will brie y introduce the HTML5 technologies, which have
emerged in the past few years and which may be used to create distributed
data storage using web browsers of common users. These technologies are
implemented in the leading desktop browsers, thus available for most web users.
3.1</p>
      <sec id="sec-4-1">
        <title>Persistent Data Storage</title>
        <p>
          The HTTP was designed as strictly stateless protocol, with no user session
support. This aw was partially remedied by introducing cookies { a simple
mechanism, that allows server to register session data at client side, which are resent
automatically with each request. Cookies do not satisfy complex needs of modern
web applications, thus more elaborate solutions were devised in HTML5.
Web Storage. The web storage [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] was originally designed with the same
motivation as cookies { to store structured data at client side. Unlike cookies,
the web storage is completely maintained by JavaScript, so the programmer may
use it in di erent ways. There are two types of web storage interfaces for two
di erent scenarios { the session storage and the local storage.
        </p>
        <p>The session storage is designed for scenarios when the application needs to
store session data, but the user may run multiple sessions in di erent windows.
Therefore, the storage is tied to a speci c site and speci c opened window/tab.</p>
        <p>The local storage is designed for scenarios when the application needs to store
data at the client side, but these data span throughout the opened windows. It is
also particularly useful when the data needs to overlive the current user session.
The storage is tied to a speci c site and the data are persistent.</p>
        <p>
          Both storages use simple API that allows saving key-value pairs, where both
the key and the value are simple strings. The keys are treated as unique
identi ers and the API allows the application to iterate over all stored keys. The
speci cation also includes some security restriction. The most important
restriction in our case is the disk quotas for the stored data, i.e., the browser does not
permit the script to store more data then speci ed by the quota.
Indexed Database. More complex data management problems require more
elaborate solutions. For this purpose, the W3 consortium presented the Index
Database API [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ], which provide basic database functionality for the client
scripts. The IndexDB API replaces Web SQL Database API, which was
deprecated by W3C, yet some implementations exist.
        </p>
        <p>The indexed database API allows the JavaScript at client side to create
indexed data stores and operate them in a transaction-safe way. The data are
usually stored in e cient persistent data structures (such as B-trees), which
support e cient insertion, deletion, key-based searching, and deterministic
(ordered) enumeration.
3.2</p>
      </sec>
      <sec id="sec-4-2">
        <title>Communication Capabilities</title>
        <p>The rst direct communication capabilities were introduced into client-side web
scripting with the asynchronous HTTP API (XMLHttpRequest). This API
allowed the client code to perform its own requests on the background, thus
synchronize client and server application status without explicit user actions.
However, the communication must still be initiated from the client side, which
complicates situations when the server needs to notify clients.</p>
        <p>
          One of the rst techniques designed for server-initiated noti cations (also
denoted AJAX-push or reverse AJAX) was Comet [
          <xref ref-type="bibr" rid="ref19">19</xref>
          ]. This technique uses
long-held HTTP requests that allow the server to initiate the transfer over a
connection created by the client. The client sends an asynchronous HTTP
request to the server demanding a status update. If no updates are available, the
server postpones the response whilst the connection remains open. When the
status changes, the server noti es all clients by sending the responses to all
pending requests. Unfortunately, the long-held HTTP requests are not managed
very well by current HTTP servers (e.g., Apache or Microsoft IIS).
        </p>
        <p>An extension of the Comet approach was presented by the Server-sent events
API. This API uses also long-held HTTP connections, but it allows multiple
events to be sent over an opened HTTP request and standardizes both the
message format and the client-side API that process these messages.
WebSocket. The WebSocket protocol is a HTTP-compatible protocol, which
allows upgrading regular HTTP connections into a WebSocket connections. The
WebSocket connection reuses underlying TCP (or SSL/TLS) channel of the
original connection to transfer data frames in either direction. Both sides (former
HTTP client and server) become equal communication partners, i.e., they can
send a message over to their peer at any time.</p>
        <p>
          The WebSocket client API [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] is quite simple. It handles only the creation
and the destruction of the communication channel and sending/receiving
messages. The protocol supports both textual and binary data, thus the JavaScript
may send or receive strings, Blob objects, and ArrayBuffer objects.
WebRTC. The HTTP protocol and the WebSockets are designed for
clientserver communication. In some cases, a direct communication between clients
may be required. WebRTC [
          <xref ref-type="bibr" rid="ref21">21</xref>
          ] is a technology, which was designed for
realtime peer-to-peer communication between web browsers. The technology was
originally intended for multimedial transfers (e.g., video phone calls), but it
handles data transfers as well.
        </p>
        <p>The browsers rst create a RTCPeerConnection, which is a logical
representation of the connection. This connection is usually routed using ICE technologies
for NAT traversal, since most browsers are connected to the internet from a
private network. The RTC connection allows the transfer of one or multiple streams.
A stream may be either media stream, which can be directly captured from a
web camera and directly displayed in an appropriate HTML5 element, or a data
stream, which has the same behaviour and API as a WebSocket connection.
4</p>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>Web Browser as Distributed Storage Platform</title>
      <p>A distributed data storage system (as almost any database system) usually
employs layered architecture. Lower layers are responsible for raw data operations
while upper layers add user-friendly functionality, such as transparent format
transcoding, management of logical data entities, integrity constraints,
transaction support, or security. These high-level features are quite well understood
and beyond the scope of this work. Hence, we focus on the lowest level { the
utilization of HTML5 technologies for raw data storage and transfer.
4.1</p>
      <sec id="sec-5-1">
        <title>Infrastructure</title>
        <p>The data storage infrastructure can be divided into three logical components:
the master (running mostly on a server or on multiple servers),
the clients (the connected web browsers),
and the communication protocol they use.</p>
        <p>The master controls the entire storage. It integrates all data distribution
logic and initiates all data transactions. It can be implemented as one centralized
server, as a small cluster of servers located in one server room, or even as a large
distributed system. Theoretically, some parts of the master functionality can be
performed in the browsers; however, these details are not important from the
data storage point of view. Hence, we will present the master as a single server.</p>
        <p>The most important role of the clients is to provide their storage space for
the system. Some of these clients may also use the system functions (i.e.,
retrieve/store user data); however, we primarily focus on the data management.
The clients require to execute only a minimalist script which connects to the
master and waits for commands. All operations are issued from the master and
the client simply process them. There are three basic kinds of operations:
metadata operations (client identi cation, capabilities assessment),
data retrieval (list, read),
and data modi cations (insert, update, delete).</p>
        <p>The protocol is designed to work as a simple RPC for the client operations.
The data transfers are bidirectional and server-initiated, thus we selected the
WebSockets as the underlying protocol. Each operation has its own request
message and response message. The client process the messages sequentially and for
each incoming request generates one response. Figure 1 illustrates this model.
Optimizing Data Transfers. Even though the basic concept may suggest
that the major data ow will be between master and clients, there are many
situations, when the data needs to be transferred between clients directly. For
instance, when a data block needs to be replicated from one nodes to another
or when a client requests data, which are stored on adjacent nodes.</p>
        <p>The WebRTC peer-to-peer connections may be used to optimize data
transfers between the clients (browsers). The WebRTC creates data streams, which
are operated by the same API as the WebSockets. Hence, it will be easy to
adapt the implementation to accomodate this feature. Even though the
WebRTC may reduce the master-client communication, the uplink to the master is
still required, since the master controls the performed operations.</p>
        <p>
          Figure 2 depicts the augmentation of centralized data storage where
peerto-peer data channels are used to optimize the data tra c between clients. The
peer-to-peer channels are created on demand only between those clients that
need to communicate and they may be closed when no longer needed.
We have implemented the prototype of the data storage layer. The client was
implemented as a simple web page which connects to the master using
WebSocket [
          <xref ref-type="bibr" rid="ref20">20</xref>
          ] channel and handle commands sent by the server. Both web
storage [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ] and Indexed DB API [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] were tested for the client-side data
management. The master was implemented as Node.js application that distributed data
to the connected clients and veri ed the accessibility of the data.
        </p>
        <p>
          Addressing all technical details is way beyond the scope of this work, but we
have identi ed the most problematic issues and proposed solutions for them.
Resource Limitations. One of the key issues is the the limitation of user
resources, especially the disk space. Current browser use the default quota of 5 MB
per site for local storage [
          <xref ref-type="bibr" rid="ref17">17</xref>
          ]. This limit is to low to create large distributed data
storage even if millions of users are participating. The quota can be con gured
in all major browsers, however, changing this setting is not very convenient. The
IndexedDB API [
          <xref ref-type="bibr" rid="ref18">18</xref>
          ] is designed for signi cantly larger data, but it still apply
some form of quotas. Fortunately, the IndexedDB apply only soft quotas and the
browser interactively prompts the user when the limit is to be exceeded.
Furthermore, a Quota API [
          <xref ref-type="bibr" rid="ref22">22</xref>
          ] is currently being speci ed by the W3 consortium,
which should provide even more convenient way to manage the quotas.
        </p>
        <p>Another resource that might limit the system is the network connectivity. The
desktop computers are usually connected by some form of wired connection, such
as xDSL (phone lines) or FTTx (dedicated metallic or optical lines). According
to various resources, the average connection speeds are oscillating between 1
and 100 MBps depending on the location. Furthermore, we have to consider
that many technologies (like the ADSL) use asymmetric connections, where the
upload is several times slower than the download.</p>
        <p>The storage and the data transfer issues are even more serious if we consider
portable devices such as tablets or smartphones. Regular user hardly notices
if we allocate one gigabyte on a desktop computer, but the same amount of
data cannot be easily taken from a smartphone. Furthermore, mobile devices
are usually connected via cellular networks which are much slower and often
limit the data transfers by fair user policies.
Volatility of the Clients. Most of the distributed systems expect that the
participating nodes are devoting their e orts to ful ll the objectives of the
system. Although there are methods of dealing with many forms of failures, the
system usually expects that the nodes are available most of the time. The web
users, on the other hand, connect to the system at their own discretion without
any regards to the system requirements.</p>
        <p>The system must employ speci c measures to ensure data availability.
Prehaps the most straightforward solution is to select su cient data replication
level. More elaborate approach would be to study individual behaviour of the
users and data requests. These strategies will require intensive future research.
Security. The system must provide some guarantees regarding the stored data,
such as persistence, integrity, or privacy. Our distributed data store does not
ful ll any of these requirements, since the clients do not provide any guarantees.
The data may be easily corrupted, erased, or accessed by unauthorized users.
Some of the security requirements may be ful lled by employing check sums,
security hashes, cryptography, and data replication. However, this topic is too
broad and beyond the scope of this paper.
5</p>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Web Storage Applications</title>
      <p>We have projected initial estimates concerning the web storage capacity based
on existing web application and outlined a few possible use cases to illustrate
the applicability of the storage.
5.1</p>
      <sec id="sec-6-1">
        <title>Capacity Analysis</title>
        <p>
          We have based our analysis on the statistical data of Facebook [
          <xref ref-type="bibr" rid="ref23">23</xref>
          ], which is
probably the largest web application as it has the most active users. At the
beginning of year 2014, the Facebook had 1:31 billion active users, from which
51:9% used mobile or handheld devices to access the application. The number
of users is expected to grow in the future as it has in the past (e.g., the annual
growth between 2012-2013 was 22%). If we utilize 1 GB on average of each active
desktop user, we could get approximately 600 PB of raw capacity.
        </p>
        <p>Utilizing this raw capacity e ectively will be quite a challenging task. Even
the users of such popular application as the Facebook exhibit very irregular
behaviour in visiting the web page. The active users spend about 640 million
minutes each month, which is only one minute per user in average. On the other
hand, 48% of all users connect to the web page on a daily basis.</p>
        <p>These statistics suggest that the matter of data replication cannot be solved
by a simple random approach, but careful study of user behaviour has to be
conducted. Furthermore, the application may employ additional methods like
bene ts to encourage the users connect and stay on the web page.
5.2</p>
      </sec>
      <sec id="sec-6-2">
        <title>Legitimate Usage</title>
        <p>The data storage and sharing systems usually require some form of a client
application. If such systems are built on the top of web technologies, they may
provide clients which can be directly used in the web browser without explicit
installation or con guration.</p>
        <p>Existing applications, in which the users share some content, can use the
distributed storage as a cache to reduce the data transfers of their internal servers.
For instance, Facebook can use this cache for photographs, Google Doc for
documents, etc. When the data are requested by a user, they may be downloaded
from a peer who is online instead of downloading them from a server.</p>
        <p>A di erent approach can be used by applications which have many users,
but do not require storing or caching large amounts of data. These applications
may o er the capacity of the distributed storage to third parties. The concept
is similar to web advertisement where a web page shows ad banners, however in
this case, the users support the application by donating their own disk space.
5.3</p>
      </sec>
      <sec id="sec-6-3">
        <title>Parasitic Usage</title>
        <p>The data storage can be also misused by malicious applications to steal the
disk space from the users. For instance, the idea of acquiring the data storage
at clients by the means of ad banners can be used both legitimately and
parasitically, depending on whether the user is informed about the intent or not.
However, when used parasitically, the application needs to use quite elaborate
way of user targeting in order to create at least somewhat persistent data storage.</p>
        <p>
          To acquire even more clients, the parasitic storage malware may resort to
exploit vulnerabilities of other web applications. When a victim application is not
correctly protected against script injection attacks [
          <xref ref-type="bibr" rid="ref24">24</xref>
          ], the parasitic application
may inject the client code. The users of the victim application then become also
clients of the parasitic distributed storage without realizing it.
6
        </p>
      </sec>
    </sec>
    <sec id="sec-7">
      <title>Conclusions</title>
      <p>We have proposed a novel idea how existing HTML5 technologies may be used
or even misused for a distributed data storage. The storage clients require only
modern web browser, which is a piece of software that is present on virtually
every desktop computer. We have implemented prototype framework as a proof
of concept and outlined additional problems that require our attention.</p>
      <p>In the future work, we would like to address the remaining problem, especially
analyze the user behaviour. If we are able to predict client up times based on
behavioural models, we will be able to distribute data among the client nodes in
more e cient way. Furthermore, we would like to explore possibilities of creating
distributed database system, that will also distribute the query evaluation plans
and execute them partially on the client nodes.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Hickson</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hyatt</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          : Html5. W3C Working Draft, May (
          <year>2011</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Pichai</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Upson</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          :
          <article-title>Introducing the Google Chrome OS</article-title>
          .
          <article-title>The O cial Google Blog (</article-title>
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Chien</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Calder</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Elbert</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bhatia</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Entropia: architecture and performance of an enterprise desktop grid system</article-title>
          .
          <source>Journal of Parallel Distributed Computing</source>
          <volume>65</volume>
          (
          <year>2003</year>
          )
          <volume>597</volume>
          {
          <fpage>610</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4. Univ. of Berkeley: SETI@Home. http://setiathome.ssl.berkeley.edu/ (
          <year>2006</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Reginald</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Putra</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Belloum</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Koulouzis</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bubak</surname>
          </string-name>
          , M.,
          <string-name>
            <surname>de Laat</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          :
          <article-title>Distributed Computing on an Ensemble of Browsers</article-title>
          . (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>6. W3C: Web Workers. http://www.w3.org/TR/workers/</mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7.
          <string-name>
            <surname>Thanh</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mohan</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Choi</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kim</surname>
            ,
            <given-names>P.:</given-names>
          </string-name>
          <article-title>A taxonomy and survey on distributed le systems</article-title>
          .
          <source>NCM 08, Fourth International Conference on Networked Computing and Advanced Information Management</source>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Hasan</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Anwar</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Yurcik</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Brumbaugh</surname>
          </string-name>
          , L.,
          <string-name>
            <surname>Campbell</surname>
            ,
            <given-names>R.:</given-names>
          </string-name>
          <article-title>A survey of peerto-peer storage techniques for distributed le systems</article-title>
          .
          <source>International Conference on Information Technology: Coding and Computing</source>
          ,
          <string-name>
            <surname>ITCC</surname>
          </string-name>
          <year>2005</year>
          2
          <article-title>(</article-title>
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Adya</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Bolosky</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Castro</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Cermak</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chaiken</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Douceur</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Howell</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lorch</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Theimer</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wattenhofer</surname>
          </string-name>
          , R.: Farsite: Federated, available, and
          <article-title>reliable storage for an incompletely trusted environment</article-title>
          .
          <source>Proceedings of the 5th Symposium on Operating Systems Design and Implementation</source>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Ma</surname>
            ,
            <given-names>X.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vazhkudai</surname>
            ,
            <given-names>S.S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zhang</surname>
            ,
            <given-names>Z.</given-names>
          </string-name>
          :
          <article-title>Improving data availability for better access performance: A study on caching scienti c data on distributed desktop workstations</article-title>
          .
          <source>Journal of Grid Computing</source>
          (
          <year>2009</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          11.
          <string-name>
            <surname>Beberg</surname>
            ,
            <given-names>A.L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Pande</surname>
            ,
            <given-names>V.S.:</given-names>
          </string-name>
          <article-title>Storage@home: Petascale Distributed Storage</article-title>
          .
          <source>Parallel and Distributed Processing Symposium</source>
          (
          <year>2007</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          12.
          <string-name>
            <surname>Dabek</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Kaashoek</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Karger</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Morris</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Stoica</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          :
          <article-title>Wide-area cooperative storage with cfs</article-title>
          .
          <source>Proceedings of the 18th ACM Symposium on Operating Systems Principles (SOSP 01)</source>
          (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          13.
          <string-name>
            <surname>Muthitacharoen</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Morris</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Gil</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Chen</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Ivy: A read/write peer-to-peer le system</article-title>
          .
          <source>Proceedings of 5th Symposium on Operating Systems Design and Implementation</source>
          (
          <year>2002</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          14.
          <string-name>
            <surname>Clarke</surname>
            ,
            <given-names>I.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sandberg</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Wiley</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hong</surname>
          </string-name>
          , T.W.:
          <article-title>Freenet: A Distributed Anonymous Information Storage and Retrieval System</article-title>
          .
          <source>Designing Privacy Enhancing Technologies. Lecture Notes in Computer Science</source>
          (
          <year>2001</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          15.
          <string-name>
            <surname>Pouwelse</surname>
            ,
            <given-names>J.e.a.</given-names>
          </string-name>
          :
          <article-title>The bittorrent p2p le-sharing system: Measurements and analysis</article-title>
          . Peer-to-Peer
          <string-name>
            <surname>Systems</surname>
          </string-name>
          (
          <year>2008</year>
          )
          <volume>205</volume>
          {
          <fpage>216</fpage>
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          16. : DC++. http://dcplusplus.sourceforge.net/ (
          <year>2013</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>17. W3C: Web Storage. http://www.w3.org/TR/webstorage/</mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          18. W3C:
          <article-title>Indexed Database API</article-title>
          . http://www.w3.org/TR/IndexedDB/
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          19.
          <string-name>
            <surname>McCarthy</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Crane</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Comet and Reverse Ajax: The Next-Generation Ajax 2.0</article-title>
          .
          <string-name>
            <surname>Apress</surname>
          </string-name>
          (
          <year>2008</year>
          )
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          20. W3C:
          <article-title>The WebSocket API</article-title>
          . http://dev.w3.org/html5/websockets/
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          21.
          <article-title>W3C: WebRTC 1.0: Real-time Communication Between Browsers</article-title>
          . http://dev.w3.org/2011/webrtc/editor/webrtc.html
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          22. W3C:
          <article-title>Quota Management API</article-title>
          . https://dvcs.w3.org/hg/quota/rawle/tip/Overview.html
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          23. Statistic Brain Research Institute:
          <source>Facebook Statistics from 1.1</source>
          .
          <year>2014</year>
          . http://www.statisticbrain.com/facebook-statistics/
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          24.
          <string-name>
            <surname>Spett</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          :
          <article-title>Cross-site scripting</article-title>
          .
          <source>SPI Labs</source>
          (
          <year>2005</year>
          )
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>