Skip to content

Pranay-Akula/buildit

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ATM Design and Implementation

This is a two-part project, the first of which is a team effort, while the second is an individual effort. Because the second part of the project will make use of the results of the first part, only submissions that reach a certain threshold of functionality by the nominal deadline will be targets for the second part. The second part is due at the end of the semester, so extensions cannot be granted.

In this project you will first design and implement a prototype ATM/Bank system. Then you will get a chance to (try to) attack other teams' designs! We have tried to make these instructions as explicit as possible. Read them carefully; if anything is unclear, please ask for clarification well in advance.

Purpose

In this project, you will learn to:

  • Analyze an existing code base that you need to develop further; you will find yourself doing this sort of thing frequently throughout your career.
  • Design a complex system, including protocols, and write a thorough specification; again, this is a common aspect of any programming career, especially as you gain more responsibility.
  • Implement a specification; this requires understanding the specification, looking for unspecified edge cases, and testing thorougly, and is another thing you will find to be a common aspect of any programming career.
  • Analyze a specification and implementation from a security perspective; this code will be much more complex than in the previous projects, and more accurately reflects the scope of a real programming project.
  • Work as part of a team; very little work is done completely solo, so it's important for you to learn how to contribute as part of a team, communicate with your teammates, and (at times) deal with teammates who are perhaps not carrying as much of the weight of the project as the rest of the team.
  • Work on a git repository with multiple contributors; this ideally should involve branches and merges, and might involve resolving merge conflicts --- developing these skills with git will be very valuable on your resume.

Overview

  1. You may work in teams of at most five people. Sign up for your teams on ELMS under "People">"Groups".

  2. You will design and implement three programs: an ATM, a bank, and an init program that initializes state for them. (You may also find it useful to create various auxiliary files defining classes and functionalities that can be used by the ATM and Bank classes.)

  3. You will be provided with stub code for the ATM, the bank, and a router that will route messages between the ATM and the bank. The stub code will allow the ATM and the router to communicate with each other, and the router and the bank to communicate with each other. The router will be configured to simply pass messages back-and-forth between the ATM and the bank. (Looking ahead, the router will provide a way to carry out passive or active attacks on the "communication channel" between the bank and the ATM.)

  4. You will design a protocol allowing a user to withdraw money from the ATM. Requirements include:

    • The ATM card of user XXX will be represented by a file called XXX.card.
    • The user's PIN must be a 4-digit number.
    • User balances will be maintained by the bank, not by the ATM.
    • You need not support multiple ATMs connecting to the bank simultaneously.
    • You also do not need to maintain state between restarting the bank (e.g., all user balances can be maintained in memory).

    Of course, as part of the design process you will want to consider security...

  5. You will then implement your protocol. Most of your work should involve the ATM, bank, and init programs, with no (or absolutely minimal) modifications to the router.

  6. As with previous projects, the reference platform is the baseline docker image. At this point, you should be able to create your own scripts to build and run in a container using this image.

Part 1, the team phase of the project, is described in build-it.md.

Part 2, the solo phase of the project, is described in break-it.md.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 5