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

create rfc 17

parent 38c5100e
No related branches found
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