Student Population Growth at Vanderbilt

The ultimate goal of this project is to model the increasing, decreasing, or stagnant change in the student population at Vanderbilt University over time. The general methodology by which this will be accomplished is to establish linear equations that model the population in the k+1 year of a given grade level, and look for eigenvalues. More specifically, this means setting the determinant of (A- λI) equal to 0 (where A is the matrix derived from the linear equations) in order to solve for λ. From there, the growth rate in the population of Vanderbilt Undergraduate students will be determined. Ultimately, the ratios of the populations of different grades will be concluded.

Coefficients to the population-in-year-k variables will be computed where the data is available, and derived from reasonable assumptions where it is not. For example, the data on transfers in and out of the university after the first year are readily available for the public to see (it is provided by Vanderbilt). However, the overall negative effect of transfers and dropouts on the number of incoming freshmen cannot be easily determined without extensive (and expensive) research. Therefore, those values will be assumed (the assumptions will be a source of error). A 7 by 7 matrix, A, will result from the linear equations derived for the various grades. This presents a few additional challenges in calculating the determinant, as Wolfram Alpha has a 5 by 5 limit. Therefore, Matlab, or some other computing software, will be employed to find the determinant and later put (A- λI) in RREF.  The first four variables will be the four years at Vanderbilt in year k. The next variable will be the number of graduates who have just completed their 4 years. The last two variables will be the number of dropouts per year, and the net number of transfers per year.

It is understood that it is possible for “the numbers not to work out”. At the beginning of this proposal it was stated that we were going to see if the population is growing, declining, or remaining stagnant. However, if we actually find that it is declining, we know we have done something wrong (in terms of coefficients, not mathematics, most likely). Then, we will adjust our assumptions. Conveniently, we can also do a linear regression for the past year’s grade sizes (from released VU data) to get the actual student population growth rate. Our ultimate goal is for our numbers to produce those numbers.

Finally, this problem is useful to solve, as Vanderbilt needs to predict growth trends in its student population. This is so that the school may efficiently increase capacity of student housing, faculty size, and other amenities that are necessary for a college.

Encryption/Decryption Application

For our application project we plan on approaching the subject of cryptography as it applies to linear algebra and creating a computer program that will implement different cryptographic applications. Through creating this computer application we plan on expanding on the idea of encrypting and decrypting messages we learned in class through various approaches such as shift ciphers, where you shift the letters by a specified amount, substitution ciphers (also known as Caesar ciphers), in which you have a key that is used to change from plaintext into cipher text, and Hill ciphers, where you have an alphabet of a certain size and a matrix that is applied to a certain number of characters of the plaintext at a time to change the message to cipher text.

Our program would allow the user to specify the message they wish to encrypt or decrypt and the method by which they want to do that. Depending on the method the user selects the program will encrypt or decrypt the message entered in. We will provide the user will a variety of different alphabets, including a standard 26-character alphabet and a subset of the ASCII alphabet that are printable, which would allow the use of the same ciphers to generate completely different messages.

The largest part of our project will be working with Hill ciphers using concepts in linear algebra. Our plan for the program is to allow the user of the program to specify an n by n matrix (up to size n = 10) to be applied to a message they supply. The user can either fill this matrix manually, which the program will ensure is invertible, or the program will automatically generate a random invertible matrix. We need to ensure the matrices we are using are invertible to allow for both encryption using the original matrix and decryption using the inverse of the original matrix. To do this will we be figuring out the determinants of the matrices in our program to ensure that the matrices are invertible and then also finding the decipher key matrix from an entered or generated matrix. We plan on doing this recursively in the program following the general method of reduction that we were taught in class, which lends itself to recursion. If a user decides to manually enter the matrix our program will ensure the matrix is invertible and if it isn’t will tell the user they need to enter a new matrix or use our auto-generate feature.

Secure, Air-Gapped Encryption

Secure, Air-Gapped Encryption: Deploying Custom Encryption for Non-Technical Enthusiasts

Aaron Smith & Carl Block

The recent NSA leaks by Edward Snowden have caused those with sensitive material, specifically journalists, to take a more cautious approach to encrypting their content. One such method is called "air-gapped encryption." In this method, the journalist has 2 computers: one that has never made contact with the internet and another that has. The air-gapped computer, the one that has never been connected to the internet, is used to create and encrypt documents, which will be transferred to the other computer by USB to be sent.

If a government knows that it wants to compromise someone's private data, the most effective way of doing so is to compromise the data before it can be encrypted for transmission. This requires that the data be stolen straight off of the hard drive, and the best way to do that is by infecting the computer via the internet. An air-gapped computer ensures that a virus has not been installed and that no data has been taken before encryption.

Given that air-gapped encryption requires two computers, there is a significant cost. Our goal with this project is twofold: first, to decrease the cost of implementing secure air-gapped encryption by making encryption software available on a $30 Raspberry Pi, and second, to simplify the encryption process so that it requires no technical knowledge.
Because the National Security Agency has clearly compromised every encryption algorithm currently available on the market (sarcasm intended), we will be writing our own encryption algorithm. The encryption process contains two distinct steps. First, the message will be encrypted using a Hill Cipher padding scheme. We will use the methods taught to us in Linear Algebra to dissect the message into manageable parts, create a suitable matrix, and encrypt the message sections with the matrix. When creating the encryption matrix, we must take the necessary steps to ensure that the resulting matrix has an inverse that does not contain any fractions.

After the message has been padded, we will use a custom, simplified public key encryption method to encrypt both the padded message and the hill cipher in a string. A public key encryption method uses a public key that is accessible to anyone, and encrypts a message using a formula with that public key. This is very hard to decrypt unless you have the private key, which will only be known to the recipient. Once this method is performed on the padded message and hill cipher, the message can be safely sent to the recipient.

When the message is received, the first layer of encryption will be removed using the private key. Then, the matrix will be separated from the message in the transmitted string. Finally, the matrix will be inverted and used to decrypt the message string.

This system will be built in two components: The encryption algorithm and the front end. The encryption algorithm described above will be implemented in a Python script. The front end will be built using Pyramid, a framework that combines Python, HTML, and CSS.
The front-end of the application will have a page for generating a public-private key pair, which will in turn execute the corresponding portion of the Python script. The main portion of the application will be for uploading encrypted messages to be decrypted and uploading unencrypted messages to be encrypted. It will be a simple drag-and-drop mechanism to keep user-interaction simple.

The front end software can be easily installed on a Raspberry Pi and run through a browser.

Midterm 2 Information and Resources

Your second midterm will be Thursday, November 14th, during class.  It will cover Unit 3 (Subspaces), Unit 4 (Linear Transformations), and Unit 5 (Eigenvalues and Eigenvectors).

You'll need to have access to some tool that can row reduce matrices, like Wolfram Alpha or certain graphing calculators. If you don't have access to such a tool, let me know as soon as possible. You'll also be allowed to bring one 3"x5" index card with notes (front and back).

Keep in mind that you'll have the chance to correct your midterm for up to 1/3 points back. If you score a 70 on the test, you'll be able to bring that up to an 80. I hope that takes the edge off your stress.

Here's my office hour schedule for the next week:

  • Monday 10:30-11:30 (CFT)
  • Tuesday 4:00-5:00 (CFT)
  • Wednesday 4:00-5:00 (FGH 200)

Some resources for you to use as you study:

Below are a list of suggested practice problems from your textbook for you to work through as you study for the upcoming midterm. Note all of these problems have answers in the back of the book, unfortunately, but I would encourage you to ask and answer questions about these problems on our Piazza board.

  • Section 2.1 #3, 4
  • Section 3.2 #1, 2, 4, 11, 12, 14
  • Section 3.4 #7, 10
  • Section 3.6 #1-3, 6, 7, 9, 18, 22(a)
  • Section 4.1 #4-6, 23
  • Section 4.2 #2, 3, 5, 9, 10
  • Section 6.1 #1, 3, 7(a), 8, 26