Type of assignment: This assignment is individual. Students can discuss with others and collaborate while working on the assignment. However, the solution assignments should be submitted individually and proper credits were given. Failure to give proper credits will be considered as plagiarism.
Points: The maximum number of points for this assignment is 40.
Problems
1. For 8 points:

 Compute MD5 hash value of your student number using an available tool or an implementation of MD5.
 Download this file (cipher1.txt) with ciphertexts for each student indexed by the MD5 hash of the student number. Find your ciphertext and decrypt it. (If you cannot find the MD5 hash value in the file that corresponds to your student number, send a private message to TAs on Piazza with (1) your student number and (2) the MD5 hash value of your student number.) Determine the cipher used to encrypt the data, along with the encryption key. Submit:
a) the recovered plain text (exactly as recovered, no need to add spaces or punctuation)
b) the name of the cipher,
c) the key, and
d) a brief description of the steps you took for recovering the key.  Attention: You cannot use any specialized tools for breaking ciphers or programs, unless you developed them yourself, for solving this problem. You can use generic tools, e.g., spreadsheet programs, text processors, etc. If in doubt, ask on Piazza or in lab sessions.
2. For 17 points:

 Compute MD5 hash value of your student number using an available tool or an implementation of MD5.
 Download this file (cipher2.txt) with ciphertexts for each student indexed by the MD5 hash of the student number. Find your ciphertext and decrypt it. (If you cannot find the MD5 hash value in the file that corresponds to your student number, send a private message to TAs on Piazza with (1) your student number and (2) the MD5 hash value of your student number.) Determine the cipher used to encrypt the data, along with the encryption key. Submit:
a) the recovered plain text (exactly as recovered, no need to add spaces or punctuation)
b) the name of the cipher,
c) the key, and
d) a brief description of the steps you took for recovering the key.  Attention: You cannot use any specialized tools for breaking ciphers or programs, unless you developed them yourself, for solving this problem. You can use generic tools, e.g., spreadsheet programs, text processors, etc. If in doubt, ask on the discussion board or in class.
3. For 5 points:
 Demonstrate that Cyclic Redundancy Check (CRC) is not a good candidate for a cryptographic hash function by showing that it has (almost) no strong collision resistance property. To do that, find any two inputs x and y, where x != y, s.t. CRC(x) == CRC(y). You can submit x and y in separate files or as just two strings (if the strings contains unprintable characters, report Base64 encoded version of the string in your report instead). Attention: You cannot use 1) solution for problem 3 as a solution for problem 4, or 2) values of students number hashes from the file with ciphertexts for problem 1 as x or y.
 Explain how you found x and y and how long (in terms of your computer’s CPU time) it took you to find them.
4. For 10 points:
 Demonstrate that Cyclic Redundancy Check (CRC) is not a good candidate for a cryptographic hash function by showing that it has (almost) no weak collision resistance property. To do that, take the MD5 hash value of your student number that you computed for problem 1 and use it as x in the following: find such y != x, that CRC(x) == CRC(y). You can submit y in a separate file or as just a string (if the string contains unprintable characters, report Base64 encoded version of the string in your report instead).
 Explain how you found y and how long (in terms of your computer’s CPU time) it took you to find it
Note: For problem 3 & 4, you can use any implementation of CRC32, but your solution will be verified using pycrc ran as follows:
 For computing CRC value of a file: pycrc.py –model crc32 –checkfile <file name> (e.g., pycrc.py –model crc32 –checkfile test1.txt
 For computing CRC value of a string: pycrc.py –model crc32 –checkstring <string value> (e.g., pycrc.py –model crc32 –checkstring 123456789)