taler-docs

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

commit 8817432a08c5da7871e3252f9a6da05d287f3143
parent 0337d0b116ffe5fba2b4b16b581578d66d03291d
Author: Pius Loosli <loosp2@bfh.ch>
Date:   Thu, 12 Oct 2023 11:46:34 +0200

Donau: rework crypto in /issue, rename remainin "denomation" to "donation unit"

Diffstat:
Mcore/api-donau.rst | 83++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 72 insertions(+), 11 deletions(-)

diff --git a/core/api-donau.rst b/core/api-donau.rst @@ -36,7 +36,7 @@ This is intended to provide a quick overview of the whole REST API. For a more d The chapters group the families of requests frequently encountered when using the donau API: -* :ref:`Status information<donau_status>`: get the public signing keys of the donau, the denomination unit key, the donaus config or some entropy +* :ref:`Status information<donau_status>`: get the public signing keys of the donau, the donation unit key, the donaus config or some entropy * :ref:`Issue receipts<donau_issue>`: For use by charities: Issue receipts for blinded unique donor ids. * :ref:`Submit receipts<donau_submit>`: Receive the receipts and, if valid, add all of it's donation units to the donor total. Returns a signature on the total yearly donation amount, hash of taxid+salt and year. * :ref:`Charity administration and status information<donau_charity>`: @@ -74,7 +74,7 @@ long-term offline signing key of the Donau, which clients should cache. timestamp. The given value must be an unsigned 64-bit integer representing seconds after 1970. If the timestamp does not exactly match the - ``stamp_start`` of one of the denomination keys, all + ``stamp_start`` of one of the donation unit keys, all keys are returned. **Response:** @@ -128,7 +128,7 @@ long-term offline signing key of the Donau, which clients should cache. interface DonationUnitKeyGroupRsa extends DonationUnitKeyGroupCommon { cipher: "RSA"; - denoms: ({ + donation_units: ({ rsa_pub: RsaPublicKey; } & DonationUnitKeyCommon)[]; } @@ -138,7 +138,7 @@ long-term offline signing key of the Donau, which clients should cache. interface DonationUnitKeyGroupCs extends DonationUnitKeyGroupCommon { cipher: "CS"; - denoms: ({ + donation_units: ({ cs_pub: Cs25519Point; } & DonationUnitKeyCommon)[]; } @@ -156,7 +156,7 @@ long-term offline signing key of the Donau, which clients should cache. interface DonationUnitKeyCommon { - // For which year is this denomination unit key valid. + // For which year is this donation unit key valid. year: Integer; // Set to 'true' if the Donau somehow "lost" the private key. The donation unit was not @@ -186,7 +186,7 @@ long-term offline signing key of the Donau, which clients should cache. interface CSDonationUnitKey { cipher: "CS"; - // Public key of the denomination. + // Public key of the donation unit. cs_public_key: Cs25519Point; } @@ -207,7 +207,7 @@ long-term offline signing key of the Donau, which clients should cache. .. note:: - Both the individual donation units *and* the denomination list is signed, + Both the individual donation units *and* the donation units list is signed, allowing customers to prove that they received an inconsistent list. .. http:get:: /seed @@ -298,19 +298,80 @@ All incoming `BDID` are recorded under the corresponding charity_id by the donau interface BDID { donau_pub_hash: HashCode; - taxpayer_blinded_id: CoinEnvelope; // maybe copy+paste data type and rename it - taxid_hashed: HashCode; // NO: needs to be blinded hash: FDH_n(H(taxid,salt), nonce) * b^e mod n - nonce: string; // NO! + taxpayer_blinded_id: BDIDEnvelope; + // already in BDIDenvelope + // blinded_unique_donor_id: HashCode; // NO: needs to be blinded hash: FDH_n(H(taxid,salt), nonce) * b^e mod n } + .. ts:def:: BDIDEnvelope + + type BDIDEnvelope = RSABDIDEnvelope | CSBDIDEnvelope ; + + .. ts:def:: RSABDIDEnvelope + + interface RSABDIDEnvelope { + cipher: "RSA" | "RSA+age_restricted"; + rsa_blinded_UDID: string; // Crockford Base32 encoded + } + + .. ts:def:: CSBDIDEnvelope + + // For donation unit signatures based on Blind Clause-Schnorr, the UDID + // consists of the public nonce and two Curve25519 scalars which are two + // blinded challenges in the Blinded Clause-Schnorr signature scheme. + // See https://taler.net/papers/cs-thesis.pdf for details. + interface CSBDIDEnvelope { + cipher: "CS" | "CS+age_restricted"; + cs_nonce: string; // Crockford Base32 encoded + cs_blinded_c0: string; // Crockford Base32 encoded + cs_blinded_c1: string; // Crockford Base32 encoded + } + + .. ts:def:: BDIDBlindingKeyP + + // Secret for blinding/unblinding. + // An RSA blinding secret, which is basically + // a 256-bit nonce, converted to Crockford Base32. + type BDIDBlindingKeyP = string; + .. ts:def:: BSDonationReceipts interface DonationReceipts { blind_signed_receipt_signatures: DonationReceiptSignature[]; } - .. ts:def:: DonationReceiptSignature // FIXME: see BlindedDenominationSignature, not Envelope!! + .. ts:def:: DonationReceiptSignature + .. ts:def:: BlindedDonationReceiptSignature + + type BlindedDonationReceiptSignature = + | RsaBlindedDonationReceiptSignature + | CSBlindedDonationReceiptSignature; + + .. ts:def:: BlindedDonationReceiptSignature + + interface RsaBlindedDonationReceiptSignature { + cipher: "RSA"; + + // (blinded) RSA signature + blinded_rsa_signature: BlindedRsaSignature; + } + + .. ts:def:: CSBlindedDonationReceiptSignature + + interface CSBlindedDonationReceiptSignature { + type: "CS"; + + // Signer chosen bit value, 0 or 1, used + // in Clause Blind Schnorr to make the + // ROS problem harder. + b: Integer; + + // Blinded scalar calculated from c_b. + s: Cs25519Scalar; + } + + type DonationReceiptSignature = RSADonationReceiptSignature | CSDonationReceiptSignature ; .. ts:def:: RSADonationReceiptSignature