taler-docs

Documentation for GNU Taler components, APIs and protocols
Log | Files | Refs | README | LICENSE

commit 915b02988ad48c6cb39a1101354dd9e596c784ed
parent 28d42de585e69f85687b06ff7e3388babcd50e50
Author: Christian Grothoff <grothoff@gnunet.org>
Date:   Mon,  4 Aug 2025 11:24:24 +0200

add data protection concept

Diffstat:
Mmanpages/taler-exchange.conf.5.rst | 6+++++-
Mtaler-exchange-manual.rst | 49+++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 54 insertions(+), 1 deletion(-)

diff --git a/manpages/taler-exchange.conf.5.rst b/manpages/taler-exchange.conf.5.rst @@ -97,6 +97,10 @@ CURRENCY_ROUND_UNIT DB Plugin to use for the database, e.g. “postgres”. +ATTRIBUTE_ENCRYPTION_KEY + Attribute encryption key for storing attributes encrypted + in the database. Should be a high-entropy nonce. + SERVE Should the HTTP server listen on a UNIX domain socket (set option to "unix"), or on a TCP socket (set option to "tcp"), or be activated via systemd (set option to "systemd"). @@ -697,7 +701,7 @@ RATER_COMMAND MIN_ROW_FILENAME Name of the file where taler-exchange-sanctionscheck will store the - last row process during sanction list evaluation. Not in the database + last row process during sanction list evaluation. Not in thed atabase as we frequently need to reset it when we get a new list, so no transactionality is needed or even desirable. There should be no need to change the default. diff --git a/taler-exchange-manual.rst b/taler-exchange-manual.rst @@ -639,6 +639,55 @@ Finally we need to grant the other accounts limited access: ``taler-exchange-dbinit`` tool cannot setup these permissions, as it does not know which users will be used for which processes. +.. _Dataprotection: + +Data protection concept +----------------------- + +The ``kyc-attributes`` table contains the most sensitive +data, namely the KYC records of the recipients of payments. +The data could include passports, business documentation +and other sensitive information. At a high-level, it is +stored in JSON format (key-value), compressed and then +additionally encrypted using a secret key from the +exchange configuration (the ``ATTRIBUTE_ENCRYPTION_KEY``). +Thus, this data is protected even if the full database +is leaked. + +The ``aml-history`` table stores the main information +provided by AML officers. This may contain sensitive +data about risk assessments on customers, exposed or +secret limits imposed on individual accounts, and +in general forms supplied by bank staff. AML decisions +are also tracked in the ``legitimization-*`` tables, +including the latest rules that apply to an account. + +The second most sensitive table is +``wire-targets``, as it contains the IBANs (and possibly +other visible information from RFC 8905) of the bank +accounts of the customers. Many other tables contain +transaction data (incoming, outgoing, p2p transfers, +etc) which are somewhat less sensitive. It should be +noted that the actual contracts between customers and +merchants are not available to the exchange operator; +the ``contracts`` table only stores contracts for p2p +transfers in an end-to-end encrypted format that the +exchange itself can never decrypt. + +The database is periodically cleaned up via the +``taler-exchange-dbinit --gc`` command. It is +currently hard-coded (!) to delete KYC/AML data +of accounts that have been inactive for 10 years. + +Data on incoming wire transfers (reserves) is +deleted after the ``LEGAL_RESERVE_EXPIRATION_TIME`` +is reached, as configured in the ``[exchangedb]`` +section. The default is set to 7 years. + +Payment data is deleted whenever the legal expiration date for the +``DURATION_LEGAL`` configured in the respective section ``coin`` is reached +(typically also after 10 years). + Basic Setup: Currency, Denominations and Keys =============================================