About SYNC
----------


Sync implements an HTTP server that allows clients to backup data.
Envisioned use-cases are the creation of backups for Taler wallets and
(GnuPG) key rings and other small but essential sensitive information.


Accountability:
===============

Client accounts are identified by a public key. For each client, at
most one backup can be stored at any given point in time.  To create
an account, the service may require payment using GNU Taler when the
first upload is attempted.


Availability:
=============

The Sync service may impose a limit on the maximum size of the backup
that is supported.  The /terms API lists the specific terms of
service, including the maximum size and the payment required for a
year of backup service.


Integrity:
==========

All uploads must be signed with the respective private key of the
account.  Clients must know their public key to download the latest
backup.


Confidentiality:
================

Clients are responsible for confidentiality and key management.
All data uploaded should be encrypted by the client first.
For key management, please consider Anastasis.


Consistency:
============

Uploads that replace an existing backup must acknowledge the previous
version by including the hash of the previous version in the backup
request. This ensures that multiple clients working on the same
account never accidentally overwrite data from another client.


Usability:
==========

Sync uses a simple REST-based API documented at
https://docs.taler.net/.


Operation:
==========

Sync does at this time not include HTTPS support. While this could
be trivially added, we expect Sync to be run behind a reverse proxy
that terminates TLS.

At this time, Sync only works with a Postgres database. Other database
backends could easily be written in the future.


Dependencies
============

See INSTALL for generic installation instructions.  In addition, Sync
requires GNUnet, Taler Exchange, and Taler Merchant libraries.  If these
are installed in a non-standard place, use the configure script options
--with-gnunet=DIR, --with-exchange=DIR, and --with-merchant=DIR,
respectively.

The following are likewise required:

  libmicrohttpd --with-microhttpd=DIR
  PostgreSQL    --with-postgresql=PATH-TO-PG-CONFIG

Other non-essential dependencies are indicated by --with-FOO
in the "./configure --help" output.


License:
========

Sync is released under the Affero GPL v3 or later.

The primary source code is maintained at https://git.taler.net/sync.git
by the GNU Taler team.
