Skip to content
Snippets Groups Projects
Commit d1d85aec authored by Éloïs's avatar Éloïs
Browse files

create rfc 17

parent 38c5100e
Branches
No related tags found
No related merge requests found
# RFC 17: Transaction Comment Encryption
Alice wants to send a transaction to bob with an encrypted comment.
Let `Sa` the private key of Alice and `Pa` its associated public key.
Let `Sb` the private key of Bob and `Pb` its associated public key.
## generate symetric encryption key
We use nacl function [crypto_box_beforenm]. Then use scrypt with a random nonce.
Let `R = crypto_box_beforenm(Sa, Pb) = crypto_box_beforenm(Sb, Pa)`.
Let `n` be a random nonce of 12 bytes.
The symmetric encryption key `k` is obtained as follows:
`k = scrypt(R, SHA256(n))`
With following parameters for scrypt:
```txt
N = 4096
r = 16
p = 1
dkLen = message length
```
## encrypt zith XOR cipher
Encrypt bit per bit with XOR cipher.
## Serialize encrypted message with meta data
| Prefix | Message type | Message length | Nonce | Encrypted message | Padding |
|:-------:|:------------:|:--------------:|:--------:|:-----------------:|:--------------------------:|
| 2 bytes | 1 byte | 1 byte | 12 bytes | Any bytes | `Message length % 4` bytes |
The padding is used so that the quantity of bytes to be serialized is always a multiple of 4. This is necessary for the encoding in base z85.
### Prefix
A constant value that indicates the type of format. For the present format defined in this RFC, the prefix is `0x0100`. A possible future new format should choose a different prefix. This prefix can also be incremented for a future version of the present format.
### Message type
| Code | Significance |
|:----:|:--------------------------------:|
| 0x00 | Write by a human for a human |
| 0x01 | Write by a human for a machine |
| 0x10 | Write by a machine for a human |
| 0x11 | Write by a machine for a machine |
## Encodinq in transaction document
Encrypted message in encoded in [base z85] in transaction comment directly.
DUBP protocol accept all [base z85] characters except `$`. We replace `$` by `_`.
[base z85]: https://rfc.zeromq.org/spec/32/
[crypto_box_beforenm]: https://nacl.cr.yp.to/box.html
[XOR cipher]: https://en.wikipedia.org/wiki/XOR_cipher
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment