[noise] Making sender pubkey encryption more consistent
Stephen Touset
stephen at squareup.com
Thu Jul 31 00:42:57 PDT 2014
Slightly more over-the-wire space, but conceptually simpler and likely easier to implement in software (due to higher code reuse). I’m a fan.
On Jul 30, 2014, at 9:22 PM, Trevor Perrin <trevp at trevp.net> wrote:
> It's sort of inconsistent how a Noise box contains:
> (a) the sender's public-key encrypted WITHOUT padding with a MAC
> (b) the actual contents encrypted WITH padding and a MAC
>
> The sender's public-key doesn't really need padding, but it might be
> simpler if we just used the same padded-encryption for both.
>
> Here's what that might look like, what do people think? -
>
> struct {
> bytes encrypted_contents[contents_len];
> bytes encrypted_padding[padding_len];
> bytes encrypted_padding_len[4];
> bytes mac[MAC_LEN];
> } NoiseEncryption;
>
> struct {
> NoiseEncryption header; # sender public key
> NoiseEncryption body; # application data
> } NoiseBox;
>
>
> noise_encrypt(cc, pad_len, contents, authtext=""):
> plaintext = contents || random(pad_len) || (uint32_little_endian)pad_len
> encryption = ENCRYPT(cc, plaintext, authtext)
> return encryption
>
> noise_box(eph_key, sender_key, target_pubkey, pad_len1, pad_len2, app_data,
> kdf_num, cv):
> dh1 = DH(eph_key.priv, target_pubkey)
> dh2 = DH(sender_key.priv, target_pubkey)
> cv1 || cc1 = KDF(dh1, cv, SUITE_NAME || (byte)kdf_num, CV_LEN + CC_LEN)
> cv2 || cc2 = KDF(dh2, cv1, SUITE_NAME || (byte)(kdf_num + 1), CV_LEN + CC_LEN)
> header = noise_encrypt(cc1, pad_len1, sender_key.pub, target_pubkey
> || eph_key.pub)
> body = noise_encrypt(cc2, pad_len2, app_data, target_pubkey || header)
> return (header || body), cv2
>
> ?
>
> Trevor
> _______________________________________________
> Noise mailing list
> Noise at moderncrypto.org
> https://moderncrypto.org/mailman/listinfo/noise
--
Stephen Touset
stephen at squareup.com
More information about the Noise
mailing list