diff --git a/protocol/key_components.png b/protocol/key_components.png new file mode 100644 index 00000000..7c5d8a4c Binary files /dev/null and b/protocol/key_components.png differ diff --git a/protocol/key_components.svg b/protocol/key_components.svg index 89c4cfbc..ac23336a 100644 --- a/protocol/key_components.svg +++ b/protocol/key_components.svg @@ -9,12 +9,15 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="525" - height="250" + width="560" + height="370" id="svg2" version="1.1" - inkscape:version="0.48.4 r9939" - sodipodi:docname="key_components.pdf"> + inkscape:version="0.92.0 r15299" + sodipodi:docname="key_components.svg" + inkscape:export-filename="/home/davidsarah/zecc/zips/protocol/key_components.png" + inkscape:export-xdpi="179.99957" + inkscape:export-ydpi="179.99957"> @@ -57,9 +59,8 @@ orient="auto" inkscape:stockid="Arrow1Mend"> @@ -71,9 +72,8 @@ orient="auto" inkscape:stockid="Arrow1Mend"> @@ -85,9 +85,8 @@ orient="auto" inkscape:stockid="Arrow1Mend"> @@ -99,9 +98,8 @@ orient="auto" inkscape:stockid="Arrow1Mend-3A"> @@ -113,9 +111,8 @@ orient="auto" inkscape:stockid="Arrow1Mendq"> @@ -127,9 +124,8 @@ orient="auto" inkscape:stockid="Arrow1MendJ"> @@ -141,9 +137,8 @@ orient="auto" inkscape:stockid="Arrow1Mend-3A2"> @@ -155,12 +150,37 @@ orient="auto" inkscape:stockid="Arrow2Lendh"> + + + + + + @@ -178,212 +198,269 @@ id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" - transform="translate(0,-802.36214)"> + transform="translate(0,-752.51961)"> - + style="fill:#74da9a;fill-opacity:1;stroke:#000000;stroke-width:1.06666672;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> a + sodipodi:role="line" + style="stroke-width:1.06666672">a pk + sodipodi:role="line" + style="stroke-width:1.06666672">pk pk + sodipodi:role="line" + style="stroke-width:1.06666672">pk enc + sodipodi:role="line" + style="stroke-width:1.06666672">enc + style="fill:#ff949c;fill-opacity:1;stroke:#000000;stroke-width:1.06666672;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" /> a + sodipodi:role="line" + style="stroke-width:1.06666672">a sk + sodipodi:role="line" + style="stroke-width:1.06666672">sk sk - enc - Transmission key Viewing key Paying key Spending key Payment address + + a + pk + enc + Receiving key + sk + d="m 214.31562,1061.174 c -0.003,-22.7903 0.22414,-80.51581 0.22414,-80.51581" + style="fill:none;stroke:#000000;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend)" /> + + + + + + id="path3980-1" + d="m 312.48597,951.40098 c -0.003,-22.7903 0.22414,-80.51581 0.22414,-80.51581" + style="fill:none;stroke:#000000;stroke-width:1.06666672px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:url(#Arrow2Lend-2)" /> + id="path3980-1-9" + d="m 213.49102,951.40098 c -0.003,-22.7903 0.22414,-80.51581 0.22414,-80.51581" + style="fill:none;stroke:#000000;stroke-width:1.067;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;marker-end:;stroke-miterlimit:4;stroke-dasharray:none" /> + diff --git a/protocol/protocol.tex b/protocol/protocol.tex index 80b39de6..6f46f332 100644 --- a/protocol/protocol.tex +++ b/protocol/protocol.tex @@ -363,6 +363,8 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg \newcommand{\paymentAddresses}{\term{payment addresses}} \newcommand{\viewingKey}{\term{viewing key}} \newcommand{\viewingKeys}{\term{viewing keys}} +\newcommand{\receivingKey}{\term{receiving key}} +\newcommand{\receivingKeys}{\term{receiving keys}} \newcommand{\spendingKey}{\term{spending key}} \newcommand{\spendingKeys}{\term{spending keys}} \newcommand{\payingKey}{\term{paying key}} @@ -480,6 +482,7 @@ electronic commerce and payment, financial privacy, proof of work, zero knowledg \newcommand{\PaymentAddress}{\mathsf{addr_{pk}}} \newcommand{\PaymentAddressLeadByte}{\hexint{16}} \newcommand{\PaymentAddressSecondByte}{\hexint{9A}} +\newcommand{\ViewingKey}{\mathsf{vk}} \newcommand{\SpendingKeyLeadByte}{\hexint{AB}} \newcommand{\SpendingKeySecondByte}{\hexint{36}} \newcommand{\PtoSHAddressLeadByte}{\hexint{1C}} @@ -1051,9 +1054,9 @@ A \paymentAddress includes two public keys: a \payingKey matching that of \notes sent to the address, and a \transmissionKey for a key-private asymmetric encryption scheme. ``Key-private'' means that ciphertexts do not reveal information about which key they were encrypted to, except to a holder of the corresponding -private key, which in this context is called the \viewingKey. This facility is +private key, which in this context is called the \receivingKey. This facility is used to communicate encrypted output \notes on the \blockchain to their -intended recipient, who can use the \viewingKey to scan the \blockchain for +intended recipient, who can use the \receivingKey to scan the \blockchain for \notes addressed to them and then decrypt those \notes. The basis of the privacy properties of \Zcash is that when a \note is spent, @@ -1201,7 +1204,8 @@ $\PoWMaxAdjustUp$ will also be defined in that section. \sproutonly{ A \keyTuple $(\AuthPrivate, \TransmitPrivate, \PaymentAddress)$ is generated by users who wish to receive payments under this scheme. -The \viewingKey $\TransmitPrivate$ and the \paymentAddress +The \receivingKey $\TransmitPrivate$, the \viewingKey +$\ViewingKey = (\AuthPublic, \TransmitPrivate)$, and the \paymentAddress $\PaymentAddress = (\AuthPublic, \TransmitPublic)$ are derived from the \spendingKey $\AuthPrivate$. } @@ -2484,8 +2488,9 @@ out-of-band, which are not addressed in this document. \nsubsubsection{Decryption by a Recipient} -Let $\PaymentAddress = (\AuthPublic, \TransmitPublic)$ be the recipient's -\paymentAddress, and let $\TransmitPrivate$ be the recipient's \viewingKey. +Let $\ViewingKey = (\AuthPublic, \TransmitPrivate)$ be the recipient's \viewingKey, +and let $\TransmitPublic$ be the corresponding \transmissionKey derived from +$\TransmitPrivate$ as specified in \crossref{keycomponents}. Let $\cmNew{\allNew}$ be the \noteCommitments of each output coin. @@ -2497,7 +2502,7 @@ component as follows: \begin{itemize} \item Let $\DHSecret{i} := \KAAgree(\TransmitPrivate, \EphemeralPublic)$. \item Let $\TransmitKey{i} := \KDF(i, \hSig, \DHSecret{i}, \EphemeralPublic, -\TransmitPublicNew{i})$. +\TransmitPublic)$. \item Return $\DecryptNote(\TransmitKey{i}, \TransmitCiphertext{i}, \cmNew{i}, \AuthPublic).$ \end{itemize}