RSA Block and Vernam Stream Ciphers
This assignment involves writing two small Python scripts and a report. Before you start you must download the ?le summarysheets.zip from the course web page, unzip it and print the summary sheet with your name on it. The ?le Name Ver.pdf tells you which sheet has your name on it. There are two parts to the assignment:
Part 1 - Recovery of an encrypted 'word' using a forward search attack. A 5 character 'word' containing random capital letters has been encrypted using the RSA algorithm. The word was encrypted in two 24 bit blocks by using the ASCII values of the characters (6510 to 9010 ) and padding the last block with a space (ASCII 3210 ). Every block was formed by concatenating the 8 bit binary patterns of each of the characters in the block. Thus creating two 24-bit intergers (actually 23-bit integers, as the MSB is zero). You are provided with the public key used for the encryption and with the decimal values of the encrypted blocks - see your summary sheet. You are required to use a forward search using a Python dictionary/hash table to recover the 'word' that was encrypted.[25]
Part 2 - Decryption of a jpeg ?le that has been encrypted using a Vernam cipher. Download the byte compiled Python module randbit.pyc from the module web page. The function nextbit() in this module can be used to generate a random bit stream using one of a series of di?erent generators. Below is an example of its use to generate and display 50 random bits.
import sys
from randbit import *
# for information on nextbit() type randbit.nextbit in the help environment
# of idle or in the standard python shell
seed = 98071
for i in range(50):
seed,bit = nextbit(7,seed) # call to nextbit, using generator 7, which returns
# a modified value of the seed and a 'random' bit
sys.stdout.write(bit)# print bit without crlf print Output from above:
00000001011111110001011100011111100010001111000000
The seed and generator that you are to use in this part of the assignment are given in your summary sheet. Extract your encrypted jpeg ?le (see summary sheet) from the archived ?le on the module web page. Your jpeg has been encrypted, one byte at a time, with a Vernam cipher using a random bit stream generated using the seed and generator that you have been assigned. Random bytes were created by concatenating 8 bits at a time from the random bit stream, with the MSB of each byte being the ?rst of the 8 bits taken from the stream. You are to decrypt and display the ?le, which should be a picture of three printable ASCII characters.
NOTE: the Departmental machines are running Python 2.4 and randbit.pyc was complied with this version of Python.