{VERSION 5 0 "IBM INTEL NT" "5.0" } {USTYLETAB {CSTYLE "Maple Input" -1 0 "Courier" 0 1 255 0 0 1 0 1 0 0 1 0 0 0 0 1 }{CSTYLE "2D Math" -1 2 "Times" 0 1 0 0 0 0 0 0 2 0 0 0 0 0 0 1 }{CSTYLE "2D Output" 2 20 "" 0 1 0 0 255 1 0 0 0 0 0 0 0 0 0 1 } {CSTYLE "" -1 256 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 257 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 258 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 0 }{CSTYLE "" -1 259 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 }{PSTYLE "Normal" -1 0 1 {CSTYLE "" -1 -1 "Geneva" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 2 " -1 4 1 {CSTYLE "" -1 -1 "Geneva" 1 14 0 0 0 1 2 1 2 2 2 2 1 1 1 1 } 1 1 0 0 8 2 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Geneva" 1 12 0 0 0 1 1 1 2 2 2 2 1 1 1 1 }1 1 0 0 0 0 1 0 1 0 2 2 0 1 }{PSTYLE "Maple Output" 0 11 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }3 3 0 -1 -1 -1 0 0 0 0 0 0 -1 0 }{PSTYLE "Title" -1 18 1 {CSTYLE "" -1 -1 "Geneva" 1 18 0 0 0 1 2 1 1 2 2 2 1 1 1 1 }3 1 0 0 12 12 1 0 1 0 2 2 19 1 }{PSTYLE "Author" -1 19 1 {CSTYLE "" -1 -1 "Geneva" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 8 8 1 0 1 0 2 2 0 1 }{PSTYLE "Normal" -1 256 1 {CSTYLE "" -1 -1 "Geneva" 1 12 0 0 0 1 2 2 2 2 2 2 1 1 1 1 }3 1 0 0 0 0 1 0 1 0 2 2 0 1 }} {SECT 0 {EXCHG {PARA 18 "" 0 "" {TEXT -1 15 "DES, an example" }}{PARA 19 "" 0 "" {TEXT -1 23 "\251 Mike May, S. J., 2002" }}}{EXCHG {PARA 256 "" 0 "" {TEXT -1 37 "Time to walk through a DES conversion" }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 102 "This worksheet walks through the example of using DES that is on the handouts we have been looking at." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 218 "This worksheet assumes that you understa nd key expansion. In this worksheet it is done with a single command \+ that suppresses all the intermediate steps. It is done in full detail in the DES key expansion worksheet. " }}{PARA 0 "" 0 "" {TEXT -1 240 "This worksheet also assume that you have been through the workshe ets on DES constants and DES functions and have created the DES.m file that contains those functions and constants. (If this is not true yo u should run those worksheets now.)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 "read `DES.m`:" }}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 13 "Initial setup" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 69 "We start with a key in hex which we expand into a list of round keys." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 59 "keytest := \"133457799BBCDFF1\";\nk ey := keyexpander(keytest):" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(keyt estGQ1133457799BBCDFF16\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 63 "Then we establish a message in hex, which we convert to binary." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 53 "mess1 := \"0123456789ABCDEF \";\nbin1 := bin64hex(mess1);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&me ss1GQ10123456789ABCDEF6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%bin1GQ [o00000001001000110100010101100111100010011010101111001101111011116\" " }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 28 "Next we apply permutation IP " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 23 "bin2 := InitPerm(bin1); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%bin2GQ[o11001100000000001100110 011111111111100001010101011110000101010106\"" }}}{EXCHG {PARA 0 "" 0 " " {TEXT -1 28 "Now we can define R0 and L0." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 58 "R0 := substring(bin2,33..64);\nL0 := substring(bin 2,1..32);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#R0GQA11110000101010101 1110000101010106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#L0GQA11001100 0000000011001100111111116\"" }}}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 20 " Encrypting one round" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 53 "We need to expand R0 and xor, the result with key[1]." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 57 "expander(R0);\nkey[1];\nbin3 := xor48(key[1],expan der(R0));" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#QQ01111010000101010101010 10111101000010101010101016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#QQ0001 101100000010111011111111110001110000011100106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%bin3GQQ011000010001011110111010100001100110010100100 1116\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 130 "Next we want to take t he 48 bit result and break it into a vector of 8 6 bit words. Each wo rd is then used to get an s-box value." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 79 "vec1 := prodbs(bin3);\nvec2 := linalg[vector](8,[seq( SBox[i][vec1[i]],i=1..8)]);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%vec1 G7*Q'0110006\"Q'010001F'Q'011110F'Q'111010F'Q'100001F'Q'100110F'Q'0101 00F'Q'100111F'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%vec2G-%'vectorG6# 7*Q%01016\"Q%1100F*Q%1000F*Q%0010F*Q%1011F*F)Q%1001F*Q%0111F*" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 97 "Next we want to convert the values in vec2 into 4 bit binary words and concatenate them together." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 34 "bin4 := cat(seq(vec2[i],i=1. .8)); " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%%bin4GQA010111001000001010 110101100101116\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 90 "The result o f the concatenation is then acted on by the permutation P to give the \+ f-value." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 18 "f1 := PPerm(bin 4);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#f1GQA00100011010010101010100 1101110116\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 57 "The result is XOR ed with L0 to give R1. L1 is simply R0." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 29 "R1 := xor32(f1,L0);\nL1 := R0;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#R1GQA111011110100101001100101010001006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%#L1GQA111100001010101011110000101010106\" " }}}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 25 "Encrypting 15 more rounds" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 110 "Now we simply repeat this simpl e process 15 more times. (Oh no!!!! Time to write a procedure and do a loop.)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 73 "L := linalg[ve ctor](16):\nR := linalg[vector](16):\nL[1] := L1;\nR[1] := R1;" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"\"QA111100001010101011110 000101010106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"\"\"QA111 011110100101001100101010001006\"" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 227 "fcomb := proc(ri, ki)\n local t1,t2, t3, vec1, vec2 , i:\n t1 := xor48(ki,expander(ri)):\n vec1 := prodbs(t1):\n vec2 : = linalg[vector](8,[seq(SBox[i][vec1[i]],i=1..8)]):\n t2 := cat(seq(v ec2[i],i=1..8)):\n t3 := PPerm(t2):\nend:" }}}{EXCHG {PARA 0 "> " 0 " " {MPLTEXT 1 0 89 "for i from 2 to 16 do\n L[i] := R[i-1];\n R[i] := xor32(L[i-1],fcomb(R[i-1],key[i]));\nod;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"#QA111011110100101001100101010001006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"\"#QA1100110000000001011101 11000010016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"$QA11001 1000000000101110111000010016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&% \"RG6#\"\"$QA101000100101110000001011111101006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"%QA101000100101110000001011111101006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"\"%QA0111011100100010000000 00010001016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"&QA01110 1110010001000000000010001016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&% \"RG6#\"\"&QA100010100100111110100110001101116\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"'QA100010100100111110100110001101116\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"\"'QA1110100101100111110011 01011010016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"(QA11101 0010110011111001101011010016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&% \"RG6#\"\"(QA000001100100101010111010000100006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\")QA000001100100101010111010000100006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"\")QA1101010101101001010010 11100100006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"\"*QA11010 1010110100101001011100100006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&% \"RG6#\"\"*QA001001000111110011000110011110106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"#5QA001001000111110011000110011110106\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"#5QA10110111110101011101011 1101100106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"#6QA1011011 11101010111010111101100106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"R G6#\"#6QA110001010111100000111100011110006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"#7QA110001010111100000111100011110006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"#7QA01110101101111010001100 0010110006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"#8QA0111010 11011110100011000010110006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"R G6#\"#8QA000110001100001100010101010110106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"#9QA000110001100001100010101010110106\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"#9QA11000010100011001001011 0000011016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"#:QA1100001 01000110010010110000011016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"R G6#\"#:QA010000110100001000110010001101006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"LG6#\"#;QA010000110100001000110010001101006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%\"RG6#\"#;QA00001010010011001101100 1100101016\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 115 "Now we put the l eft and right halves together in reverse order, invert the initial per mutation, and convert to hex." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 142 "puttogether := cat(R[16],L[16]);\nbincodetext := FinalPerm(putt ogether);\nciphertext := convert(convert(parse(bincodetext),decimal,bi nary),hex);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,puttogetherGQ[o00001 010010011001101100110010101010000110100001000110010001101006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%,bincodetextGQ[o10000101111010000001 001101010100000011110000101010110100000001016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+ciphertextG%185E813540F0AB405G" }}}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 10 "Decrypting" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 78 "Now we try decrypting. We will essentially go backward through the p rocedure." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 85 "R2 := linalg[v ector](17):\nL2 := linalg[vector](17):\nR2[17] := R[16];\nL2[17] := L[ 16];" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"#&%#L2G6#\"# " 0 "" {MPLTEXT 1 0 101 "for i from 1 to 16 do\nj := 17-i:\nR2[j] := L2[j+1]; \nL2[j] := xor32(R2[j+1],fcomb(L2[j+1],key[j]));\nod;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"#;" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%# R2G6#\"#;QA010000110100001000110010001101006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"#;QA110000101000110010010110000011016\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"#:" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"#:QA110000101000110010010110000011016\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"#:QA00011000110000110001010 1010110106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"#9" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"#9QA00011000110000110001010101011 0106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"#9QA0111010110111 10100011000010110006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"#8" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"#8QA011101011011110100011 000010110006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"#8QA11000 1010111100000111100011110006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\" jG\"#7" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"#7QA1100010101111 00000111100011110006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"# 7QA101101111101010111010111101100106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"#6" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"#6QA101 101111101010111010111101100106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>& %#L2G6#\"#6QA001001000111110011000110011110106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"#5" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6# \"#5QA001001000111110011000110011110106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"#5QA110101010110100101001011100100006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"\"*" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"\"*QA110101010110100101001011100100006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"\"*QA0000011001001010101110 10000100006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"\")" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"\")QA0000011001001010101110100001 00006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"\")QA11101001011 0011111001101011010016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"\" (" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"\"(QA11101001011001111 1001101011010016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"\"(QA 100010100100111110100110001101116\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%\"jG\"\"'" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"\"'QA100010 100100111110100110001101116\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L 2G6#\"\"'QA011101110010001000000000010001016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"\"&" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6 #\"\"&QA011101110010001000000000010001016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"\"&QA101000100101110000001011111101006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"\"%" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"\"%QA101000100101110000001011111101006\"" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"\"%QA1100110000000001011101 11000010016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"\"$" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"\"$QA1100110000000001011101110000 10016\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"\"$QA11101111010 0101001100101010001006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%\"jG\"\" #" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"\"#QA11101111010010100 1100101010001006\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#L2G6#\"\"#QA 111100001010101011110000101010106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%\"jG\"\"\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%#R2G6#\"\"\"QA1111 00001010101011110000101010106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&% #L2G6#\"\"\"QA110011000000000011001100111111116\"" }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 151 "Now that we have done the 16 rounds, we need to p ut the two halves of the string together, unscramble it, make it a num ber and convert it back to ASCII" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 127 "almost := cat(L2[1],R2[1]);\nunscrambled := FinalPer m(almost);\ncode3 := convert(convert(parse(unscrambled),decimal,binary ),hex);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%'almostGQ[o11001100000000 001100110011111111111100001010101011110000101010106\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,unscrambledGQ[o00000001001000110100010101100111 100010011010101111001101111011116\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%&code3G%0123456789ABCDEFG" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 44 "T hus we have recovered the original message." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 0 {PARA 4 "" 0 "" {TEXT -1 31 "Quick en cryption and decryption" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 66 "We woul d also like to do the same conversion with single commands." }}{PARA 0 "" 0 "" {TEXT -1 26 "Recall our stating values:" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 59 "keytest := \"133457799BBCDFF1\";\nmess1 := \+ \"0123456789ABCDEF\";" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%(keytestGQ1 133457799BBCDFF16\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%&mess1GQ10123 456789ABCDEF6\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 50 "We want to exp and the key and encrypt the message." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 63 "key := keyexpander(keytest):\nciphertext := qdDEShex( mess1,key);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%+ciphertextG%185E8135 40F0AB405G" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 15 "Now we decrypt:" }} }{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 43 "recoveredtext := unDEShex(c iphertext, key);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%.recoveredtextGQ 10123456789ABCDEF6\"" }}}}{SECT 0 {PARA 5 "" 0 "" {TEXT -1 0 "" } {TEXT 256 1 "E" }{TEXT 257 24 "xercises - Key expansion" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 126 "1) Start with the key \"iamhappy\" and \+ converts to the hex string \"69616D6861707079\". Convert the key to b inary and apply PC1." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} }{EXCHG {PARA 0 "" 0 "" {TEXT -1 111 "2) Break the key into 2 halves a nd create arrays of the halves shifted 16 times according to the given formula." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 87 "3) Put the halves back together and apply PC2 to produce the 16 keys in the key vector." }}}{EXCHG {PARA 0 "> \+ " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 128 "4) U se keyexpander to do the same thing in a single command. Make sure th at your answer agrees with your answer to exercise 3." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}{SECT 0 {PARA 5 "" 0 "" {TEXT -1 0 "" }{TEXT 258 1 "E" }{TEXT 259 21 "xercises - Encryption" }} {EXCHG {PARA 0 "" 0 "" {TEXT -1 132 "5) The message \"Be Happy\" conv erts to the hex string \"4265204861707079\". Convert this to binary a nd apply the initial permutation," }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 235 "6) Create 2 arrays of length 16 entitled R and L. Define R0 and L0 as the approp riate halves of your previous answer. Use these numbers and your key \+ to define R[1] and L[1]. Inductively define R[i] and L[i] for i from \+ 2 through 16." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}} {EXCHG {PARA 0 "" 0 "" {TEXT -1 90 "7) Put the 2 halves back together in reverse order and use IPI to get the coded message. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 61 "8) Encrypt the message with a single command using qdDEShex." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 " " {TEXT -1 152 "9) Use DES and the \"iamhappy\" key to encrypt the fi rst 8 letters of your name. Put the results to the bulletin board. D ecrypt someone else's message." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}{MARK "0 1 0" 0 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 } {PAGENUMBERS 0 1 2 33 1 1 }