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