Merge pull request #2833 from derekpierre/tmckf-diagram-updates

TreasureMapConKFrags docs updates (diagram and notes)
pull/2747/head
Derek Pierre 2021-12-20 13:44:54 -05:00 committed by GitHub
commit af58f703d9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
10 changed files with 9601 additions and 6765 deletions

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 489 KiB

After

Width:  |  Height:  |  Size: 556 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 458 KiB

After

Width:  |  Height:  |  Size: 562 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 432 KiB

After

Width:  |  Height:  |  Size: 424 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 MiB

After

Width:  |  Height:  |  Size: 1.3 MiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 626 KiB

After

Width:  |  Height:  |  Size: 712 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 272 KiB

After

Width:  |  Height:  |  Size: 374 KiB

View File

@ -40,9 +40,17 @@ When Alice wants to share this information with Bob, she can create a
policy in the NuCypher Network to grant access to him. To grant access to Bob, Alice must:
#. Create a re-encryption key based on the asymmetric private key and Bob's public key
#. Configure the conditions of the policy e.g. *expiration time, m-of-n threshold values*
#. Deploy the policy including associated fees to the blockchain
#. Deploy `n` policy arrangements, each containing a re-encryption key fragment, `kFrag`, to `n` nodes on the NuCypher Network
#. Determine `n` Ursulas from the NuCypher Network to use in the policy
#. Configure the conditions of the policy, e.g. *expiration time, m-of-n threshold values*
#. Deploy the policy to the blockchain and escrow associated policy fees
#. Create a `treasure map`, encrypted for Bob that contains the list of `n` Ursulas in the policy,
and the `n` re-encryption key fragments (`kFrags`), each encrypted for a different Ursula in
the policy.
.. note::
Bob can decrypt the encrypted treasure map, but since each re-encryption fragment is encrypted
for a specific Ursula, Bob never has access to any re-encryption fragment in plaintext form.
Enrico::Encrypt
@ -70,20 +78,22 @@ Bob::Retrieve
When Bob wants to access the data, he must first obtain the encrypted data and `capsule` from encrypted storage.
However, this data is currently encrypted and inaccessible to Bob.
In order to gain access, Bob must request re-encryption of the `capsule` by the `n` Ursulas that Alice previously
distributed `kFrags` to. Remember that when Alice granted access to Bob, she distributed `n`
`kFrags` of a re-encryption key for Bob to `n` Ursulas on the network. Therefore, Bob sends his `capsule` to `n`
Ursulas in the NuCypher Network that have a corresponding `kFrag` for that policy. Those Ursulas
will use their `kFrag` to perform a partial re-encryption operation on the `capsule` and produce a corresponding
ciphertext fragment, `cFrag`. In the same way a `kFrag` is a fragment of a key, a `cFrag` is a fragment of ciphertext.
The `cFrag` is returned to Bob, who collects `cFrags` until he obtains a threshold, `m`, number of `cFrags`.
Bob attaches `m` received `cFrags` to the original `capsule` to obtain the fully re-encrypted `capsule` that is now
encrypted under his public key. Note that the generation of a complete re-encrypted `capsule` is possible from a
smaller number of `cFrags` than the number of `kFrags` originally sent out to Ursulas (m-of-n threshold scheme). Bob
can now decrypt the `capsule` to obtain the symmetric key originally used to encrypt the bulk data.
To gain access, Bob must request re-encryption of the `capsule` by the `n` Ursulas that participated in the policy.
Remember that when Alice granted access to Bob, she created a `treasure map` that contained
this list of `n` Ursulas in the policy, and the associated encrypted re-encryption key fragments (`kFrags`) for Bob to
give to the Ursulas for the re-encryption operation. Therefore, Bob sends his `capsule` and the relevant encrypted
`kFrag` to the various Ursulas in the NuCypher Network associated with the policy. Those Ursulas
will decrypt the encrypted `kFrag` and use it to perform a partial re-encryption operation on the `capsule` to
produce a corresponding ciphertext fragment, `cFrag`. In the same way a `kFrag` is a fragment of a key, a `cFrag`
is a fragment of ciphertext. The `cFrag` is returned to Bob, who collects `cFrags` until he obtains a threshold, `m`,
number of `cFrags`. Bob attaches `m` received `cFrags` to the original `capsule` to obtain the fully re-encrypted
`capsule` that is now encrypted under his public key. Note that the generation of a complete re-encrypted `capsule`
is possible from a smaller number of `cFrags` than the number of `kFrags` included in the `treasure map`
(m-of-n threshold scheme). Bob can now decrypt the `capsule` to obtain the symmetric key originally used to
encrypt the bulk data.
Once Bob has the symmetric key, he can use it to decrypt the bulk data. This process can be repeated as more data is
shared with Bob that is associated with `label` for the policy.
shared with Bob that is associated with the `label` for the policy.
Ultimately, because of the KEM/DEM approach, only the `capsule` needs to be re-encrypted for Bob.
Subsequently, the size of the actual bulk data is irrelevant - whether 1KB or 1GB the re-encryption operation only
@ -96,7 +106,7 @@ Ursula::Reencrypt
.. image:: ../.static/img/ursula_reencrypt.svg
:target: ../.static/img/ursula_reencrypt.svg
Having previously received a `kFrag` from Alice when the policy arrangement was issued, Ursula can now partially
re-encrypt data for Bob. Ursulas use their `kFrag` on the `capsule` provided by Bob and return a
corresponding `cFrag`. Bob will require `m` of these interactions with `m` different Ursulas to obtain a fully
re-encrypted `capsule`.
Having received an encrypted `kFrag` and a `capsule` from Bob as part of the re-encryption request,
Ursula can now partially re-encrypt data for Bob. Ursulas decrypt the encrypted `kFrag` using their private key, and
use it to perform a re-encryption operation on the `capsule` to return a corresponding `cFrag`. Bob will
require `m` of these interactions with `m` different Ursulas to obtain a fully re-encrypted `capsule`.

View File

@ -76,7 +76,7 @@ Glossary
The public key for a :term:`Character`'s signing key pair.
Treasure Map
The locations of :term:`Ursulas<Ursula>` that have the relevant :term:`kFrags<kFrag>` for a policy. :term:`Bob` will use the treasure map to determine which :term:`Ursulas<Ursula>` to contact to re-encrypt the data :term:`Alice` has shared with him.
The locations of :term:`Ursulas<Ursula>` and associated encrypted :term:`kFrags<kFrag>` for a policy. :term:`Bob` will use the treasure map to determine which :term:`Ursulas<Ursula>` to contact to re-encrypt the data :term:`Alice` has shared with him.
Umbral
NuCypher's threshold proxy re-encryption scheme - it takes standard :term:`PRE` and increases security and performance. See Umbral_.

View File

@ -21,11 +21,12 @@ How does NuCypher work?
anyone she wants by creating a policy and uploading it to
the NuCypher network.
2. A group of Ursulas, which are nodes on the NuCypher network,
receive information about the policy, called a ``PolicyArrangement`` that include
a re-encryption key share. The Ursulas stand ready to re-encrypt data in exchange for payment
in fees and token rewards. Thanks to the use of proxy re-encryption,
Ursulas and the storage layer never have access to Alice's plaintext data.
2. Alice gets information about the group of ``n`` Ursulas associated
with the policy, which are nodes on the NuCypher network. Each Ursula provides their encrypting key, and Alice creates
``n`` re-encryption key shares (:term:`kFrag`), each of which is encrypted with a different Ursula's encrypting key.
The Ursulas in the group stand ready to re-encrypt data in exchange for payment in fees and token rewards.
The list of Ursulas and their associated encrypted re-encryption key shares are stored in a treasure map. Alice
subsequently encrypts the treasure map for Bob. The treasure map provides Bob the requisite information and cryptographic material to successfully request the NuCypher network to re-encrypt the data shared by Alice such that he can decrypt it with his private key.
3. Each policy created by Alice has an associated encryption key, which can be used
by any entity (Enrico) to encrypt data on Alice's behalf.
@ -35,15 +36,17 @@ data that belongs to her for example, a lab analyzing medical tests.
The resulting encrypted data can be uploaded to IPFS, Swarm, S3,
or any other storage layer.
4. Bob, a data recipient, obtains the encrypted data from the storage layer and sends an access request
to the NuCypher network. If the policy is satisfied, the data is re-encrypted to his public key
and he can decrypt it with his private key.
4. Bob, a data recipient, uses the treasure map to determine the list of Ursulas to contact and the associated
re-encryption key share to send to Ursula for the re-encryption operation. Bob obtains the encrypted data from the
storage layer and sends a re-encryption request to the relevant Ursulas on the NuCypher network. If the policy is
satisfied, Ursula decrypts the provided re-encryption key share and re-encrypts the data to Bob's public key. Bob
can subsequently decrypt the data with his private key.
5. Ursulas earn fees and token rewards for performing
re-encryption operations.
5. Ursulas earn fees and token rewards for being available to perform re-encryption operations.
More detailed information:
- :ref:`character-concepts`
- GitHub https://www.github.com/nucypher/nucypher
- Website https://www.nucypher.com/

View File

@ -0,0 +1 @@
Update documentation to reflect new TreasureMap con KFrags design.