Go代写 | CS 161 Project 2 Computer Security

这个作业是用Go语言完成共享文件的加密解密系统
CS 161 Project 2
Computer Security

You will build the client for a file sharing system. The client will allow users to store and load files,
share files with other users, and revoke access to a shared file from other users.
Users of your application will launch your client and provide their username and password. Once
authenticated, they will use your client to upload and download files to/from the server. Your client
will be the interface through which users can interact with the files stored on the server.
You will implement 8 functions on the client: InitUser, GetUser, StoreFile, AppendFile, LoadFile,
ShareFile, ReceiveFile, and RevokeFile. In addition, you will write tests to ensure the robustness
of your client. We include some basic functionality tests, but it is up to you to create a thorough
test suite to cover different attacks.
We provide 2 servers that you can use:
• The first server, Keystore, provides a public key store for everyone. It is trusted.
• The second server, Datastore, provides key-value storage for everyone. It is untrusted.
Using just these two servers and your knowledge of computer security, you will implement the 8
functions above to provide a secure application. Please note that your design will have to take
into account how to ensure confidentiality and integrity of files in addition to the basic file-sharing
functionality. Your client must also be stateless; if the client is restarted, it must be able to pick up
where it left off given only a username and password.
We provide a trusted keystore server. The keystore server is trusted and will behave honestly. No
adversary will be able to maliciously overwrite or tamper with a key record stored on the keystore
server.
We provide an untrusted datastore server. The adversary is assumed to control the datastore server
and the network. The adversary can view, record, modify, and/or add any key-value pair stored
in the datastore server. In addition, the adversary can observe which users store each key-value
pair and the order in which key-value pairs are stored, viewed, or deleted. The adversary can also
view and modify any access_token(s) generated by ShareFile when users share files with each
other. You should assume that the adversary knows the design of the system and all specifics of
your implementation.
We also assume that the adversary controls one or more malicious users. It is possible that a
legitimate user might share a file with a malicious user. If so, the adversary can record all relevant
information about the file (including any cryptographic material and any access_token(s) generated
by ShareFile) and remember it, even if access to the file is later revoked.
Finally, the adversary can read the contents of the public keystore and take advantage of automation
and brute-forcing, constrained by practical limits.