Skip to content
Snippets Groups Projects

unsigned-varint, linear message types

Closed Pascal Engélibert requested to merge tuxmain/rfcs:tx_comment_encrypt into tx_comment_encrypt
All threads resolved!
+ 63
0
# 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 |
|:------:|:------------:|:--------------:|:--------:|:-----------------:|:--------------------------------:|
| 1 byte | 1 byte | 1 byte | 12 bytes | Any bytes | `(1 - 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 _1_ in [unsigned-varint] format, i.e. `0x01`. A possible future new format should choose a different prefix. This prefix can also be incremented for a future version of the present format. Due to [unsigned-varint], the prefix may be longer in future versions.
### Message type
| Code | Significance |
|:----:|:---------------------------------:|
| 0x00 | Written by a human to a human |
| 0x01 | Written by a human to a machine |
| 0x02 | Written by a machine to a human |
| 0x03 | Written by a machine to 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
[unsigned-varint]: https://github.com/multiformats/unsigned-varint
[XOR cipher]: https://en.wikipedia.org/wiki/XOR_cipher
Loading