{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 "Geneva" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 1 }{CSTYLE " " -1 257 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 0 }{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 0 }{CSTYLE "" -1 260 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 0 } {CSTYLE "" -1 261 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 262 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 263 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 264 "" 0 1 0 0 0 0 2 0 0 0 0 0 0 0 0 1 }{CSTYLE "" -1 265 "Geneva" 0 1 0 0 0 0 0 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 4 4 1 0 1 0 2 2 0 1 }{PSTYLE "Heading 3" -1 5 1 {CSTYLE "" -1 -1 "Gene va" 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 "" 11 12 1 {CSTYLE "" -1 -1 "" 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 }1 0 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 }} {SECT 0 {EXCHG {PARA 18 "" 0 "" {TEXT -1 34 "Exploring DES, Modes of e ncryption" }}{PARA 19 "" 0 "" {TEXT -1 38 "\251 Mike May, S. J., 2002, maymk@slu.edu" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 8 "restart:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT 265 131 "This worksheet does some expl oration of DES. It focuses on the 4 standard modes of using DES to en crypt and decrypt longer message" }{TEXT -1 1 "." }}}{EXCHG {PARA 0 " " 0 "" {TEXT -1 319 "Before you start this worksheet, you need to esta blish the file DES.m with a collection of constants and functions used by this worksheet. This can be done by opening the worksheets entitl ed DES constants and DES functions and executing everything on those w orksheets to define all the constants and functions we need." }}{PARA 0 "" 0 "" {TEXT 256 278 "This worksheet assumes that you have worked t hrough the worksheet DES Example which looks at the mechanics of DES e ncryption on a single block of data. (You don't require to have done \+ that in this session. We don't need results defined on that worksheet to make this one run.)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 13 " read `DES.m`:" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 79 "We want to start with a standard key and a standard message for this worksheet." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 138 "plaintext := \"Good morning Mr. Phelps. Your mission,\nshould you choose to accept it, is to lea rn to use DES.\";\nDESkeyASCII := \"Be-Happy\";" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%*plaintextGQjpGood~morning~Mr.~Phelps.~~Your~mission, |+should~you~choose~to~accept~it,~is~to~learn~to~use~DES.6\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,DESkeyASCIIGQ)Be-Happy6\"" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 98 "We want to convert our key to a hex strin g. Then we want to expand the key out to the 16 subkeys." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 68 "hexkey := ASCII2hex16(DESkeyASCII); \nkeytable := keyexpander(hexkey):" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >%'hexkeyG%142652D4861707079G" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 58 " We also want to break our message into a list of hexwords." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 83 "plainhex := asciistrtohexword(plain text);\nplainlength := linalg[vectdim](plainhex);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#>%)plainhexG7.%1476F6F64206D6F72G%16E696E67204D722EG%12 05068656C70732EG%12020596F7572206DG%1697373696F6E2C0AG%173686F756C6420 79G%16F752063686F6F73G%16520746F20616363G%16570742069742C20G%169732074 6F206C65G%161726E20746F2075G%17365204445532E00G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%,plainlengthG\"#7" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 100 "Since our message is 12 blocks long we will need to use DES 12 times to encode our standard message." }}}{SECT 0 {PARA 4 "" 0 "" {TEXT 261 40 "Mode 1 - ECB - Electronic Code Book mode" }{TEXT -1 0 " " }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 254 "The easiest mode to understan d is the ECB mode. This mode simply applied DES to each message block in turn. The mode is easy to understand, can be adapted to parallel \+ processing, and errors in one block of message do not cause problems i n later blocks." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 146 "ECBciph er := linalg[vector](plainlength):\nfor i from 1 to plainlength do\n \+ ECBcipher[i] := qdDEShex(plainhex[i],keytable):\nod;\nprint(ECBciphe r);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\"\"\"%1752220C 5FD43A428G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\"\"#%1B B1C43EAF39906D1G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\" \"$%17938031E97FA3AA4G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBciphe rG6#\"\"%%17540CBA014C43E48G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*EC BcipherG6#\"\"&%15AEF081B303DFDC2G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >&%*ECBcipherG6#\"\"'%1F278EF6F34EE1BA0G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\"\"(%1EC3065BC54539DF7G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\"\")%16332B8C57B8D9522G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\"\"*%1472A75F168F49681G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\"#5%1EF91FE7336918244 G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\"#6%184B3F8C6CAF 52ECBG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*ECBcipherG6#\"#7%1145158 1B7832EFF1G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'vectorG6#7.%1752220C 5FD43A428G%1BB1C43EAF39906D1G%17938031E97FA3AA4G%17540CBA014C43E48G%15 AEF081B303DFDC2G%1F278EF6F34EE1BA0G%1EC3065BC54539DF7G%16332B8C57B8D95 22G%1472A75F168F49681G%1EF91FE7336918244G%184B3F8C6CAF52ECBG%11451581B 7832EFF1G" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 81 "For decryption in th is mode we simply apply unDEShex to each cipherblock in turn." }}} {EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 144 "outofECB := linalg[vector]( plainlength):\nfor i from 1 to plainlength do\n outofECB[i] := unDE Shex(ECBcipher[i],keytable):\nod:\nprint(outofECB);" }}{PARA 12 "" 1 " " {XPPMATH 20 "6#-%'vectorG6#7.%1476F6F64206D6F72G%16E696E67204D722EG% 1205068656C70732EG%12020596F7572206DG%1697373696F6E2C0AG%173686F756C64 2079G%16F752063686F6F73G%16520746F20616363G%16570742069742C20G%1697320 746F206C65G%161726E20746F2075G%17365204445532E00G" }}}{EXCHG {PARA 0 " > " 0 "" {MPLTEXT 1 0 28 "hexwordtoasciistr(outofECB);" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#QjpGood~morning~Mr.~Phelps.~~Your~mission,|+should ~you~choose~to~accept~it,~is~to~learn~to~use~DES.6\"" }}}{SECT 0 {PARA 5 "" 0 "" {TEXT -1 0 "" }{TEXT 257 10 "Exercises:" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 411 "1) Create a short message (50-150 chara cters) that you want to encrypt. Encrypt it with DES and the standard key. Make sure that you can decrypt the message. Post your message \+ to the bulletin board and decrypt someone else's message. (You probab ly want to avoid the variable names plainmess, plainhex, and plainleng th, since we may want to use the current values of those variables lat er in the worksheet.)" }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" } }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 208 "2) Pick a DES key. (It can be either 8 ASCII characters or 16 hex characters.) Expand your key int o a list of 16 subkeys. (You probably want to avoid the variable name s DESkeyASCII, hexkey, and keytable)." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 88 "3) Use your \+ key to encode the the standard message. Make sure that it decodes as \+ well." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}{SECT 0 {PARA 4 "" 0 "" {TEXT 262 37 "Mode 2 - CBC - Cipher Block Chaining " } {TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 370 "The next mode is \+ the CBC or Cipher Block Chaining mode. In this mode each block is XOR ed with the previous cipherblock before encryption. For the first blo ck we start with an initialization vector. For this worksheet, we wil l use`0123456789ABCDEF` as the initialization vector. In real practic e, it is not unusual to start with the zero vector as the initial vect or." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 373 "IVhex := `012345678 9ABCDEF`:\nCBCfeedin := linalg[vector](plainlength):\nCBCcipher := lin alg[vector](plainlength):\nCBCfeedin[1] := xor64hex(IVhex, plainhex[1] );\nCBCcipher[1] := qdDEShex(CBCfeedin[1],keytable);\nfor i from 2 to \+ plainlength do\n CBCfeedin[i] := xor64hex(CBCcipher[i-1], plainhex[ i]); \n CBCcipher[i] := qdDEShex(CBCfeedin[i],keytable):\nod;\nprin t(CBCcipher);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"\" \"%1464C2A03A9C6A29DG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipher G6#\"\"\"%1AEC5FF912E54F3FBG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CB CfeedinG6#\"\"#%1C0AC91F60E1981D5G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >&%*CBCcipherG6#\"\"#%18CAA6750C9AAB14EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"\"$%1ACFA0F35A5DAC260G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipherG6#\"\"$%1CA63969B458CBEE2G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"\"%%1EA43CFF430FE9E8FG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipherG6#\"\"%%18C5B07206B19497 5G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"\"&%1E52874490 477657FG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipherG6#\"\"&%14F0 39292B903EDA7G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"\" '%13C6BFDE7D567CDDEG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipherG 6#\"\"'%1E17C92B174D0AC6FG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCf eedinG6#\"\"(%18E09B2D21CBFC31CG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>& %*CBCcipherG6#\"\"(%1CAC60CB3A5A66FDBG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"\")%1AFE678DC85C70CB8G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipherG6#\"\")%1A1E58BA294435B80G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"\"*%1C495FF82FD3777A0G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipherG6#\"\"*%130FD78788C6B292 EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"#5%1598E580CE3 4B454BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipherG6#\"#5%1D9946 602E9546C62G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCfeedinG6#\"#6%1 B8E608229D3B4C17G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCcipherG6# \"#6%14F07A9BC687B9CDFG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CBCfeed inG6#\"#7%13C6289F82D28B2DFG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CB CcipherG6#\"#7%1783137EC03B62850G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#- %'vectorG6#7.%1AEC5FF912E54F3FBG%18CAA6750C9AAB14EG%1CA63969B458CBEE2G %18C5B07206B194975G%14F039292B903EDA7G%1E17C92B174D0AC6FG%1CAC60CB3A5A 66FDBG%1A1E58BA294435B80G%130FD78788C6B292EG%1D9946602E9546C62G%14F07A 9BC687B9CDFG%1783137EC03B62850G" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 191 "To decipher in this mode we unDES each block, then XOR the resul t with the previous block of plaintext result. Note that we treat the initialization vector as the zeroth block of plaintext." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 401 "outofCBC := linalg[vector](plainle ngth):\nCBCbeforeXOR := linalg[vector](plainlength):\nCBCbeforeXOR[1] \+ := unDEShex(CBCcipher[1],keytable);\noutofCBC[1] := xor64hex(CBCbefore XOR[1], IVhex);\nfor i from 2 to plainlength do\n CBCbeforeXOR[i] := unDEShex(CBCcipher[i],keytable):\n outofCBC[i] := xor64hex(CBCbefor eXOR[i], CBCcipher[i-1]);\nod;\nprint(CBCcipher);\nprint(outofECB);\nh exwordtoasciistr(outofCBC);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBC beforeXORG6#\"\"\"%1464C2A03A9C6A29DG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"\"\"%1476F6F64206D6F72G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6#\"\"#%1C0AC91F60E1981D5G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"\"#%16E696E67204D722EG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6#\"\"$%1ACFA0F35A5DA C260G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"\"$%12050686 56C70732EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6#\"\"% %1EA43CFF430FE9E8FG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6# \"\"%%12020596F7572206DG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbef oreXORG6#\"\"&%1E52874490477657FG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> &%)outofCBCG6#\"\"&%1697373696F6E2C0AG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6#\"\"'%13C6BFDE7D567CDDEG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"\"'%173686F756C642079G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6#\"\"(%18E09B2D21CBFC31CG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"\"(%16F752063686F6F73 G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6#\"\")%1AFE678D C85C70CB8G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"\")%165 20746F20616363G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6# \"\"*%1C495FF82FD3777A0G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofC BCG6#\"\"*%16570742069742C20G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-C BCbeforeXORG6#\"#5%1598E580CE34B454BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"#5%1697320746F206C65G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6#\"#6%1B8E608229D3B4C17G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"#6%161726E20746F2075G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%-CBCbeforeXORG6#\"#7%13C6289F82D28B 2DFG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCBCG6#\"#7%1736520444 5532E00G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'vectorG6#7.%1AEC5FF912E 54F3FBG%18CAA6750C9AAB14EG%1CA63969B458CBEE2G%18C5B07206B194975G%14F03 9292B903EDA7G%1E17C92B174D0AC6FG%1CAC60CB3A5A66FDBG%1A1E58BA294435B80G %130FD78788C6B292EG%1D9946602E9546C62G%14F07A9BC687B9CDFG%1783137EC03B 62850G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'vectorG6#7.%1476F6F64206D 6F72G%16E696E67204D722EG%1205068656C70732EG%12020596F7572206DG%1697373 696F6E2C0AG%173686F756C642079G%16F752063686F6F73G%16520746F20616363G%1 6570742069742C20G%1697320746F206C65G%161726E20746F2075G%17365204445532 E00G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#QjpGood~morning~Mr.~Phelps.~~Y our~mission,|+should~you~choose~to~accept~it,~is~to~learn~to~use~DES.6 \"" }}}{SECT 0 {PARA 5 "" 0 "" {TEXT -1 0 "" }{TEXT 258 10 "Exercises: " }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 200 "4) Encrypt your short messag e with DES and the standard key using CBC mode. Make sure that you ca n decrypt the message. Post your message to the bulletin board and de crypt someone else's message. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 134 "5) Use your key to en code the the standard message with DES in CBC mode. Make sure that yo u can decrypt back to the standard message." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}{SECT 0 {PARA 4 "" 0 "" {TEXT 263 35 "Mode 3 - CFB - Cipher Feedback Mode" }{TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 " " {TEXT -1 338 "CFB looks very similar to CBC. The difference between the two modes is that CBC does an XOR, then encrypts, while CFB encry pts then does an XOR. The advantage of CFB is the encryption part can be done before the block of message is entered. That makes this mode better for devices where we want to encrypt a character or bit at a t ime." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 344 "CFBoutput := linal g[vector](plainlength):\nCFBcipher := linalg[vector](plainlength):\nCF Bcipher[1] := qdDEShex(IVhex,keytable);\nCFBoutput[1] := xor64hex(CFBc ipher[1], plainhex[1]);\nfor i from 2 to plainlength do\n CFBcipher [i] := qdDEShex(CFBoutput[i-1],keytable):\n CFBoutput[i] := xor64he x(CFBcipher[i], plainhex[i]); \nod;\nprint(CFBoutput);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6#\"\"\"%1B4A9495FF15BFE6CG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\"\"%1F3C6263BD13691 1EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6#\"\"#Q1072D12EA C61167836\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\"#%1 69447C8DE65C15ADG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6# \"\"$%1EC96E0796228835CG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBout putG6#\"\"$%1CCC6881C0E58F072G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%* CFBcipherG6#\"\"%%19543CC6BB9C0325BG" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>&%*CFBoutputG6#\"\"%%1B5639504CCB21236G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6#\"\"&%1A622BB7B1EFEA9B4G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\"&%1CF51C812719085BEG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6#\"\"'%1DB7F0CEF8FC94A7 AG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\"'%1A817639AE 3AD6A03G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6#\"\"(%1455 A024403C59B33G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\" (%12A2F22276BAAF440G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG 6#\"\")%164D5320F5C5CFE6BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBo utputG6#\"\")Q101F546607C3D9D086\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >&%*CFBcipherG6#\"\"*%1D9AF107A145AA82EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\"*%1BCDF645A7D2E840EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6#\"#5%171EB7B30C8492A1BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"#5%118985B44A769467EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6#\"#6%1487839D0F729226CG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"#6%1290A57F083460219 G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBcipherG6#\"#7%1506CEDA47A3 A5E69G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"#7%12309CD E03F697069G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'vectorG6#7.%1F3C6263 BD136911EG%169447C8DE65C15ADG%1CCC6881C0E58F072G%1B5639504CCB21236G%1C F51C812719085BEG%1A817639AE3AD6A03G%12A2F22276BAAF440GQ101F546607C3D9D 086\"%1BCDF645A7D2E840EG%118985B44A769467EG%1290A57F083460219G%12309CD E03F697069G" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 202 "To decrypt in thi s mode, we want to XOR each cipher block with the result of encrypting the previous ciphertext block. Note that the decryption algorithm us es encryption rather than decryption for DES." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 380 "outofCFB := linalg[vector](plainlength):\nCFBun DES := linalg[vector](plainlength):\nCFBunDES[1] := qdDEShex(IVhex,key table);\noutofCFB[1] := xor64hex(CFBunDES[1], CFBoutput[1]);\nfor i fr om 2 to plainlength do\n CFBunDES[i] := qdDEShex(CFBoutput[i-1],keyt able):\n outofCFB[i] := xor64hex(CFBoutput[i], CFBunDES[i]);\nod;\np rint(CFBunDES);\nprint(outofCFB);\nhexwordtoasciistr(outofCFB);" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6#\"\"\"%1B4A9495FF15BFE6 CG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFBG6#\"\"\"%1476F6F642 06D6F72G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6#\"\"#Q1072D 12EAC61167836\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFBG6#\"\" #%16E696E67204D722EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6 #\"\"$%1EC96E0796228835CG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outof CFBG6#\"\"$%1205068656C70732EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%) CFBunDESG6#\"\"%%19543CC6BB9C0325BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>&%)outofCFBG6#\"\"%%12020596F7572206DG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6#\"\"&%1A622BB7B1EFEA9B4G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFBG6#\"\"&%1697373696F6E2C0AG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6#\"\"'%1DB7F0CEF8FC94A7AG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFBG6#\"\"'%173686F756C642079G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6#\"\"(%1455A024403C59B33 G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFBG6#\"\"(%16F752063686 F6F73G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6#\"\")%164D532 0F5C5CFE6BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFBG6#\"\")%16 520746F20616363G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6#\" \"*%1D9AF107A145AA82EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFB G6#\"\"*%16570742069742C20G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFB unDESG6#\"#5%171EB7B30C8492A1BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&% )outofCFBG6#\"#5%1697320746F206C65G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>&%)CFBunDESG6#\"#6%1487839D0F729226CG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFBG6#\"#6%161726E20746F2075G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)CFBunDESG6#\"#7%1506CEDA47A3A5E69G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofCFBG6#\"#7%17365204445532E00G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'vectorG6#7.%1B4A9495FF15BFE6CGQ1072D12EAC 61167836\"%1EC96E0796228835CG%19543CC6BB9C0325BG%1A622BB7B1EFEA9B4G%1D B7F0CEF8FC94A7AG%1455A024403C59B33G%164D5320F5C5CFE6BG%1D9AF107A145AA8 2EG%171EB7B30C8492A1BG%1487839D0F729226CG%1506CEDA47A3A5E69G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'vectorG6#7.%1476F6F64206D6F72G%16E696E672 04D722EG%1205068656C70732EG%12020596F7572206DG%1697373696F6E2C0AG%1736 86F756C642079G%16F752063686F6F73G%16520746F20616363G%16570742069742C20 G%1697320746F206C65G%161726E20746F2075G%17365204445532E00G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#QjpGood~morning~Mr.~Phelps.~~Your~mission,|+ should~you~choose~to~accept~it,~is~to~learn~to~use~DES.6\"" }}}{SECT 0 {PARA 5 "" 0 "" {TEXT -1 0 "" }{TEXT 259 9 "Exercises" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 200 "6) Encrypt your short message with DES \+ and the standard key using CFB mode. Make sure that you can decrypt t he message. Post your message to the bulletin board and decrypt someo ne else's message. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }} }{EXCHG {PARA 0 "" 0 "" {TEXT -1 134 "7) Use your key to encode the th e standard message with DES in CFB mode. Make sure that you can decry pt back to the standard message." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}{SECT 0 {PARA 4 "" 0 "" {TEXT 264 35 "Mode 4 - \+ OFB - Output Feedback mode" }{TEXT -1 0 "" }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 480 "In many ways this fourth mode is a return to the one tim e pad with DES used as a generator of a pseudo random string. Once ag ain we start with an initialization vector. This time we simply chain the encryption of the initialization vector back on itself without an y interaction with the message. We then XOR the message with the bits tream we have produced. Since this is essentially a one time pad, it \+ is crucial that each message start with a different initialization vec tor." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 235 "OFBoutput := linal g[vector](plainlength):\nOFBbinpad := qdDEShex(IVhex,keytable);\nfor i from 1 to plainlength do\n CFBoutput[i] := xor64hex(OFBbinpad, pla inhex[i]); \n OFBbinpad := qdDEShex(OFBbinpad,keytable);\nod;\nprin t(CFBoutput);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%1B4A949 5FF15BFE6CG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\"\"% 1F3C6263BD136911EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%19 F7E072A4B1C9BC1G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\" \"#%1F117694D6B51E9EFG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpad G%1338C08E009D3B668G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG 6#\"\"$%113DC608565A3C546G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbi npadG%17A5F35BE3A4554AAG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBout putG6#\"\"%%15A7F6CD14F3774C7G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*O FBbinpadG%1678722CD38CC057BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CF BoutputG6#\"\"&Q10EF451A457A229716\"" }}{PARA 11 "" 1 "" {XPPMATH 20 " 6#>%*OFBbinpadG%195E9CA1D5E811C64G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6# >&%*CFBoutputG6#\"\"'%1E681A56832E53C1DG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%164CDBD394F9B5C27G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\"(Q10BB89D5A27F433546\"" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%1C60FD370BB0F3569G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\")%1A32FA71F9B6E560AG" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%13B9883F5E8B0EFE1G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"\"*%15EE8F7D581C4C3C1G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%110E09722A7FE839AG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"#5%17993B756C8DEEFFFG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%124EFD8F69611496EG" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"#6%1459DB6D6E27E691B G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%134029E0CDF6A58C1G " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%*CFBoutputG6#\"#7%14767BE489A39 76C1G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%1439AA5EA8748C6 CAG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'vectorG6#7.%1F3C6263BD136911 EG%1F117694D6B51E9EFG%113DC608565A3C546G%15A7F6CD14F3774C7GQ10EF451A45 7A229716\"%1E681A56832E53C1DGQ10BB89D5A27F43354F,%1A32FA71F9B6E560AG%1 5EE8F7D581C4C3C1G%17993B756C8DEEFFFG%1459DB6D6E27E691BG%14767BE489A397 6C1G" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 101 "Note that the creation o f OFBbinpad does not interact with the message. It could be done sepa rately." }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 79 "Once again we want to \+ decipher the message to get back to the original message." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 262 "outofOFB := linalg[vector](plainle ngth):\nOFBbinpad := qdDEShex(IVhex,keytable);\nfor i from 1 to plainl ength do\n outofOFB[i] := xor64hex(OFBbinpad, CFBoutput[i]); \n \+ OFBbinpad := qdDEShex(OFBbinpad,keytable);\nod;\nprint(outofOFB);\nhex wordtoasciistr(outofOFB);" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbin padG%1B4A9495FF15BFE6CG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofOF BG6#\"\"\"%1476F6F64206D6F72G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OF BbinpadG%19F7E072A4B1C9BC1G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)out ofOFBG6#\"\"#%16E696E67204D722EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>% *OFBbinpadG%1338C08E009D3B668G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%) outofOFBG6#\"\"$%1205068656C70732EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6 #>%*OFBbinpadG%17A5F35BE3A4554AAG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#> &%)outofOFBG6#\"\"%%12020596F7572206DG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%1678722CD38CC057BG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofOFBG6#\"\"&%1697373696F6E2C0AG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%195E9CA1D5E811C64G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofOFBG6#\"\"'%173686F756C642079G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%164CDBD394F9B5C27G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofOFBG6#\"\"(%16F752063686F6F73G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%1C60FD370BB0F3569G" }}{PARA 11 " " 1 "" {XPPMATH 20 "6#>&%)outofOFBG6#\"\")%16520746F20616363G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%13B9883F5E8B0EFE1G" }} {PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofOFBG6#\"\"*%16570742069742C20 G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%110E09722A7FE839AG " }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofOFBG6#\"#5%1697320746F206 C65G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%124EFD8F69611496 EG" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofOFBG6#\"#6%161726E20746 F2075G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%134029E0CDF6A5 8C1G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>&%)outofOFBG6#\"#7%1736520444 5532E00G" }}{PARA 11 "" 1 "" {XPPMATH 20 "6#>%*OFBbinpadG%1439AA5EA874 8C6CAG" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#-%'vectorG6#7.%1476F6F64206D 6F72G%16E696E67204D722EG%1205068656C70732EG%12020596F7572206DG%1697373 696F6E2C0AG%173686F756C642079G%16F752063686F6F73G%16520746F20616363G%1 6570742069742C20G%1697320746F206C65G%161726E20746F2075G%17365204445532 E00G" }}{PARA 12 "" 1 "" {XPPMATH 20 "6#QjpGood~morning~Mr.~Phelps.~~Y our~mission,|+should~you~choose~to~accept~it,~is~to~learn~to~use~DES.6 \"" }}}{SECT 0 {PARA 5 "" 0 "" {TEXT -1 0 "" }{TEXT 260 10 "Exercises: " }}{EXCHG {PARA 0 "" 0 "" {TEXT -1 200 "8) Encrypt your short messag e with DES and the standard key using OFB mode. Make sure that you ca n decrypt the message. Post your message to the bulletin board and de crypt someone else's message. " }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}{EXCHG {PARA 0 "" 0 "" {TEXT -1 134 "9) Use your key to en code the the standard message with DES in OFB mode. Make sure that yo u can decrypt back to the standard message." }}}{EXCHG {PARA 0 "> " 0 "" {MPLTEXT 1 0 0 "" }}}}}}{MARK "3 0 0" 285 }{VIEWOPTS 1 1 0 1 1 1803 1 1 1 1 }{PAGENUMBERS 0 1 2 33 1 1 }