A. Monoalphabetic vs. polyalphabetic (3 points) Explain briefly how to analyze a long ciphertext to determine whether it was the result of a monoalphabetic cipher or the result of a polyalphabetic one.
B. One-time pad (3 points) Provide three reasons why the one-time pad (OTP) system is unbreakable.
C. Breaking Vigenère with a crib (8 points) You are given the ciphertext below that you know to be the result of applying the Vigenère cipher with a key of no more than 10 letters. You suspect that the crib word “quantum” occurs in the last 20 letters. Use that to break it.
GBFPHZPVWVFUYGEMSAHFGKYASEDSSOYIMSPENYDYQRGOGNTRKZHRRZSERAXWGUYWPNPSNZELINMOZONWGNEERBPRXUHUTNHIOAHWGNLXVRTLYEHIWUHUYJMIYFBNTWFERGNMAUEGPNLSVILPQRVHNTTGWNMTUGEPIIXLOAEWSZXTVSPWECIRBDTQEGBNTZSIFRAAIOZYVBYAGUXWEFMHBARLXUXYJKCIGYTSFONEPOBLYOLVHOTLYVLVXVVLRYTWRGLUSLTGMRGTJKCIEYEYQUYIIQMOGGVIUHTNGAXFIUTVVUFVMAMONINSYAMTBGNGYETTRRJQSQXLPNPQMPTLEKLGXVHNFOYZSYOEQOYMRQNSGXTEPPTTNRJWMFHRQXFKEPMIBTDECJXCNTOSXUTTOEDSPIBNTZSIWPARBKOMRTXRRWFEXVHNSUCXLRIAEZTGPRLBHZZRPLTPCXZBMZTTRRJAIAXEQZZQEXXLBZDSJFBMCRTJMPTTVUYWMSMHRSLXLFBSGUMIXETCGGMPIONTJNLXMSPEUGOEGBFPHZPVXUTTVZDIPSPOEQDFCGAEYGHWSSJUNTEYQZXCUGYMGFMHRTELIFHRGUQFIUTVVUFVCBNRRZCCMAZTBYTQYYTTRODFYVETVTESXUXVRXJAELMHRSLGLVGEBVPVEGXSVZTWLNKDJOCIHVGTBZSIJNURVIELMFPAFZSITBBNGLPCRZTNZGOIMAAIFGCXMPEEOAERSFNCUSLGLVGEFKIMWGXDNZLRCETTRZSICJHUYJLWLRIOVTEIHBNTJOELAERUAJPVWGTTRSPRXOXMNISMRRLOSGOMJSXRRTEOMAWFEUXERLVOZVFXIEUUVREWSSTRSKJRQNGDVJYXABKKBAEXLRYUYRELIBKYBLHLEGLUPNLQEPAIAKHSYYWLBUVPMXXOENZAMGPOHROASEDBHZSIMALIFZPHXUTTVLJSYJTNGZZQEXXAFOXYPNMIBTZJRNMUEKJSYQUEGZPVQNDEVZBYEAMUZSPGLNGIPGW
In your answer, it is not enough to provide the plaintext.
· Explain how you used or would use the crib word (“quantum”) to find at least part of the key
· Give the plaintext with spaces and punctuation inserted
· Provide the key
· Provide the author of the quote
it might help to determine the likely length of the key using the program you wrote in assignment 1.
D. Finding 𝑝 and 𝑞 in RSA (8 points) We discussed several times that knowing any one of the secret keys in RSA would lead to knowing the others. Remember that we always know the two public values 𝑛 and e. But there are four secret values:
1. 𝑝
2. 𝑞
3. (𝑝−1)(𝑞−1), which is also called 𝜙(𝑛)
4. 𝑑
Clearly if one knows 𝑝, one can find 𝑞 and, from those two values, 𝜙(𝑛) and 𝑑.
But what if we only know 𝜙(𝑛)? As it turns out, algebra will help us find the values 𝑝+𝑞 and 𝑝−𝑞:
· One can see that 𝜙(𝑛)=(𝑝−1)(𝑞−1)=𝑝𝑞−𝑝−𝑞+1. Show how to use the last formula to find 𝑝+𝑞.
· One can also see that (𝑝−𝑞)2=𝑝2−2𝑝𝑞+𝑞2. Show how to use the last formula to find 𝑝−𝑞.
· Show how to use the formulas 𝑝+𝑞 and 𝑝−𝑞 to find 𝑝 and 𝑞.
Now, apply this technique to the values:
· 𝑛= 908445664156710023209119550968341886822411188352723705601669
· 𝜙(𝑛)= 908445664156710023209119550966411338125651051061875208447520
Provide the values of 𝑝 and 𝑞.
E. ElGamal (9 points) Please complete exercise 16 in section 10.6.
F. RSA (9 points) Please complete exercise 2 in section 14.4.
Programming problem
Implementing one round of AES encryption
(15 points) Implement (almost) the first round of AES with a 128-bit key. Given a 128-bit plaintext and a 128-bit key, this involves:
1. Performing a bitwise XOR with the plaintext and the key
2. Applying byte substitution for each byte in the state
3. Applying shift rows on the state table rows
4. Applying mix columns on the state table columns
Output the state table at this point. The “almost” above means that you don’t have to perform the XOR with the state and the first sub-key.
Please name the program AESEncryptRound.java or aesencryptround.py. You may hard code the inputs.
Please use the following inputs, which are the same as given in Appendix B of the FIPS197 document (located in the Notes module):
plaintext = 0x3243f6a8885a308d313198a2e0370734
key = 0x2b7e151628aed2a6abf7158809cf4f3c
The byte substitution, multiply-by-2, and multiply-by-3 tables are available in the text file AEStables.txt, which is in the D2L module with this exam. Each table is given as a list where the 𝑖𝑡ℎ entry is the value of applying the given operation to 𝑖.
Please print the state table after each step. Using the inputs given in Appendix B, my program outputs:
Original plaintext
32 88 31 e0
43 5a 31 37
f6 30 98 07
a8 8d a2 34
After ARK with original key
19 a0 9a e9
3d f4 c6 f8
e3 e2 8d 48
be 2b 2a 08
After SB
d4 e0 b8 1e
27 bf b4 41
11 98 5d 52
ae f1 e5 30
After SR
d4 e0 b8 1e
bf b4 41 27
5d 52 11 98
30 ae f1 e5
After MC
04 e0 48 28
66 cb f8 06
81 19 d3 26
e5 9a 7a 4c
My suggestion is to work on the layers in the order given so that it is easy to get partial credit. I found the mix columns layer the most challenging, which is another reason to leave it to the end. Also, be careful with byte ordering. Note that the state table is filled starting at the leftmost byte and in column-major order. It’s a small detail but getting it wrong results in outputs that are not close to what is correct.
In the following arrays, the value at index i is found by applying the operation mentioned above the array. For example, in the ByteSub array, the entry at index 3 is 0x7b, which means that applying ByteSub to the value 0x03 returns the value 0x7b.
Multiplied by 2 in GF(256)
[0x00, 0x02, 0x04, 0x06, 0x08, 0x0a, 0x0c, 0x0e,
0x10, 0x12, 0x14, 0x16, 0x18, 0x1a, 0x1c, 0x1e,
0x20, 0x22, 0x24, 0x26, 0x28, 0x2a, 0x2c, 0x2e,
0x30, 0x32, 0x34, 0x36, 0x38, 0x3a, 0x3c, 0x3e,
0x40, 0x42, 0x44, 0x46, 0x48, 0x4a, 0x4c, 0x4e,
0x50, 0x52, 0x54, 0x56, 0x58, 0x5a, 0x5c, 0x5e,
0x60, 0x62, 0x64, 0x66, 0x68, 0x6a, 0x6c, 0x6e,
0x70, 0x72, 0x74, 0x76, 0x78, 0x7a, 0x7c, 0x7e,
0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c, 0x8e,
0x90, 0x92, 0x94, 0x96, 0x98, 0x9a, 0x9c, 0x9e,
0xa0, 0xa2, 0xa4, 0xa6, 0xa8, 0xaa, 0xac, 0xae,
0xb0, 0xb2, 0xb4, 0xb6, 0xb8, 0xba, 0xbc, 0xbe,
0xc0, 0xc2, 0xc4, 0xc6, 0xc8, 0xca, 0xcc, 0xce,
0xd0, 0xd2, 0xd4, 0xd6, 0xd8, 0xda, 0xdc, 0xde,
0xe0, 0xe2, 0xe4, 0xe6, 0xe8, 0xea, 0xec, 0xee,
0xf0, 0xf2, 0xf4, 0xf6, 0xf8, 0xfa, 0xfc, 0xfe,
0x1b, 0x19, 0x1f, 0x1d, 0x13, 0x11, 0x17, 0x15,
0x0b, 0x09, 0x0f, 0x0d, 0x03, 0x01, 0x07, 0x05,
0x3b, 0x39, 0x3f, 0x3d, 0x33, 0x31, 0x37, 0x35,
0x2b, 0x29, 0x2f, 0x2d, 0x23, 0x21, 0x27, 0x25,
0x5b, 0x59, 0x5f, 0x5d, 0x53, 0x51, 0x57, 0x55,
0x4b, 0x49, 0x4f, 0x4d, 0x43, 0x41, 0x47, 0x45,
0x7b, 0x79, 0x7f, 0x7d, 0x73, 0x71, 0x77, 0x75,
0x6b, 0x69, 0x6f, 0x6d, 0x63, 0x61, 0x67, 0x65,
0x9b, 0x99, 0x9f, 0x9d, 0x93, 0x91, 0x97, 0x95,
0x8b, 0x89, 0x8f, 0x8d, 0x83, 0x81, 0x87, 0x85,
0xbb, 0xb9, 0xbf, 0xbd, 0xb3, 0xb1, 0xb7, 0xb5,
0xab, 0xa9, 0xaf, 0xad, 0xa3, 0xa1, 0xa7, 0xa5,
0xdb, 0xd9, 0xdf, 0xdd, 0xd3, 0xd1, 0xd7, 0xd5,
0xcb, 0xc9, 0xcf, 0xcd, 0xc3, 0xc1, 0xc7, 0xc5,
0xfb, 0xf9, 0xff, 0xfd, 0xf3, 0xf1, 0xf7, 0xf5,
0xeb, 0xe9, 0xef, 0xed, 0xe3, 0xe1, 0xe7, 0xe5]
Multiplied by 3 in GF(256)
[0x00, 0x03, 0x06, 0x05, 0x0c, 0x0f, 0x0a, 0x09,
0x18, 0x1b, 0x1e, 0x1d, 0x14, 0x17, 0x12, 0x11,
0x30, 0x33, 0x36, 0x35, 0x3c, 0x3f, 0x3a, 0x39,
0x28, 0x2b, 0x2e, 0x2d, 0x24, 0x27, 0x22, 0x21,
0x60, 0x63, 0x66, 0x65, 0x6c, 0x6f, 0x6a, 0x69,
0x78, 0x7b, 0x7e, 0x7d, 0x74, 0x77, 0x72, 0x71,
0x50, 0x53, 0x56, 0x55, 0x5c, 0x5f, 0x5a, 0x59,
0x48, 0x4b, 0x4e, 0x4d, 0x44, 0x47, 0x42, 0x41,
0xc0, 0xc3, 0xc6, 0xc5, 0xcc, 0xcf, 0xca, 0xc9,
0xd8, 0xdb, 0xde, 0xdd, 0xd4, 0xd7, 0xd2, 0xd1,
0xf0, 0xf3, 0xf6, 0xf5, 0xfc, 0xff, 0xfa, 0xf9,
0xe8, 0xeb, 0xee, 0xed, 0xe4, 0xe7, 0xe2, 0xe1,
0xa0, 0xa3, 0xa6, 0xa5, 0xac, 0xaf, 0xaa, 0xa9,
0xb8, 0xbb, 0xbe, 0xbd, 0xb4, 0xb7, 0xb2, 0xb1,
0x90, 0x93, 0x96, 0x95, 0x9c, 0x9f, 0x9a, 0x99,
0x88, 0x8b, 0x8e, 0x8d, 0x84, 0x87, 0x82, 0x81,
0x9b, 0x98, 0x9d, 0x9e, 0x97, 0x94, 0x91, 0x92,
0x83, 0x80, 0x85, 0x86, 0x8f, 0x8c, 0x89, 0x8a,
0xab, 0xa8, 0xad, 0xae, 0xa7, 0xa4, 0xa1, 0xa2,
0xb3, 0xb0, 0xb5, 0xb6, 0xbf, 0xbc, 0xb9, 0xba,
0xfb, 0xf8, 0xfd, 0xfe, 0xf7, 0xf4, 0xf1, 0xf2,
0xe3, 0xe0, 0xe5, 0xe6, 0xef, 0xec, 0xe9, 0xea,
0xcb, 0xc8, 0xcd, 0xce, 0xc7, 0xc4, 0xc1, 0xc2,
0xd3, 0xd0, 0xd5, 0xd6, 0xdf, 0xdc, 0xd9, 0xda,
0x5b, 0x58, 0x5d, 0x5e, 0x57, 0x54, 0x51, 0x52,
0x43, 0x40, 0x45, 0x46, 0x4f, 0x4c, 0x49, 0x4a,
0x6b, 0x68, 0x6d, 0x6e, 0x67, 0x64, 0x61, 0x62,
0x73, 0x70, 0x75, 0x76, 0x7f, 0x7c, 0x79, 0x7a,
0x3b, 0x38, 0x3d, 0x3e, 0x37, 0x34, 0x31, 0x32,
0x23, 0x20, 0x25, 0x26, 0x2f, 0x2c, 0x29, 0x2a,
0x0b, 0x08, 0x0d, 0x0e, 0x07, 0x04, 0x01, 0x02,
0x13, 0x10, 0x15, 0x16, 0x1f, 0x1c, 0x19, 0x1a]
ByteSub
[0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16]
Get expert help for Written answers: Python Code and many more. 24X7 help, plag free solution. Order online now!