The goal of this assignment is to implement a secure log to describe the state of a hospital in terms of the doctors and nurses who have entered the building and which rooms they are in. The log will be used by two programs. One program, logappend, will append new information to this file, and the other, logread, will read from the file and display the state of the hospital according to a given query over the log. Both programs will use an authentication token, supplied as a command-line argument, to authenticate each other; the security model is described in more detail below.
Students design the log format and implement both logappend and logread to use it. These programs must be written in C or C++ and must compile and run on compute.cse.tamu.edu. Each program's description is linked below.
Look at the page of examples for examples of using the logappend and logread tools together.
The system as a whole must guarantee the privacy and integrity of the log in the presence of an adversary.
The adversary is able to:
logappend and logread.Makefile, logappend, and logread (see below).The adversary is not able to:
logappend and logread.logappend and logread.logappend and logread.logappend and logread.
The adversary does not know the authentication token. This token, specified on the command line, is used by both the logappend and logread tools. Without knowledge of the token an attacker should not be able to:
logread or otherwise learn facts about the names of staff members, room numbers, or times by inspecting the log itselflogappend. logread or logappend into accepting a bogus file. In particular, modifications made to the log by means other than correct use of logappend should be detected by (subsequent calls to) logread or logappend when the correct token is suppliedAn oracle reference implementation is provided to demonstrate the expected output of a series of commands run on logappend and logread.
Students may run the reference implementation by going to ritchey.tk. Here is an example of the expected input for the oracle:
{
"tests":[
{
"input":"logappend -T 1 -K secret -D ritchey -A -F log"
},
{
"input":"logappend -T 2 -K secret -D ritchey -A -R 326 -F log"
},
{
"input":"logappend -T 3 -K secret -N bregger -A -F log"
},
{
"input":"logread -K secret -S -F log"
}
]
}
logappend and logread are invoked, or in a sub-directory.requirements in the top-level directory of your submission and place your requirements documentation in that directory.tests in the top-level directory of your submission and place your tests in that directory.build in the top-level directory of your submission and place your code in that directory.├─ secure_log │ ├─ build │ │ ├─ Makefile │ │ ├─ *.c │ │ ├─ *.cpp │ │ ├─ *.h │ ├─ requirements │ │ ├─ *.pdf │ ├─ tests │ │ ├─ *.json
.tar.gz file that contains your submission directory (e.g. tar --exclude=".git" -czvf secure_log.tar.gz secure_log/)
make in the build directory of your submission. Once make finishes, executable files logappend and logread should exist within the build directory. An automated system will invoke them with a variety of options and measure their responses.make must function without Internet connectivity.make must return within five minutes.make coverage should create the executables compiled with flags -fprofile-arcs -ftest-coverage.