Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
4d535bc
Adding an update to the docs for the DApp container (#127)
joshuafernandes Jan 28, 2020
bedc17d
Refactor/contributor content (#126)
faraggi Jan 30, 2020
f1b6703
Added default data location (#123)
MadelineMurray Jan 31, 2020
c8d3cf9
Moved license note (#129)
MadelineMurray Jan 31, 2020
bf6a3fa
Windows is now supported in the quickstart (#143)
EdJoJob Feb 6, 2020
cbf566e
quickstart updates all round (#141)
joshuafernandes Feb 9, 2020
ddd7b96
Fixed typo (#150)
MadelineMurray Feb 10, 2020
b60b75d
Add multi-tenancy information. (#131)
bgravenorst Feb 10, 2020
230dfd1
Apply renames for the quickstart repo (#152)
EdJoJob Feb 12, 2020
8b6b180
Added content on protocol upgrades (#132)
MadelineMurray Feb 13, 2020
07863e6
Fixed Ansible link and renamed topic (#168)
MadelineMurray Feb 14, 2020
04748b4
permissioning (#170)
wslyvh Feb 14, 2020
690c2d9
Vale and mdlint editorial updates - DCO.md (#162)
Feb 14, 2020
3c02628
updated CI and customised checks (#165)
NicolasMassart Feb 19, 2020
4d41acf
Added new NAT options (#179)
MadelineMurray Feb 20, 2020
1afef0b
Editorial mdlint vale updates for Concepts/Transactions directory (#185)
Feb 20, 2020
8fe0887
Added default data location (#123)
MadelineMurray Jan 31, 2020
ba4bfe3
Fixed typo (#150)
MadelineMurray Feb 10, 2020
58ebe7c
Added content on protocol upgrades (#132)
MadelineMurray Feb 13, 2020
ad56e88
Fixed Ansible link and renamed topic (#168)
MadelineMurray Feb 14, 2020
49767df
Added default data location (#123)
MadelineMurray Jan 31, 2020
fe7d330
Fixed typo (#150)
MadelineMurray Feb 10, 2020
7c124dc
Editorial mklint and vale updates in Concepts/Permissioning dir (#181)
Feb 20, 2020
0092d8f
Added content on protocol upgrades (#132)
MadelineMurray Feb 13, 2020
78955dc
Fixed Ansible link and renamed topic (#168)
MadelineMurray Feb 14, 2020
9a52660
Editorial mdlint and vale updates in the Concepts/Privacy dir
Feb 18, 2020
5e992b2
minor description update
Feb 18, 2020
bb3542f
Updates based on review, included Multi-Tenancy.md
Feb 19, 2020
7bd7133
More Multi-Tenancy updates to fix vale issues
Feb 19, 2020
a404712
Sentence case heading
Feb 20, 2020
7a6fe53
mdlint and vale editorial updates in Concepts/Consensus-Protocols dir…
Feb 20, 2020
e4e095f
mdlint and vale editorial edits in the Concepts directory (#177)
Feb 20, 2020
485dbc9
vale and mklint editorial updates - CONTRIBUTING.md (#163)
Feb 20, 2020
2c3c006
mdlint and vale editorial updates - index.md (#169)
Feb 20, 2020
8755b2f
Added plugins_reloadPluginConfig (#184)
MadelineMurray Feb 21, 2020
5311c0e
Link updates corresponding to changed heading in Privacy-Groups.md
Feb 21, 2020
495cc51
Minor punctuation change
Feb 21, 2020
67cb751
Merge branch 'master' into grantnoble-privacy-mklint-vale
Feb 21, 2020
33ea51b
Merge branch 'master' into grantnoble-privacy-mklint-vale
Feb 24, 2020
e48e711
Changed html comment after the metadata to a markdown comment
Feb 24, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
39 changes: 22 additions & 17 deletions docs/Concepts/Privacy/Multi-Tenancy.md
Original file line number Diff line number Diff line change
@@ -1,32 +1,37 @@
---
description: Multi-tenancy
<!--- END of page meta data -->
---

# Multi-tenancy

By default, each participant in a privacy network uses its own Besu and Orion
node.
By default, each participant in a privacy network uses its own Besu and Orion node.

Multi-tenancy allows multiple participants to use the same Besu and
Orion node. Each participant is called a Tenant, and the Operator is the
owner of the Besu and Orion node.
Multi-tenancy allows multiple participants to use the same Besu and Orion node. Each participant is
a _tenant_, and the operator is the _owner_ of the Besu and Orion node.

!!! important
The Operator is responsible for [configuring multi-tenancy](../../Tutorials/Privacy/Configuring-Multi-Tenancy.md), and has

The operator is responsible for
[configuring multi-tenancy](../../Tutorials/Privacy/Configuring-Multi-Tenancy.md), and has
access to all tenant data.

![Multi-tenancy](../../images/Multi-tenancy.png)

!!! important
Ensure the multi-tenant Orion node client API is configured to allow access only by the multi-tenant Besu node. Access to your data is secured through Besu using multi-tenancy mode.

If not configured to allow access only by the multi-tenant Besu node, other
Orion clients including other Besu nodes may be able to access tenant data.
Ensure the multi-tenant Orion node client API is configured to allow access only by the
multi-tenant Besu node. Access to your data is secured through Besu using multi-tenancy mode.

If not configured to allow access only by the multi-tenant Besu node, other Orion clients,
including other Besu nodes, might be able to access tenant data.

You can [configure TLS between Besu and Orion](../TLS.md) with the [`whitelist`](https://docs.orion.pegasys.tech/en/latest/Tutorials/TLS/#clientconnectiontlsservertrust) trust mode to secure access.
To secure access, you can [configure TLS between Besu and Orion](../TLS.md) with the
[`whitelist`](https://docs.orion.pegasys.tech/en/latest/Tutorials/TLS/#clientconnectiontlsservertrust)
trust mode.

Multi-tenancy validates that tenants are permitted to use the specified HTTP or
Websocket JSON-RPC requests, and the tenant has access to the requested privacy
data. Private data is segregated, and each tenant uses a JWT token for
authentication.
Multi-tenancy validates that tenants have permission to use the specified HTTP or Websocket
JSON-RPC requests, and the tenant has access to the requested privacy data. There is segregation of
private data, and each tenant uses a JWT token for authentication.

The JWT token can be created [externally or internally](../../HowTo/Interact/APIs/Authentication.md).
You can create the JWT token either
[externally or internally](../../HowTo/Interact/APIs/Authentication.md).
104 changes: 58 additions & 46 deletions docs/Concepts/Privacy/Privacy-Groups.md
Original file line number Diff line number Diff line change
@@ -1,76 +1,88 @@
description: Privacy
<!--- END of page meta data -->
---
description: Privacy groups
---

# Privacy Groups
# Privacy groups

A privacy group is a group of nodes identified by a unique privacy group ID by Orion. Each private transaction is
stored in Orion with the privacy group ID.
A privacy group is a group of nodes identified by a unique privacy group ID by Orion. Each private
transaction is stored in Orion with the privacy group ID.

The Besu nodes maintain the public world state for the blockchain and a private state for each privacy group.
The private states contain data that is not shared in the globally replicated world state.
The Besu nodes maintain the public world state for the blockchain and a private state for each
privacy group. The private states contain data that is not shared in the globally replicated world
state.

## Privacy Types
## Privacy types

Besu implements two types of privacy:
Besu implements two types of privacy:

* EEA-compliant privacy - private transactions include `privateFor` as the recipient.
* Besu-extended privacy - private transactions include `privacyGroupId` as the recipient.
* Enterprise Ethereum Alliance (EEA) privacy, where private transactions include `privateFor` as
the recipient.
* Besu-extended privacy, where private transactions include `privacyGroupId` as the recipient.

Both privacy types create privacy groups and store private transactions with their privacy group in Orion.
Both privacy types create privacy groups and store private transactions with their privacy group in
Orion.

![Privacy Groups](../../images/PrivacyGroups.png)

!!! note
The Orion nodes are not shown above for clarity only. To send private transactions,
each Besu node must have an associated Orion node.

### Access between States
For clarity, the Orion nodes are not shown in the previous diagram. To send private
transactions, each Besu node must have an associated Orion node.

### Access between states

A contract in a privacy group:

* Can read or write to a contract in the same privacy group.
* Can read from the public state including public contracts.
* Cannot access contracts from a different privacy group.
* Can read from the public state including public contracts.
* Cannot access contracts from a different privacy group.

A public contract cannot access a private contract.

### EEA-compliant Privacy
### Enterprise Ethereum Alliance privacy

In the privacy implementation complying with the
[EEA Client Specification](https://entethalliance.org/technical-documents/) the group of nodes
specified by `privateFrom` and `privateFor` form a privacy group with a unique privacy group ID
provided by Orion.

In our privacy implementation complying with the [EEA Client Specification](https://entethalliance.org/technical-documents/)
the group of nodes specified by `privateFrom`and `privateFor` form a privacy group and are given a unique
privacy group ID by Orion.
!!! example

!!! example
The diagram above illustrates two privacy groups enabling:
The previous diagram illustrates two privacy groups enabling:

* A, B, and C to send transactions that are private from D
* A, C, and D to send transactions that are private from B
* A, B, and C to send transactions that are private from D.
* A, C, and D to send transactions that are private from B.

Using EEA-compliant privacy, to send private transactions between A, B, and C, A initialises a contract in a private transaction with
B and C specified as the `privateFor` and A specified as the `privateFrom`. Initialising the contract
creates a privacy group consisting of A, B, and C. For the ABC private state to remain consistent,
A, B, and C must be included on transactions (as either `privateFrom` or `privateFor`) even if they are
between two of the three parties.
Using EEA-compliant privacy, to send private transactions between A, B, and C, A initializes a
contract in a private transaction with B and C specified as the `privateFor` and A specified as
the `privateFrom`. Initializing the contract creates a privacy group consisting of A, B, and C.
For the ABC private state to remain consistent, A, B, and C must be included on transactions
(as either `privateFrom` or `privateFor`) even if they are between only two of the three
parties.

To send private transactions between A, C, and D, C initialises a different contract in a private transaction with
A and D specified as the `privateFor` and C specified as the `privateFrom`. Initialising the contract
creates a privacy group consisting of A, C, and D. For the ACD private state to remain consistent,
A, C, and D must be included on transactions (as either `privateFrom` or `privateFor`) even if they are
between two of the three parties.
To send private transactions between A, C, and D, C initializes a different contract in a
private transaction with A and D specified as the `privateFor` and C specified as the
`privateFrom`. Initializing the contract creates a privacy group consisting of A, C, and D.
For the ACD private state to remain consistent, A, C, and D must be included on transactions
(as either `privateFrom` or `privateFor`) even if they are between only two of the three
parties.


### Besu-extended Privacy
### Besu-extended privacy

In our extended privacy implementation, a privacy group is created using [`priv_createPrivacyGroup`](../../Reference/API-Methods.md#priv_createprivacygroup)
and private transactions sent to the privacy group ID.
The Besu-extended privacy implementation creates a privacy group using
[`priv_createPrivacyGroup`](../../Reference/API-Methods.md#priv_createprivacygroup) with private
transactions sent to the privacy group ID.

!!! example

!!! example
Using the same privacy groups as above.
Using the same privacy groups as in the previous example.

Using Besu-extended privacy, to send private transactions between A, B, and C, A creates a privacy
group consisting of A, B, and C. The privacy group ID is specified when sending private transactions and
A, B, and C are recipients of all private transactions sent to the privacy group.
Using Besu-extended privacy, to send private transactions between A, B, and C, A creates a
privacy group consisting of A, B, and C. The privacy group ID is specified when sending private
transactions and A, B, and C are recipients of all private transactions sent to the privacy
group.

To send private transactions between A, C, and D, A creates a privacy group consisting of A, C, and D.
The privacy group ID of this group is specified when sending private transactions with A, C, and D
as recipients.
To send private transactions between A, C, and D, A creates a privacy group consisting of A, C,
and D. The privacy group ID of this group is specified when sending private transactions with A,
C, and D as recipients.
43 changes: 26 additions & 17 deletions docs/Concepts/Privacy/Privacy-Overview.md
Original file line number Diff line number Diff line change
@@ -1,35 +1,44 @@
---
description: Privacy
<!--- END of page meta data -->
---

# Privacy

Privacy in Besu refers to the ability to keep transactions private between the involved participants.
Other participants cannot access the transaction content or list of participants.
In Besu, privacy refers to the ability to keep transactions private between the involved
participants. Other participants cannot access the transaction content or list of participants.

!!! important
For production systems requiring private transactions:
* We recommend using a network with a consensus mechanism supporting transaction finality. For example,
[IBFT 2.0](../../HowTo/Configure/Consensus-Protocols/IBFT.md).
* Orion must be [highly available and run in a separate instance to Besu](../../HowTo/Use-Privacy/Run-Orion-With-Besu.md).

!!! important

For production systems requiring private transactions:

* It is recommended you use a network with a consensus mechanism supporting transaction
finality, such as [IBFT 2.0](../../HowTo/Configure/Consensus-Protocols/IBFT.md).
* Orion must be [highly available and run in a separate instance to Besu].

Using private transactions with [pruning](../Pruning.md) is not supported.

## Private Transaction Manager
## Private transaction manager

Besu uses a Private Transaction Manager to implement privacy. For example, [Orion](http://docs.orion.pegasys.tech).
Each Besu node that sends or receives private transactions requires an associated Orion node.
Besu uses a private transaction manager, [Orion](http://docs.orion.pegasys.tech), to implement
privacy. Each Besu node sending or receiving private transactions requires an associated Orion
node.

![Orion Nodes](../../images/OrionNodes.png)

Private transactions are passed from the Besu node to the associated Orion node. The Orion node
encrypts and directly distributes (that is, point to point) the private transaction to Orion nodes
participating in the transaction.
Private transactions pass from the Besu node to the associated Orion node. The Orion node
encrypts and directly distributes (that is, point-to-point) the private transaction to the Orion
nodes participating in the transaction.

By default, each participant in a privacy network uses its own Besu and Orion node.
[Multi-tenancy](Multi-Tenancy.md) allows multiple participants to use the same Besu and Orion node.

By default, each participant in a privacy network uses its own Besu and Orion
node. [Multi-tenancy](Multi-Tenancy.md) allows multiple participants to use the same Besu and Orion
node.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this paragraph included twice now? Could you check this by publishing locally?

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had various merge conflicts occuring. I suspect this could have popped in while I was trying to fix it. Duplicate removed.

Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Fixed.


!!! tip
Private Transaction Managers are also known as Enclaves.

Private Transaction Managers are also refered to as Enclaves.

<!-- Links -->
[highly available and run in a separate instance to Besu]: ../../HowTo/Use-Privacy/Run-Orion-With-Besu.md
Loading