donau

Donation authority for GNU Taler (experimental)
Log | Files | Refs | Submodules | README | LICENSE

technicaldesign.tex (23893B)


      1 \newcommand{{\pub}}{{\sf pub}}
      2 \newcommand{{\priv}}{{\sf priv}}
      3 \newcommand{{\DI}}{{\sf DI}}
      4 \newcommand{{\UDI}}{{\sf UDI}}
      5 \newcommand{{\sign}}{{\sf sign}}
      6 \newcommand{{\verify}}{{\sf verify}}
      7 \newcommand{{\blind}}{{\sf blind}}
      8 \newcommand{{\unblind}}{{\sf unblind}}
      9 
     10 \section{Protocol Description}\label{technical}
     11 
     12 The previous section identified several requirements and desired features
     13 that a donation system must or should satisfy.
     14 The technically most challenging part is to permit donors
     15 to stay anonymous towards the charity they are donating to and to keep private
     16 from the tax authorities which charities they donated to.
     17 The protocol presented in this section addresses this
     18 challenge and all of the design goals from
     19 Section~\ref{sec:designgoals}. In
     20 Section~\ref{discussion} we discuss how
     21 the various optional capabilities could be achieved on
     22 top of this core protocol design.
     23 
     24 %Some of these are
     25 %contradictory and any deployment needs to prioritize compliance with local
     26 %laws and regulations.
     27 % CG: not sure they are actually contradictory, modulo if
     28 % you are strict on pseudonymity vs. anonymity; but even
     29 % here you're only linkable across donations to the same
     30 % charity, which is probably OK.
     31 
     32 This section provides a technical overview of our Donau protocol, starting with
     33 some cryptographic background followed by the setup and usage.
     34 The Donau service is typically run by the tax authority but can be an independent entity.
     35 
     36 % The first section introduces some notation and definitions used later on in the protocol description.
     37 % Concepts from cryptography are also explained when necessary.
     38 %
     39  \subsection{Background \& Terminology}\label{notation_and_definitions}
     40  Digital cash makes use of \textbf{blind signatures}~\cite{Chaum89} to issue tokens. Our
     41  design uses the same mechanism to unlink the donation process from the issued
     42  donation receipts.  This section introduces the definition and
     43  security properties of blind signatures.
     44 
     45 %    \paragraph{Cryptographic Hash Function}
     46 %      A cryptographic hash function $H$ is a function that takes as input an arbitrarily
     47 % long bit string
     48 %      and returns a fixed-length output string, which satisfies some security
     49 % requirements. In formulas
     50 % $$H: \{0,1\}^* \rightarrow \{0,1\}^n, m \mapsto h = H(m).$$
     51 % The function $H$ should provide preimage resistance, that means that
     52 % it should be infeasible to find an input that hashes to a given output. It
     53 % should also provide second-preimage resistance, that means that it should be
     54 % infeasible to find a second input that maps to the same output as a given input.
     55 % Even more restricting, it should provide collision resistance, meaning that it
     56 % should be infeasible to find two inputs that hash to the same output (without
     57 % any other restriction).
     58 
     59 %      Sometimes a hash function gets used in a scenario where the natural input
     60 % values come from a small, easily guessable set, like passwords or PINs.
     61 % In this scenario an attacker could break preimage resistance by just iterating
     62 % through all possible inputs to find the matching one and, worse, could even
     63 % store all resulting hash values in a big table for instant preimage lookups for
     64 % all users. One partial fix is to {\bf salt} the hash, i.e., to add a random
     65 % suffix or prefix to the input before hashing it. Applications then need to
     66 % store the salt as well. If the salt can be kept private this stops the simple
     67 % preimage attacks, otherwise it at least requires the attacker to try all inputs
     68 % {\em per targeted hash}. We write a {\bf salted hash} as $h = H(m, s)$, where
     69 % $s$ is the salt value.
     70 
     71 %    \paragraph{Digital Signatures}
     72 
     73 %      A digital signature is a cryptographic scheme for authenticating a message or document, analogous to a handwritten signature.
     74 %      A signer creates a public/private keypair.
     75 %      The private signing key is used to generate a signature on a message.
     76 %      The public key is distributed, and can be used by anybody to verify the authenticity of the signature.
     77 %      A signature scheme is secure if, among other things, the private key cannot be computed from the public key and if
     78 %      nobody can generate a signature that verifies for some message under a
     79 % public key if they do not have access to the matching private key.
     80 
     81    Informally, a blind signature is a digital signature where the signer does
     82    not know the message that they are signing.  The party requesting the
     83    signature hides the true message with a secret value called a {\bf blinding
     84      factor}, which can later be used to derive a valid signature on the
     85    original, unblinded message.
     86 
     87    Like standard digital signature schemes, blind signature schemes should
     88    achieve \textbf{unforgeability} --- the property that users without the
     89    secret signing key should be unable to generate new, valid
     90    signatures. Unlike standard digital signatures, blind signatures must also
     91    achieve \textbf{blindness} --- the property that curious signers should
     92    never be able to link previously issued blind signatures with their
     93    unblinded counterparts.
     94 
     95    \textrm{Slightly more formally, we define blind signatures as a quadruple of algorithms:}
     96    \begin{itemize}
     97      \item $KeyGen(1^\lambda)$: Generates a verification/signing key pair $(K^{\pub}, K^{\priv})$.
     98      \item $Blind(m,  b, K^{\pub})$: Takes a message $m$, blinding factor $b$, and verification key $K^{\pub}$ of the signer and computes the blinded message $\overline{m}$.
     99      \item $BlindSign(K^{\priv}, \overline{m})$: Takes secret signing key $K^{\priv}$ and blinded message $\overline{m}$ and computes the blind signature $\overline{\sigma}$.
    100      \item $Unblind(\overline{\sigma}, b, K^{\pub})$: Takes blind signature $\overline{\sigma}$, blinding factor $b$ and verification key $K^{\pub}$ of the signer, and returns the unblinded signature $\sigma$ on message $m$ (or $\bot$).
    101    \end{itemize}
    102 
    103 It should be impossible for the signer to infer information about the message
    104 they sign and it should be impossible for them to trace their signature later,
    105 see Hoepman's recent paper~\cite{2023/hoepman} highlighting that these are two
    106 separate requirements.
    107 
    108 The most well-known blind signature scheme, going back to Chaum's original
    109 work~\cite{Chaum89}, is based on RSA. A signature on message $m$ under RSA key
    110 public key $(n,e)$ is $s\equiv m^d \bmod n$, where $(n,d)$ is the corresponding
    111 private key. Instead of asking for a signature on $m$ one can request a
    112 signature on the blinded value $m'\equiv m\cdot r^e \bmod n$ for some randomly
    113 chosen $r$, receive the blind signature $s'$, and obtain the signature on $m$
    114 by unblinding $s'$ by computing $s'/r \bmod n$.
    115 
    116 In addition to blind signatures, Donau uses the
    117 Ed25519~\cite{DBLP:journals/jce/BernsteinDLSY12} signature scheme
    118 for signing ($\sign$) and verifying ($\verify$).
    119 
    120 \subsection{Key generation and initial setup}\label{key_generation_and_initial_setup}
    121 
    122 Before incognito donations to charities can be executed, all participants in
    123 the donation system (i.e., the Donau service, charities, and donors) must perform some
    124 initial setup steps.
    125 
    126 \subsubsection{Donau service key generation}\label{donau_key_generation}
    127 \begin{enumerate}
    128 \item The Donau service generates an Ed25519 keypair
    129   $(D^{\pub}$, $D^{\priv})$, called the {\bf Donau Key}, for digital signatures.
    130   \item The Donau service also generates a set of \textbf{Donation Unit} keypairs
    131 $(K_x^{\pub}, K_x^{\priv})$ for blind signatures, corresponding to different
    132 currency denominations $x$ that a donation can be composed of.
    133 \end{enumerate}
    134 The Donau service publishes all public keys over an authenticated channel.
    135 It uses fresh Donation Unit keys for each tax period.
    136 
    137 \subsubsection{Charity key generation and registration}\label{charity_key_generation}
    138 \begin{enumerate}
    139   \item Each charity generates its own Ed25519 {\bf Charity Key} $( C^{\pub},
    140 C^{\priv} )$.
    141   \item The charity also fetches the Donation Unit public keys from the
    142 Donau service.
    143   \item The charity transmits its public key $C^{\pub}$ to the party controlling the Donau service
    144 using an authenticated channel.
    145   \item The party in charge of Donau service administration
    146 validates that the charity is authentic and a legally recognized
    147 charitable organization. After successful verification, the charity public key
    148 $C^{\pub}$ is registered in the Donau database.
    149 \end{enumerate}
    150 
    151 \subsubsection{Donor Identifier generation}
    152 
    153 Each donor generates a personal \textbf{Donor Identifier} $\DI$ by
    154 computing a salted hash of their taxpayer ID
    155 \begin{align*}
    156   \DI = H(\texttt{TAXID}, S)
    157 \end{align*}
    158 where $H$ is a cryptographic hash function and
    159 $S$ is a random salt with sufficient entropy to
    160 prevent guessing attacks, and {\tt TAXID} is their taxpayer ID.
    161 The donor stores the salt $S$ along with their $\DI$.
    162 
    163 A donor uses their Donor Identifier every time they
    164 make a donation and again when requesting a donation receipt from the Donau service.
    165 
    166 They need to use the salt to link the Donation Identifier to their tax
    167 ID and claim the tax benefits for their donation. The use of the salt
    168 ensures that the $\DI$ cannot be linked to the donor by anybody
    169 without $S$, even if they know {\tt TAXID}.
    170 
    171 
    172 \subsection{Donating to a charity}\label{donating_to_a_charity}
    173 % \subsection{Donor donates to charity and transmits \textbf{Unique Donor identifiers} (future donation receipts)}
    174 When a donor wishes to donate to a charity, they first retrieve the Donau service's Donation Unit
    175 public keys $K_x^{\pub}$ for the current tax period.
    176 The donor then represents their donation as a sum of the Donation Units offered by the Donau service.
    177 
    178 \emph{Example: Assuming the Donau service publishes the Donation units $\{1,2,4,8\}$, a donation of $7$ would be split into 1 unit each of the values $4$, $2$ and $1$.}
    179 
    180 For each necessary Donation Unit the donor generates a \textbf{Unique Donor
    181 Identifier (UDI)} by appending a random nonce $N_i$ to the value $\DI$.
    182 If multiple instances of the same Donation Unit are needed to represent
    183 the target sum, the donor creates a different nonce $N_i$ for each instance $i$
    184 of that Donation Unit.
    185 The donor must remember all UDIs.
    186 
    187 \emph{In our example, there are $3$ Unique Donor Identifiers needed to represent the donated value of $7$. We can write them as:}
    188 \begin{align*}
    189   u_1 &= ( \DI, N_1) \\
    190   u_2 &= ( \DI, N_2) \\
    191   u_3 &= ( \DI, N_3)
    192 \end{align*}
    193 {\em where $\DI$ is the Donor Identifier from above, and the $N_i$s are nonces.}
    194 
    195 Next the donor blinds the Unique Donor Identifiers using a unique blinding factor for each one.
    196 This hides the information in the UDIs from third parties, including the Donau
    197 service and charity, and protects against linkability. The result is a set of {\bf Blinded Unique Donor Identifiers (BUDIs)}.
    198 
    199 {\em In our example, the Blinded Unique Donor Identifiers would be}
    200 \begin{align*}
    201   \overline u_1 &= \blind (u_1, b_1, K_1^{\pub}) \\
    202   \overline u_2 &= \blind (u_2, b_2, K_2^{\pub}) \\
    203   \overline u_3 &= \blind (u_3, b_3, K_4^{\pub})
    204 \end{align*}
    205 {\em with random blinding factors $b_1$, $b_2$, and $b_3$}.
    206 
    207 So far, the \textbf{Blinded Unique Donor Identifiers} do not carry information about their monetary values.
    208 The \emph{intended effective value is indicated} by grouping each Unique Donor Identifier with
    209 the hash of its respective Donation Unit public key $K^{\pub}_x$.
    210 We call this pair a \textbf{Blinded Unique Donor Identifier Key Pair} (\textbf{BKP}).
    211 It is only the \emph{intended effective} value because their value is zero until they are signed by the Donau service.
    212 Note that they must be signed with the matching Donation Unit key as the
    213 blinding and unblinding operations rely strongly on the public key.
    214 
    215 
    216 {\em The BKPs for our example are:}
    217 \begin{align*}
    218      \overline \mu_1 &= ( \overline u_1, h({K^{\pub}_1}) ) \\
    219      \overline \mu_2 &= ( \overline u_2, h({K^{\pub}_2}) ) \\
    220      \overline \mu_3 &= ( \overline u_3, h({K^{\pub}_4}) )
    221 \end{align*}
    222 
    223 
    224 These individual BKPs are then put in an array $\vec{\mu}$ of BKPs.
    225 
    226 {\em Here }
    227 \begin{align*}
    228      \vec{\mu} &= ( \overline \mu_1,
    229      \overline \mu_2,\overline \mu_3
    230      )
    231 \end{align*}
    232 
    233 The donor sends this array to the charity along with the corresponding
    234 payment.
    235 
    236 \subsection{Charity receives donation}\label{charity_receives_donation}
    237 Upon receiving the array $\vec{\mu}$ of BKPs and the corresponding payment from the donor,
    238 the charity verifies that the total amount claimed in the BKPs
    239 (based on the Donation Unit public key hashes $h(K_x^{\pub})$) is less than or
    240 equal to the amount they received in the payment.
    241 The charity then signs the array of BKPs with its Ed25519 Charity Key.
    242 That is, it computes
    243 \begin{align*}
    244     \sigma_c = \sign(\vec{\mu}, C^{\priv})
    245 \end{align*}
    246 The charity sends the array $\vec{\mu}$ of BKPs and their signature $\sigma_c$ to the Donau service to generate a receipt.
    247 
    248 \subsection{Donau service generates donation receipt}\label{donau_creates_donation_receipt}
    249 When the Donau service receives a signed set of BKPs from a charity, it verifies the charity's signature.
    250 It then checks that no legal restrictions are being violated.
    251 If none are, the Donau service increments its record of the charity's total receipts by the
    252 total amount of the donation, i.e., the sum of the denominations used in the
    253 BKPs.
    254 The Donau service then blindly signs all BUDIs using the Donation Unit private keys
    255 $K_x^{\priv}$
    256 that correspond to the public keys hashed in the BKPs.
    257 
    258 {\em In our example, the Donau service blindly signs the three BUDIs submitted by the charity}
    259 \begin{align*}
    260   \overline{\beta_1} = \blind\_\sign(\overline u_1, K_1^{\priv}) \\
    261   \overline{\beta_2} = \blind\_\sign(\overline u_2, K_2^{\priv}) \\
    262   \overline{\beta_3} = \blind\_\sign(\overline u_3, K_4^{\priv})
    263 \end{align*}
    264 
    265 These signatures constitute a blinded donation receipt from the Donau service, and the Donau service sends these back to the charity,
    266 which in turn forwards them to the donor.
    267 
    268 \subsection{Donor receives donation receipt}\label{donor_receives_donation_receipt}
    269 Upon receiving the blinded donation receipt from the Donau service via the charity,
    270 the donor verifies the blind signatures over the BUDIs.
    271 If they verify, the donor then unblinds them to obtain signatures over the original UDIs.
    272 These UDIs, their unblinded signatures, and their respective hashed Donation Unit public keys
    273 constitute a collection of donation receipts.
    274 These donation receipts are stored on the donor's device.
    275 
    276 {\em In our example: the donor unblinds the Donau service signatures $\overline{\beta_1}, \overline{\beta_2}, \overline{\beta_3}$, obtaining:}
    277 \begin{align*}
    278   \beta_1 &= \unblind(\overline{\beta_1}, b_1, K_1^{\pub}) \\
    279   \beta_2 &= \unblind(\overline{\beta_2}, b_2, K_2^{\pub}) \\
    280   \beta_3 &= \unblind(\overline{\beta_3}, b_3, K_4^{\pub})
    281 \end{align*}
    282 {\em The donor then creates the final Donation Receipts:}
    283 \begin{align*}
    284   r_1 &= ( \UDI_1, \beta_1, h(K_1^{\pub}) ) \\
    285   r_2 &= ( \UDI_2, \beta_2, h(K_2^{\pub}) ) \\
    286   r_3 &= ( \UDI_3, \beta_3, h(K_4^{\pub}) )
    287 \end{align*}
    288 
    289 \subsection{Donor requests an annual donation statement from Donau service}\label{donor_requests_a_donation_statement_from_the_donau}
    290 In order for the donor to claim a tax deduction,
    291 the donor needs to obtain a final donation statement which can be sent to the tax authority.
    292 The donor sends their saved donation receipts $\{r_1, \ldots, r_k\}$, accumulated throughout the tax period, to the Donau service.
    293 This can in principle be done multiple times during the tax period;
    294 however, the receipts must not be submitted at a time strongly correlated with the donation to achieve
    295 \emph{unlinkability} between the \emph{issuance} of the receipts (which happens at the time of donation)
    296 and their \emph{submission} for the Donation Statement.
    297 
    298 Remember that each $\UDI$ is the concatenation of the donor identifier $\DI$ and
    299 a random nonce, i.e., they all start with the same $\DI$.
    300 
    301 Once the Donau service receives the donor's donation receipts, it checks that for each receipt:
    302 \begin{itemize}
    303   \item the public key $K_x^{\pub}$ is known.
    304   \item the signature $\beta$ is correct using the corresponding public key
    305 $K_x^{\pub}$.
    306   \item the Donor Identifier $\DI$ is the same in all receipts.
    307 %    (With multiple wallets each wallet must simply obtain a separate Donation Statement)
    308   \item the nonces are unique and were not submitted before by the same donor,
    309 identified as $\DI$.
    310 \end{itemize}
    311 
    312 Importantly, the Donau service does not see signatures of the charities the donor
    313 donated to, so it does not know where the donor spent money.
    314 They also only see a collection of common denominations, so they are unable to correlate total donation amounts per charity.
    315 Finally, the receipts are unblinded, so they are unlinkable to any signature the Donau service has seen before.
    316 
    317 The Donau service then generates a signature over the total \texttt{amount} of all receipts, the current tax period (\texttt{year}) and the Donor Identifier.
    318 This results in a final signature called the \textbf{Donation Statement}, which the Donau service returns to the donor:
    319 \begin{align*}
    320   \sigma_s = \sign(( \DI, \textsf{amount}_{\sf Total}, \textsf{year}) ),
    321 D^{\priv})
    322 \end{align*}
    323 
    324 \subsection{Donor sends final statement to a validator}\label{donor_sends_final_statement_to_a_validator}
    325 Finally, to claim their deduction, the donor includes their donation statement
    326 in their tax declaration. The implementation detailed in the next section
    327 chooses to represent this information as a QR-Code
    328 \begin{align*}
    329   \texttt{QR} = (\texttt{TAXID}, S, \textsf{year}, \textsf{amount}_{\sf
    330 Total}, \sigma_s).
    331 \end{align*}
    332 Other representations and integration into software for filing tax returns are
    333 possible. It is relevant that {\tt TAXID} and salt $S$ are included to
    334 recompute the donation identifier $\DI$ while linking the donation receipt to
    335 the tax ID.
    336 
    337 The validator at the tax office verifies the \textbf{Donation Statement Signature} $\sigma_s$.
    338 \begin{align*}
    339   \verify((H({\tt TAXID},S), \textsf{amount}_{\sf Total}, \textsf{year}) ),\sigma_s,
    340 D^{\pub})
    341 \end{align*}
    342 
    343 
    344 % Putting unused defs from the thesis here in case they're needed for some reason later. don't want to recopy
    345 
    346 %   \item \textbf{Donation Unit Key generation}
    347 %     \begin{displaymath}
    348 %       ( K_x^{\pub}, K_x^{\priv} ) := Keygen^B(\omega)
    349 %     \end{displaymath}
    350 %     where $\omega$ is a source of entropy. The resulting key pair represents
    351 %     a \textbf{Donation Unit}. The result is a public key $K_x^{\pub}$ and
    352 %     private key $K_x^{\priv}$. The equivalent used in Taler system is a \texttt{Denomination}.
    353 %
    354 %   \item \textbf{Donau Key generation}
    355 %     \begin{displaymath}
    356 %       ( D^{\pub}, D^{\priv} ) := Keygen^D(\omega)
    357 %     \end{displaymath}
    358 %     where $D^{\pub}$ and $D^{\priv}$ are the respective public and private Donau keys.
    359 %
    360 %   \item \textbf{Charity Key generation}
    361 %     \begin{displaymath}
    362 %       ( C^{\pub}, C^{\priv} ) := Keygen^C(\omega)
    363 %     \end{displaymath}
    364 %     where $C^{\pub}$ and $C^{\priv}$ are the respective public and private Charity keys.
    365 %
    366 %   \item \textbf{Donation Unit (DU)}
    367 %     \begin{displaymath}
    368 %       ( K_x^{\pub}, K_x^{\priv} )
    369 %     \end{displaymath}
    370 %     A Donation Unit consists of a public and private key where $x$ is the associated value (e.g. 2 EUR).
    371 %
    372 %   \item \textbf{Donor Identifier (DI)}
    373 %     \begin{displaymath}
    374 %       i := H(\texttt{TAXID}, S)
    375 %     \end{displaymath}
    376 %     where $S$ is a random salt with sufficient entropy to prevent guessing attacks to invert the hash function.
    377 %
    378 %   \item \textbf{Unique Donor Identifier (UDI)}
    379 %     \begin{displaymath}
    380 %       u := ( i, N )
    381 %     \end{displaymath}
    382 %     where $N$ is a high-entropy nonce to make the resulting hash \textbf{unique} per donation.
    383 %
    384 %   \item \textbf{Blinded Unique Donor Identifier (BUDI)}
    385 %     \begin{displaymath}
    386 %       \overline{u} := \blind( u, b, K_x^{\pub} )
    387 %     \end{displaymath}
    388 %     A \textbf{BUDI} is the result of blinding a Unique Donor Identifier $u$
    389 %     where $b$ is the blinding factor and $K_x^{\pub}$ the associated Key. The blinding is done to protect the privacy of the donor.
    390 %
    391 %   \item \textbf{Blinded Unique Donor Identifier Key Pair (BKP)}
    392 %     \begin{displaymath}
    393 %       p := ( \overline{u}, H(K_x^{\pub}) )
    394 %     \end{displaymath}
    395 %     A \textbf{Blinded Unique Donor Identifier Key Pair} is the result of
    396 %     adding the corresponding hash of the \textbf{Donation Unit} public key to
    397 %     the \textbf{Blinded Unique Donor Identifier} $\overline{u}$ where
    398 %     $H(K_x^{\pub})$ is the hash of the \textbf{Donation Unit} public key.
    399 
    400 %   \item \textbf{Digital Signatures}
    401 %     A digital signature
    402 %     \begin{itemize}
    403 %       \item \textbf{Normal signing (e.g. EdDSA):}
    404 %       \begin{align}
    405 %         \fbox{$s := sign(m,k^{\priv})$}
    406 %       \end{align}
    407 %       where $m$ is a message and $k^{\priv}$ is the private key used to sign
    408 %       the message, for example the Donau private key $D^{\priv}$ or the
    409 %       Charity private key $C^{\priv}$.\\
    410 
    411 %       Applications:
    412 %       \begin{itemize}
    413 %       \item Signatures over a \textbf{Blinded Unique Donor Identifier Key Pair}:
    414 %         \begin{align}
    415 %           \fbox{$\vec{\mu}_s := sign(\vec{p},C^{\priv})$}
    416 %         \end{align}
    417 %           where $H(K_x^{\pub})$ indicates which \textbf{Donation Unit} key should be used by the Donau to sign the resulting \textbf{Donation Receipt}. Thus, this hash carries the information about the exact value, the final Donation Receipt should carry.
    418 %
    419 %         A charity signs a collection of \textbf{Blinded Unique Donor Identifier Key Pairs} before transferring them to the Donau to issue the \textbf{Donation Receipts}
    420 %
    421 %       \item Generation of the \textbf{Donation Statement}
    422 %       \end{itemize}
    423 %
    424 %       \item \textbf{Blind signing(e.g. RSA/CS):}
    425 %       \begin{align}
    426 %         \fbox{$\overline{\beta} := \blind\_sign(\overline{u},K_x^{\priv})$}
    427 %       \end{align}
    428 %       where $\overline{u}$ is a blinded value and $K_x^{\priv}$ is the private key used to blind sign the message.\\
    429 %
    430 %       Application:
    431 %       \begin{itemize}
    432 %         \item The Donau blind signs \textbf{Blinded Unique Donor Identifiers} received from the Charity with the private key matching the public key in the received \textbf{Blinded Unique Donor Identifier Key Pair}
    433 %       \end{itemize}
    434 %     \end{itemize}
    435 %
    436 %   \item \textbf{Verify Functions}
    437 %
    438 %   To verify the signatures $m$ corresponds to the message and $s$ to the signature:
    439 %
    440 %   \begin{itemize}
    441 %     \item \textbf{normal verify}
    442 %     \begin{displaymath}
    443 %       verify(m,s, P^{\pub})
    444 %     \end{displaymath}
    445 %     where $P^{\pub}$ can be the Donau public key $D^{\pub}$ or Charity public
    446 %     key $C^{\pub}$.
    447 %
    448 %     \item \textbf{blind verify}
    449 %       \begin{displaymath}
    450 %         verify\_blind(m,s,K_x^{\pub})
    451 %       \end{displaymath}
    452 %       verify a signature that was made blind and made with a Donation Unit
    453 %       private key $K_x^{\priv}$.
    454 %   \end{itemize}
    455 %
    456 %   \item \textbf{Donation Receipt}
    457 %     \begin{displaymath}
    458 %       r := ( u, \beta, H(K_x^{\pub}) )
    459 %     \end{displaymath}
    460 %     where $\beta$ is the unblinded signature sent to the Donau to get the \textbf{Donation Statement}.
    461 %
    462 %   \item \textbf{Donation Statement Signature}
    463 %     \begin{displaymath}
    464 %       \sigma := sign(( i, \Sigma{\vec{r}}, \texttt{Year}), D^{\priv})
    465 %     \end{displaymath}
    466 %     The \textbf{Donation Statement Signature} is the signature over the sum (amount donated) of all the \textbf{Donation Receipts} $\Sigma{\vec{r}}$, that a donor has received from donating throughout the year where $i$ is the \textbf{Donor Identifier}. The \textbf{Donation Statement} itself includes all sign values and the signature itself.
    467 %
    468 %     These \textbf{Donation Statement Signatures} attest the amount donated in a particular year by a specific donor.