Commit Graph

10 Commits

Author SHA1 Message Date
akwizgran
005e7d5207 Added a random salt to prevent ID clashes between anonymous messages. 2011-09-13 17:56:44 +01:00
akwizgran
9dea4d0299 The word "tag" was overloaded, so from now on use "tag" for the
predefined tags in the protocol and serial components, and "IV" for
the encrypted IVs used to identify connections in the transport
component.
2011-08-19 11:15:35 +02:00
akwizgran
2411e2008b Frame the encrypted data independently of inter-packet boundaries and
authenticate each frame before parsing its contents. Each connection
starts with a tag, followed by any number of frames, each starting
with the frame number (32 bits) and payload length (16 bits), and
ending with a MAC (256 bits).

Tags have the following format: 32 bits reserved, 16 bits for the
transport ID, 32 bits for the connection number, 32 bits (set to zero
in the tag) for the frame number, and 16 bits (set to zero in the tag)
for the block number. The tag is encrypted with the tag key in
ECB mode.

Frame numbers for each connection must start from zero and must be
contiguous and strictly increasing. Each frame is encrypted with the
frame key in CTR mode, using the plaintext tag with the appropriate
frame number to initialise the counter.

The maximum frame size is 64 KiB, including header and footer. The
maximum amount of data that can be sent over a connection is 2^32
frames - roughly 2^48 bytes, or 8 terabytes, with the maximum frame
size of 64 KiB. If that isn't sufficient we can add another 16 bits to
the frame counter.
2011-08-19 01:46:51 +02:00
akwizgran
4497774311 Derive separate keys for each direction. 2011-08-14 12:18:16 +02:00
akwizgran
7545a1cc8f Moved Bytes to the main package. Added a SharedSecret class to parse
encrypted secrets retrieved from the database.
2011-08-11 19:14:20 +01:00
akwizgran
df972e294d Support for decrypting shared secrets and deriving authentication and
encryption keys from them (untested).
2011-08-11 17:15:36 +01:00
akwizgran
f3f0c223c4 PacketWriter is implemented by two classes: PacketWriterImpl and
PacketEncrypter. The separation allows authentication and encryption
to be tested separately.
2011-08-09 17:50:54 +01:00
akwizgran
e9d0021f56 Added interfaces for reading and writing packets and recognising which
contact originated an incoming connection, and an implementation of
the PacketWriter interface.
2011-08-09 16:15:25 +01:00
akwizgran
b1f27757df Switched to 256-bit ECDSA. Modified some tests because two signatures
over the same data are not necessarily identical. Key generation is
fast again - should I be worried? ;-)
2011-07-25 10:49:41 +01:00
akwizgran
fb95565880 Use the BouncyCastle provider so we can be sure we won't get
NoSuchAlgorithmExceptions. Key generation is *slow* - I guess that's a
good sign. ;-)
2011-07-25 10:38:46 +01:00