Assignment title: Information
Project Scope
We will implement a simplified version of SSL/TLS (miniSSL) and a simplified application-layer
protocol (miniGet) in this project. The goal is to get a better understanding of the SSL/TLS protocols.
miniSSL and miniGET An miniSSL is a barebone version of Secure Socket Layer (SSL). AnminiSSL
includes a simplified SSL handshake, which leads for user authentication.
A session key need to be distributed securely for data encryption and integrity check (by HMAC) in
miniGet later. You are expected to use RSA and implement the client authentication (advanced
requirement: mutual authentication).
AnminiGET is simply a GET operation sent from client to server after the miniSSL hand-shake. The
server sends the requested file, encrypted and HMACed with the session key. The session key for
data encryption and integrity check was established during the miniSSL handshake. We always use
the off-the- shelf cryptographic algorithms, AES 128-bit encryption and SHA1-based HMAC, for data
encryption and integrity check. Once the file is delivered, both client and server would terminate the
session without any further notifications.
Protocol flow
The simplified protocol you are going to implement is shown as follows. C denotes as client, S
denotes as server. We have anminiSSL-CA. We start with the miniSSL handshake. Note that we group
the different message types of SSL/TLS in new, custom ones. In the following, the comma operator
indicates the border between message fields, and the | operator indicates concatenation of two (bit)
strings.
1. C chooses a nonce nc of length 28 bytes. It chooses the cipher suite to be 128-bit AES encryption
and SHA1 as the HMAC function. It is denoted as a string AES-HMAC. The type of the first message is
ClientInit. C sends this to S: C → S :ClientInit, nc, AES-HMAC
2. Upon receiving this message, S chooses a random nonce ns of length 28 bytes. It acknowledges
the client's cipher choice and also sends a certificate. It can add an optional request for the client to
authenticate with a certificate by sending the CertRequest string: S → C :ServerInit, ns, AES-HMAC,
Certs [, CertReq]