Locker contract
NOTE: This is a proposal under review and is not implemented yet
TODO: review the names used. The names "proxy" and "seed" might not be ideal.
Motivation
The purpose of the locker contract is to add a layer of public key cryptography on top of existing contracts.
The protection against the replay attacks is usually done using a nonce. In Rholang, because of the parallelism, managing nonces is not simple, as it requires some form of synchronisation. For this reason we will use Rholang's unforgeable channels instead of "classic" nonces.
Locker Protocol
The locker protects the seed from the unauthorised users. Once the locker is created with a given public key and a given seed, only the owner of the corresponding private key can access the seed.
In the diagrams below the red processes are Rholang "unforgeable names" that need to be kept private.
Creating the locker
The locker factory is a contract that creates the lockers and is registered in the RChain registry.
Using the locker
The usage happens as described below:
- the session is initiated as the owner opens the locker and obtains a proxy
- the owner sends messages to the proxy, which forwards them to the seed
- the session ends when the proxy goes out of scope and thus the seed is no longer available
The body of the message "getAccess" contains a private receive channel and a signature over this channel. The signature over the receive channel guarantees that it is owned by the one who also owns the private key. The channel name must be known only by the owner of the locker. An attacker who knows this name will be able to receive the proxy and get access to the locker content.
The session ends when the owner lets the proxy go out of scope. Beyond this point there is no way to access the locker content unless, of course, a new session is initiated.