(* Content-type: application/mathematica *) (*** Wolfram Notebook File ***) (* http://www.wolfram.com/nb *) (* CreatedBy='Mathematica 7.0' *) (*CacheID: 234*) (* Internal cache information: NotebookFileLineBreakTest NotebookFileLineBreakTest NotebookDataPosition[ 145, 7] NotebookDataLength[ 5143931, 174834] NotebookOptionsPosition[ 4660344, 162718] NotebookOutlinePosition[ 4854384, 167680] CellTagsIndexPosition[ 4812873, 166670] WindowTitle->FUNDAMENTALS OF CRYPTOLOGY WindowFrame->Normal*) (* Beginning of Notebook Content *) Notebook[{ Cell["\<\ FUNDAMENTALS OF CRYPTOLOGY A Professional Reference and Interactive Tutorial\ \>", "Title", TextAlignment->Center, TextJustification->0], Cell["\<\ Henk van Tilborg Eindhoven University of Technology\ \>", "Subtitle", TextAlignment->Center, TextJustification->0], Cell[CellGroupData[{ Cell["Contents", "Chapter", TabSpacings->3], Cell[TextData[{ "\t", ButtonBox["Preface", BaseStyle->"Hyperlink", ButtonData:>"Chap Preface"] }], "Text", GeneratedCell->True, CellFrameLabels->{{None, Cell[ TextData[{}]]}, {None, None}}, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Intro"], ButtonBox["\tIntroduction", BaseStyle->"Hyperlink", ButtonData:>"Chap Intro"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectIntro Intro"], ".", CounterBox["Section", "SectIntro Intro"], "\t", ButtonBox["\tIntroduction and Terminology", BaseStyle->"Hyperlink", ButtonData:>"SectIntro Intro"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectIntro Shannon"], ".", CounterBox["Section", "SectIntro Shannon"], "\t", ButtonBox["\tShannon's Description of a Conventional Cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"SectIntro Shannon"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectIntro Statistical"], ".", CounterBox["Section", "SectIntro Statistical"], "\t", ButtonBox["\tStatistical Description of a Plaintext Source", BaseStyle->"Hyperlink", ButtonData:>"SectIntro Statistical"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectIntro Problems"], ".", CounterBox["Section", "SectIntro Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectIntro Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Class"], ButtonBox["\tClassical Cryptosystems", BaseStyle->"Hyperlink", ButtonData:>"Chap Class"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectClass Caesar"], ".", CounterBox["Section", "SectClass Caesar"], "\t", ButtonBox["\tCaesar, Simple Substitution, Vigen\[EGrave]re", BaseStyle->"Hyperlink", ButtonData:>"SectClass Caesar"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsClass Caesar"], ".", CounterBox["Section", "SubsClass Caesar"], ".", CounterBox["Subsection", "SubsClass Caesar"], "\t", "\t", ButtonBox["\tCaesar Cipher", BaseStyle->"Hyperlink", ButtonData:>"SubsClass Caesar"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsClass Simple sub"], ".", CounterBox["Section", "SubsClass Simple sub"], ".", CounterBox["Subsection", "SubsClass Simple sub"], "\t", "\t", ButtonBox["\tSimple Substitution", BaseStyle->"Hyperlink", ButtonData:>"SubsClass Simple sub"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["The System and its Main Weakness", BaseStyle->"Hyperlink", ButtonData:>"SubsubsClass weakness simple"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Cryptanalysis by The Method of a Probable Word", BaseStyle->"Hyperlink", ButtonData:>"DefClass Prob Word"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsClass Vigenere"], ".", CounterBox["Section", "SubsClass Vigenere"], ".", CounterBox["Subsection", "SubsClass Vigenere"], "\t", ButtonBox["\t\tVigen\[EGrave]re Cryptosystem ", BaseStyle->"Hyperlink", ButtonData:>"SubsClass Vigenere"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectClass Incid Coin"], ".", CounterBox["Section", "SectClass Incid Coin"], "\t", ButtonBox["\tThe Incidence of Coincidences, Kasiski's Method", BaseStyle->"Hyperlink", ButtonData:>"SectClass Incid Coin"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSClass incid of coinc"], ".", CounterBox["Section", "SubSClass incid of coinc"], ".", CounterBox["Subsection", "SubSClass incid of coinc"], "\t", ButtonBox["\t\tThe Incidence of Coincidences", BaseStyle->"Hyperlink", ButtonData:>"SubSClass incid of coinc"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSClass Kasiski"], ".", CounterBox["Section", "SubSClass Kasiski"], ".", CounterBox["Subsection", "SubSClass Kasiski"], "\t", ButtonBox["\t\tKasiski's Method", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Kasiski"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectClass Vernam"], ".", CounterBox["Section", "SectClass Vernam"], "\t", ButtonBox["\tVernam, Playfair, Transpositions, Hagelin, Enigma", BaseStyle->"Hyperlink", ButtonData:>"SectClass Vernam"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsClas One-time"], ".", CounterBox["Section", "SubsClas One-time"], ".", CounterBox["Subsection", "SubsClas One-time"], "\t", "\t", ButtonBox["\tThe One-Time Pad", BaseStyle->"Hyperlink", ButtonData:>"SubsClas One-time"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsClass Playfair"], ".", CounterBox["Section", "SubsClass Playfair"], ".", CounterBox["Subsection", "SubsClass Playfair"], "\t\t", ButtonBox["\tThe Playfair Cipher", BaseStyle->"Hyperlink", ButtonData:>"SubsClass Playfair"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsClas Transposition"], ".", CounterBox["Section", "SubsClas Transposition"], ".", CounterBox["Subsection", "SubsClas Transposition"], "\t", ButtonBox["\t\tTransposition Ciphers", BaseStyle->"Hyperlink", ButtonData:>"SubsClas Transposition"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSClass Hagelin"], ".", CounterBox["Section", "SubSClass Hagelin"], ".", CounterBox["Subsection", "SubSClass Hagelin"], "\t", ButtonBox["\t\tHagelin", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Hagelin"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSClass Enigma"], ".", CounterBox["Section", "SubSClass Enigma"], ".", CounterBox["Subsection", "SubSClass Enigma"], "\t", ButtonBox["\t\tEnigma", BaseStyle->"Hyperlink", ButtonData:>"SubSClass Enigma"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectClass Problems"], ".", CounterBox["Section", "SectClass Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectClass Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Shift"], ButtonBox["\tShift Register Sequences", BaseStyle->"Hyperlink", ButtonData:>"Chap Shift"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectShift pseudo seq"], ".", CounterBox["Section", "SectShift pseudo seq"], "\t", ButtonBox["\tPseudo-Random Sequences", BaseStyle->"Hyperlink", ButtonData:>"SectShift pseudo seq"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectShift Linear"], ".", CounterBox["Section", "SectShift Linear"], "\t", ButtonBox["\t", BaseStyle->"Hyperlink", ButtonData:>"SectShift Linear"], ButtonBox["Linear Feedback Shift Registers", BaseStyle->"Hyperlink", ButtonData:>"SectShift Linear"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsShift linear"], ".", CounterBox["Section", "SubsShift linear"], ".", CounterBox["Subsection", "SubsShift linear"], "\t\t", ButtonBox["\t(Linear) Feedback Shift Registers", BaseStyle->"Hyperlink", ButtonData:>"SubsShift linear"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsShift PN"], ".", CounterBox["Section", "SubsShift PN"], ".", CounterBox["Subsection", "SubsShift PN"], "\t\t", ButtonBox["\tPN-Sequences", BaseStyle->"Hyperlink", ButtonData:>"SubsShift PN"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsShift which char"], ".", CounterBox["Section", "SubsShift which char"], ".", CounterBox["Subsection", "SubsShift which char"], "\t\t", ButtonBox["\tWhich Characteristic Polynomials give PN-Sequences?", BaseStyle->"Hyperlink", ButtonData:>"SubsShift which char"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsShift alternative"], ".", CounterBox["Section", "SubsShift alternative"], ".", CounterBox["Subsection", "SubsShift alternative"], "\t\t", ButtonBox["\tAn Alternative Description of ", BaseStyle->"Hyperlink", ButtonData:>"SubsShift alternative"], ButtonBox[Cell[BoxData[ FormBox[ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsShift alternative"], ButtonBox[" for Irreducible ", BaseStyle->"Hyperlink", ButtonData:>"SubsShift alternative"], ButtonBox[Cell[BoxData[ FormBox["f", TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsShift alternative"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsShift crypt prop"], ".", CounterBox["Section", "SubsShift crypt prop"], ".", CounterBox["Subsection", "SubsShift crypt prop"], "\t\t", ButtonBox["\tCryptographic Properties of PN Sequences", BaseStyle->"Hyperlink", ButtonData:>"SubsShift crypt prop"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectShift Non-linear"], ".", CounterBox["Section", "SectShift Non-linear"], "\t", ButtonBox["\t", BaseStyle->"Hyperlink", ButtonData:>"SectShift Non-linear"], ButtonBox["Non-Linear Algorithms", BaseStyle->"Hyperlink", ButtonData:>"SectShift Non-linear"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsShift minimal"], ".", CounterBox["Section", "SubsShift minimal"], ".", CounterBox["Subsection", "SubsShift minimal"], "\t\t", ButtonBox["\tMinimal Characteristic Polynomial", BaseStyle->"Hyperlink", ButtonData:>"SubsShift minimal"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsShift Berlekamp"], ".", CounterBox["Section", "SubsShift Berlekamp"], ".", CounterBox["Subsection", "SubsShift Berlekamp"], "\t\t", ButtonBox["\t", BaseStyle->"Hyperlink", ButtonData:>"SubsShift Berlekamp"], ButtonBox["The Berlekamp-Massey Algorithm", BaseStyle->"Hyperlink", ButtonData:>"SubsShift Berlekamp"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsShift Observations"], ".", CounterBox["Section", "SubsShift Observations"], ".", CounterBox["Subsection", "SubsShift Observations"], "\t\t", ButtonBox["\tA Few Observations about Non-Linear Algorithms", BaseStyle->"Hyperlink", ButtonData:>"SubsShift Observations"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectShift Problems"], ".", CounterBox["Section", "SectShift Problems"], "\t", ButtonBox["\t", BaseStyle->"Hyperlink", ButtonData:>"SectShift Problems"], ButtonBox["Problems", BaseStyle->"Hyperlink", ButtonData:>"SectShift Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Block"], ButtonBox["\tBlock Ciphers", BaseStyle->"Hyperlink", ButtonData:>"Chap Block"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectBlock principles"], ".", CounterBox["Section", "SectBlock principles"], "\t", ButtonBox["\tSome General Principles", BaseStyle->"Hyperlink", ButtonData:>"SectBlock principles"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsBlock Modes"], ".", CounterBox["Section", "SubsBlock Modes"], ".", CounterBox["Subsection", "SubsBlock Modes"], "\t\t", ButtonBox["\tSome Block Cipher Modes", BaseStyle->"Hyperlink", ButtonData:>"SubsBlock Modes"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Codebook Mode", BaseStyle->"Hyperlink", ButtonData:>"SubsubsBlock codebook"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Cipher Block Chaining", BaseStyle->"Hyperlink", ButtonData:>"SubsubsBlock cipher block chaining"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Cipher Feedback Mode", BaseStyle->"Hyperlink", ButtonData:>"SubsubsBlock cipher feedback"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsBlock Ident Ver"], ".", CounterBox["Section", "SubsBlock Ident Ver"], ".", CounterBox["Subsection", "SubsBlock Ident Ver"], "\t\t", ButtonBox["\t", BaseStyle->"Hyperlink", ButtonData:>"SubsBlock Ident Ver"], ButtonBox["An Identity Verification Protocol", BaseStyle->"Hyperlink", ButtonData:>"SubsBlock Ident Ver"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectBlock DES"], ".", CounterBox["Section", "SectBlock DES"], "\t", ButtonBox["\tDES", BaseStyle->"Hyperlink", ButtonData:>"SectBlock DES"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["DES", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDES DES"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Triple DES", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDES Triple DES"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectBlock IDEA"], ".", CounterBox["Section", "SectBlock IDEA"], "\t", ButtonBox["\tIDEA", BaseStyle->"Hyperlink", ButtonData:>"SectBlock IDEA"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectBlock Further"], ".", CounterBox["Section", "SectBlock Further"], "\t", ButtonBox["\tFurther Remarks", BaseStyle->"Hyperlink", ButtonData:>"SectBlock Further"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectBlock Problems"], ".", CounterBox["Section", "SectBlock Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectBlock Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Shannon"], ButtonBox["\tShannon Theory", BaseStyle->"Hyperlink", ButtonData:>"Chap Shannon"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectShann Entropy"], ".", CounterBox["Section", "SectShann Entropy"], "\t", ButtonBox["\tEntropy, Redundancy, and Unicity Distance", BaseStyle->"Hyperlink", ButtonData:>"SectShann Entropy"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectShann Mutual"], ".", CounterBox["Section", "SectShann Mutual"], "\t", ButtonBox["\tMutual Information and Unconditionally Secure Systems", BaseStyle->"Hyperlink", ButtonData:>"SectShann Mutual"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectShann Problems"], ".", CounterBox["Section", "SectShann Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectShann Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Huff"], ButtonBox["\tData Compression Techniques", BaseStyle->"Hyperlink", ButtonData:>"Chap Huff"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectHuff basics"], ".", CounterBox["Section", "SectHuff basics"], "\t", ButtonBox["\tBasic Concepts of Source Coding for Stationary Sources", BaseStyle->"Hyperlink", ButtonData:>"SectHuff basics"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectHuff Huffman"], ".", CounterBox["Section", "SectHuff Huffman"], "\t", ButtonBox["\tHuffman Codes", BaseStyle->"Hyperlink", ButtonData:>"SectHuff Huffman"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectHuff Lempel-Ziv"], ".", CounterBox["Section", "SectHuff Lempel-Ziv"], "\t", ButtonBox["\tUniversal Data Compression - The Lempel-Ziv Algorithms", BaseStyle->"Hyperlink", ButtonData:>"SectHuff Lempel-Ziv"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Initialization", BaseStyle->"Hyperlink", ButtonData:>"SubsubsHuff Ziv init"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Encoding", BaseStyle->"Hyperlink", ButtonData:>"SubsubsHuff Ziv enco"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Decoding", BaseStyle->"Hyperlink", ButtonData:>"SubsubsHuff Ziv deco"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectHuff Problems"], ".", CounterBox["Section", "SectHuff Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectHuff Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Public"], ButtonBox["\tPublic-Key Cryptography", BaseStyle->"Hyperlink", ButtonData:>"Chap Public"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectPubl model"], ".", CounterBox["Section", "SectPubl model"], "\t", ButtonBox["\tThe Theoretical Model ", BaseStyle->"Hyperlink", ButtonData:>"SectPubl model"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsPubl Motivation"], ".", CounterBox["Section", "SubsPubl Motivation"], ".", CounterBox["Subsection", "SubsPubl Motivation"], "\t\t", ButtonBox["\tMotivation and Set-up", BaseStyle->"Hyperlink", ButtonData:>"SubsPubl Motivation"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsPubl Confidentiality"], ".", CounterBox["Section", "SubsPubl Confidentiality"], ".", CounterBox["Subsection", "SubsPubl Confidentiality"], "\t\t", ButtonBox["\tConfidentiality", BaseStyle->"Hyperlink", ButtonData:>"SubsPubl Confidentiality"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsPubl Signature"], ".", CounterBox["Section", "SubsPubl Signature"], ".", CounterBox["Subsection", "SubsPubl Signature"], "\t\t", ButtonBox["\tDigital Signature", BaseStyle->"Hyperlink", ButtonData:>"SubsPubl Signature"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsPubl Secr+Sign"], ".", CounterBox["Section", "SubsPubl Secr+Sign"], ".", CounterBox["Subsection", "SubsPubl Secr+Sign"], "\t\t", ButtonBox["\tConfidentiality and Digital Signature", BaseStyle->"Hyperlink", ButtonData:>"SubsPubl Secr+Sign"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectPubl Problems"], ".", CounterBox["Section", "SectPubl Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectPubl Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Discr"], ButtonBox["\tDiscrete Logarithm Based Systems", BaseStyle->"Hyperlink", ButtonData:>"Chap Discr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectDiscr Diffie Hellman"], ".", CounterBox["Section", "SectDiscr Diffie Hellman"], "\t", ButtonBox["\tThe Discrete Logarithm System", BaseStyle->"Hyperlink", ButtonData:>"SectDiscr Diffie Hellman"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSDiscr Log Problem"], ".", CounterBox["Section", "SubSDiscr Log Problem"], ".", CounterBox["Subsection", "SubSDiscr Log Problem"], "\t\t", ButtonBox["\tThe Discrete Logarithm Problem", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Log Problem"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsDiscr Dif-Hel Key Exch"], ".", CounterBox["Section", "SubsDiscr Dif-Hel Key Exch"], ".", CounterBox["Subsection", "SubsDiscr Dif-Hel Key Exch"], "\t\t", ButtonBox["\tThe Diffie-Hellman Key Exchange System", BaseStyle->"Hyperlink", ButtonData:>"SubsDiscr Dif-Hel Key Exch"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectDiscr Other Log Systems"], ".", CounterBox["Section", "SectDiscr Other Log Systems"], "\t", ButtonBox["\tOther Discrete Logarithm Based Systems", BaseStyle->"Hyperlink", ButtonData:>"SectDiscr Other Log Systems"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsDiscr ElGamal"], ".", CounterBox["Section", "SubsDiscr ElGamal"], ".", CounterBox["Subsection", "SubsDiscr ElGamal"], "\t\t", ButtonBox["\tElGamal's Public-Key Cryptosystems", BaseStyle->"Hyperlink", ButtonData:>"SubsDiscr ElGamal"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Setting It Up", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDisc ElGamal setting it up"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["ElGamal's Secrecy System", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal secrecy"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["ElGamal's Signature Scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr ElGamal signature"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsDiscr Variations on ElGamal"], ".", CounterBox["Section", "SubsDiscr Variations on ElGamal"], ".", CounterBox["Subsection", "SubsDiscr Variations on ElGamal"], "\t\t", ButtonBox["\tFurther Variations", BaseStyle->"Hyperlink", ButtonData:>"SubsDiscr Variations on ElGamal"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Digital Signature Standard", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDisc DSS"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Schnorr's Signature Scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDisc Schnorr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["The Nyberg-Rueppel Signature Scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDisc Nyberg"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectDiscr How to take logs"], ".", CounterBox["Section", "SectDiscr How to take logs"], "\t", ButtonBox["\tHow to Take Discrete Logarithms", BaseStyle->"Hyperlink", ButtonData:>"SectDiscr How to take logs"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "AlgDiscr Pohlig Hellman"], ".", CounterBox["Section", "AlgDiscr Pohlig Hellman"], ".", CounterBox["Subsection", "AlgDiscr Pohlig Hellman"], "\t\t", ButtonBox["\tThe Pohlig-Hellman Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Pohlig Hellman"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Special Case: ", BaseStyle->"Hyperlink", ButtonData:>"CaseDiscr q-1 is 2power"], ButtonBox[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", SuperscriptBox["2", "n"]}], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"CaseDiscr q-1 is 2power"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["General Case: ", BaseStyle->"Hyperlink", ButtonData:>"CaseDiscr small powers"], ButtonBox[Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"CaseDiscr small powers"], ButtonBox[" has only small prime factors", BaseStyle->"Hyperlink", ButtonData:>"CaseDiscr small powers"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["An Example of the Pohlig-Hellman Algorithm", BaseStyle->"Hyperlink", ButtonData:>"CaseDiscr Exam P-H"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSDiscr Baby Step"], ".", CounterBox["Section", "SubSDiscr Baby Step"], ".", CounterBox["Subsection", "SubSDiscr Baby Step"], "\t\t", ButtonBox["\tThe Baby-Step Giant-Step Method", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Baby Step"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSDiscr Pollard"], ".", CounterBox["Section", "SubSDiscr Pollard"], ".", CounterBox["Subsection", "SubSDiscr Pollard"], "\t\t", ButtonBox["\tThe Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"], ButtonBox["\[Rho]", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"], ButtonBox[" Method", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Pollard"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSDiscr Index Calc"], ".", CounterBox["Section", "SubSDiscr Index Calc"], ".", CounterBox["Subsection", "SubSDiscr Index Calc"], "\t\t", ButtonBox["\tThe Index-Calculus Method", BaseStyle->"Hyperlink", ButtonData:>"SubSDiscr Index Calc"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["General Discussion", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr Index general"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox[" ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr Index Mod p"], ButtonBox[Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "*"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr Index Mod p"], ButtonBox[", i.e. the Multiplicative Group of ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr Index Mod p"], ButtonBox[Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr Index Mod p"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["GF(", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr Index 2^n"], Cell[BoxData[ SuperscriptBox["2", "n"]]], ButtonBox[")", BaseStyle->"Hyperlink", ButtonData:>"SubsubsDiscr Index 2^n"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectDiscr Problems"], ".", CounterBox["Section", "SectDiscr Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectDiscr Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap RSA"], ButtonBox["\tRSA Based Systems", BaseStyle->"Hyperlink", ButtonData:>"Chap RSA"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectRSA RSA"], ".", CounterBox["Section", "SectRSA RSA"], "\t", ButtonBox["\tThe RSA System", BaseStyle->"Hyperlink", ButtonData:>"SectRSA RSA"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA RSA math"], ".", CounterBox["Section", "SubsRSA RSA math"], ".", CounterBox["Subsection", "SubsRSA RSA math"], "\t\t", ButtonBox["\tSome Mathematics", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA math"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA RSA setting up"], ".", CounterBox["Section", "SubsRSA RSA setting up"], ".", CounterBox["Subsection", "SubsRSA RSA setting up"], "\t\t", ButtonBox["\tSetting Up the System", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA setting up"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", StyleBox[ButtonBox["Step 1", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA compute n"], FontVariations->{"Underline"->True}], ButtonBox[" Computing the Modulus ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA compute n"], ButtonBox[Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA compute n"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", StyleBox[ButtonBox["Step 2", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA compute e and d"], FontVariations->{"Underline"->True}], ButtonBox[" Computing the Exponents ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA compute e and d"], ButtonBox[Cell[BoxData[ FormBox[ SubscriptBox["e", "U"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA compute e and d"], ButtonBox[" and ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA compute e and d"], ButtonBox[Cell[BoxData[ FormBox[ SubscriptBox["d", "U"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA compute e and d"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", StyleBox[ButtonBox["Step 3", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA making public"], FontVariations->{"Underline"->True}], ButtonBox[" Making Public: ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA making public"], ButtonBox[Cell[BoxData[ FormBox[ SubscriptBox["e", "U"], TraditionalForm]], CellTags->"SubsubsRSA make public"], BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA making public"], ButtonBox[" and ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA making public"], ButtonBox[Cell[BoxData[ FormBox[ SubscriptBox["n", "U"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA making public"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA RSA secr"], ".", CounterBox["Section", "SubsRSA RSA secr"], ".", CounterBox["Subsection", "SubsRSA RSA secr"], "\t\t", ButtonBox["\tRSA for Privacy", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA secr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA RSA sign"], ".", CounterBox["Section", "SubsRSA RSA sign"], ".", CounterBox["Subsection", "SubsRSA RSA sign"], "\t\t", ButtonBox["\tRSA for Signatures", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA sign"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA RSA secr + sign"], ".", CounterBox["Section", "SubsRSA RSA secr + sign"], ".", CounterBox["Subsection", "SubsRSA RSA secr + sign"], "\t\t", ButtonBox["\tRSA for Privacy and Signing", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA RSA secr + sign"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectRSA Security"], ".", CounterBox["Section", "SectRSA Security"], "\t", ButtonBox["\tThe Security of RSA: Some Factorization Algorithms", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Security"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA cryptanalist"], ".", CounterBox["Section", "SubsRSA cryptanalist"], ".", CounterBox["Subsection", "SubsRSA cryptanalist"], "\t\t", ButtonBox["\tWhat the Cryptanalist Can Do", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA cryptanalist"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA factorization"], ".", CounterBox["Section", "SubsRSA factorization"], ".", CounterBox["Subsection", "SubsRSA factorization"], "\t\t", ButtonBox["\tA Factorization Algorithm for a Special Class of Integers", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA factorization"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Pollard's ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard p-1"], ButtonBox[Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard p-1"], ButtonBox[" Method", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard p-1"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA Factorization General"], ".", CounterBox["Section", "SubsRSA Factorization General"], ".", CounterBox["Subsection", "SubsRSA Factorization General"], "\t\t", ButtonBox["\tGeneral Factorization Algorithms", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Factorization General"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["The Pollard-", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], ButtonBox["\[CurlyRho]", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"], ButtonBox[" Method", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Pollard rho"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Random Square Factoring Methods", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Random Square"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Quadratic Sieve", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Q Sieve"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectRSA unsafe modes"], ".", CounterBox["Section", "SectRSA unsafe modes"], "\t", ButtonBox["\tSome Unsafe Modes for RSA", BaseStyle->"Hyperlink", ButtonData:>"SectRSA unsafe modes"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA Coppersmith"], ".", CounterBox["Section", "SubsRSA Coppersmith"], ".", CounterBox["Subsection", "SubsRSA Coppersmith"], "\t\t", ButtonBox["\tA Small Public Exponent", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Coppersmith"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Sending the Same Message to More Receivers ...", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA m^3"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Sending Related Messages to a Receiver with Small Public Exponent", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Copper"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA Wiener attack"], ".", CounterBox["Section", "SubsRSA Wiener attack"], ".", CounterBox["Subsection", "SubsRSA Wiener attack"], "\t\t", ButtonBox["\tA Small Secret Exponent; Wiener's Attack", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Wiener attack"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA physical"], ".", CounterBox["Section", "SubsRSA physical"], ".", CounterBox["Subsection", "SubsRSA physical"], "\t\t", ButtonBox["\tSome Physical Attacks", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA physical"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Timing Attack", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Timing"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["The \"Microwave\" Attack", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Microwave"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectRSA generate primes"], ".", CounterBox["Section", "SectRSA generate primes"], "\t", ButtonBox["\tHow to Generate Large Prime Numbers; Some Primality Tests", BaseStyle->"Hyperlink", ButtonData:>"SectRSA generate primes"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA try random"], ".", CounterBox["Section", "SubsRSA try random"], ".", CounterBox["Subsection", "SubsRSA try random"], "\t\t", ButtonBox["\tTrying Random Numbers", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA try random"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA prob appr"], ".", CounterBox["Section", "SubsRSA prob appr"], ".", CounterBox["Subsection", "SubsRSA prob appr"], "\t\t", ButtonBox["\tProbabilistic Primality Tests", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA prob appr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["The Solovay and Strassen Primality Test", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Solovay"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Miller-Rabin Test", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Miller-Rabin"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA Lenstra"], ".", CounterBox["Section", "SubsRSA Lenstra"], ".", CounterBox["Subsection", "SubsRSA Lenstra"], "\t\t", ButtonBox["\tA Deterministic Primality Test", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Lenstra"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectRSA Rabin"], ".", CounterBox["Section", "SectRSA Rabin"], "\t", ButtonBox["\tThe Rabin Variant", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Rabin"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA Rabin Encr"], ".", CounterBox["Section", "SubsRSA Rabin Encr"], ".", CounterBox["Subsection", "SubsRSA Rabin Encr"], "\t\t", ButtonBox["\tThe Encryption Function", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Rabin Encr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubSRSA Rabin decr"], ".", CounterBox["Section", "SubSRSA Rabin decr"], ".", CounterBox["Subsection", "SubSRSA Rabin decr"], "\t\t", ButtonBox["\tDecryption", BaseStyle->"Hyperlink", ButtonData:>"SubSRSA Rabin decr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Precomputation", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Rabin pre"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Finding a Square Root Modulo a Prime Number", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA find square root"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["The Four Solutions", BaseStyle->"Hyperlink", ButtonData:>"SubsubsRSA Rabin 4 solutions"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA distinguish"], ".", CounterBox["Section", "SubsRSA distinguish"], ".", CounterBox["Subsection", "SubsRSA distinguish"], "\t\t", ButtonBox["\tHow to Distinguish Between the Solutions", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA distinguish"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsRSA Equivalence"], ".", CounterBox["Section", "SubsRSA Equivalence"], ".", CounterBox["Subsection", "SubsRSA Equivalence"], "\t\t", ButtonBox["\tThe Equivalence of Breaking Rabin's Scheme and Factoring ", BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Equivalence"], ButtonBox[Cell[BoxData[ FormBox["n", TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsRSA Equivalence"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectRSA Problems"], ".", CounterBox["Section", "SectRSA Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectRSA Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Ellip"], ButtonBox["\tElliptic Curves Based Systems", BaseStyle->"Hyperlink", ButtonData:>"Chap Ellip"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectEllip Basic facts"], ".", CounterBox["Section", "SectEllip Basic facts"], "\t", ButtonBox["\tSome Basic Facts of Elliptic Curves", BaseStyle->"Hyperlink", ButtonData:>"SectEllip Basic facts"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectEllip geometry"], ".", CounterBox["Section", "SectEllip geometry"], "\t", ButtonBox["\tThe Geometry of Elliptic Curves", BaseStyle->"Hyperlink", ButtonData:>"SectEllip geometry"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["A Line Through Two Distinct Points", BaseStyle->"Hyperlink", ButtonData:>"SubsubsEllip two points"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["A Tangent Line", BaseStyle->"Hyperlink", ButtonData:>"SubsubsEllip tangent"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectEllip Addition"], ".", CounterBox["Section", "SectEllip Addition"], "\t", ButtonBox["\tAddition of Points on Elliptic Curves", BaseStyle->"Hyperlink", ButtonData:>"SectEllip Addition"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectEllip EC-cryptosystems"], ".", CounterBox["Section", "SectEllip EC-cryptosystems"], "\t", ButtonBox["\tCryptosystems Defined over Elliptic Curves", BaseStyle->"Hyperlink", ButtonData:>"SectEllip EC-cryptosystems"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsElip discr log problem"], ".", CounterBox["Section", "SubsElip discr log problem"], ".", CounterBox["Subsection", "SubsElip discr log problem"], "\t", ButtonBox["\tThe Discrete Logarithm Problem over Elliptic Curves", BaseStyle->"Hyperlink", ButtonData:>"SubsElip discr log problem"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsElip discr log system"], ".", CounterBox["Section", "SubsElip discr log system"], ".", CounterBox["Subsection", "SubsElip discr log system"], "\t", ButtonBox["\tThe Discrete Logarithm System over Elliptic Curves", BaseStyle->"Hyperlink", ButtonData:>"SubsElip discr log system"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsElip security"], ".", CounterBox["Section", "SubsElip security"], ".", CounterBox["Subsection", "SubsElip security"], "\t", ButtonBox["\tThe Security of Discrete Logarithm Based EC Systems", BaseStyle->"Hyperlink", ButtonData:>"SubsElip security"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectEllip Problems"], ".", CounterBox["Section", "SectEllip Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectEllip Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap McEl"], ButtonBox["\tCoding Theory Based Systems", BaseStyle->"Hyperlink", ButtonData:>"Chap McEl"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectMcEl Goppa"], ".", CounterBox["Section", "SectMcEl Goppa"], "\t", ButtonBox["\tIntroduction to Goppa codes", BaseStyle->"Hyperlink", ButtonData:>"SectMcEl Goppa"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectMcEl McEliece"], ".", CounterBox["Section", "SectMcEl McEliece"], "\t", ButtonBox["\tThe McEliece Cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"SectMcEl McEliece"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsMcEl System"], ".", CounterBox["Section", "SubsMcEl System"], ".", CounterBox["Subsection", "SubsMcEl System"], "\t", ButtonBox["\tThe System", BaseStyle->"Hyperlink", ButtonData:>"SubsMcEl System"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Setting Up the System", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl setting it up"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Encryption", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl encryption"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Decryption", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl decryption"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsMcEl Discussion"], ".", CounterBox["Section", "SubsMcEl Discussion"], ".", CounterBox["Subsection", "SubsMcEl Discussion"], "\t\t", ButtonBox["Discussion", BaseStyle->"Hyperlink", ButtonData:>"SubsMcEl Discussion"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Summary and Proposed Parameters", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl summary"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Heuristics of the Scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl heuristics"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Not a Signature Scheme", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl no sign"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsMcEl Security"], ".", CounterBox["Section", "SubsMcEl Security"], ".", CounterBox["Subsection", "SubsMcEl Security"], "\t", ButtonBox["\tSecurity Aspects", BaseStyle->"Hyperlink", ButtonData:>"SubsMcEl Security"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Guessing ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl guessing S and P"], ButtonBox[Cell[BoxData[ FormBox[ SubscriptBox["S", "B"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl guessing S and P"], ButtonBox[" and ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl guessing S and P"], ButtonBox[Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl guessing S and P"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Exhaustive Codewords Comparison", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl exhaustive"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Syndrome Decoding", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl syndrome"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Guessing ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl guessing k correct"], ButtonBox[Cell[BoxData[ FormBox["k", TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl guessing k correct"], ButtonBox[" Correct and Independent Coordinates", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl guessing k correct"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Multiple Encryptions of the Same Message ", BaseStyle->"Hyperlink", ButtonData:>"SubsubsMcEl multiple"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsMcEl Example"], ".", CounterBox["Section", "SubsMcEl Example"], ".", CounterBox["Subsection", "SubsMcEl Example"], "\t", ButtonBox["\tA Small Example of the McEliece System ", BaseStyle->"Hyperlink", ButtonData:>"SubsMcEl Example"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectMcEl Other technique"], ".", CounterBox["Section", "SectMcEl Other technique"], "\t", ButtonBox["\tAnother Technique to Decode Linear Codes", BaseStyle->"Hyperlink", ButtonData:>"SectMcEl Other technique"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectMcEl Niederr"], ".", CounterBox["Section", "SectMcEl Niederr"], "\t", ButtonBox["\tThe Niederreiter Scheme", BaseStyle->"Hyperlink", ButtonData:>"SectMcEl Niederr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectMcEl Problems"], ".", CounterBox["Section", "SectMcEl Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectMcEl Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Knapsack"], ButtonBox["\tKnapsack Based Systems", BaseStyle->"Hyperlink", ButtonData:>"Chap Knapsack"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectKnap Knap System"], ".", CounterBox["Section", "SectKnap Knap System"], "\t", ButtonBox["\tThe Knapsack System", BaseStyle->"Hyperlink", ButtonData:>"SectKnap Knap System"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsKnap Knap Problem"], ".", CounterBox["Section", "SubsKnap Knap Problem"], ".", CounterBox["Subsection", "SubsKnap Knap Problem"], "\t", ButtonBox["\tThe Knapsack Problem", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap Knap Problem"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsKnap Knap System"], ".", CounterBox["Section", "SubsKnap Knap System"], ".", CounterBox["Subsection", "SubsKnap Knap System"], "\t", ButtonBox["\tThe Knapsack System", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap Knap System"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Setting Up the Knapsack System", BaseStyle->"Hyperlink", ButtonData:>"SubsubsKnap setting up"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Encryption", BaseStyle->"Hyperlink", ButtonData:>"SubsubsKnap encryp"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Decryption", BaseStyle->"Hyperlink", ButtonData:>"SubsubsKnap decryp"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["A Further Discussion", BaseStyle->"Hyperlink", ButtonData:>"SubsubsKnap discussion"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectKnap L3-attack"], ".", CounterBox["Section", "SectKnap L3-attack"], "\t", ButtonBox["\tThe ", BaseStyle->"Hyperlink", ButtonData:>"SectKnap L3-attack"], ButtonBox[Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SectKnap L3-attack"], ButtonBox["-Attack", BaseStyle->"Hyperlink", ButtonData:>"SectKnap L3-attack"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsKnap L3 Intro"], ".", CounterBox["Section", "SubsKnap L3 Intro"], ".", CounterBox["Subsection", "SubsKnap L3 Intro"], "\t", ButtonBox["\tIntroduction", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 Intro"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsKnap L3 lattices"], ".", CounterBox["Section", "SubsKnap L3 lattices"], ".", CounterBox["Subsection", "SubsKnap L3 lattices"], "\t", ButtonBox["\tLattices", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 lattices"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsKnap L3 reduced basis"], ".", CounterBox["Section", "SubsKnap L3 reduced basis"], ".", CounterBox["Subsection", "SubsKnap L3 reduced basis"], "\t", ButtonBox["\tA Reduced Basis", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 reduced basis"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsKnap L3 attack"], ".", CounterBox["Section", "SubsKnap L3 attack"], ".", CounterBox["Subsection", "SubsKnap L3 attack"], "\t", ButtonBox["\tThe ", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 attack"], ButtonBox[Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 attack"], ButtonBox["-Attack", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 attack"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsKnap L3 reduction"], ".", CounterBox["Section", "SubsKnap L3 reduction"], ".", CounterBox["Subsection", "SubsKnap L3 reduction"], "\t", ButtonBox["\tThe ", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 reduction"], ButtonBox[Cell[BoxData[ FormBox[ SuperscriptBox["L", "3"], TraditionalForm]]], BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 reduction"], ButtonBox["-Lattice Basis Reduction Algorithm", BaseStyle->"Hyperlink", ButtonData:>"SubsKnap L3 reduction"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectKnap ChorR"], ".", CounterBox["Section", "SectKnap ChorR"], "\t", ButtonBox["\tThe Chor-Rivest Variant", BaseStyle->"Hyperlink", ButtonData:>"SectKnap ChorR"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Setting Up the System", BaseStyle->"Hyperlink", ButtonData:>"SubsubsKnap CR setting it up"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Encryption", BaseStyle->"Hyperlink", ButtonData:>"SubsubsKnap CR encryp"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["Decryption", BaseStyle->"Hyperlink", ButtonData:>"SubsubsKnap CR decryp"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Sectknap Problems"], ".", CounterBox["Section", "Sectknap Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"Sectknap Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Auth"], ButtonBox["\tHash Codes & Authentication Techniques", BaseStyle->"Hyperlink", ButtonData:>"Chap Auth"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectAuth Introduction"], ".", CounterBox["Section", "SectAuth Introduction"], "\t", ButtonBox["\tIntroduction", BaseStyle->"Hyperlink", ButtonData:>"SectAuth Introduction"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectAuth Hash"], ".", CounterBox["Section", "SectAuth Hash"], "\t", ButtonBox["\tHash Functions and MAC's", BaseStyle->"Hyperlink", ButtonData:>"SectAuth Hash"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectAuth Auth Codes"], ".", CounterBox["Section", "SectAuth Auth Codes"], "\t", ButtonBox["\tUnconditionally Secure Authentication Codes", BaseStyle->"Hyperlink", ButtonData:>"SectAuth Auth Codes"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsAuth notions"], ".", CounterBox["Section", "SubsAuth notions"], ".", CounterBox["Subsection", "SubsAuth notions"], "\t", ButtonBox["\tNotions and Bounds", BaseStyle->"Hyperlink", ButtonData:>"SubsAuth notions"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsAuth PG constr"], ".", CounterBox["Section", "SubsAuth PG constr"], ".", CounterBox["Subsection", "SubsAuth PG constr"], "\t", ButtonBox["\tThe Projective Plane Construction", BaseStyle->"Hyperlink", ButtonData:>"SubsAuth PG constr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["A Finite Projective Plane", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAuth PG def"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["A General Construction of a Projective Plane", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAuth PG constr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t\t", ButtonBox["The Projective Plane Authentication Code", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAuth PG A-code"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsAuth OA AC"], ".", CounterBox["Section", "SubsAuth OA AC"], ".", CounterBox["Subsection", "SubsAuth OA AC"], "\t", ButtonBox["\tA-Codes From Orthogonal Arrays", BaseStyle->"Hyperlink", ButtonData:>"SubsAuth OA AC"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SubsAuth EC AC"], ".", CounterBox["Section", "SubsAuth EC AC"], ".", CounterBox["Subsection", "SubsAuth EC AC"], "\t", ButtonBox["\tA-Codes From Error-Correcting Codes", BaseStyle->"Hyperlink", ButtonData:>"SubsAuth EC AC"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectAuth Problems"], ".", CounterBox["Section", "SectAuth Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectAuth Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Zero Knowledge"], ButtonBox["\tZero Knowledge Protocols", BaseStyle->"Hyperlink", ButtonData:>"Chap Zero Knowledge"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectZero Zero Knowledge"], ".", CounterBox["Section", "SectZero Zero Knowledge"], "\t", ButtonBox["\tThe Fiat-Shamir Protocol", BaseStyle->"Hyperlink", ButtonData:>"SectZero Zero Knowledge"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectZero Schnorr"], ".", CounterBox["Section", "SectZero Schnorr"], "\t", ButtonBox["\tSchnorr's Identification Protocol", BaseStyle->"Hyperlink", ButtonData:>"SectZero Schnorr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectZero Problem"], ".", CounterBox["Section", "SectZero Problem"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectZero Problem"] }], "Text", GeneratedCell->True, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "Chap Secr"], ButtonBox["\tSecret Sharing Systems", BaseStyle->"Hyperlink", ButtonData:>"Chap Secr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectSecr Introduction"], ".", CounterBox["Section", "SectSecr Introduction"], "\t", ButtonBox["\tIntroduction", BaseStyle->"Hyperlink", ButtonData:>"SectSecr Introduction"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectSecr Schemes"], ".", CounterBox["Section", "SectSecr Schemes"], "\t", ButtonBox["\tThreshold Schemes", BaseStyle->"Hyperlink", ButtonData:>"SectSecr Schemes"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectSecr Schemes with liars"], ".", CounterBox["Section", "SectSecr Schemes with liars"], "\t", ButtonBox["\tThreshold Schemes with Liars", BaseStyle->"Hyperlink", ButtonData:>"SectSecr Schemes with liars"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectSecr SSS"], ".", CounterBox["Section", "SectSecr SSS"], "\t", ButtonBox["\tSecret Sharing Schemes", BaseStyle->"Hyperlink", ButtonData:>"SectSecr SSS"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectSecr visual"], ".", CounterBox["Section", "SectSecr visual"], "\t", ButtonBox["\tVisual Secret Sharing Schemes", BaseStyle->"Hyperlink", ButtonData:>"SectSecr visual"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ CounterBox["Chapter", "SectSecr Problems"], ".", CounterBox["Section", "SectSecr Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectSecr Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ "A\t", ButtonBox["Elementary Number Theory", BaseStyle->"Hyperlink", ButtonData:>"ChapNumberTh"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A", ".", CounterBox["Section", "SectAppA Introduction"], "\t", ButtonBox["\tIntroduction", BaseStyle->"Hyperlink", ButtonData:>"SectAppA Introduction"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SectAppA Euclid"], "\t", ButtonBox["\tEuclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"SectAppA Euclid"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SecAppA Congruences"], "\t", ButtonBox["\tCongruences, Fermat, Euler, Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"SecAppA Congruences"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SubSecA Congruences"], ".", CounterBox["Subsection", "SubSecA Congruences"], "\t\t", ButtonBox["\tCongruences", BaseStyle->"Hyperlink", ButtonData:>"SubSecA Congruences"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SubsAppA Euler"], ".", CounterBox["Subsection", "SubsAppA Euler"], "\t\t", ButtonBox["\tEuler and Fermat", BaseStyle->"Hyperlink", ButtonData:>"SubsAppA Euler"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SubsAppA lin congr"], ".", CounterBox["Subsection", "SubsAppA lin congr"], "\t\t", ButtonBox["\tSolving Linear Congruence Relations", BaseStyle->"Hyperlink", ButtonData:>"SubsAppA lin congr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SubsAppA Chinese RT"], ".", CounterBox["Subsection", "SubsAppA Chinese RT"], "\t\t", ButtonBox["\tThe Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"SubsAppA Chinese RT"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A", ".", CounterBox["Section", "SecAppA QR"], "\t", ButtonBox["\tQuadratic Residues", BaseStyle->"Hyperlink", ButtonData:>"SecAppA QR"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SecAppA Continued Fractions"], "\t", ButtonBox["\tContinued Fractions", BaseStyle->"Hyperlink", ButtonData:>"SecAppA Continued Fractions"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SecAppA Mobius"], "\t", ButtonBox["\tM\[ODoubleDot]bius Inversion Formula, the Principle of \ Inclusion and Exclusion", BaseStyle->"Hyperlink", ButtonData:>"SecAppA Mobius"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SubsAppA Mobius"], ".", CounterBox["Subsection", "SubsAppA Mobius"], "\t\t", ButtonBox["\tM\[ODoubleDot]bius Inversion Formula", BaseStyle->"Hyperlink", ButtonData:>"SubsAppA Mobius"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A.", CounterBox["Section", "SubsAppA Sylvester"], ".", CounterBox["Subsection", "SubsAppA Sylvester"], "\t\t", ButtonBox["\tThe Principle of Inclusion and Exclusion", BaseStyle->"Hyperlink", ButtonData:>"SubsAppA Sylvester"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "A", ".", CounterBox["Section", "SectAppA Problems"], "\t", ButtonBox["\tProblems", BaseStyle->"Hyperlink", ButtonData:>"SectAppA Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ "B\t", ButtonBox["Finite Fields", BaseStyle->"Hyperlink", ButtonData:>"ChapGaloisTh"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.1\t\t", ButtonBox["Algebra", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Algebra"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.", CounterBox["Section", "SubsAppB Abstract Algebra"], ".", CounterBox["Subsection", "SubsAppB Abstract Algebra"], "\t\t", ButtonBox["Abstract Algebra", BaseStyle->"Hyperlink", ButtonData:>"SubsAppB Abstract Algebra"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Set operations", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB operation"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Group", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB group"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Ring", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB ring"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Ideal", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB ideal"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Field", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB field"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Equivalence Relations", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB equiv rel"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Cyclic Groups", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB cyclic group"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.", CounterBox["Section", "SubsAppB Linear Algebra"], ".", CounterBox["Subsection", "SubsAppB Linear Algebra"], "\t", ButtonBox["\tLinear Algebra", BaseStyle->"Hyperlink", ButtonData:>"SubsAppB Linear Algebra"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Vector Spaces and Subspaces", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB vector spaces"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Linear Independence, Basis and Dimension", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB linear indep"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t\t", ButtonBox["Inner Product, Orthogonality", BaseStyle->"Hyperlink", ButtonData:>"SubsubsAppB inner product"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.2\t\t", ButtonBox["Constructions", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Field Constr"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.3 \t\t", ButtonBox["The Number of Irreducible Polynomials over GF(q)", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Numb Irr Pol"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.4\t\t", ButtonBox["The Structure of Finite Fields", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Field Struct"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.", CounterBox["Section", "SubsAppB cyclic structure"], ".", CounterBox["Subsection", "SubsAppB cyclic structure"], "\t\t", ButtonBox["The Cyclic Structure of a Finite Field", BaseStyle->"Hyperlink", ButtonData:>"SubsAppB cyclic structure"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.", CounterBox["Section", "SubsAppB cardinality"], ".", CounterBox["Subsection", "SubsAppB cardinality"], "\t\t\t", ButtonBox["The Cardinality of a Finite Field", BaseStyle->"Hyperlink", ButtonData:>"SubsAppB cardinality"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.", CounterBox["Section", "SubsAppB calculus rules"], ".", CounterBox["Subsection", "SubsAppB calculus rules"], "\t\t\t", ButtonBox["Some Calculus Rules over Finite Fields; Conjugates", BaseStyle->"Hyperlink", ButtonData:>"SubsAppB calculus rules"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.", CounterBox["Section", "SubsAppB min pols"], ".", CounterBox["Subsection", "SubsAppB min pols"], "\t\t\t", ButtonBox["Minimal Polynomials, Primitive Polynomials", BaseStyle->"Hyperlink", ButtonData:>"SubsAppB min pols"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.", CounterBox["Section", "SubsAppB further props"], ".", CounterBox["Subsection", "SubsAppB further props"], "\t\t\t", ButtonBox["Further Properties", BaseStyle->"Hyperlink", ButtonData:>"SubsAppB further props"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.", CounterBox["Section", "SubsAppB cycl pols"], ".", CounterBox["Subsection", "SubsAppB cycl pols"], "\t\t\t", ButtonBox["Cyclotomic Polynomials", BaseStyle->"Hyperlink", ButtonData:>"SubsAppB cycl pols"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "B.5\t\t", ButtonBox["Problems", BaseStyle->"Hyperlink", ButtonData:>"SectAppB Problems"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, GeneratedCell->True, TabSpacings->3], Cell[TextData[{ "C ", ButtonBox["Relevant Famous Mathematicians", BaseStyle->"Hyperlink", ButtonData:>"Chap Famous"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, GeneratedCell->True, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["Euclid of Alexandria", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Euclid of Alexandria"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["Leonhard Euler", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Leonhard Euler"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["Pierre de Fermat", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Pierre de Fermat"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["Evariste Galois", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Evariste Galois"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["Johann Carl Friedrich Gauss", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Johann Carl Friedrich Gauss"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["Karl Gustav Jacob Jacobi", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Karl Gustav Jacob Jacobi"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["Adrien-Marie Legendre", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Adrien-Marie Legendre"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["August Ferdinand M\[ODoubleDot]bius", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: August Ferdinand M\[ODoubleDot]bius"] }], "Text", CellMargins->{{Inherited, Inherited}, {0, 0}}, TextAlignment->Left, TabSpacings->3], Cell[TextData[{ "\t\t", ButtonBox["Joseph Henry Maclagen Wedderburn", BaseStyle->"Hyperlink", ButtonData:>"Mathematician: Joseph Henry Maclagen Wedderburn"] }], "Text", CellMargins->{{Inherited, Inherited}, {8, 0}}, TabSpacings->3], Cell[TextData[{ "D\t", ButtonBox["New Functions", BaseStyle->"Hyperlink", ButtonData:>"Chap New Functions"] }], "Text", GeneratedCell->True, TabSpacings->3], Cell[TextData[{ "\t", ButtonBox["References", BaseStyle->"Hyperlink", ButtonData:>"Chap References"] }], "Text", GeneratedCell->True, TabSpacings->3], Cell[TextData[{ "\t", ButtonBox["Symbols and Notations", BaseStyle->"Hyperlink", ButtonData:>"Chap Notations"] }], "Text", GeneratedCell->True, TabSpacings->3], Cell[TextData[{ "\t", ButtonBox["Index", BaseStyle->"Hyperlink", ButtonData:>"Chap Index"] }], "Text", GeneratedCell->True, TabSpacings->3], Cell[" ", "Text", PageBreakAbove->True] }, Closed]], Cell[CellGroupData[{ Cell["Preface", "Chapter", CellGroupingRules->{"SectionGrouping", 20}, PageBreakAbove->True, PageBreakBelow->False, FontFamily->"Helvetica", FontSize->16, FontWeight->"Bold", CellTags->"Chap Preface"], Cell[TextData[{ StyleBox["The protection of sensitive information against unauthorized \ access or fraudulent changes has been of prime concern throughout the \ centuries. Modern communication techniques, using computers connected through \ networks, make all data even more vulnerable for these threats. Also, new \ issues have come up that were not relevant before, e.g. how to add a \ (digital) signature to an electronic document in such a way that the signer \ can not deny later on that the document was signed by him/her. \n\nCryptology \ addresses the above issues. It is at the foundation of all information \ security. The techniques employed to this end have become increasingly \ mathematical of nature. This book serves as an introduction to modern \ cryptographic methods. After a brief survey of classical cryptosystems, it \ concentrates on three main areas. First of all, stream ciphers and block \ ciphers are discussed. These systems have extremely fast implementations, but \ sender and receiver have to share a secret key. Public key cryptosystems (the \ second main area) make it possible to protect data without a prearranged key. \ Their security is based on intractable mathematical problems, like the \ factorization of large numbers. The remaining chapters cover a variety of \ topics, such as zero-knowledge proofs, secret sharing schemes and \ authentication codes. Two appendices explain all mathematical prerequisites \ in great detail. One is on elementary number theory (Euclid's Algorithm, the \ Chinese Remainder Theorem, quadratic residues, inversion formulas, and \ continued fractions). The other appendix gives a thorough introduction to \ finite fields and their algebraic structure.\n\nThis book differs from its \ 1988 version in two ways. That a lot of new material has been added is to be \ expected in a field that is developing so fast. Apart from a revision of the \ existing material, there are many new or greatly expanded sections, an \ entirely new chapter on elliptic curves and also one on authentication codes. \ The second difference is even more significant. The whole manuscript is \ electronically available as an interactive ", FontSize->11], ButtonBox["Mathematica", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://www.wolfram.com/"], None}], StyleBox[" manuscript. So, there are hyperlinks to other places in the text, \ but more importantly, it is now possible to work out non-trivial examples. \ Even a non-expert can easily alter the parameters in the examples and try out \ new ones. It is our experience, based on teaching at the California Institute \ of Technology and the Eindhoven University of Technology, that most students \ truly enjoy the enormous possibilities of a computer algebra notebook. \ Throughout the book, it has been our intention to make all ", FontSize->11], StyleBox["Mathematica", FontSize->11, FontSlant->"Italic"], StyleBox[" statements as transparent as possible, sometimes sacrificing \ elegant or smart alternatives that are too dependent on this particular \ computer algebra package. ", FontSize->11] }], "Text"], Cell[TextData[{ "There are several people that have played a crucial role in the preparation \ of this manuscript. In alphabetical order of first name, I would like to \ thank Fred Simons for showing me the full potential of ", StyleBox["Mathematica", FontSlant->"Italic"], " for educational purposes and for enhancing many the ", StyleBox["Mathematica ", FontSlant->"Italic"], "commands, Gavin Horn for the many typo's that he has found as well as his \ compilation of solutions, Lilian Porter for her feedback on my use of \ English, and Wil Kortsmit for his help in getting the manuscript camera-ready \ and for solving many of my Mathematica questions. I also owe great debt to \ the following people who helped me with their feedback on various chapters: \ Berry Schoenmakers, Bram van Asch, Eric Verheul, Frans Willems, Mariska Sas, \ and Martin van Dijk." }], "Text"], Cell[TextData[{ "Henk van Tilborg\nDept. of Mathematics and Computing Science\nEindhoven \ University of Technology\nP.O. Box 513\n5600 MB Eindhoven\nthe Netherlands\n\ email: ", " ", ButtonBox["henkvt@win.tue.nl", BaseStyle->"Hyperlink", ButtonData:>{ URL["mailto:henkvt@win.tue.nl"], None}], "." }], "Text", ParagraphSpacing->{0, 0}] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\t", "Introduction" }], "Chapter", CounterAssignments->{{"Chapter", 0}}, CellTags->"Chap Intro"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\t", "Introduction and Terminology" }], "Section", CellTags->"SectIntro Intro"], Cell[TextData[{ StyleBox["Cryptology", FontSlant->"Italic"], ", the study of cryptosystems, can be subdivided into two disciplines. ", StyleBox["Cryptography", FontSlant->"Italic"], " concerns itself with the design of cryptosystems, while ", StyleBox["cryptanalysis", FontSlant->"Italic"], " studies the breaking of cryptosystems. These two aspects are closely \ related; when setting up a cryptosystem the analysis of its security plays an \ important role. At this time we will not give a formal definition of a \ cryptosystem, as that will come later in this chapter. We assume that the \ reader has the right intuitive idea of what a cryptosystem is." }], "Text", TextAlignment->Left, TextJustification->1, CellTags->"DefIntro Cryptology"], Cell["\<\ Why would anybody use a cryptosystem? There are several possibilities:\ \>", "Text"], Cell[TextData[{ StyleBox["Confidentiality", FontSlant->"Italic"], ": When transmitting data, one does not want an eavesdropper to understand \ the contents of the transmitted messages. The same is true for stored data \ that should be protected against unauthorized access, for instance by hackers." }], "Text", CellTags->"DefIntro Privacy"], Cell[TextData[{ StyleBox["Authentication", FontSlant->"Italic"], ": This property is the equivalent of a signature. The receiver of a message \ wants proof that a message comes from a certain party and not from somebody \ else (even if the original party later wants to deny it)." }], "Text", CellTags->"DefIntro Authen"], Cell[TextData[{ StyleBox["Integrity", FontSlant->"Italic"], ": This means that the receiver of certain data has evidence that no changes \ have been made by a third party." }], "Text", CellTags->"DefIntro Integrity"], Cell[TextData[{ "Throughout the centuries (see ", ButtonBox["[Kahn67]", BaseStyle->"Hyperlink", ButtonData:>"RefKahn67"], ") cryptosystems have been used by the military and by the diplomatic \ services. The nowadays widespread use of computer controlled communication \ systems in industry or by civil services, often asks for special protection \ of the data by means of cryptographic techniques." }], "Text", GeneratedCell->True], Cell["\<\ Since the storage, and later recovery, of data can be viewed as transmission \ of this data in the time domain, we shall always use the term transmission \ when discussing a situation when data is stored and/or transmitted.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tShannon's Description of a Conventional Cryptosystem" }], "Section", CellTags->"SectIntro Shannon"], Cell[TextData[{ "Chapters ", ButtonBox["2", BaseStyle->"Hyperlink", ButtonData:>"Chap Class"], ", ", ButtonBox["3", BaseStyle->"Hyperlink", ButtonData:>"Chap Shift"], ", and ", ButtonBox["4", BaseStyle->"Hyperlink", ButtonData:>"Chap Block"], " discuss several so-called conventional cryptosystems. The formal \ definition of a conventional cryptosystem as well as the mathematical \ foundation of the underlying theory is due to C.E. Shannon ", ButtonBox["[Shan49]", BaseStyle->"Hyperlink", ButtonData:>"RefShan49"], ". In ", ButtonBox["Figure 1.1", BaseStyle->"Hyperlink", ButtonData:>"FigIntro Classic CS"], ", the general outline of a conventional cryptosystem is depicted." }], "Text", GeneratedCell->True], Cell["\<\ In the next section we shall elaborate on concepts like language and text. \ This will provide a cryptanalist with useful models when describing the \ output of the sender in the scheme.\ \>", "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.00250627 -0.140765 0.00555287 [ [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .02632 .30346 m .12907 .30346 L .12907 .3812 L .02632 .3812 L .02632 .30346 L s .18672 .30346 m .37469 .30346 L .37469 .3812 L .18672 .3812 L .18672 .30346 L s .52506 .30346 m .72556 .30346 L .72556 .3812 L .52506 .3812 L .52506 .30346 L s .83835 .30346 m .97619 .30346 L .97619 .3812 L .83835 .3812 L .83835 .30346 L s .12406 .02582 m .34962 .02582 L .34962 .10356 L .12406 .10356 L .12406 .02582 L s .52757 .52558 m .70301 .52558 L .70301 .60332 L .52757 .60332 L .52757 .52558 L s .44987 .56445 m .52757 .56445 L s gsave .07644 .34233 -74.875 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Alice) show 86.750000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .27694 .34233 -86.75 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Encryption) show 110.500000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .62531 .34233 -86.75 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Decryption) show 110.500000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .90602 .34233 -70.125 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Bob) show 77.250000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .23684 .06469 -86.75 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Key) show 82.000000 12.812500 moveto (Source) show 110.500000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .61779 .56445 -70.125 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Eve) show 77.250000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .5 .01472 -96.25 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Secure) show 96.250000 12.812500 moveto (Channel) show 129.500000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .16165 .30346 -65.4375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (m) show 67.875000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .44987 .30346 -79.3438 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (E) show 67.750000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 5.687500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (k) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 71.812500 12.812500 moveto (H) show 76.562500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (m) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 81.437500 12.812500 moveto (L) show 86.187500 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (=) show 90.937500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 95.687500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Math2Mono %%+ font Courier grestore gsave .78822 .37565 -67.8125 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (m) show 67.875000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (=) show 72.625000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .78822 .30346 -74.5313 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (D) show 67.750000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 5.687500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (k) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 71.812500 12.812500 moveto (H) show 76.562500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 81.312500 12.812500 moveto (L) show 86.062500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .2995 .16464 -65.375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (k) show 67.750000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .60025 .16464 -65.375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (k) show 67.750000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .57519 .06469 m .57519 .25571 L s % Start of user PostScript 220. 37. 220. 71.4 MAarrowhead1 % End of user PostScript .57519 .25571 m .57519 .30346 L s .12907 .34233 m .17519 .34233 L s % Start of user PostScript 42. 87. 60.4 87. MAarrowhead1 % End of user PostScript .17519 .34233 m .18672 .34233 L s .37469 .34233 m .49499 .34233 L s % Start of user PostScript 140. 87. 188. 87. MAarrowhead1 % End of user PostScript .49499 .34233 m .52506 .34233 L s .72556 .34233 m .81579 .34233 L s % Start of user PostScript 280. 87. 316. 87. MAarrowhead1 % End of user PostScript .81579 .34233 m .83835 .34233 L s .34962 .06469 m .53008 .06469 L s % Start of user PostScript 130. 37. 202. 37. MAarrowhead1 % End of user PostScript .53008 .06469 m .57519 .06469 L s .44987 .45339 m .44987 .54224 L s % Start of user PostScript 170. 107. 170. 123. MAarrowhead1 % End of user PostScript .44987 .54224 m .44987 .56445 L s .44987 .45339 m .44987 .36455 L s % Start of user PostScript 170. 107. 170. 91. MAarrowhead1 % End of user PostScript .44987 .36455 m .44987 .34233 L s .27444 .30346 m .27444 .14354 L s % Start of user PostScript 100. 80. 100. 51.2 MAarrowhead1 % End of user PostScript .27444 .14354 m .27444 .10356 L s % End of Graphics MathPictureEnd \ \>"], "Text", TextAlignment->Center, TextJustification->0, ImageSize->{306.375, 189.125}, ImageMargins->{{67.4375, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztW0lPFEEULrqHHVlElMVlIokc0JBAgoaDiUbx5EE0rqcJMYGD0SCJgBfl gPoLPHtR/4RH48/CqVc9VdU1X206wBCqQ3cV7716W71+tfXcr22uvXxV21xf rVXvbdTerK2vvq0uv96og/IOxjrmGWO/qozX9+vV4rFf/9tf4A8OwfUtXuSc PIuudcqaqLLG1agrUtYFCeplRpWKDgKitgR+h4rcEFK/cgPB7wwS81qlRFcy x+Bh8gWu8EgoylxZWZbwTuuHzKaina/LfVqvaIygFshOQdfV1L6kUKepEEM4 vfm2ZjDyXWbTsV9iOx0uUuFgZWQJAit90UXbkuiicnFeiutxSVJYeYUXdzng jwYw+N8CsN+J/MDJT8veuhbXcBTAZuNYdEvZ2stbEOQqsMqNVMKNT9Z9gN9V qcRXu6Y9xtviUpJfgt6TNlDODHpJiYgywTKv7Xr0js2orEgu2qASlXL9SRE5 twyjYCQWwwD7IcRilf8GgLtRaA1gd2fS3Sh0CIReBoeSWuCr3MnLYYmYBs1u x0lBmSCxOIEsaOy9Yyd6BFBPE3kibx35Q15QYnt+GEQrvNAWNBVaDRIRLxl7 ANrmmHQbssxYQxfEhbDvtYbNQ2wljgtSuDRZ17VesVpXptux92UTef0OYlu/ HWyPS7wm8kTeCvLH9Gx6+T+2ssUT/qRcsNs2RG3VCYk8kbMZEbb7eOnXBWBV ALsRzeW6UGmOCrwoRoIu86fIAkJSY4AV//WViBHTouzlFWJ9FkhZkNjGwlwf x13bD2gh/4+mThtiilLzco/PWvvmCd5/Hbf5QoNJvpoimBvaNF8UWNqOqHJE t8MrxGBJUmkbNqhDAr0R1m9S6E2lJPABVKQbeqNRoheEYLMc0qP5xyA6H/Bm 8Qu9bYsAZnaPaus2IHSvCumxFKiH6XBf4CJZM1adgt07FOhKWmxUbIog2EiM czIVGX7O6JTiEF2B9rqRYZeSmknNpCbNPtTARrXJQNUnQNupozXnHD1xjg41 a9LB44DMcx22uY/OQg7M+U3zzea5hwD4vpBQNfPYqbgDFLUIQfpPBHZ26JFj y5VGE0t0HmYecPG7X7pdE1M+qadoGPRFELbH/rEJDuhctkRGVSQWR20ZJo3y wFDb/+Un7I6bOPILxd+UtPqULeoCz5zbyVLUvyNSc3SOis5nQzX3hm/8IkWI 6XW284bcqOx0+G2W00SVHLS1XuMyNGh5jM7xmmuxmhU+1rmbCh2VBRR707w2 GO36+ESonb+4NgZwO2sarKgO8L/MoYnA/PJFttV6yj+4h9KdsdGRm9BohdbG 7i/hDs4iJG1E9gz6hsj+gQnuezTJCAg19xd9aAwZwtwIgKaYyEWIL+pgBFOr ejSxRtLQW4gmvv2yq9WWGZoaHdAKK9QBbbg4TKon1U+K6vRdHuUGdPqBFBbz UzzzQVKPrTEhs4RjYqCaixqldcXhM6rKETTm06nMWFkxOioxByp+0QCkH298 klr81ABGqxKq6eD/h/hnz8AWFEXbL8Ce7wmVUAl17FB7AJVpmcCdJ3DGIQDt WS/y2guB+syLTKIMmfMA9uyoGiJ/jSUWJ4OFWny7dtjRbzB0QRMcYc5b+eX6 tSKa5xZMvwGU+jWV2rwwjlsYnnqhc3KfIMMOtRCO1Fr590JcQ0ffJvJWkutZ m7CeXzTrddbxF+b+Ol0=\ \>"], ImageRangeCache->{{{0, 305.375}, {188.125, 0}} -> {-10.1445, 25.3494, \ 1.31081, 0.59163}}], Cell["The conventional cryptosystem", "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "Let \[ScriptCapitalA] be a finite set, which we will call ", StyleBox["alphabet", FontSlant->"Italic"], ". With |\[ScriptCapitalA]| we denote the cardinality of \[ScriptCapitalA]. \ We shall often use ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], "=", RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", " ", RowBox[{"q", "-", "1"}]}], "}"}]}], TraditionalForm]]], " as alphabet, where we work with its elements modulo ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " (see the beginning of ", ButtonBox["Subsection A.3.1", BaseStyle->"Hyperlink", ButtonData:>"SubSecA Congruences"], " and ", ButtonBox["Section B.2", BaseStyle->"Hyperlink", ButtonData:>"SecAppB Field Constr"], ". The alphabet ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "26"], TraditionalForm]]], " can be identified with the set ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"a", ",", " ", "b", ",", " ", "\[Ellipsis]", ",", " ", "z"}], "}"}], TraditionalForm]]], ". In most modern applications ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " will often be 2 or a power of 2." }], "Text", GeneratedCell->True, CellTags->"DefIntro Alphabet"], Cell[TextData[{ "A concatenation of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " letters from \[ScriptCapitalA] will be called an ", Cell[BoxData[ FormBox["n", TraditionalForm]], FontSlant->"Italic"], StyleBox["-gram", FontSlant->"Italic"], " and denoted by ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["a", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "=", RowBox[{"(", RowBox[{ SubscriptBox["a", "0"], ",", " ", RowBox[{ SubscriptBox["a", RowBox[{"1", ","}]], "\[Ellipsis]"}], ",", " ", SubscriptBox["a", RowBox[{"n", "-", "1"}]]}], ")"}]}], TraditionalForm]]], ". Special cases are ", StyleBox["bi-grams", FontSlant->"Italic"], " (", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "2"}], TraditionalForm]]], ") and ", StyleBox["tri-grams", FontSlant->"Italic"], " (", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "3"}], TraditionalForm]]], "). The set of all ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-grams from \[ScriptCapitalA] will be denoted by ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalA]", "n"], TraditionalForm]]], ". " }], "Text", CellTags->"DefIntro bigram"], Cell[TextData[{ "A ", StyleBox["text", FontSlant->"Italic"], " is an element from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[ScriptCapitalA]", "*"], "=", RowBox[{ SubscriptBox["\[Union]", RowBox[{"n", "\[GreaterEqual]", "0"}]], SuperscriptBox["\[ScriptCapitalA]", "n"]}]}], TraditionalForm]]], ". A ", StyleBox["language", FontSlant->"Italic"], " is a subset of ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalA]", "*"], TraditionalForm]]], ". In the case of programming languages this subset is precisely defined by \ means of recursion rules. In the case of spoken languages these rules are \ very loose." }], "Text", CellTags->"DefIntro Language"], Cell[TextData[{ "Let \[ScriptCapitalA] and \[ScriptCapitalB] be two finite alphabets. Any \ one-to-one mapping ", Cell[BoxData[ FormBox["E", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalA]", "*"], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalB]", "*"], TraditionalForm]]], " is called a ", StyleBox["cryptographic transformation", FontSlant->"Italic"], ". In most practical situations|\[ScriptCapitalA]| will be equal to |\ \[ScriptCapitalB]|. Also often the cryptographic transformation ", Cell[BoxData[ FormBox["E", TraditionalForm]]], " will map ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-grams into ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-grams (to avoid data expansion during the encryption process)." }], "Text", CellTags->"DefIntro Crypto Transf"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], TraditionalForm]]], " be the message (a text from ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalA]", "*"], TraditionalForm]]], ") that Alice in ", ButtonBox["Figure 1.1", BaseStyle->"Hyperlink", ButtonData:>"FigIntro Classic CS"], " wants to transmit in secrecy to Bob. It is usually called the ", StyleBox["plaintext", FontSlant->"Italic"], ". Alice will first transform the plaintext into ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "=", RowBox[{"E", "(", StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], ")"}]}], TraditionalForm]]], ", the so-called ", StyleBox["ciphertext", FontSlant->"Italic"], ". It will be the ciphertext that she will transmit to Bob. " }], "Text", CellTags->"DefIntro plaintext"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "A ", StyleBox["symmetric ", FontSlant->"Italic"], "(or", StyleBox[" conventional", FontSlant->"Italic"], ")", StyleBox[" cryptosystem", FontSlant->"Italic"], " \[GothicCapitalE] is a set of cryptographic transformations \ \[GothicCapitalE] = ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["E", "k"], "|", " ", RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}]}], "}"}], TraditionalForm]]], ". \nThe index set \[ScriptCapitalK] is called the ", StyleBox["key space", FontSlant->"Italic"], ", and its elements ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " ", StyleBox["keys", FontSlant->"Italic"], "." }], "Definition", CellTags->"DefIntro Crypto Syst"], Cell[TextData[{ "Since ", Cell[BoxData[ FormBox[ SubscriptBox["E", "k"], TraditionalForm]]], " is a one-to-one mapping, its inverse must exist. We shall denote it with ", Cell[BoxData[ FormBox[ SubscriptBox["D", "k"], TraditionalForm]]], ". Of course, the ", Cell[BoxData[ FormBox["E", TraditionalForm]]], " stands for ", StyleBox["encryption", FontSlant->"Italic"], " (or enciphering) and the ", Cell[BoxData[ FormBox["D", TraditionalForm]]], " for ", StyleBox["decryption", FontSlant->"Italic"], " (or deciphering). One has" }], "Text", CellTags->"DefIntro encryption"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["D", "k"], RowBox[{"(", RowBox[{ SubscriptBox["E", "k"], "(", StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], ")"}], ")"}]}], "=", StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]]}], TraditionalForm]]], ", \tfor all plaintexts ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Element]", SuperscriptBox["\[ScriptCapitalA]", "*"]}], TraditionalForm]]], "and keys ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[Element]", "\[ScriptCapitalK]"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "If Alice wants to send the plaintext ", Cell[BoxData[ FormBox[ StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], TraditionalForm]]], " to Bob by means of the cryptographic transformation ", Cell[BoxData[ FormBox[ SubscriptBox["E", "k"], TraditionalForm]]], ", both Alice and Bob must know the particular choice of the key ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ". They will have agreed on the value of ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " by means of a so-called ", StyleBox["secure channel", FontSlant->"Italic"], ". This channel could be a courier, but it could also be that Alice and Bob \ have, beforehand, agreed on the choice of ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ".\nBob can decipher ", Cell[BoxData[ FormBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], TraditionalForm]]], " by computing" }], "Text", CellTags->"DefIntro secure channel"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["D", "k"], "(", StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["D", "k"], RowBox[{"(", RowBox[{ SubscriptBox["E", "k"], "(", StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], ")"}], ")"}]}], "=", StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Normally, the same cryptosystem \[GothicCapitalE] will be used for a long \ time and by many people, so it is reasonable to assume that this set of \ cryptographic transformations \[GothicCapitalE] is also known to the \ cryptanalist. It is the frequent changing of the key that has to provide the \ security of the data. This principle was already clearly stated by the \ Dutchman Auguste Kerckhoff (see ", ButtonBox["[Kahn67]", BaseStyle->"Hyperlink", ButtonData:>"RefKahn67"], ") in the 19-th century." }], "Text", GeneratedCell->True], Cell[TextData[{ "The ", StyleBox["cryptanalist", FontSlant->"Italic"], " (Eve) who is connected to the transmission line can be:" }], "Text", CellTags->"DefIntro Cryptanalist"], Cell[TextData[{ "\[FilledVerySmallSquare] ", StyleBox["passive", FontSlant->"Italic"], " (eavesdropping): The cryptanalist tries to find ", Cell[BoxData[ FormBox[ StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], TraditionalForm]]], " (or even better ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ") from ", Cell[BoxData[ FormBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], TraditionalForm]]], " (and whatever further knowledge he has). By determining ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " more ciphertexts may be broken." }], "Text", CellTags->"DefIntro Cryptanalist passive"], Cell[TextData[{ "\[FilledVerySmallSquare] ", StyleBox["active", FontSlant->"Italic"], " (tampering): The cryptanalist tries to actively manipulate the data that \ are being transmitted. For instance, he transmits his own ciphertext, \ retransmits old ciphertext, substitutes his own texts for transmitted \ ciphertexts, etc.." }], "Text", CellTags->"DefIntro Cryptanalist active"], Cell["In general, one discerns three levels of cryptanalysis:", "Text"], Cell[TextData[{ "\[FilledVerySmallSquare] ", StyleBox["Ciphertext only attack", FontSlant->"Italic"], ": Only a piece of ciphertext is known to the cryptanalist (and often the \ context of the message)." }], "Text", CellTags->"DefIntro Cipher Only Att."], Cell[TextData[{ "\[FilledVerySmallSquare] ", StyleBox["Known plaintext attack", FontSlant->"Italic"], ": A piece of ciphertext with corresponding plaintext is known. If a system \ is secure against this kind of attack the legitimate receiver does not have \ to destroy deciphered messages." }], "Text", CellTags->"DefIntro Known Pl. Att."], Cell[TextData[{ "\[FilledVerySmallSquare] ", StyleBox["Chosen plaintext attack", FontSlant->"Italic"], ": The cryptanalist can choose any piece of plaintext and generate the \ corresponding ciphertext. The public-key cryptosystems that we shall discuss \ in Chapters ", ButtonBox["7", BaseStyle->"Hyperlink", ButtonData:>"Chap Public"], "-", ButtonBox["12", BaseStyle->"Hyperlink", ButtonData:>"Chap Knapsack"], " have to be secure against this kind of attack." }], "Text", CellTags->"DefIntro Chosen Pl. Att."], Cell[TextData[{ "This concludes our general description of the conventional cryptosystem as \ depicted in ", ButtonBox["Figure 1.1", BaseStyle->"Hyperlink", ButtonData:>"FigIntro Classic CS"], ". " }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tStatistical Description of a Plaintext Source" }], "Section", CellTags->"SectIntro Statistical"], Cell[TextData[{ "In cryptology, especially when one wants to break a particular \ cryptosystem, a probabilistic approach to describe a language is often \ already a powerful tool, as we shall see in ", ButtonBox["Section 2.2", BaseStyle->"Hyperlink", ButtonData:>"SectClass Incid Coin"], "." }], "Text"], Cell[TextData[{ "The person ", "Alice", " in ", ButtonBox["Figure 1.1", BaseStyle->"Hyperlink", ButtonData:>"FigIntro Classic CS"], " stands for a finite or infinite ", StyleBox["plaintext source", FontSlant->"Italic"], " \[GothicCapitalS] of text, that was called plaintext, from an alphabet \ \[ScriptCapitalA], e.g. ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "q"], TraditionalForm]]], ". It can be described as a finite resp. infinite sequence of random \ variables ", Cell[BoxData[ FormBox[ SubscriptBox["M", "i"], TraditionalForm]]], ", so by sequences" }], "Text", CellTags->"DefIntro Plaint Source"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["M", "0"], ",", " ", SubscriptBox["M", "1"], ",", "\[Ellipsis]", " ", ",", " ", SubscriptBox["M", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], "\tfor some fixed value of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "," }], "DisplayFormula"], Cell["resp.", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["M", "0"], ",", " ", SubscriptBox["M", "1"], ",", SubscriptBox["M", "2"], ",", " ", "\[Ellipsis]", " "}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "each described by probabilities that events occur. So, for each letter \ combination (", Cell[BoxData[ FormBox["r", TraditionalForm]]], "-gram) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["m", RowBox[{"0", ","}]], SubscriptBox["m", "1"]}], ",", "\[Ellipsis]", " ", ","}]}], TraditionalForm], SubscriptBox["m", RowBox[{"r", "-", "1"}]]}], ")"}], TraditionalForm]]], " over \[ScriptCapitalA] and each starting point ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " the probability" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ RowBox[{ SubscriptBox["M", "j"], "=", SubscriptBox["m", "0"]}], ",", " ", RowBox[{ SubscriptBox["M", RowBox[{"j", "+", "1"}]], "=", SubscriptBox["m", "1"]}], ",", "\[Ellipsis]", " ", ",", " ", RowBox[{ SubscriptBox["M", RowBox[{"j", "+", "r", "-", "1"}]], "=", SubscriptBox["m", RowBox[{"r", "-", "1"}]]}]}], ")"}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "is well defined. In the case that ", Cell[BoxData[ FormBox[ RowBox[{"j", "=", "0"}], TraditionalForm]]], ", we shall simply write ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ SubscriptBox["m", "0"], ",", " ", SubscriptBox["m", "1"], ",", "\[Ellipsis]", " ", ",", " ", SubscriptBox["m", RowBox[{"r", "-", "1"}]]}], ")"}], TraditionalForm]]], ". Of course, the probabilities that describe the plaintext source \ \[GothicCapitalS] should satisfy the standard statistical properties, that we \ shall mention below but on which we shall not elaborate." }], "Text"], Cell[TextData[{ "i) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ SubscriptBox["m", "0"], ",", " ", SubscriptBox["m", "1"], ",", "\[Ellipsis]", " ", ",", " ", SubscriptBox["m", RowBox[{"r", "-", "1"}]]}], ")"}], "\[GreaterEqual]", "0"}], TraditionalForm]]], " for all texts ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["m", "0"], ",", " ", SubscriptBox["m", "1"], ",", "\[Ellipsis]", " ", ",", " ", SubscriptBox["m", RowBox[{"r", "-", "1"}]]}], ")"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "ii) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"(", RowBox[{ SubscriptBox["m", "0"], ",", " ", SubscriptBox["m", "1"], ",", "\[Ellipsis]", " ", ",", " ", SubscriptBox["m", RowBox[{"r", "-", "1"}]]}], ")"}]], RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ SubscriptBox["m", "0"], ",", " ", SubscriptBox["m", "1"], ",", "\[Ellipsis]", " ", ",", " ", SubscriptBox["m", RowBox[{"r", "-", "1"}]]}], ")"}]}], "=", "1"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "iii) ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", RowBox[{"(", RowBox[{ SubscriptBox["m", "r"], ",", " ", SubscriptBox["m", RowBox[{"r", "+", "1"}]], ",", "\[Ellipsis]", " ", ",", " ", SubscriptBox["m", RowBox[{"l", "-", "1"}]]}], ")"}]], RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ SubscriptBox["m", "0"], ",", " ", SubscriptBox["m", "1"], ",", "\[Ellipsis]", " ", ",", " ", SubscriptBox["m", RowBox[{"l", "-", "1"}]]}], ")"}]}], "=", RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ SubscriptBox["m", "0"], ",", " ", SubscriptBox["m", "1"], ",", "\[Ellipsis]", ",", " ", SubscriptBox["m", RowBox[{"r", "-", "1"}]]}], ")"}]}], TraditionalForm]]], ", for all ", Cell[BoxData[ FormBox[ RowBox[{"l", ">", "r"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "The third property is called ", StyleBox["Kolmogorov's consistency condition", FontSlant->"Italic"], "." }], "Text", CellTags->"PropIntro Kolmogorov"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nThe plaintext source \[GothicCapitalS] (Alice in ", ButtonBox["Figure 1.1", BaseStyle->"Hyperlink", ButtonData:>"FigIntro Classic CS"], ") generates individual letters (1-grams) from ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"a", ",", "b", ",", "\[Ellipsis]", ",", "z"}], "}"}], TraditionalForm]]], " with an independent but identical distribution, say ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "(", "a", ")"}], ",", " ", RowBox[{"p", "(", "b", ")"}], ",", " ", "\[Ellipsis]", ",", " ", RowBox[{"p", "(", "z", ")"}]}], TraditionalForm]]], ". So," }], "Example", CellTags->"ExamIntro 1-grams"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ SubscriptBox["m", "0"], ",", " ", SubscriptBox["m", RowBox[{"1", " "}]], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"n", "-", "1"}]]}], ")"}], "=", RowBox[{ RowBox[{"p", "(", SubscriptBox["m", "0"], ")"}], RowBox[{"p", "(", SubscriptBox["m", "1"], ")"}], "\[CenterEllipsis]", " ", RowBox[{"p", "(", SubscriptBox["m", RowBox[{"n", "-", "1"}]], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[GreaterEqual]", "1"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "The distribution of the letters of the alphabet in normal English texts is \ given in ", ButtonBox["Table 1.1", BaseStyle->"Hyperlink", ButtonData:>"TableIntr Prob English"], " (see Table 12-1 in ", ButtonBox["[MeyM82]", BaseStyle->"Hyperlink", ButtonData:>"RefMey82"], "). In this model one has that" }], "Text", GeneratedCell->True, FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", "run", ")"}], "=", RowBox[{ RowBox[{ RowBox[{"p", "(", "r", ")"}], RowBox[{"p", "(", "u", ")"}], RowBox[{"p", "(", "n", ")"}]}], "=", " ", RowBox[{ RowBox[{"0.0612", "\[Times]", "0.0271", "\[Times]", "0.0709"}], "\[TildeTilde]", RowBox[{"1.18", " ", SuperscriptBox["10", RowBox[{"-", "4"}]]}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Note that in this model also ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", "nru", ")"}], "=", RowBox[{ RowBox[{"p", "(", "n", ")"}], RowBox[{"p", "(", "r", ")"}], RowBox[{"p", "(", "u", ")"}]}]}], TraditionalForm]]], ", etc., so, unlike in a regular English texts, all permutations of the \ three letters ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " are equally likely in \[GothicCapitalS]." }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ "\n", Cell[BoxData[GridBox[{ {"a", "0.0804", "h", "0.0549", "o", "0.0760", "v", "0.0099"}, {"b", "0.0154", "i", "0.0726", "p", "0.0200", "w", "0.0192"}, {"c", "0.0306", "j", "0.0016", "q", "0.0011", "x", "0.0019"}, {"d", "0.0399", "k", "0.0067", "r", "0.0612", "y", "0.0173"}, {"e", "0.1251", "l", "0.0414", "s", "0.0654", "z", "0.0009"}, {"f", "0.0230", "m", "0.0253", "t", "0.0925", " ", " "}, {"g", "0.0196", "n", "0.0709", "u", "0.0271", " ", " "} }]]], "\n\nProbability distributions of 1-grams in English." }], "NumberedTable", CellTags->"TableIntr Prob English"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\n\[GothicCapitalS] generates 2-grams over the alphabet ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"a", ",", "b", ",", ",", "\[Ellipsis]", ",", "z"}], "}"}], TraditionalForm]]], " with an independent but identical distribution, say ", Cell[BoxData[ FormBox[ RowBox[{"p", "(", RowBox[{"s", ",", "t"}], ")"}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"s", ",", RowBox[{"t", " ", "\[Element]", RowBox[{"{", RowBox[{"a", ",", "b", ",", "\[Ellipsis]", ",", "z"}], "}"}]}]}], TraditionalForm]]], ". So, for ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[GreaterEqual]", "1"}], TraditionalForm]]] }], "Example"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ RowBox[{ SubscriptBox["m", RowBox[{"0", ","}]], SubscriptBox["m", "1"]}], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{ RowBox[{"2", "n"}], "-", "1"}]]}], ")"}], "=", " ", RowBox[{ RowBox[{"p", "(", RowBox[{ SubscriptBox["m", "0"], SubscriptBox["m", "1"]}], ")"}], RowBox[{"p", "(", RowBox[{ SubscriptBox["m", "2"], ",", SubscriptBox["m", "3"]}], ")"}], "\[CenterEllipsis]"}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"p", "(", RowBox[{ SubscriptBox["m", RowBox[{ RowBox[{"2", "n"}], "-", "2"}]], SubscriptBox["m", RowBox[{ RowBox[{"2", "n"}], "-", "1"}]]}], ")"}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell[TextData[{ "The distribution of 2-grams in English texts can be found in the literature \ (see Table 2.3.4 in ", ButtonBox["[Konh81]", BaseStyle->"Hyperlink", ButtonData:>"RefKonh81"], ")." }], "Text", GeneratedCell->True, TextAlignment->Left, TextJustification->0, FontSlant->"Italic", FontColor->GrayLevel[0]], Cell["\<\ Of course, one can continue like this with tables of the distribution of \ 3-grams or more. A different and more appealing approach is given in the \ following example.\ \>", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0723"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0006"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0715"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0060"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0064"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0773"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0282"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0390"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0272"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0483"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0230"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0117"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.1566"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0814"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0078"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0167"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0716"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0030"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0216"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0160"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0168"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.4020"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0007"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0010"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0787"}], ";", RowBox[{ RowBox[{"ed", "[", "\"\\"", "]"}], "=", "0.0750"}], ";"}]}], "Input", GeneratedCell->True, CellTags->"TableIntro Equil Distr"], Cell["Equilibrium distribution in English.", "NumberedTable", TextAlignment->Center, TextJustification->0], Cell[BoxData[ RowBox[{ RowBox[{"TrPr", "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{ ".0011", ",", ".0193", ",", ".0388", ",", ".0469", ",", ".0020", ",", ".0100", ",", ".0233", ",", ".0020", ",", ".0480", ",", ".0020", ",", ".0103", ",", ".1052", ",", ".0281", ",", ".1878", ",", ".0008", ",", ".0222", ",", "0", ",", ".1180", ",", ".1001", ",", ".1574", ",", ".0137", ",", ".0212", ",", ".0057", ",", ".0026", ",", ".0312", ",", ".0023"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0931", ",", ".0057", ",", ".0016", ",", ".0008", ",", ".3219", ",", "0", ",", "0", ",", "0", ",", ".0605", ",", ".0057", ",", "0", ",", ".1242", ",", ".0049", ",", "0", ",", ".0964", ",", "0", ",", "0", ",", ".0662", ",", ".0229", ",", ".0049", ",", ".0727", ",", ".0016", ",", "0", ",", "0", ",", ".1168", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1202", ",", "0", ",", ".0196", ",", ".0004", ",", ".1707", ",", "0", ",", "0", ",", ".1277", ",", ".0761", ",", "0", ",", ".0324", ",", ".0369", ",", ".0015", ",", ".0011", ",", ".2283", ",", "0", ",", ".0004", ",", ".0426", ",", ".0087", ",", ".0893", ",", ".0347", ",", "0", ",", "0", ",", "0", ",", ".0094", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1044", ",", ".0020", ",", ".0026", ",", ".0218", ",", ".3778", ",", ".0007", ",", ".0132", ",", ".0007", ",", ".1803", ",", ".0033", ",", "0", ",", ".0125", ",", ".0178", ",", ".0053", ",", " ", ".0733", ",", "0", ",", ".0007", ",", ".0324", ",", ".0495", ",", ".0013", ",", ".0601", ",", ".0099", ",", ".0040", ",", "0", ",", ".0264", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0660", ",", ".0036", ",", ".0433", ",", ".1194", ",", ".0438", ",", ".0142", ",", ".0125", ",", ".0021", ",", ".0158", ",", ".0005", ",", ".0036", ",", ".0456", ",", ".0340", ",", ".1381", ",", ".0040", ",", ".0192", ",", ".0034", ",", ".1927", ",", ".1231", ",", ".0404", ",", ".0048", ",", ".0215", ",", ".0205", ",", ".0152", ",", ".0121", ",", ".0004"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0838", ",", "0", ",", "0", ",", "0", ",", ".1283", ",", ".0924", ",", "0", ",", "0", ",", ".1608", ",", "0", ",", "0", ",", ".0299", ",", ".0009", ",", ".0009", ",", ".2789", ",", "0", ",", "0", ",", ".1215", ",", ".0026", ",", ".0496", ",", ".0462", ",", "0", ",", "0", ",", "0", ",", ".0043", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1078", ",", "0", ",", "0", ",", ".0018", ",", ".2394", ",", "0", ",", ".0177", ",", ".1281", ",", ".0839", ",", "0", ",", "0", ",", ".0203", ",", ".0027", ",", ".0451", ",", ".1140", ",", "0", ",", "0", ",", ".1325", ",", ".0256", ",", ".0247", ",", ".0512", ",", "0", ",", "0", ",", "0", ",", ".0053", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1769", ",", ".0005", ",", ".0014", ",", ".0008", ",", ".5623", ",", "0", ",", "0", ",", ".0005", ",", ".1167", ",", "0", ",", "0", ",", ".0016", ",", ".0016", ",", ".0038", ",", ".0786", ",", "0", ",", "0", ",", ".0153", ",", ".0027", ",", ".0233", ",", ".0085", ",", "0", ",", ".0011", ",", "0", ",", ".0041", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0380", ",", ".0082", ",", ".0767", ",", ".0459", ",", ".0437", ",", ".0129", ",", ".0280", ",", ".0002", ",", ".0016", ",", "0", ",", ".0050", ",", ".0567", ",", ".0297", ",", ".2498", ",", ".0893", ",", ".0100", ",", ".0008", ",", ".0342", ",", ".1194", ",", ".1135", ",", ".0011", ",", ".0250", ",", "0", ",", ".0023", ",", ".0002", ",", ".0079"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1259", ",", "0", ",", "0", ",", "0", ",", ".1818", ",", "0", ",", "0", ",", "0", ",", ".0350", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", ".3147", ",", "0", ",", "0", ",", ".0070", ",", "0", ",", "0", ",", ".3357", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0395", ",", ".0028", ",", "0", ",", ".0028", ",", ".5282", ",", ".0028", ",", "0", ",", ".0198", ",", ".1582", ",", "0", ",", ".0113", ",", ".0198", ",", ".0028", ",", ".0565", ",", ".0198", ",", "0", ",", "0", ",", ".0085", ",", ".1102", ",", ".0028", ",", ".0028", ",", "0", ",", "0", ",", "0", ",", ".0113", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1342", ",", ".0019", ",", ".0022", ",", ".0736", ",", ".1918", ",", ".0105", ",", ".0108", ",", "0", ",", ".1521", ",", "0", ",", ".0079", ",", ".1413", ",", ".0082", ",", ".0004", ",", ".0778", ",", ".0041", ",", "0", ",", ".0034", ",", ".0389", ",", ".0254", ",", ".0269", ",", ".0056", ",", ".0011", ",", "0", ",", ".0819", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1822", ",", ".0337", ",", ".0026", ",", "0", ",", ".2975", ",", ".0010", ",", "0", ",", "0", ",", ".1345", ",", "0", ",", "0", ",", ".0010", ",", ".0654", ",", ".0042", ",", ".1246", ",", ".0722", ",", "0", ",", ".0026", ",", ".0244", ",", ".0005", ",", ".0337", ",", ".0005", ",", "0", ",", "0", ",", ".0192", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0550", ",", ".0004", ",", ".0621", ",", ".1681", ",", ".1212", ",", ".0102", ",", ".1391", ",", ".0013", ",", ".0665", ",", ".0009", ",", ".0066", ",", ".0073", ",", ".0104", ",", ".0194", ",", ".0528", ",", ".0004", ",", ".0007", ",", ".0011", ",", ".0751", ",", ".1641", ",", ".0124", ",", ".0068", ",", ".0018", ",", ".0002", ",", ".0157", ",", ".0004"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0085", ",", ".0101", ",", ".0162", ",", ".0231", ",", ".0037", ",", ".1299", ",", ".0082", ",", ".0025", ",", ".0092", ",", ".0014", ",", ".0078", ",", ".0416", ",", ".0706", ",", ".2190", ",", ".0222", ",", ".0292", ",", "0", ",", ".1530", ",", ".0357", ",", ".0396", ",", ".0947", ",", ".0334", ",", ".0345", ",", ".0012", ",", ".0041", ",", ".0004"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1359", ",", "0", ",", ".0006", ",", "0", ",", ".1747", ",", "0", ",", "0", ",", ".0237", ",", ".0423", ",", "0", ",", "0", ",", ".0812", ",", ".0073", ",", ".0006", ",", ".1511", ",", ".0581", ",", "0", ",", ".2306", ",", ".0180", ",", ".0287", ",", ".0457", ",", "0", ",", "0", ",", "0", ",", ".0017", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".1026", ",", ".0033", ",", ".0172", ",", ".0282", ",", ".2795", ",", ".0031", ",", ".0175", ",", ".0017", ",", ".1181", ",", "0", ",", ".0205", ",", ".0164", ",", ".0303", ",", ".0325", ",", ".1114", ",", ".0055", ",", "0", ",", ".0212", ",", ".0655", ",", ".0596", ",", ".0192", ",", ".0142", ",", ".0017", ",", ".0002", ",", ".0306", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0604", ",", ".0012", ",", ".0284", ",", ".0027", ",", ".1795", ",", ".0024", ",", "0", ",", ".0561", ",", ".1177", ",", "0", ",", ".0091", ",", ".0145", ",", ".0112", ",", ".0021", ",", ".0706", ",", ".0386", ",", ".0009", ",", ".0027", ",", ".0836", ",", ".2483", ",", ".0579", ",", "0", ",", ".0039", ",", "0", ",", ".0081", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0619", ",", ".0003", ",", ".0036", ",", ".0002", ",", ".1417", ",", ".0007", ",", ".0002", ",", ".3512", ",", ".1406", ",", "0", ",", "0", ",", ".0101", ",", ".0044", ",", ".0015", ",", ".1229", ",", ".0003", ",", "0", ",", ".0479", ",", ".0418", ",", ".0213", ",", ".0195", ",", ".0005", ",", ".0088", ",", "0", ",", ".0203", ",", ".0005"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0344", ",", ".0415", ",", ".0491", ",", ".0243", ",", ".0434", ",", ".0052", ",", ".0382", ",", ".0010", ",", ".0258", ",", "0", ",", ".0014", ",", ".1097", ",", ".0329", ",", ".1517", ",", ".0019", ",", ".0386", ",", "0", ",", ".1460", ",", ".1221", ",", ".1255", ",", ".0029", ",", ".0014", ",", "0", ",", ".0010", ",", ".0014", ",", ".0005"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0749", ",", "0", ",", "0", ",", ".0023", ",", ".6014", ",", "0", ",", "0", ",", "0", ",", ".2569", ",", "0", ",", "0", ",", "0", ",", ".0012", ",", "0", ",", ".0530", ",", "0", ",", "0", ",", "0", ",", ".0023", ",", "0", ",", ".0012", ",", ".0012", ",", "0", ",", "0", ",", ".0058", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".2291", ",", ".0008", ",", "0", ",", ".0032", ",", ".1942", ",", "0", ",", "0", ",", ".1422", ",", ".2104", ",", "0", ",", "0", ",", ".0041", ",", "0", ",", ".0357", ",", ".1292", ",", "0", ",", "0", ",", ".0106", ",", ".0366", ",", ".0016", ",", "0", ",", "0", ",", "0", ",", "0", ",", ".0024", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0672", ",", "0", ",", ".1119", ",", "0", ",", ".1269", ",", "0", ",", "0", ",", ".0075", ",", ".1119", ",", "0", ",", "0", ",", "0", ",", ".0075", ",", "0", ",", ".0075", ",", ".3507", ",", "0", ",", "0", ",", "0", ",", ".1716", ",", "0", ",", "0", ",", "0", ",", ".0373", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{ ".0586", ",", ".0034", ",", ".0103", ",", ".0069", ",", ".2897", ",", "0", ",", "0", ",", "0", ",", ".0690", ",", "0", ",", ".0034", ",", ".0172", ",", ".0379", ",", ".0172", ",", ".2207", ",", ".0310", ",", "0", ",", ".0310", ",", ".1517", ",", ".0172", ",", ".0138", ",", "0", ",", ".0103", ",", "0", ",", ".0069", ",", ".0034"}], "}"}], ",", RowBox[{"{", RowBox[{ ".2278", ",", "0", ",", "0", ",", "0", ",", ".4557", ",", "0", ",", "0", ",", "0", ",", ".2152", ",", "0", ",", "0", ",", ".0127", ",", "0", ",", "0", ",", ".0506", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", ".0127", ",", "0", ",", "0", ",", "0", ",", "0", ",", ".0253"}], "}"}]}], "}"}]}], ";"}]], "Input", PageBreakAbove->True, GeneratedCell->True], Cell[BoxData[{ RowBox[{"Style", "[", RowBox[{ RowBox[{"TableForm", "[", RowBox[{ RowBox[{"First", "/@", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Partition", "[", RowBox[{"#1", ",", "13"}], "]"}], "&"}], ")"}], "/@", "TrPr"}]}], ",", RowBox[{"TableSpacing", "\[Rule]", "0.5`"}], ",", RowBox[{"TableHeadings", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"CharacterRange", "[", RowBox[{"\"\\"", ",", "\"\\""}], "]"}], ",", RowBox[{"CharacterRange", "[", RowBox[{"\"\\"", ",", "\"\\""}], "]"}]}], "}"}]}]}], "]"}], ",", RowBox[{"FontSize", "\[Rule]", "8"}]}], "]"}], "\n", RowBox[{"Style", "[", RowBox[{ RowBox[{"TableForm", "[", RowBox[{ RowBox[{"Last", "/@", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"Partition", "[", RowBox[{"#1", ",", "13"}], "]"}], "&"}], ")"}], "/@", "TrPr"}]}], ",", RowBox[{"TableSpacing", "\[Rule]", "0.5`"}], ",", RowBox[{"TableHeadings", "\[Rule]", RowBox[{"{", RowBox[{ RowBox[{"CharacterRange", "[", RowBox[{"\"\\"", ",", "\"\\""}], "]"}], ",", RowBox[{"CharacterRange", "[", RowBox[{"\"\\"", ",", "\"\\""}], "]"}]}], "}"}]}]}], "]"}], ",", RowBox[{"FontSize", "\[Rule]", "8"}]}], "]"}]}], "Input", CellOpen->False, PageBreakAbove->True, GeneratedCell->True], Cell[CellGroupData[{ Cell[BoxData[ TagBox[ StyleBox[ TagBox[GridBox[{ {"\<\"\"\>", "\<\"a\"\>", "\<\"b\"\>", "\<\"c\"\>", "\<\"d\"\>", "\<\"e\ \"\>", "\<\"f\"\>", "\<\"g\"\>", "\<\"h\"\>", "\<\"i\"\>", "\<\"j\"\>", \ "\<\"k\"\>", "\<\"l\"\>", "\<\"m\"\>"}, {"\<\"a\"\>", StyleBox["0.00110000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0193000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0387999999999999989`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.046899999999999995`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.002`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.01`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0233000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.002`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0479999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.002`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0103000000000000002`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.105200000000000004`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0281000000000000049`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"b\"\>", StyleBox["0.0931000000000000049`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00570000000000000106`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00160000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0008`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.32190000000000003`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.0604999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00570000000000000106`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.124199999999999999`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00490000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"c\"\>", StyleBox["0.120199999999999995`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.0195999999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0004`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.170699999999999985`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.127700000000000013`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0761000000000000031`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.0323999999999999932`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0368999999999999994`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0015`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"d\"\>", StyleBox["0.104400000000000003`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.002`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00260000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0218000000000000015`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.377800000000000046`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.000700000000000000088`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0132000000000000006`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.000700000000000000088`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.180299999999999993`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00330000000000000026`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.0125`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.017799999999999998`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"e\"\>", StyleBox["0.0660000000000000053`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00359999999999999964`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0433000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.119399999999999995`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0437999999999999989`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.014200000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0125`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00209999999999999964`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0158000000000000024`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0005`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00359999999999999964`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0456000000000000049`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0340000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"f\"\>", StyleBox["0.08379999999999999`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", StyleBox["0.128299999999999991`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0923999999999999843`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", StyleBox["0.160800000000000009`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.0298999999999999985`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0009`", StyleBoxAutoDelete->True, PrintPrecision->1]}, {"\<\"g\"\>", StyleBox["0.107800000000000006`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.00179999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.239400000000000012`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.0177000000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.12809999999999999`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0839000000000000056`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", StyleBox["0.020299999999999998`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00270000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"h\"\>", StyleBox["0.176900000000000012`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0005`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00140000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0008`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.562300000000000022`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.0005`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.116700000000000003`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.00160000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00160000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"i\"\>", StyleBox["0.0379999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00820000000000000106`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0766999999999999992`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0458999999999999985`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0437000000000000099`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0129000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0280000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0002`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00160000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.005`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0566999999999999992`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0296999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"j\"\>", StyleBox["0.125900000000000011`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.181799999999999979`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.0350000000000000044`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", "0"}, {"\<\"k\"\>", StyleBox["0.0395000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00280000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.00280000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.528200000000000002`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00280000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.0198000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.158200000000000002`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.0112999999999999989`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0198000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00280000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"l\"\>", StyleBox["0.134200000000000008`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0019`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00220000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0735999999999999943`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.191799999999999997`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0105000000000000004`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0108000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.152100000000000008`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.00790000000000000124`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.141300000000000007`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00820000000000000106`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"m\"\>", StyleBox["0.182200000000000006`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.033700000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00260000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.297499999999999964`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.001`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", "0", StyleBox["0.134500000000000019`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.001`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0654000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"n\"\>", StyleBox["0.055`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0004`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0620999999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.168100000000000004`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.121199999999999996`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0102000000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.139100000000000001`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00130000000000000004`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0665000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0009`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00660000000000000053`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00729999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0104000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"o\"\>", StyleBox["0.0085`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0101`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0161999999999999966`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.023099999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00370000000000000062`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.129899999999999993`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00820000000000000106`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0025`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00919999999999999928`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00140000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00780000000000000071`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0416000000000000014`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.070599999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"p\"\>", StyleBox["0.135899999999999998`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.000599999999999999822`", StyleBoxAutoDelete->True, PrintPrecision->1], "0", StyleBox["0.174699999999999988`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.023700000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0422999999999999953`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", StyleBox["0.0811999999999999921`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00729999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"q\"\>", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0"}, {"\<\"r\"\>", StyleBox["0.102600000000000002`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00330000000000000026`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0171999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0281999999999999992`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.279500000000000037`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00310000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0175000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00169999999999999973`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.118100000000000004`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.0205000000000000026`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0164000000000000012`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.030299999999999998`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"s\"\>", StyleBox["0.0604000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00119999999999999973`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0284000000000000021`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00270000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.179499999999999992`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00239999999999999946`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.0560999999999999943`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.117700000000000004`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.00909999999999999964`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0145000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.011200000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"t\"\>", StyleBox["0.061899999999999995`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.000299999999999999911`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00359999999999999964`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0002`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.141699999999999981`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.000700000000000000088`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0002`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.351200000000000001`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.140600000000000013`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.0101`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00440000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"u\"\>", StyleBox["0.034399999999999995`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0415000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0491000000000000014`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0242999999999999971`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0433999999999999985`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00520000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0382000000000000028`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.001`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0258000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.00140000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.109699999999999997`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0328999999999999959`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"v\"\>", StyleBox["0.0748999999999999843`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", StyleBox["0.00229999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.601400000000000023`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.256899999999999995`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.00119999999999999973`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"w\"\>", StyleBox["0.229099999999999992`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0008`", StyleBoxAutoDelete->True, PrintPrecision->1], "0", StyleBox["0.00320000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.194200000000000017`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.142199999999999988`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.210400000000000009`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.00410000000000000053`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"x\"\>", StyleBox["0.0671999999999999886`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.111899999999999999`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.126900000000000012`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.0075`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.111899999999999999`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.0075`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"y\"\>", StyleBox["0.0585999999999999943`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00339999999999999946`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0103000000000000002`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00690000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.289700000000000024`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.0690000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.00339999999999999946`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0171999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0379000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3]}, {"\<\"z\"\>", StyleBox["0.227800000000000002`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.455700000000000038`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.215200000000000013`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.0127000000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], "0"} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.35]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {{ Offset[0.2]}}, "RowsIndexed" -> {}}], TableForm[#, TableSpacing -> 0.5, TableHeadings -> {{ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}, { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m"}}]& ], FontSize->8], StyleForm[#, FontSize -> 8]& ]], "Output", CellMargins->{{36, Inherited}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0], Cell[BoxData[ TagBox[ StyleBox[ TagBox[GridBox[{ {"\<\"\"\>", "\<\"n\"\>", "\<\"o\"\>", "\<\"p\"\>", "\<\"q\"\>", "\<\"r\ \"\>", "\<\"s\"\>", "\<\"t\"\>", "\<\"u\"\>", "\<\"v\"\>", "\<\"w\"\>", \ "\<\"x\"\>", "\<\"y\"\>", "\<\"z\"\>"}, {"\<\"a\"\>", StyleBox["0.187799999999999993`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0008`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0222000000000000019`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.117999999999999993`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.100099999999999988`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.157400000000000002`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.013700000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.021200000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00570000000000000106`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00260000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.031200000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00229999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"b\"\>", "0", StyleBox["0.0964000000000000056`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", StyleBox["0.0661999999999999921`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0229000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00490000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0726999999999999957`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00160000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", "0", StyleBox["0.116799999999999992`", StyleBoxAutoDelete->True, PrintPrecision->4], "0"}, {"\<\"c\"\>", StyleBox["0.00110000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.228299999999999991`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", StyleBox["0.0004`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0425999999999999978`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00869999999999999928`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0892999999999999971`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0347000000000000019`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", StyleBox["0.00939999999999999857`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"d\"\>", StyleBox["0.00530000000000000071`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0733000000000000095`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.000700000000000000088`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0323999999999999932`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0495000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00130000000000000004`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0600999999999999978`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00990000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.004`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.0264000000000000012`", StyleBoxAutoDelete->True, PrintPrecision->3], "0"}, {"\<\"e\"\>", StyleBox["0.138100000000000001`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.004`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0191999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00339999999999999946`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.192699999999999995`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.123100000000000009`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0404000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00479999999999999893`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0214999999999999946`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0205000000000000026`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0152000000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0120999999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0004`", StyleBoxAutoDelete->True, PrintPrecision->1]}, {"\<\"f\"\>", StyleBox["0.0009`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.27889999999999997`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.121499999999999985`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00260000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0495999999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0461999999999999921`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", StyleBox["0.00429999999999999893`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"g\"\>", StyleBox["0.0450999999999999978`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.114000000000000012`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.132500000000000017`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0256000000000000005`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0246999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.051200000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", StyleBox["0.00530000000000000071`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"h\"\>", StyleBox["0.00379999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0786000000000000031`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", StyleBox["0.0153000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00270000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0233000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0085`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.00110000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.00410000000000000053`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"i\"\>", StyleBox["0.249799999999999977`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0892999999999999971`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.01`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0008`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0342000000000000037`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.119399999999999995`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.1135`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00110000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.025`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.00229999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0002`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00790000000000000124`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"j\"\>", "0", StyleBox["0.314699999999999979`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.00700000000000000088`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", "0", StyleBox["0.33570000000000002`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", "0", "0"}, {"\<\"k\"\>", StyleBox["0.0565000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0198000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", StyleBox["0.0085`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.110200000000000009`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00280000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00280000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", "0", "0", StyleBox["0.0112999999999999989`", StyleBoxAutoDelete->True, PrintPrecision->3], "0"}, {"\<\"l\"\>", StyleBox["0.0004`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0777999999999999936`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00410000000000000053`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.00339999999999999946`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0388999999999999968`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0254000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0269000000000000039`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00560000000000000053`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00110000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.081899999999999995`", StyleBoxAutoDelete->True, PrintPrecision->3], "0"}, {"\<\"m\"\>", StyleBox["0.00419999999999999928`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.124599999999999999`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0721999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.00260000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0244000000000000039`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0005`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.033700000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0005`", StyleBoxAutoDelete->True, PrintPrecision->1], "0", "0", StyleBox["0.0191999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], "0"}, {"\<\"n\"\>", StyleBox["0.0193999999999999985`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0528000000000000024`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0004`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.000700000000000000088`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00110000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0750999999999999978`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.164100000000000001`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0123999999999999999`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00679999999999999893`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00179999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0002`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0156999999999999984`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0004`", StyleBoxAutoDelete->True, PrintPrecision->1]}, {"\<\"o\"\>", StyleBox["0.218999999999999994`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0222000000000000019`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0291999999999999992`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.153000000000000007`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0357000000000000028`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0395999999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0947000000000000063`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0333999999999999985`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0345000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00119999999999999973`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00410000000000000053`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0004`", StyleBoxAutoDelete->True, PrintPrecision->1]}, {"\<\"p\"\>", StyleBox["0.000599999999999999822`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.151100000000000012`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.058099999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.230600000000000004`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0179999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0286999999999999957`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0456999999999999939`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", StyleBox["0.00169999999999999973`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"q\"\>", "0", "0", "0", "0", "0", "0", "0", "1", "0", "0", "0", "0", "0"}, {"\<\"r\"\>", StyleBox["0.0325`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.111399999999999987`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.00549999999999999911`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.021200000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0655000000000000071`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0595999999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0191999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.014200000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00169999999999999973`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0002`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.0306000000000000005`", StyleBoxAutoDelete->True, PrintPrecision->3], "0"}, {"\<\"s\"\>", StyleBox["0.00209999999999999964`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.070599999999999996`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0386000000000000031`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0009`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00270000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0835999999999999943`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.248300000000000009`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0578999999999999914`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.00390000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.00809999999999999786`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"t\"\>", StyleBox["0.0015`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.122899999999999987`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.000299999999999999911`", StyleBoxAutoDelete->True, PrintPrecision->1], "0", StyleBox["0.0479000000000000003`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0417999999999999971`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0212999999999999989`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0195000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0005`", StyleBoxAutoDelete->True, PrintPrecision->1], StyleBox["0.00880000000000000071`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.020299999999999998`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0005`", StyleBoxAutoDelete->True, PrintPrecision->1]}, {"\<\"u\"\>", StyleBox["0.15169999999999999`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0019`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0386000000000000031`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.145999999999999996`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.122100000000000008`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.125499999999999989`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0029`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00140000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.001`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00140000000000000017`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.0005`", StyleBoxAutoDelete->True, PrintPrecision->1]}, {"\<\"v\"\>", "0", StyleBox["0.0530000000000000071`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", StyleBox["0.00229999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", StyleBox["0.00119999999999999973`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00119999999999999973`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", "0", StyleBox["0.00579999999999999982`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"w\"\>", StyleBox["0.0357000000000000028`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.129200000000000002`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", StyleBox["0.0106000000000000005`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.0366000000000000014`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.00160000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->2], "0", "0", "0", "0", StyleBox["0.00239999999999999946`", StyleBoxAutoDelete->True, PrintPrecision->2], "0"}, {"\<\"x\"\>", "0", StyleBox["0.0075`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.350700000000000011`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.171600000000000001`", StyleBoxAutoDelete->True, PrintPrecision->4], "0", "0", "0", StyleBox["0.0372999999999999998`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0"}, {"\<\"y\"\>", StyleBox["0.0171999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.220699999999999985`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0310000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.0310000000000000008`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.15169999999999999`", StyleBoxAutoDelete->True, PrintPrecision->4], StyleBox["0.0171999999999999975`", StyleBoxAutoDelete->True, PrintPrecision->3], StyleBox["0.013800000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.0103000000000000002`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", StyleBox["0.00690000000000000035`", StyleBoxAutoDelete->True, PrintPrecision->2], StyleBox["0.00339999999999999946`", StyleBoxAutoDelete->True, PrintPrecision->2]}, {"\<\"z\"\>", "0", StyleBox["0.0506000000000000049`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", "0", "0", StyleBox["0.0127000000000000001`", StyleBoxAutoDelete->True, PrintPrecision->3], "0", "0", "0", "0", StyleBox["0.0253000000000000024`", StyleBoxAutoDelete->True, PrintPrecision->3]} }, GridBoxAlignment->{ "Columns" -> {{Left}}, "ColumnsIndexed" -> {}, "Rows" -> {{Baseline}}, "RowsIndexed" -> {}}, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.35]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> {{ Offset[0.2]}}, "RowsIndexed" -> {}}], TableForm[#, TableSpacing -> 0.5, TableHeadings -> {{ "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}, { "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}}]& ], FontSize->8], StyleForm[#, FontSize -> 8]& ]], "Output", CellMargins->{{36, Inherited}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0], Cell[TextData[{ "Transition probabilities ", Cell[BoxData[ FormBox[ RowBox[{"p", "(", RowBox[{"t", "|", "s"}], ")"}], TraditionalForm]]], ", row ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ", column ", Cell[BoxData[ FormBox["t", TraditionalForm]]], ", in English." }], "NumberedTable", CellMargins->{{Inherited, 34}, {Inherited, Inherited}}] }, Closed]], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nIn this model, the plaintext source \[GothicCapitalS] generates 1-grams \ by means of a ", StyleBox["Markov process", FontSlant->"Italic"], ". This process can be described by a ", StyleBox["transition matrix", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"P", "=", SubscriptBox[ RowBox[{"(", RowBox[{"p", "(", RowBox[{"t", "|", "s"}], ")"}], ")"}], RowBox[{"s", ",", "t"}]]}], TraditionalForm]]], " which gives the probability that a letter ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " in the text is followed by the letter ", Cell[BoxData[ FormBox["t", TraditionalForm]]], ". It follows from the theory of Markov processes that ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " has 1 as an eigenvalue. Let ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ StyleBox["p", FontSize->12, FontWeight->"Bold", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], "=", RowBox[{"(", RowBox[{ RowBox[{"p", "(", "a", ")"}], ",", RowBox[{"p", "(", "b", ")"}], ",", "\[Ellipsis]", ",", RowBox[{"p", "(", "z", ")"}]}], ")"}]}], FontFamily->"Times", FontSlant->"Italic"], TraditionalForm]]], ", be the corresponding eigenvector (it is called the ", StyleBox["equilibrium distribution", FontSlant->"Italic"], " of the process).\nAssuming that the process is already in its equilibrium \ state at the beginning, one has" }], "Example", CellTags->"ExamIntro Markov"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ RowBox[{ SubscriptBox["m", RowBox[{"0", ","}]], SubscriptBox["m", "1"]}], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"n", "-", "1"}]]}], ")"}], "=", " ", RowBox[{ RowBox[{"p", "(", SubscriptBox["m", "0"], ")"}], RowBox[{"p", "(", RowBox[{ SubscriptBox["m", "1"], "|", SubscriptBox["m", "0"]}], ")"}], RowBox[{"p", "(", RowBox[{ SubscriptBox["m", "2"], "|", SubscriptBox["m", "1"]}], ")"}], "\[CenterEllipsis]"}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"p", "(", RowBox[{ SubscriptBox["m", RowBox[{"n", "-", "1"}]], "|", SubscriptBox["m", RowBox[{"n", "-", "2"}]]}], ")"}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ StyleBox["p", FontSize->12, FontWeight->"Bold", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " be given by ", ButtonBox["Table 1.2", BaseStyle->"Hyperlink", ButtonData:>"TableIntro Equil Distr"], " and ", ButtonBox["Table 1.3", BaseStyle->"Hyperlink", ButtonData:>"TableIntro Transition Prob"], " from ", ButtonBox["[Konh81]", BaseStyle->"Hyperlink", ButtonData:>"RefKonh81"], " (here they are denoted by \"ed\" resp. \"TrPr\"). Then, one obtains the \ following, more realistic probabilities of occurrence:" }], "Text", GeneratedCell->True, FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", "run", ")"}], "=", RowBox[{ RowBox[{"p", "(", "r", ")"}], RowBox[{"p", "(", RowBox[{"u", "|", "r"}], ")"}], RowBox[{"p", "(", RowBox[{"n", "|", "u"}], ")"}]}]}], TraditionalForm]]], " = 0.0751\[Times] 0.0192 \[Times] 0.1517 \[TildeTilde] 2.19 ", Cell[BoxData[ FormBox[ SuperscriptBox["10", RowBox[{"-", "4"}]], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", "urn", ")"}], "=", RowBox[{ RowBox[{"p", "(", "u", ")"}], RowBox[{"p", "(", RowBox[{"r", "|", "u"}], ")"}], RowBox[{"p", "(", RowBox[{"n", "|", "r"}], ")"}]}]}], TraditionalForm]]], " = 0.0272\[Times] 0.1460 \[Times] 0.0325 \[TildeTilde] 1.29 ", Cell[BoxData[ FormBox[ SuperscriptBox["10", RowBox[{"-", "4"}]], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "plain"], "(", "nru", ")"}], "=", RowBox[{ RowBox[{"p", "(", "n", ")"}], RowBox[{"p", "(", RowBox[{"r", "|", "n"}], ")"}], RowBox[{"p", "(", RowBox[{"u", "|", "r"}], ")"}]}]}], TraditionalForm]]], " = 0.0814\[Times] 0.0011 \[Times] 0.0192 \[TildeTilde] 1.72 ", Cell[BoxData[ FormBox[ SuperscriptBox["10", RowBox[{"-", "6"}]], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "By means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["StringTake", BaseStyle->"RefGuideLink"], ", ", ButtonBox["ToCharacterCode", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["StringLength", BaseStyle->"RefGuideLink"], ", these probabilities can be computed in the following way (first enter the \ input ", ButtonBox["Table 1.2", BaseStyle->"Hyperlink", ButtonData:>"TableIntro Equil Distr"], " and the input before ", ButtonBox["Table 1.3,", BaseStyle->"Hyperlink", ButtonData:>"TableIntro Transition Prob"], ")" }], "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[BoxData[{ RowBox[{ RowBox[{"sourcetext", "=", "\"\\""}], ";"}], "\n", RowBox[{ RowBox[{"ed", "[", RowBox[{"StringTake", "[", RowBox[{"sourcetext", ",", RowBox[{"{", "1", "}"}]}], "]"}], "]"}], "*", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], RowBox[{ RowBox[{"StringLength", "[", "sourcetext", "]"}], "-", "1"}]], RowBox[{"TrPr", "[", RowBox[{"[", "\t\t\t\t", RowBox[{ RowBox[{ RowBox[{"ToCharacterCode", "[", RowBox[{"StringTake", "[", RowBox[{"sourcetext", ",", RowBox[{"{", "i", "}"}]}], "]"}], "]"}], "-", "96"}], ",", RowBox[{ RowBox[{"ToCharacterCode", "[", RowBox[{"StringTake", "[", RowBox[{"sourcetext", ",", RowBox[{"{", RowBox[{"i", "+", "1"}], "}"}]}], "]"}], "]"}], "-", "96"}]}], "]"}], "]"}]}]}]}], "Input", GeneratedCell->True, CellTags->"FormIntro Markov Eval"], Cell[BoxData[ RowBox[{"{", RowBox[{"{", "0.000218447999999999931`", "}"}], "}"}]], "Output"], Cell["\<\ Better approximations of a language can be made, by considering transition \ probabilities that depend on more than one letter in the past.\ \>", "Text", FontSlant->"Italic", FontColor->GrayLevel[0]], Cell[TextData[{ "Note, that in the three examples above, the models are all ", StyleBox["stationary", FontSlant->"Italic"], ", which means that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Pr", "plain"], "(", RowBox[{ RowBox[{ SubscriptBox["M", "j"], "=", SubscriptBox["m", "0"]}], ",", " ", RowBox[{ SubscriptBox["M", RowBox[{"j", "+", "1"}]], "=", SubscriptBox["m", "1"]}], ",", "\[Ellipsis]", ",", " ", RowBox[{ SubscriptBox["M", RowBox[{"j", "+", "n", "-", "1"}]], "=", SubscriptBox["m", RowBox[{"n", "-", "1"}]]}]}], ")"}], TraditionalForm]]], " is independent of the value of ", Cell[BoxData[ FormBox["j", TraditionalForm]]], ". In the middle of a regular text one may expect this property to hold, but \ in other situations this is not the case. Think for instance of the date at \ the beginning of a letter." }], "Text", CellTags->"DefIntro stationary"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectIntro Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nWhat is the probability that the text \"apple'' occurs, when the \ plaintext source generates independent, identically distributed 1-grams, as \ described in ", ButtonBox["Example 1.1", BaseStyle->"Hyperlink", ButtonData:>"ExamIntro 1-grams"], ".\nAnswer the same question when the Markov model of ", ButtonBox["Example 1.3", BaseStyle->"Hyperlink", ButtonData:>"ExamIntro Markov"], " is used?" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{" ", SuperscriptBox["", "M"]}], TraditionalForm]]], "\nUse the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["Permutations", BaseStyle->"RefGuideLink"], " and the ", ButtonBox["input formula", BaseStyle->"Hyperlink", ButtonData:>"FormIntro Markov Eval"], " at the end of Section 1.3 to determine for each of the 24 orderings of the \ four letters ", Cell[BoxData[ FormBox[ RowBox[{"e", ",", " ", "h", ",", " ", "l", ",", " ", "p"}], TraditionalForm]]], " the probability that it occurs in a language generated by the Markov model \ of ", ButtonBox["Example 1.3", BaseStyle->"Hyperlink", ButtonData:>"ExamIntro Markov"], "." }], "Problem"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\t", "Classical Cryptosystems" }], "Chapter", CellTags->"Chap Class"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tCaesar, Simple Substitution, Vigen\[EGrave]re" }], "Section", CellTags->"SectClass Caesar"], Cell[TextData[{ "In this chapter we shall discuss a number of classical cryptosystems. For \ further reading we refer the interested reader to (", ButtonBox["[BekP82]", BaseStyle->"Hyperlink", ButtonData:>"RefBek82"], ", ", ButtonBox["[Denn82]", BaseStyle->"Hyperlink", ButtonData:>"RefDen82"], ", ", ButtonBox["[Kahn67]", BaseStyle->"Hyperlink", ButtonData:>"RefKahn67"], ", ", ButtonBox["[Konh81]", BaseStyle->"Hyperlink", ButtonData:>"RefKonh81"], ", or ", ButtonBox["[MeyM82]", BaseStyle->"Hyperlink", ButtonData:>"RefMey82"], "). " }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Caesar Cipher" }], "Subsection", CellTags->"SubsClass Caesar"], Cell[TextData[{ "One of the oldest cryptosystems is due to Julius Caesar. It shifts each \ letter in the text cyclicly over ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " places. So, with ", Cell[BoxData[ FormBox[ RowBox[{"k", "=", "7"}], TraditionalForm]]], " one gets the following encryption of the word cleopatra (note that the \ letter ", Cell[BoxData[ FormBox["z", TraditionalForm]]], " is mapped to ", Cell[BoxData[ FormBox["a", TraditionalForm]]], "):" }], "Text"], Cell[TextData[{ StyleBox["cleopatra", FontColor->RGBColor[0.500008, 0.500008, 0]], " ", Cell[BoxData[ FormBox[ OverscriptBox["\[LongRightArrow]", RowBox[{"+", "1"}]], TraditionalForm]]], " dmfpqbusb ", Cell[BoxData[ FormBox[ OverscriptBox["\[LongRightArrow]", RowBox[{"+", "1"}]], TraditionalForm]]], " engqrcvtc ", Cell[BoxData[ FormBox[ OverscriptBox["\[LongRightArrow]", RowBox[{"+", "1"}]], TraditionalForm]]], " fohrsdwud ", Cell[BoxData[ FormBox[ OverscriptBox["\[LongRightArrow]", RowBox[{"+", "1"}]], TraditionalForm]]], " gpistexve ", Cell[BoxData[ FormBox[ OverscriptBox["\[LongRightArrow]", RowBox[{"+", "1"}]], TraditionalForm]]], " hqjtufywf ", Cell[BoxData[ FormBox[ OverscriptBox["\[LongRightArrow]", RowBox[{"+", "1"}]], TraditionalForm]]], " irkuvgzxg ", Cell[BoxData[ FormBox[ OverscriptBox["\[LongRightArrow]", RowBox[{"+", "1"}]], TraditionalForm]]], " ", StyleBox["jslvwhayh", FontColor->RGBColor[0, 0.500008, 0]] }], "Text"], Cell[TextData[{ "By using the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["ToCharacterCode", BaseStyle->"RefGuideLink"], " and ", ButtonBox["FromCharacterCode", BaseStyle->"RefGuideLink"], ", which convert symbols to their ASCI code and back (letter ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " has value 97, letter ", Cell[BoxData[ FormBox["b", TraditionalForm]]], " has value 98, etc.), the Caesar cipher can be executed by the following \ function:" }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"CaesarCipher", "[", RowBox[{"plaintext_", ",", " ", "key_"}], "]"}], ":=", "\t", RowBox[{"FromCharacterCode", "[", " ", RowBox[{ RowBox[{"Mod", "[", " ", RowBox[{ RowBox[{ RowBox[{"ToCharacterCode", "[", "plaintext", "]"}], " ", "-", " ", "97", " ", "+", "key"}], ",", " ", "26"}], "]"}], " ", "+", " ", "97"}], "]"}]}]], "Input", GeneratedCell->True, CellTags->"DefClass Caesar"], Cell["An example is given below.", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"plaintext", "=", "\"\\""}], ";"}], "\n", RowBox[{ RowBox[{"key", "=", "24"}], ";"}], "\n", RowBox[{"CaesarCipher", "[", RowBox[{"plaintext", ",", "key"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["\<\"rwncfcpcwmspnjyglrcvrglqkyjjjcrrcpq\"\>"], "Output"], Cell[TextData[{ "In the terminology of ", ButtonBox["Section 1.2", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], ", the ", StyleBox["Caesar cipher", FontSlant->"Italic"], " is defined over the alphabet ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", "25"}], "}"}], " "}], TraditionalForm]]], " by:" }], "Text", CellTags->"DefClass Caesar Cipher"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["E", "k"], RowBox[{"(", "m", ")"}]}], " ", "=", " ", RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{"m", "+", "k"}], ")"}], " ", "mod", " ", "26"}], ")"}]}], ",", " ", RowBox[{"0", "\[LessEqual]", "m", "<", "26"}], ","}]], "DisplayFormula"], Cell["and", "Text"], Cell[BoxData[ RowBox[{" ", RowBox[{ RowBox[{"\[GothicCapitalE]", "=", " ", RowBox[{"{", RowBox[{ SubscriptBox["E", "k"], "|", RowBox[{"0", "\[LessEqual]", "k", "<", "26"}]}], "}"}]}], ","}]}]], "DisplayFormula"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"i", " ", "mod", " ", "n"}], ")"}], TraditionalForm]]], " denotes the unique integer ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " satisfying ", Cell[BoxData[ FormBox[ RowBox[{"j", "\[Congruent]", RowBox[{"i", " ", RowBox[{"(", RowBox[{"mod", " ", "n"}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "j", "<", "n"}], TraditionalForm]]], ". In this case, the key space \[ScriptCapitalK] is the set ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", "25"}], "}"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["D", "k"], "=", SubscriptBox["E", RowBox[{"q", "-", "1", "-", "k"}]]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "An easy way to break the system is to try out all possible keys. This \ method is called ", StyleBox["exhaustive key search", FontSlant->"Italic"], ". In ", ButtonBox["Table 2.1", BaseStyle->"Hyperlink", ButtonData:>"TableClass Anal Caesar"], " one can find the cryptanalysis of the ciphertext \"", StyleBox["xyuysuyifvyxi", FontColor->RGBColor[0, 0.500008, 0]], "\"." }], "Text", CellTags->"DefClass exh key search"], Cell[TextData[{ Cell[BoxData[GridBox[{ { StyleBox["x", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["y", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["u", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["y", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["s", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["u", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["y", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["i", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["f", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["v", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["y", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["x", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], StyleBox["i", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]]}, {"w", "x", "t", "x", "r", "t", "x", "h", "e", "u", "x", "w", "h"}, {"v", "w", "s", "w", "q", "s", "w", "g", "d", "t", "w", "v", "g"}, {"u", "v", "r", "v", "p", "r", "v", "f", "c", "s", "v", "u", "f"}, { StyleBox["t", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["u", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["q", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["u", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["o", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["q", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["u", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["e", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["b", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["r", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["u", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["t", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["e", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]]} }]]], "\n\nCryptanalysis of the Caesar cipher " }], "NumberedTable", CellTags->"TableClass Anal Caesar"], Cell[TextData[{ "To decrypt the ciphertext ", StyleBox["yhaklwpnw", FontColor->RGBColor[0.500008, 0.500008, 0]], "., one can easily check all keys with the ", ButtonBox["caesar", BaseStyle->"Hyperlink", ButtonData:>"DefClass Caesar"], " function defined above." }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"ciphertext", "=", "\"\\""}], ";"}], "\n", RowBox[{"Table", "[", RowBox[{ RowBox[{"CaesarCipher", "[", RowBox[{"ciphertext", ",", RowBox[{"-", "key"}]}], "]"}], ",", RowBox[{"{", RowBox[{"key", ",", "1", ",", "26"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"\<\"xgzjkvomv\"\>", ",", "\<\"wfyijunlu\"\>", ",", "\<\"vexhitmkt\"\>", ",", "\<\"udwghsljs\"\>", ",", "\<\"tcvfgrkir\"\>", ",", "\<\"sbuefqjhq\"\>", ",", "\<\"ratdepigp\"\>", ",", "\<\"qzscdohfo\"\>", ",", "\<\"pyrbcngen\"\>", ",", "\<\"oxqabmfdm\"\>", ",", "\<\"nwpzalecl\"\>", ",", "\<\"mvoyzkdbk\"\>", ",", "\<\"lunxyjcaj\"\>", ",", "\<\"ktmwxibzi\"\>", ",", "\<\"jslvwhayh\"\>", ",", "\<\"irkuvgzxg\"\>", ",", "\<\"hqjtufywf\"\>", ",", "\<\"gpistexve\"\>", ",", "\<\"fohrsdwud\"\>", ",", "\<\"engqrcvtc\"\>", ",", "\<\"dmfpqbusb\"\>", ",", "\<\"cleopatra\"\>", ",", "\<\"bkdnozsqz\"\>", ",", "\<\"ajcmnyrpy\"\>", ",", "\<\"ziblmxqox\"\>", ",", "\<\"yhaklwpnw\"\>"}], "}"}]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Simple Substitution" }], "Subsection", CellTags->"SubsClass Simple sub"], Cell[CellGroupData[{ Cell["The System and its Main Weakness", "Subsubsection", CellTags->"SubsubsClass weakness simple"], Cell[TextData[{ "With the method of a ", StyleBox["simple substitution", FontSlant->"Italic"], " one chooses a fixed permutation \[Pi] of the alphabet ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{"a", ",", "b", ",", "\[Ellipsis]", ",", "z"}], "}"}], " "}], TraditionalForm]]], " and applies that to all letters in the plaintext." }], "Text", CellTags->"DefClass SimpleSubst"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nIn the following example we only give that part of the substitution \[Pi] \ that is relevant for the given plaintext. We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["StringReplace", BaseStyle->"RefGuideLink"], "." }], "Example"], Cell[BoxData[ RowBox[{"StringReplace", "[", RowBox[{"\"\\"", ",", RowBox[{"{", RowBox[{ RowBox[{"\"\\"", "->", "\"\\""}], ",", " ", RowBox[{"\"\\"", "->", "\"\\""}], ",", " ", RowBox[{"\"\\"", "->", "\"\\""}], ",", " ", RowBox[{"\"\\"", "->", "\"\\""}], ",", "\t\t", RowBox[{"\"\\"", "->", "\"\\""}], ",", " ", RowBox[{"\"\\"", "->", "\"\\""}], ",", " ", RowBox[{"\"\\"", "->", "\"\\""}], ",", " ", RowBox[{"\"\\"", "->", "\"\\""}]}], "}"}]}], "]"}]], "Input", GeneratedCell->True], Cell[BoxData["\<\"vrkbaqzdq\"\>"], "Output"], Cell[TextData[{ "A more formal description of the simple substitution system is as follows: \ the key space \[ScriptCapitalK] is the set ", Cell[BoxData[ FormBox[ SubscriptBox["S", "q"], TraditionalForm]]], " of all permutations of ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", RowBox[{"q", "-", "1"}]}], "}"}], TraditionalForm]]], " and the cryptosystem \[GothicCapitalE] is given by" }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"\[ScriptCapitalE]", "=", RowBox[{"{", RowBox[{ SubscriptBox["E", "\[Pi]"], "|", RowBox[{"\[Pi]", "\[Element]", SubscriptBox["S", "q"]}]}], "}"}]}], ","}]], "DisplayFormula"], Cell["where", "Text"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["E", "\[Pi]"], RowBox[{"(", "m", ")"}]}], "=", RowBox[{"\[Pi]", " ", RowBox[{"(", "m", ")"}]}]}], ",", " ", RowBox[{"0", "\[LessEqual]", "m", "<", RowBox[{"q", "."}]}]}]], "DisplayFormula"], Cell[TextData[{ "The decryption function ", Cell[BoxData[ FormBox[ SubscriptBox["D", "\[Pi]"], TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["D", "\[Pi]"], "=", SubscriptBox["E", SuperscriptBox["\[Pi]", RowBox[{"-", "1"}]]]}], TraditionalForm]]], ", as follows from" }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["D", "\[Pi]"], RowBox[{"(", RowBox[{ SubscriptBox["E", "\[Pi]"], RowBox[{"(", "m", ")"}]}], ")"}]}], "=", RowBox[{ RowBox[{"D", RowBox[{"(", RowBox[{"\[Pi]", RowBox[{"(", "m", ")"}]}], ")"}]}], "=", RowBox[{ RowBox[{ SubscriptBox["E", SuperscriptBox["\[Pi]", RowBox[{"-", "1"}]]], RowBox[{"(", RowBox[{"\[Pi]", RowBox[{"(", "m", ")"}]}], ")"}]}], "=", RowBox[{ RowBox[{ SuperscriptBox["\[Pi]", RowBox[{"-", "1"}]], RowBox[{"(", RowBox[{"\[Pi]", RowBox[{"(", "m", ")"}]}], ")"}]}], "=", "m"}]}]}]}], ",", " ", RowBox[{"0", "\[LessEqual]", "m", "<", RowBox[{"q", "."}]}]}]], "DisplayFormula"], Cell[TextData[{ "Unlike Caesar's cipher, this system does not have the drawback of a small \ key space. Indeed, ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalK]", "|", RowBox[{"=", RowBox[{ SubscriptBox[ RowBox[{"(", RowBox[{"|", "S"}], ")"}], "26"], "|", RowBox[{"=", RowBox[{ RowBox[{"26", "!"}], "\[TildeTilde]"}]}]}]}]}], TraditionalForm]]], "4.03 ", Cell[BoxData[ FormBox[ SuperscriptBox["10", "26"], TraditionalForm]]], ". This system however does demonstrate very well that a large key space \ should not fool one into believing that a system is secure! On the contrary, \ by simply counting the letter frequencies in the ciphertexts and comparing \ these with the letter frequencies in ", ButtonBox["Table 1.1", BaseStyle->"Hyperlink", ButtonData:>"TableIntr Prob English"], ", one very quickly finds the images under \[Pi] of the most frequent \ letters in the plaintext. Indeed, the most frequent letter in the ciphertext \ will very likely be the image under \[Pi] of the letter ", Cell[BoxData[ FormBox["e", TraditionalForm]]], ". The next one is the image of the letter ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", etc. After having found the encryptions of the most frequent letters in \ the plaintext, it is not difficult to fill in the rest. Of course, the longer \ the cipher text, the easier the cryptanalysis becomes. In ", ButtonBox["Chapter 5", BaseStyle->"Hyperlink", ButtonData:>"Chap Shannon"], ", we come back to the cryptanalysis of the system, in particular how long \ the same key can be used safely." }], "Text"] }, Open ]], Cell[CellGroupData[{ Cell["Cryptanalysis by The Method of a Probable Word", "Subsubsection", CellTags->"DefClass Prob Word"], Cell["\<\ In the following example we have knowledge of a very long ciphertext. This is \ not necessary at all for the cryptanalysis of the ciphertext, but it takes \ that long to know the full key. Indeed, as long as two letters are missing in \ the plaintext, one does not know the full key, but the system is of course \ broken much earlier than that.\ \>", "Text"], Cell[TextData[{ "Apart from the ciphertext, given in ", ButtonBox["Table 2.2", BaseStyle->"Hyperlink", ButtonData:>"TableClass Anal Simple Subst"], ", we shall assume in this example that the plaintext discusses the concept \ of ''bidirectional communication theory''. Cryptanalysis will turn out to be \ very easy. " }], "Text"], Cell[BoxData[{ FormBox[ RowBox[{ StyleBox[GridBox[{ {"zhjeo", "ndize", "hicle", "osiol", "digic", "lmhzq", "zolyi", "zehdp", "zhjeo", "ndize"}, {"hycdh", "hlpvs", "uczyc", "dhzhj", "eondi", "zehge", "moylk", "zhjpm", "lhylg", "gidiz"}, {"gizyd", "ppsdo", "lylzr", "losye", "nnmhz", "ydize", "hicle", "osceu", "lrloq", "lgyoz"}, {"vlgic", "lneol", "flhlo", "dpydg", "lzhuc", "zyciu", "eeone", "olzhj", "eondi", "zehge"}, {"moylg", "zhjpm", "lhyll", "dycei", RowBox[{"clogi", " "}], "dizgi", "zydpp", "siclq", "zolyi", "zehej"}, {"iczgz", "hjpml", "hylzg", "lkaol", "gglqv", "sqzol", "yilqi", "odhgj", "eondi", "zehxm"}, {"dhizi", "zlguc", "zycyd", "hehps", "vlqlo", "zrlqz", "jiclp", "duejy", "dmgdp", "ziszg"}, {"evglo", "rlqqz", "gizhf", "mzgcz", "hficl", "ldopz", "loydm", "gljoe", "niclp", "dilol"}, {"jjlyi", "zhvze", "pefsd", "hqgey", "zepef", "syenn", "mhzyd", "izehi", "cleos", "gllng"}, {"iecdr", "luzql", "daapz", "ydize", "hgqml", "ieicl", "jdyii", "cdipz", "rzhfv", "lzhfg"}, {"dolvs", "iclzo", "dyize", "hggem", "oylge", "jzhje", "ondiz", "ehucz", "yczhj", "pmlhy"}, {"lldyc", "eiclo", "zhdpp", "aeggz", "vplqz", "olyiz", "ehgic", "laolg", "lhiad", "aloql"}, {"gyzvl", "gicly", "dglej", "vzqzo", "lyize", "hdpye", "nnmhz", "ydize", "hicle", "osdaa"}, {"pzlqi", "eiclg", "eyzdp", "vlcdr", "zemoe", "jneht", RowBox[{"lsg\[Ellipsis]", " "}], " ", " ", " "} }], FontFamily->"Courier New"], "\n", "\n"}], TextForm], "\n", FormBox[ FormBox[ RowBox[{"\n", RowBox[{ "Ciphertext", " ", "obtained", " ", "with", " ", "a", " ", "simple", " ", "substitution"}]}], TextForm], TextForm]}], "NumberedTable", CellMargins->{{Inherited, 87}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0, CellTags->"TableClass Anal Simple Subst"], Cell["\<\ Assuming that the word \"communication'' will occur in the plaintext, we look \ for strings of 13 consecutive letters, in which letter 1 = letter 8, letter 2 \ = letter 12, letter 3 = letter 4, letter 6 = letter 13 and letter 7 = letter \ 11. Indeed, we find the string \"yennmhzydizeh'' three times in the ciphertext. \ This gives the following information about \[Pi].\ \>", "Text"], Cell[BoxData[ FormBox[GridBox[{ {"c", "o", "m", "u", "n", "i", "a", "t"}, {"\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]"}, {"y", "e", "n", "m", "h", "z", "d", "i"} }], TraditionalForm]], "DisplayFormula"], Cell["\<\ Assuming that the word \"direction'' does also occur in the plaintext, we \ need to look for strings of the form \"*z**yizeh'' in the ciphertext, because \ of the information that we already have on \[Pi]. It turns out that \ \"qzolyizeh'' appears four times, giving:\ \>", "Text"], Cell[BoxData[ FormBox[GridBox[{ {"d", "r", "e"}, {"\[DownArrow]", "\[DownArrow]", "\[DownArrow]"}, {"q", "o", "l"} }], TraditionalForm]], "DisplayFormula"], Cell["\<\ If we substitute all this information in the ciphertext one easily obtains \ \[Pi] completely. For instance, the text begins like\ \>", "Text"], Cell["\<\ in*ormationt*eor*treat*t*eunid\[Ellipsis],\ \>", "DisplayFormula"], Cell["which obviously comes from", "Text"], Cell["\<\ information theory treats the unid(irectional) \[Ellipsis],\ \>", "DisplayFormula"], Cell[TextData[{ "This gives the \[Pi]-image of the letters ", Cell[BoxData[ FormBox[ RowBox[{"f", ",", " ", "h", ",", " ", "y"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["s", TraditionalForm]]], ".\nContinuing like this, one readily obtains \[Pi] completely." }], "Text"], Cell[BoxData[GridBox[{ {"a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}, {"\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]", "\[DownArrow]"}, {"d", "v", "y", "q", "l", "j", "f", "c", "z", "w", "t", "p", "n", "h", "e", "a", "x", "o", "g", "i", "m", "r", "u", "k", "s", "b"} }]], "DisplayFormula"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\nMathematica", FontSlant->"Italic"], " makes is quite easy to find a substring with a certain pattern.For \ instance, to test where in a text one can find a substring of length 6 with \ letters 1 and 4 equal and also letters 2 and 5 (as in the Latin word \"quoque\ \"), one can use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["If", BaseStyle->"RefGuideLink"], ", ", ButtonBox["StringTake", BaseStyle->"RefGuideLink"], ", ", ButtonBox["StringLength", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Do", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Print", BaseStyle->"RefGuideLink"], " and the following:" }], "Example", CellTags->"ExamClass Most Prob"], Cell[BoxData[{ RowBox[{ RowBox[{"ciphertext", "=", "\"\\""}], ";"}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"StringTake", "[", RowBox[{"ciphertext", ",", RowBox[{"{", RowBox[{"i", "+", "1"}], "}"}]}], "]"}], "==", RowBox[{"StringTake", "[", RowBox[{"ciphertext", ",", RowBox[{"{", RowBox[{"i", "+", "4"}], "}"}]}], "]"}]}], "\[And]", RowBox[{ RowBox[{"StringTake", "[", RowBox[{"ciphertext", ",", RowBox[{"{", RowBox[{"i", "+", "2"}], "}"}]}], "]"}], "==", RowBox[{"StringTake", "[", RowBox[{"ciphertext", ",", RowBox[{"{", RowBox[{"i", "+", "5"}], "}"}]}], "]"}]}]}], ",", RowBox[{"Print", "[", RowBox[{ RowBox[{"i", "+", "1"}], ",", "\"\< \>\"", ",", RowBox[{"StringTake", "[", RowBox[{"ciphertext", ",", RowBox[{"{", RowBox[{ RowBox[{"i", "+", "1"}], ",", RowBox[{"i", "+", "6"}]}], "}"}]}], "]"}]}], "]"}]}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", RowBox[{ RowBox[{"StringLength", "[", "ciphertext", "]"}], "-", "6"}]}], "}"}]}], "]"}]}], "Input", GeneratedCell->True, CellTags->"InputClass Find Match"], Cell[BoxData[ InterpretationBox[ RowBox[{ "3", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", "\<\"uysuyi\"\>"}], SequenceForm[3, " ", "uysuyi"], Editable->False]], "Print"], Cell[TextData[{ "This example was taken from ", ButtonBox["Table 2.1", BaseStyle->"Hyperlink", ButtonData:>"TableClass Anal Caesar"], "." }], "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Vigen\[EGrave]re Cryptosystem " }], "Subsection", CellTags->"SubsClass Vigenere"], Cell[TextData[{ "The ", StyleBox["Vigen\[EGrave]re cryptosystem", FontSlant->"Italic"], " (named after the Frenchman B. de Vigen\[EGrave]re who in 1586 wrote his \ Traict\[EAcute] des Chiffres, describing a more difficult version of this \ system) consists of ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " Caesar ciphers applied periodically. In the example below, the key is a \ word of length ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", "7"}], TraditionalForm]]], ". The ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th letter in the key defines the particular Caesar cipher that is used for \ the encryption of the letters ", Cell[BoxData[ FormBox[ RowBox[{"i", ",", RowBox[{"i", "+", "r"}], ",", " ", RowBox[{"i", "+", RowBox[{"2", "r"}]}], ",", "\[Ellipsis]"}], TraditionalForm]]], " in the plaintext." }], "Text", CellTags->"DefClass Vigenere"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nWe identify ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", "25"}], "}"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"a", ",", "b", ",", "\[Ellipsis]", ",", "z"}], "}"}], TraditionalForm]]], ". The so-called ", StyleBox["Vigen\[EGrave]re Table", FontSlant->"Italic"], " (see ", ButtonBox["Table 2.3", BaseStyle->"Hyperlink", ButtonData:>"TableClass Vigenere"], ") is a very helpful tool when encrypting or decrypting. With the key \ \"michael'' one gets the following encipherment:" }], "Example", CellTags->"ExamClass Vigenere"], Cell["", "Text"], Cell[TextData[Cell[BoxData[GridBox[{ { StyleBox["plaintext", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], "a", "c", "r", "y", "p", "t", "o", "s", "y", "s", "t", "e", "m", "o", "f", "t", "e", "n", "i", "s", "a", "c", "o", "m", "p", "r", "o", "m", "i", "s", "e", ".", ".", "."}, { StyleBox["key", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}], "m", "i", "c", "h", "a", "e", "l", "m", "i", "c", "h", "a", "e", "l", "m", "i", "c", "h", "a", "e", "l", "m", "i", "c", "h", "a", "e", "l", "m", "i", "c", ".", ".", "."}, { StyleBox["ciphertext", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], "m", "k", "t", "f", "p", "x", "z", "e", "g", "u", "a", "e", "q", "z", "r", "b", "g", "u", "i", "w", "l", "o", "w", "o", "w", "r", "s", "x", "u", "a", "g", ".", ".", "."} }]]]], "Text"], Cell["", "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"0", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"}, {"1", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a"}, {"2", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b"}, {"3", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c"}, {"4", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d"}, {"5", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e"}, {"6", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f"}, {"7", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g"}, {"8", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h"}, {"9", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i"}, {"10", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"}, {"11", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k"}, {"12", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l"}, {"13", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m"}, {"14", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n"}, {"15", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o"}, {"16", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p"}, {"17", "r", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q"}, {"18", "s", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r"}, {"19", "t", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s"}, {"20", "u", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t"}, {"21", "v", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u"}, {"22", "w", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v"}, {"23", "x", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w"}, {"24", "y", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x"}, {"25", "z", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y"} }]]], "\n\n", "The Vigen\[EGrave]re Table." }], "NumberedTable", CellMargins->{{22, 23.0625}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0, FontSize->9, CellTags->"TableClass Vigenere"], Cell[TextData[{ "Because of the redundancy in the English language one reduces the effective \ size of the key space tremendously by choosing an existing word as the key. \ Taking the name of a relative, as we have done above, reduces the security of \ the encryption more or less to zero.\nIn ", StyleBox["Mathematica", FontSlant->"Italic"], ", addition of two letters as defined by the Vigen\[EGrave]re Table can be \ realized in a similar way, as our earlier implementation of the ", ButtonBox["Caesar cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Caesar"], ":" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"AddTwoLetters", "[", RowBox[{"a_", ",", "b_"}], "]"}], ":=", RowBox[{"FromCharacterCode", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"ToCharacterCode", "[", "a", "]"}], "-", "97"}], ")"}], "+", "\t\t\t\t", RowBox[{"(", RowBox[{ RowBox[{"ToCharacterCode", "[", "b", "]"}], "-", "97"}], ")"}]}], ",", "26"}], "]"}], "+", "97"}], "]"}]}]], "Input", GeneratedCell->True], Cell[TextData[{ "By means of the ", StyleBox["Mathematica ", FontSlant->"Italic"], "functions ", ButtonBox["StringTake", BaseStyle->"RefGuideLink"], " and ", ButtonBox["StringLength", BaseStyle->"RefGuideLink"], " , and the function AddTwoLetters, defined above, encryption with the Vigen\ \[EGrave]re cryptosystem can be realized as follows:" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"plaintext", "=", "\"\\""}], ";"}], "\n", RowBox[{ RowBox[{"key", "=", "\"\\""}], ";"}], "\n", RowBox[{ RowBox[{"ciphertext", "=", "\"\<\>\""}], ";"}], "\n", RowBox[{ RowBox[{"Do", "[", RowBox[{ RowBox[{"ciphertext", "=", RowBox[{"ciphertext", "<>", "\t\t\t", RowBox[{"AddTwoLetters", "[", RowBox[{ RowBox[{"StringTake", "[", RowBox[{"plaintext", ",", RowBox[{"{", "i", "}"}]}], "]"}], ",", "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t", RowBox[{"StringTake", "[", RowBox[{"key", ",", RowBox[{"{", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"i", "-", "1"}], ",", RowBox[{"StringLength", "[", "key", "]"}]}], "]"}], "+", "1"}], "}"}]}], "]"}]}], "]"}]}]}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", RowBox[{"StringLength", "[", "plaintext", "]"}]}], "}"}]}], "]"}], ";"}], "\n", "ciphertext"}], "Input", GeneratedCell->True], Cell[BoxData["\<\"dcnavvuocmqfgokmlpsowsrqiocovirpsiv\"\>"], "Output"], Cell["\<\ A more formal description of the Vigen\[EGrave]re cryptosystem is as follows\ \>", "Text"], Cell[BoxData[ RowBox[{"\[GothicCapitalE]", " ", "=", " ", RowBox[{"{", RowBox[{ RowBox[{ SubscriptBox["E", RowBox[{"(", RowBox[{ SubscriptBox["k", "0"], ",", SubscriptBox["k", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["k", RowBox[{"r", "-", "1"}]]}], ")"}]], "|", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["k", "0"], ",", SubscriptBox["k", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["k", RowBox[{"r", "-", "1"}]]}], ")"}], "\[Element]", "\[ScriptCapitalK]"}]}], "=", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "26", "r"]}], "}"}]}]], "DisplayFormula"], Cell["and", "Text"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["E", RowBox[{"(", RowBox[{ SubscriptBox["k", "0"], ",", SubscriptBox["k", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["k", RowBox[{"r", "-", "1"}]]}], ")"}]], "(", RowBox[{ SubscriptBox["m", "0"], ",", SubscriptBox["m", "1"], ",", SubscriptBox["m", "2"], ",", "\[Ellipsis]\[Ellipsis]"}], ")"}], " ", "=", " ", RowBox[{"(", RowBox[{ SubscriptBox["c", "0"], ",", SubscriptBox["c", "1"], ",", SubscriptBox["c", "2"], ",", "\[Ellipsis]\[Ellipsis]"}], ")"}]}], TraditionalForm]], "DisplayFormula"], Cell["with", "Text"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "i"], "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["m", "i"], "+", SubscriptBox["k", RowBox[{"(", RowBox[{"i", " ", "mod", " ", "r"}], ")"}]]}], ")"}], " ", "mod", " ", "26"}], ")"}], "."}]}], TraditionalForm]], "NumberedEquation", CellTags->"FormClass Vigen Encr"], Cell[TextData[{ "Instead of using ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " Caesar ciphers periodically in the Vigen\[EGrave]re cryptosystem, one can \ of course also use ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " simple substitutions. Such a system is an example of a so-called ", StyleBox["polyalphabetic substitution", FontSlant->"Italic"], ". For centuries, no one had an effective way of breaking this system, \ mainly because one did not have a technique of determining the key length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ". Once one knows ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", one can find the ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " simple substitutions by grouping together the letters ", Cell[BoxData[ FormBox[ RowBox[{"i", ",", RowBox[{"i", "+", "r"}], ",", " ", RowBox[{"i", "+", RowBox[{"2", "r"}]}], ",", "\[Ellipsis]", ","}], TraditionalForm]], CellTags->"DefClass Poly subst"], " for each ", Cell[BoxData[ FormBox[ RowBox[{"i", ",", RowBox[{"0", "\[LessEqual]", "i", "<", "r"}], ","}], TraditionalForm]]], " and break each of these ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " simple substitutions individually. In 1863, the Prussian army officer, \ F.W. Kasiski, solved the problem of finding the key length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " by statistical means. In the next section, we shall discuss this method." }], "Text", CellTags->"DefClass Poly Subst"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Incidence of Coincidences, Kasiski's Method" }], "Section", CellTags->"SectClass Incid Coin"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Incidence of Coincidences" }], "Subsection", CellTags->"SubSClass incid of coinc"], Cell[TextData[{ "Consider a ciphertext ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["c", FontFamily->"Times", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "=", SubscriptBox["c", "0"]}], ",", SubscriptBox["c", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["c", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], "which is the result of a ", ButtonBox["Vigen\[EGrave]re encryption", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], " of an English plaintext ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "=", SubscriptBox["m", "0"]}], ",", SubscriptBox["m", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], "under the key ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ StyleBox["k", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "=", SubscriptBox["k", "0"]}], ",", SubscriptBox["k", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["k", RowBox[{"r", "-", "1"}]]}], TraditionalForm]]], "(see also ", ButtonBox["(2.1)", BaseStyle->"Hyperlink", ButtonData:>"FormClass Vigen Encr"], "). As explained at the end of the previous section, the key to breaking the \ Vigen\[EGrave]re system is to determine the key length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "In our analysis we are going to assume the very simple model of a plaintext \ source outputting independent, individual letters, each with probability \ distribution given by ", ButtonBox["Table 1.1", BaseStyle->"Hyperlink", ButtonData:>"TableIntr Prob English"], " (see ", ButtonBox["Example 1.1", BaseStyle->"Hyperlink", ButtonData:>"ExamIntro 1-grams"], "). We further assume that the letters ", Cell[BoxData[ FormBox[ SubscriptBox["k", "i"], TraditionalForm]]], " in the key are chosen with independent and uniform distribution from ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"a", ",", "b", ",", "\[Ellipsis]", ",", "z"}], "}"}], TraditionalForm]]], " (so, with probability 1/26)." }], "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "left", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "right", RowBox[{"(", "i", ")"}]], TraditionalForm]]], " the substrings of ", Cell[BoxData[ FormBox["c", TraditionalForm]], FontWeight->"Bold"], " consisting of the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " left most resp. right most symbols of ", StyleBox["c", FontWeight->"Bold"], ", so:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "left", RowBox[{"(", "i", ")"}]], "=", SubscriptBox["c", "0"]}], ",", SubscriptBox["c", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["c", RowBox[{"i", "-", "1"}]]}], TraditionalForm]]], "\t\tand\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "right", RowBox[{"(", "i", ")"}]], "=", SubscriptBox["c", RowBox[{"n", "-", "i"}]]}], ",", SubscriptBox["c", RowBox[{"n", "-", "i", "+", "1"}]], ",", "\[Ellipsis]", ",", SubscriptBox["c", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Let us now count the number of agreements between ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "left", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "right", RowBox[{"(", "i", ")"}]], TraditionalForm]]], ", i.e. the number of coordinates ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"(", SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "left", RowBox[{"(", "i", ")"}]], ")"}], "j"], "=", SubscriptBox[ RowBox[{"(", FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "right", RowBox[{"(", "i", ")"}]], TraditionalForm], ")"}], "j"]}], TraditionalForm]]], ". We shall show in ", ButtonBox["Lemma 2.1", BaseStyle->"Hyperlink", ButtonData:>"LemClass Kasiski"], " that the expected value of this number divided by the string length ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " will be ", Cell[BoxData[ FormBox["0.06875", TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "/", "26"}], "\[TildeTilde]", "0.03846"}], TraditionalForm]]], ", depending on whether the (unknown) key length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "i"}], TraditionalForm]]], " or does not divide ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "i"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Let us show by example how this difference in expected values can be used \ to determine the unknown key length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nIn this example we consider the ciphertext " }], "Example"], Cell["\<\ \"glrtnhklttbrxbxwnnhshjwkcjmsmrwnxqmvehuimnfxbzcwixbrnhxqhhclgcipcgimglrtnhkl\ ttbrshvilgwcmwyejqbxbmlywimbkhhjwkcjmsmrwnxqmplceiwkcjmehtpslmmlxowmylxbxflxee\ brahjwkcjmsmrwnxqm\".\ \>", "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "By means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["StringTake", BaseStyle->"RefGuideLink"], ", ", ButtonBox["StringLength", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Characters", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Table", BaseStyle->"RefGuideLink"], ", we can easily compute the number of agreements between ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "left", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "right", RowBox[{"(", "i", ")"}]], TraditionalForm]]], " in any range of values of ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ":" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{ RowBox[{ "ciphertext", "=", "\"\\ \""}], ";"}], "\n", RowBox[{ RowBox[{"L", "=", RowBox[{"StringLength", "[", "ciphertext", "]"}]}], ";"}], "\n", RowBox[{"Table", "[", " ", RowBox[{ RowBox[{"N", "[", " ", RowBox[{ RowBox[{ RowBox[{"Count", "[", " ", RowBox[{ RowBox[{ RowBox[{"Characters", "[", " ", RowBox[{"StringTake", "[", " ", RowBox[{"ciphertext", ",", " ", "i"}], "]"}], "]"}], " ", "-", " ", RowBox[{"Characters", "[", " ", RowBox[{"StringTake", "[", " ", RowBox[{"ciphertext", ",", " ", RowBox[{"-", "i"}]}], "]"}], "]"}]}], ",", " ", "0"}], "]"}], "/", "i"}], ",", " ", "1"}], "]"}], ",", " ", RowBox[{"{", RowBox[{"i", ",", " ", RowBox[{"L", "-", "20"}], ",", " ", RowBox[{"L", "-", "1"}]}], "}"}]}], " ", "]"}]}], " \t"}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ StyleBox["0.0285714285714285676`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0427046263345195775`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0780141843971631221`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.017667844522968199`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0457746478873239404`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0385964912280701799`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0384615384615384634`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0313588850174216027`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0590277777777777767`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0692041522491349514`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0551724137931034519`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0446735395189003448`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0239726027397260255`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0511945392491467554`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0816326530612244738`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0440677966101694895`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0472972972972972982`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0202020202020202033`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0134228187919463093`", StyleBoxAutoDelete->True, PrintPrecision->1], ",", StyleBox["0.0468227424749163834`", StyleBoxAutoDelete->True, PrintPrecision->1]}], "}"}]], "Output"], Cell[TextData[{ "The (relative) higher values in this listing at places ", Cell[BoxData[ FormBox[ RowBox[{"-", "6"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"-", "18"}], TraditionalForm]]], " indicate that the key length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " is 6. Indeed, the key that has been used to generate this example is the \ word \"monkey'', which has 6 letters.\nThis can be checked with the following \ analogue of the Vigen\[EGrave]re encryption of ", ButtonBox["Example 2.3", BaseStyle->"Hyperlink", ButtonData:>"ExamClass Vigenere"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"SubTwoLetters", "[", RowBox[{"a_", ",", "b_"}], "]"}], ":=", RowBox[{"FromCharacterCode", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"ToCharacterCode", "[", "a", "]"}], "-", "97"}], ")"}], "-", RowBox[{"(", RowBox[{ RowBox[{"ToCharacterCode", "[", "b", "]"}], "-", "97"}], ")"}]}], ",", "26"}], "]"}], "+", "97"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[{ RowBox[{ RowBox[{ "ciphertext", "=", "\"\\"\ "}], ";"}], "\n", RowBox[{ RowBox[{"key", "=", "\"\\""}], ";"}], "\n", RowBox[{ RowBox[{"plaintext", "=", "\"\<\>\""}], ";"}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{"plaintext", "=", RowBox[{"plaintext", "<>", "\t\t\t", RowBox[{"SubTwoLetters", "[", RowBox[{ RowBox[{"StringTake", "[", RowBox[{"ciphertext", ",", RowBox[{"{", "i", "}"}]}], "]"}], ",", "\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t", RowBox[{"StringTake", "[", RowBox[{"key", ",", RowBox[{"{", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"i", "-", "1"}], ",", RowBox[{"StringLength", "[", "key", "]"}]}], "]"}], "+", "1"}], "}"}]}], "]"}]}], "]"}]}]}], ",", "\t", RowBox[{"{", RowBox[{"i", ",", "1", ",", RowBox[{"StringLength", "[", "ciphertext", "]"}]}], "}"}]}], "]"}], "\n", "plaintext"}], "Input", GeneratedCell->True], Cell[BoxData["\<\"\ informationtheorytreatstheunidirectionalikformationchannelbywhichaninformation\ sourceinfluencesstatisticallyareceivercommunpcationtheoryhoweverdescribesthemo\ regeneralcaseinwhichtwoormoreinformationsourcesinfluenceeachotherstatistically\ thedirectionofthisinfluenceisexpressedbydsrectedtransinformationqu\"\>"], \ "Output", CellMargins->{{13, Inherited}, {Inherited, Inherited}}, TextAlignment->Left, TextJustification->0], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ StyleBox["c", FontWeight->"Bold", FontSlant->"Italic"], TraditionalForm]]], " be a ciphertext which is the result of a Vigen\[EGrave]re encryption of a \ plaintext ", Cell[BoxData[ FormBox[ StyleBox["m", FontSize->12, FontWeight->"Bold", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " with key ", Cell[BoxData[ FormBox[ StyleBox["k", FontSize->12, FontWeight->"Bold", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ". \nSuppose that ", StyleBox["m", FontWeight->"Bold", FontSlant->"Italic"], " is generated by the plaintext source of ", ButtonBox["Example 1.1", BaseStyle->"Hyperlink", ButtonData:>"ExamIntro 1-grams"], ". So, all the letters in ", StyleBox["m", FontWeight->"Bold", FontSlant->"Italic"], " are generated independently of each other, all with the frequency \ distribution ", Cell[BoxData[ FormBox[ RowBox[{"p", "(", "m", ")"}], TraditionalForm]]], " given by ", ButtonBox["Table 1.1", BaseStyle->"Hyperlink", ButtonData:>"TableIntr Prob English"], ". Suppose further that the letters ", Cell[BoxData[ FormBox[ SubscriptBox["k", "i"], TraditionalForm]]], " in the key are chosen with independent and uniform distribution from ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"a", ",", "b", ",", "\[Ellipsis]", ",", "z"}], "}"}], TraditionalForm]]], " (so, with probability 1/26).\nThen, for each ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "<", "j", "\[LessEqual]", "n"}], TraditionalForm]]], ",\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "[", RowBox[{ SubscriptBox["c", "i"], "=", SubscriptBox["c", "j"]}], "]"}], "=", RowBox[{"{", GridBox[{ { RowBox[{ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", "m"], SuperscriptBox[ RowBox[{"p", "(", "m", ")"}], "2"]}], "\[TildeTilde]", "0.06875"}], ","}]}, { RowBox[{ RowBox[{ RowBox[{ RowBox[{"1", "/", "26"}], "\[TildeTilde]", "0.03846"}], ","}], " "}]} }]}]}], TraditionalForm]], TextJustification->1], "\t\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{ RowBox[{"if", " ", "r", " ", "divides", " ", "j"}], "-", "i"}], ","}], " "}]}, { RowBox[{ RowBox[{ "if", " ", "r", " ", "does", " ", "not", " ", "divide", " ", "j"}], "-", RowBox[{"i", "."}]}]} }], TraditionalForm]]] }], "Theorem", CellTags->"LemClass Kasiski"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ":\nIf ", Cell[BoxData[ FormBox[ RowBox[{"j", "-", "i"}], TraditionalForm]]], " is divisible by ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", then ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "i"], "=", SubscriptBox["c", "j"]}], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "i"], "=", SubscriptBox["m", "j"]}], TraditionalForm]]], ". This follows directly from formula ", ButtonBox["(2.1)", BaseStyle->"Hyperlink", ButtonData:>"FormClass Vigen Encr"], ", since ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"j", " ", "mod", " ", "r"}], ")"}], TraditionalForm]]], " equals ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"i", " ", "mod", " ", "r"}], ")"}], TraditionalForm]]], ". So, " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[{ FormBox[ RowBox[{ RowBox[{ FormBox[ RowBox[{ RowBox[{ FormBox[ RowBox[{ RowBox[{"Pr", "[", RowBox[{ SubscriptBox["c", "i"], "=", SubscriptBox["c", "j"]}], "]"}], "="}], TraditionalForm], RowBox[{"Pr", "[", RowBox[{ SubscriptBox["m", "i"], "=", SubscriptBox["m", "j"]}], "]"}]}], "="}], TraditionalForm], RowBox[{ SubscriptBox["\[Sum]", "m"], RowBox[{"Pr", "[", RowBox[{ SubscriptBox["m", "i"], "=", RowBox[{ SubscriptBox["m", "j"], "=", "m"}]}], "]"}]}]}], "=", "\n", "\t\t", AdjustmentBox[ RowBox[{ RowBox[{ SubscriptBox["\[Sum]", "m"], RowBox[{ RowBox[{"Pr", "[", RowBox[{ SubscriptBox["m", "i"], "=", "m"}], "]"}], RowBox[{"Pr", "[", RowBox[{ SubscriptBox["m", "j"], "=", "m"}], "]"}]}]}], "=", RowBox[{ RowBox[{ SubscriptBox["\[Sum]", "m"], SuperscriptBox[ RowBox[{"p", "(", "m", ")"}], "2"]}], "\[TildeTilde]", RowBox[{"0.06875", "."}]}]}], BoxBaselineShift->1.14286, BoxMargins->{{0, 0}, {-1.14286, 1.14286}}]}], TraditionalForm], "\n", FormBox[ RowBox[{"\t\t\t\t\t"}], TraditionalForm]}]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"j", "-", "i"}], TraditionalForm]]], " is not divisible by ", Cell[BoxData[ FormBox["r", TraditionalForm]]], ", then by ", ButtonBox["(2.1)", BaseStyle->"Hyperlink", ButtonData:>"FormClass Vigen Encr"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "i"], "=", SubscriptBox["c", "j"]}], TraditionalForm]]], " if and only if ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["m", "i"], "+", SubscriptBox["k", RowBox[{"(", RowBox[{"i", " ", "mod", " ", "r"}], ")"}]]}], "=", RowBox[{ SubscriptBox["m", "j"], "+", SubscriptBox["k", RowBox[{"(", RowBox[{"j", " ", "mod", " ", "r"}], ")"}]]}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"j", " ", "mod", " ", "r"}], ")"}], " ", "\[NotEqual]"}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"i", " ", "mod", " ", "r"}], ")"}], TraditionalForm]]], ", it follows that ", Cell[BoxData[ FormBox[ SubscriptBox["k", RowBox[{"(", RowBox[{"j", " ", "mod", " ", "r"}], ")"}]], TraditionalForm]]], " takes on the value ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "i"], "+", SubscriptBox["k", RowBox[{"(", RowBox[{"i", " ", "mod", " ", "r"}], ")"}]], "-", SubscriptBox["m", "j"]}], TraditionalForm]]], " with probability 1/26. We conclude that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "[", RowBox[{ SubscriptBox["c", "i"], "=", SubscriptBox["c", "j"]}], "]"}], "=", RowBox[{ RowBox[{"1", "/", "26"}], "\[TildeTilde]", "0.03846"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "It may be clear that with increasing length of the ciphertext, it is easier \ to determine the key length from the relative number of agreements between ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "left", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontSize->12, FontWeight->"Bold", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], "right", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "." }], "Text"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tKasiski's Method" }], "Subsection", CellTags->"SubSClass Kasiski"], Cell[TextData[{ "Kasiski based his cryptanalysis of the ", ButtonBox["Vigen", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], ButtonBox["\[EGrave]", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], ButtonBox["re cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], " on the fact that when a certain combination of letters (a frequent \ plaintext fragment) is encrypted more than once with the same segment of the \ key (because they occur at a multiple of the key length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], "), one will see a repetition of the corresponding ciphertext at those \ places. " }], "Text"], Cell[TextData[{ "We quote an example from ", ButtonBox["[Baue97]", BaseStyle->"Hyperlink", ButtonData:>"RefBau97"], ":" }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider the following plaintext and ciphertext pair (where the key \ \"comet\" has been used): " }], "Example"], Cell[TextData[Cell[BoxData[GridBox[{ { StyleBox["plaintext", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0.500008, 0.500008, 0]], "t", "h", "e", "r", "e", "i", "s", "a", "n", "o", "t", "h", "e", "r", "f", "a", "m", "o", "u", "s", "p", "i", "a", "n", "o", "p", "l", "a", "y", "."}, { StyleBox["key", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}], "c", "o", "m", "e", "t", "c", "o", "m", "e", "t", "c", "o", "m", "e", "t", "c", "o", "m", "e", "t", "c", "o", "m", "e", "t", "c", "o", "m", "e", "."}, { StyleBox["ciphertext", FontFamily->"Courier", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->RGBColor[0, 0.500008, 0]], "v", "v", "q", "v", "x", "k", "g", "m", "r", "h", "v", "v", "q", "v", "y", "c", "a", "a", "y", "l", "r", "w", "m", "r", "h", "r", "z", "m", "c", "."} }]]]], "Text"], Cell[TextData[{ "In the ciphertext one can find the substring \"vvqv\" (of length 4) \ repeated twice, namely starting at positions 1 and 11. This indicates that ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " divides 10. The substring \"mrh\" (of length 3) also occurs twice: at \ positions 8 and 23. So, it seems likely that ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " also divides 15. Combining these results, we conclude that ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", "5"}], TraditionalForm]]], ", which is indeed the case." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[TextData[{ "See ", ButtonBox["[Baue97]", BaseStyle->"Hyperlink", ButtonData:>"RefBau97"], " for a further analysis of the Vigen\[EGrave]re cryptosystem." }], "Text", GeneratedCell->True] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\t", "Vernam, Playfair, Transpositions, Hagelin, Enigma" }], "Section", PageBreakAbove->True, CellTags->"SectClass Vernam"], Cell["\<\ In this section, we shall briefly discuss a few more cryptosystems, without \ going deep into their structure.\ \>", "Text", TextAlignment->Left, TextJustification->0], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "The One-Time Pad" }], "Subsection", CellTags->"SubsClas One-time"], Cell[TextData[{ "The ", StyleBox["one-time pad", FontSlant->"Italic"], ", also called the ", StyleBox["Vernam cipher", FontSlant->"Italic"], " (after the American A.T. & T. employee G.S. Vernam, who introduced the \ system in 1917), is a Vigen\[EGrave]re cipher with key length equal to the \ length of the plaintext. Also, the key must be chosen in a completely random \ way and can only be used once. In this way the system is unconditionally \ secure, as is intuitively clear and will be proved in ", ButtonBox["Chapter 5", BaseStyle->"Hyperlink", ButtonData:>"Chap Shannon"], ". The ''hot line'' between Washington and Moscow uses this system. The \ major drawback of this system is the length of the key, which makes this \ system impractical for most applications." }], "Text", TextAlignment->Left, TextJustification->0, CellTags->"DefClass Vernam"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "The Playfair Cipher" }], "Subsection", CellTags->"SubsClass Playfair"], Cell[TextData[{ "The ", StyleBox["Playfair cipher", FontSlant->"Italic"], " (1854, named after the Englishman L. Playfair) was used by the British in \ World War I. It operates on 2-grams. First of all, one has to identify the \ letters ", Cell[BoxData[ FormBox["i", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["j", TraditionalForm]]], ". The remaining 25 letters of the alphabet are put rowwise in a ", Cell[BoxData[ FormBox[ RowBox[{"5", "\[Times]", "5"}], TraditionalForm]]], " matrix ", Cell[BoxData[ FormBox["K", TraditionalForm]]], ", as follows. Put the first letter of a keyword in the top-left position. \ Continue rowwise from left to right. If a letter occurs more than once in the \ keyword, use it only once. The remaining letters of the alphabet are put into \ ", Cell[BoxData[ FormBox["K", TraditionalForm]]], " in their natural order. For instance, the keyword \"hieronymus'' gives \ rise to" }], "Text", TextAlignment->Left, TextJustification->0, CellTags->"DefClass Playfair"], Cell[TextData[Cell[BoxData[ RowBox[{"(", GridBox[{ {"h", "i", "e", "r", "o"}, {"n", "y", "m", "u", "s"}, {"a", "b", "c", "d", "f"}, {"g", "k", "l", "p", "q"}, {"t", "v", "w", "x", "z"} }], ")"}]]]], "Text", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "The 2-gram ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"x", ",", "y"}], ")"}], "=", RowBox[{"(", RowBox[{ SubscriptBox["K", RowBox[{"i", ",", "j"}]], ",", SubscriptBox["K", RowBox[{"m", ",", "n"}]]}], ")"}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[NotEqual]", "y"}], TraditionalForm]]], " will be encrypted into" }], "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[Cell[BoxData[GridBox[{ { RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["K", RowBox[{"i", ",", "n"}]], ",", SubscriptBox["K", RowBox[{"m", ",", "j"}]]}], ")"}], ","}], RowBox[{ RowBox[{ RowBox[{"if", " ", "i"}], "\[NotEqual]", RowBox[{"m", " ", "and", " ", "j"}], "\[NotEqual]", "n"}], ","}]}, { RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["K", RowBox[{"i", ",", RowBox[{"j", "+", "1"}]}]], ",", SubscriptBox["K", RowBox[{"i", ",", RowBox[{"n", "+", "1"}]}]]}], ")"}], ","}], RowBox[{ RowBox[{ RowBox[{"if", " ", "i"}], "=", RowBox[{ RowBox[{"m", " ", "and", " ", "j"}], "\[NotEqual]", "n"}]}], ","}]}, { RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["K", RowBox[{ RowBox[{"i", "+", "1"}], ",", "j"}]], ",", SubscriptBox["K", RowBox[{ RowBox[{"m", "+", "1"}], ",", "j"}]]}], ")"}], ","}], RowBox[{ RowBox[{ RowBox[{ RowBox[{"if", " ", "i"}], "\[NotEqual]", RowBox[{"m", " ", "and", " ", "j"}]}], "=", "n"}], ","}]} }]]]], "Text", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "where the indices are taken modulo 5. If the symbols ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["y", TraditionalForm]]], " in the 2-gram ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"x", ",", "y"}], ")"}], TraditionalForm]]], " are the same, one first inserts the letter ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " and enciphers the text ", Cell[BoxData[ FormBox[ RowBox[{"\[Ellipsis]", " ", "x", " ", "q", " ", "y", " ", "\[Ellipsis]"}], TraditionalForm]]], " ." }], "Text", TextAlignment->Left, TextJustification->0] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Transposition Ciphers" }], "Subsection", CellTags->"SubsClas Transposition"], Cell[TextData[{ "A completely different way of enciphering is called ", StyleBox["transposition", FontSlant->"Italic"], ". This system breaks the text up into blocks of fixed length, say ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", and applies a fixed permutation \[Sigma] to the coordinates. For \ instance, with ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "5"}], TraditionalForm]]], " and \[Sigma] = (1, 4, 5, 2, 3), one gets the following encryption:" }], "Text", TextAlignment->Left, TextJustification->0, CellTags->"DefClass Transp cipher"], Cell[TextData[{ StyleBox["crypt ograp hical \[Ellipsis]", FontFamily->"Courier New", FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox[" ", FontFamily->"Courier New"], Cell[BoxData[ FormBox[ OverscriptBox["\[LongRightArrow]", "\[Sigma]"], TraditionalForm]], FontFamily->"Courier New"], StyleBox[" ", FontFamily->"Courier New"], StyleBox["ytrcp rpgoa cliha \[Ellipsis]", FontFamily->"Courier New", FontColor->RGBColor[0, 0.500008, 0]] }], "Text", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "Often the permutation is of a geometrical nature, as is the case with the \ so-called ", StyleBox["column transposition", FontSlant->"Italic"], ". The plaintext is written rowwise in a matrix of given size, but will be \ read out columnwise in a specific order depending on a keyword. For instance, \ after having identified letters ", Cell[BoxData[ FormBox[ RowBox[{"a", ",", "b", ",", "\[Ellipsis]", ",", "z"}], TraditionalForm]]], " with the numbers ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "26"}], TraditionalForm]]], " the keyword \"right'' will dictate you to read out column 3 first (being \ the alphabetically first of the 5 letters in \"right''), followed by columns \ 4, 2, 1 and 5. So, the plaintext" }], "Text", TextAlignment->Left, TextJustification->0, CellTags->"DefClass Column Transp"], Cell[TextData[StyleBox["computing science has had very little influence on \ computing practice", FontFamily->"Courier New", FontColor->RGBColor[0.500008, 0.500008, 0]]], "Text", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "when encrypted with a ", Cell[BoxData[ FormBox[ RowBox[{"5", "\[Times]", "5"}], TraditionalForm]]], " matrix and keyword ''right'' will first be filled in rowwise as depicted \ below" }], "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[{ Cell[BoxData[GridBox[{ {"4", "3", "1", "2", "5"}, {"c", "o", "m", "p", "u"}, {"t", "i", "n", "g", "s"}, {"c", "i", "e", "n", "c"}, {"e", "h", "a", "s", "h"}, {"a", "d", "v", "e", "r"} }]]], "\t \t", Cell[BoxData[GridBox[{ {"4", "3", "1", "2", "5"}, {"y", "l", "i", "t", "t"}, {"l", "e", "i", "n", "f"}, {"l", "u", "e", "n", "c"}, {"e", "o", "n", "c", "o"}, {"m", "p", "u", "t", "i"} }]]], "\t\t", Cell[BoxData[GridBox[{ {"4", "3", "1", "2", "5"}, {"n", "g", "p", "r", "a"}, {"c", "t", "i", "c", "e"}, {".", ".", ".", " ", " "}, {" ", " ", " ", " ", " "}, {" ", " ", " ", " ", " "} }]]] }], "Text", TextAlignment->Center, TextJustification->0], Cell["\<\ and then read out (columnwise in the indicated order) to give the ciphertext:\ \>", "Text", TextAlignment->Left, TextJustification->0], Cell[TextData[{ StyleBox["mneav pgnse oiihd ctcea uschr iienu tnnct leuop yllem tfcoi \ \[Ellipsis]", FontFamily->"Courier New", FontColor->RGBColor[0, 0.500008, 0]], " ." }], "Text", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "Since transpositions do not change letter frequencies, but destroy \ dependencies between consecutive letters in the plaintext, while Vigen\ \[EGrave]re etc. do the opposite, one often combines such systems. Such a \ combined system is called a ", StyleBox["product cipher", FontSlant->"Italic"], ". Shannon used the words confusion and diffusion in this context." }], "Text", TextAlignment->Left, TextJustification->0, CellTags->"DefClass product cipher"], Cell[TextData[{ "Ciphersystems that encrypt the plaintext symbol for symbol in a way that \ depends on previous input symbols are often called ", StyleBox["stream ciphers", FontSlant->"Italic"], " (they will discussed in ", ButtonBox["Chapter 3", BaseStyle->"Hyperlink", ButtonData:>"Chap Shift"], "). Cryptosystems that encrypt blocks of symbols (of a fixed length) \ simultaneously but independent of previous encryptions, they are called ", StyleBox["block ciphers", FontSlant->"Italic"], " (see ", ButtonBox["Chapter 4", BaseStyle->"Hyperlink", ButtonData:>"Chap Block"], ")." }], "Text", TextAlignment->Left, TextJustification->0, CellTags->"DefClass stream cipher"], Cell["\<\ During World War II both sides used so called rotor machines for their \ encryption. Several variations of the machines described in the next two \ subsections were in use at that time. We shall give a rough idea of each one.\ \>", "Text", TextAlignment->Left, TextJustification->0] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Hagelin" }], "Subsection", CellTags->"SubSClass Hagelin"], Cell[GraphicsData["CompressedBitmap", "\<\ eJzsvTusZcmSnlf37H3ep95V/bhz78ydIakhRephCaAcYQxJAAE512xDwBQh gCxAkMCiV2aZ7bbZJs0xx6VJR8CY1x2TZpvttk7uyC/zi1i5Tp0aGoKAa1Tt ddYjVz4i4v8jMjLX//bX//7f/B//51//+3/7r//6d//rv/vr//vf/Nt//eF3 /8v/9e/uTx1+9eTJr/6fJ0/O/vffPWnHvzx5wn+XT3755ZcnF09+/vnn01H7 x/H97/F0cPCpJ2flXPt3Nm8+pgs//fTTxaKMY3lt+9VxfcV8pL62/X/e3lJr vqlmnGv/X6VXtn/ted13uiHacUj3Xu12x7E2JR68HEX7MucOi85XM85mV5yn 51evbmX2bjg9d96r6q5Zd0k7utobiT1BGIP+5Dzdmou9/VyxqUvOepdxniZ9 rrfv7zn0/qS17fcY3dcO75bdX8uuXd9FTk2LYbhIJW2eOqSnzqYsHeubzh6j BdvLvd4q+XzzePRnvNW1HMUea/MtaBKm02907+WDI3m26qDSzVX/qsXptx70 Up6WhVnYgKkqSIKHqJ4bwrurEGdDhQ/jvtXoHlYXVtZqpX7Tgh1rb6wqdiON 5vyvTkdPSq3OFy9aGeedHj3qRZxbNnTefJ4K4Pph0Yrzhc3bSGFu5HGO62W9 /0H75sZsDNfqwuWiwpdVOeqbqxm0gpxJ/vZ6wGbu/rfL2jyKZ9whub3P0nn3 RzV05bdq/LZRR2ultcuikapZO2HYIRv3iolTx0dJ19Vqbbp9IsauhSv9slT5 WcwCK3dV/vxhW3C+HAq9/yL1oJp33sdk1frKSKaN3zIaF4sobcbt5wEPeuys m/CdClaQrvo4e/cindPxqo+ySB9rkcDcqlsQmNLkTa2GQE/1/zyD+bwxqUau qMSCDVRy0f9dPMYyPnmQCq7N8OVCpjg+1ftqoS/DQl7tVYjfVQesLP+KzqhK 54uR/3k6FaXy13kgl6iau1IFVN69ZEKfr/xGpHc41YqEr3t1Q5Uy3q0HfVX8 ee1Gnd3SuBWGuiWHqYI3uxX6TCdOY7Uoezl8j1Cp0N4Hh+x62RPVPhwWvfbQ 0G8auu5wE89KF2x2sym7SPfr+Ngv7/iUtRP+83/+zw+Kw8Sjh+p00LWl9ei4 B8AuZHaNq7LA2RYOf25rmI3W2zHKqFTHccVUU1ecL27gpkqprSr53H0V65v8 e7N4qLP462IBe4P33YZ1W46zLY80ysdpRx/onpUDVVw9ZGNKxVqebeOeL1r9 89qsrwYoVeexXlcFgKJMa5j/GaA835iP/T5atm0V93nAdI4+9CumOfllHyw2 XHlPr2a5a3v593//99vqLMzKw/r5sJXfu++id2IRoPPZ8Ovdhn9eXbeCUAV0 RfN3zI/t5+ciV4+ThY0aFVGdg3o42fvUuRVvZymPqsbiFa7dRW/0Tt/NRj/I dzc1ORnI47jh9OZn7Wgd63gwgPLZuMoc0Mdh/1JTH9EFpSa/POx6PBRT+dKQ 9667OkNc+0z44gGTUCvwWV9qFSJIN1S2FBdyzeOvn7e0K6voz4lePEpiaoAs mYCHXMTrdH5PDG5HCx9jC6MqOw2YcclV3G/1RA05le7ft7oPacWqBQ/HBdb0 fSuzqeUZw+Kyo1WDd27jDZ4PKZc3Qv6oEKzt/GrAN1GeB+3G5+e39s+ti75H gBqv3kw6rJjhF0H2qdzrL6ntyXL/Ko7aySefYeoELFb3fEFsmym4HamXSO7M zDw8QJPr7CrW/nxhlet8bn9Mduz4g9G0Lw3OZ8JQ5kNWQcSHRHI4MOdLrZHh f0ys47PBqDrZPHtyVxmrRzZk6biQn/q7I3r7CrUBGMUvPtODK6F/WJGqssS0 6C8PY/HjXd2dpo/J13HrvV06W7VjpQ9Z5h5jmea5HLWWhk2ruDuDUQQ0qddh 3dSq3rOsTRhzvnt/AmItRZuHUE7JaO691QCuzGbY8D8a4z8aY9fwj8b4j8b4 j8b4/zNjnM/ePF6iH+XjfcYjeWCeYDfH6PMiMUdiFXi5XU7q7k3gznjYo4Ko O17+2q3dTODXolcPc7wbYtkp6+oRMria2du0qOasRGWWt1af3vVZCcDWAqwK /kynraVh//4ywqvgIT139WUi0B/fDeCerR7qI/JYAlCNU/+tDWZc5xTdw9jx 2dH5gg6uZf2k/KM5HVTCNPtt/dIQ0d68BqK1zOVZtS5XZsXuZuLYfoRrYYW3 4YrHtfHhc2u12+exeyGxHfjbn5b4LE3bHZc9NdjBo11F3ExeTaP5hW1ZW57V tN9uNtZDEnr4h3dYdZMeEoo5yA8A0Z75zjX+AutfPYbSS49LNXloSKyxZ3sV XhH8x8Rv1zKRn1sZ3YcA/0vnUqo++Z0PpBeVqj3ITLK7N7X+Id92ZByszO1D aP950zU1d18nP0/+5rzEqp41lNx+n56O1nN9n0lNfFyDZ3FZIVam5HJx3576 Pmi/d1yiMrx7iRJTrx5y8X82b/oHPLINv+wnVWzm5DXvsOU647ndGZJNh+yR tAeZzcYgrczQZ7yHy4WOZk347IqZh9T8sNKooSmPDaz8l/l6q/74L4gz/LLj li2r9oCfuc4H/PlnTwx7AHdswQoDf9rmQa9U2SUtwx7TdnzGFD0qqemhnt+E JfeW+8yHvmjO8Z+fjpbGcRVO2Q/3LrjXF7PEVQVX0qROeSyMuduqBa4jWSIP K4nZn0Jdj/jSsbRpL85W9Ok67aL+Hnaf/3KB/dKclFSH/UTeRznTj6M6P09C txsf/Mw6tR12vB9S+2ymyE4J7d9O/G4VuNjIxEPZrw9kfpY03qwWD3Tb7kKp RwXaPmc+H1/SQpuX8vUPMHmjov+w2OHdorgXi3Nx35PPLYB5OHC0U5U+rA8a k2vfuZH/mTiahcz3r4zKMhPxkYK7N1YbU/5IYrDXBr9vJc/7E1JrKrv0N/dW +s1rVccesWz1MyEgV7Q0tEbEd4TiYff+MTX8rLqsEnT3YsUPLxLYB7CHZ4Ef 6KaHnMMvX4Py0Fh8wQRknNpfU/MZ9V51HX9H0ftLrR8wRRcP1vkzMa4Nsz7O jvnCMOrp1G7s8LEh3fpqd8S+9V7R0CVVf4yo/vLLNsZVzPNnVhGubc6xjPFK Dn5Z+/UMTBXpy1SQhWs1NfrzzyXitxDO/SF/2ElUpbbrPl2ZYnZmwvPKediI /gOTUMtlMdtmbCzclPh19vJWHqdM/7x1GTIy7C7EP+RXlyDCQjR2+u9q8fSi 8fuTBp9XyS/O09imq6zyfUobP8MaMol5IPQ0H9nMQi5Da+X3oEeZatsZwhQ0 z2k/WyOQDdBjFmQ/7CTON2yb4jrvQN8qz+H5oidft/83M2yrGPBD07+9Jqdk klzljZiO6Piu77sbcnrMnNpOosIq3lpl80EP7+FMpy+ct9khYRtIWNmrx0YB d0pNpvAxfC2P8Ofvt9Yi5x6UhyaOdgTiMetvVqPyhTx529JHxRQ+85aH8qA+ 4+PETVn6VkK10nXPLiZ79lB1F/mINm+H/jabwlT25zzRaXX75QTpq1e62IVq r/Y30iseM5E5BfVRPfP52TVFR85rhU5/ryTit2t5i6o/2fFslqkUs1o5YLma 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 lSZRmdP3baloPJCoIEkXqPMxyy6HCY82OqEnSbB8r+VxLRnB/Fumh/1brU/V uisvC6J12+FpmuwrVR53OkSsj4n3IfXf69ZbtPDJesLMsckJfjAFj5mx1p9r ftjnKp02xZJJRdUkZR14HhGsoXifeVXHyeN81HaK202ly0F7kSSFZa5ECBW+ Pzar+eNYQjICJoAltM265GKNSLmfjU3NCvEyhCMdKMio/aRR/OKFE05lITus jgfcN87ZfedbYgo30iz++M32M4FXZpODsnvkkRHzShLhYHBfXJyxkoptom27 YcXtgNlEIB0Vir/dXFwULZwLFkGBppSP+wKiYCLrdUCtiMiM0V81z8GZobPb 37X+iae7bpolQ7Rejboz6QZ+eL58z2VrtUwndDgytlrW2dqHs5iWu3ztlHlt 3PmyOo5/I31j7CoUk/aykUFSfGskaBzeW6tq72nJXriX4wTsQVTRLMx6FBPD ZrLdBBuzBqSMYRipeEw27AdOFTA1idOXJSlIh3UHAN4pD8yQOI4/6JxeFB4l NnHg4hj9exyUFxmg1lu0N9Nxrsp+LXkFY/FpnPOylCqxM8wKASJsK7Ez+I6s MZflN4kHUCzfmbbRRwQFGBY0j5nATRWnuFpe4rvZM0YVdonJ6cUWRH4wR5iy 4TySIgF5lubnT2yZfGplZlglQxQOr3XAmtTgV/XW/IQfkCvTf9gSb20VZCnW AvReT4OGQlXMpTDxgFlZHidm8o6XjQvl+qKPXjdtv2oktLiTLaGEbOP8KORe dvBiU4vHtSzdyFPIREgMEFlhQLCV7mHGeud5qyx6DJeP6eSFsCSL8DrpnCQq MLP5hWTpWW3UBCzIE5tJT+UrvS4mcKcmQssxsbVfkQM1JmGu4DymP/WyEaYQ JyBymDijN6fIpYm8bqEDuoRuAHRv3X2YsnNXnp07jTcwYfGpYpRzm05zcsTJ aCn/om1h66sVU+my9GBvYy2sxt4+mKluzxi+tF95DO9h5vkfCl2kl5MBR/uh F8MbNrF1kUKe5hM1t8RMSBxe125aPgBA5GniSRneDqKp1CSz9en4XtYfplcb c7xgPxDc6fEa1JqhjLNzbX9hu/crOyhn0RGKgPJ3cwHvm3/j7DgHf8TZaROD 66rMigpg3IbUJU1ybMl5GxuQk90sAgL+4mO5jOgrClmsusheN3kTVqcs2iCE GMeyF37TVCSTnb8hkFhq6+IP6DF0GBPcoUbfbxxnZzR+wiYZo6cu+E2pTswr 3A9RDkDWOvPlsbSUZxABgAvAP+LrF6NfMDID11HEOJ4Cz0A216cqHRkn/6e6 FC0IG7d6MTajxsg4Acxea0xmIMYC80q2DjiOweY64KkN17D6h0QM8dfrage9 Seo0OYCkGjpnnvjTBD0zxGNCYgZy789CbEgCqwJg9Ud7vDhjeMiKMsXF1y2L BgZ8qIUc2IyWIU+rH2n/iiyXF+sWQFMImCmSdGyKSTnG39l0XMrYyur6FjDI vM+vn3NQNt+kH33663YgcnQS/zpgy9Q4sKEBG/OLsDzYEWuZlEemdZMFmvYo 866Yr0jLNJbHeuvhIR+GCQMuxL8PW/Mfy+mxW0tgkzguHSj3+LudzroZx8iW ySFNM8ObjfmoitrHStsZaDqNcN/a3MmeENTAEQNsqkng3tDRY4qlOr6uYL1l FOC95dSkKDNUIEwUjleFP11yENFlHER3VToCuQFxAnDNC1tR0wynSY7srP/D mL6mFbAUEpe2WWE5WIuv4SwSxhnnk4m0bgyG4ojfMOO0H0UGEqdLcSA5h3cm FvQcMTGzkYnck3dG4AOxwo/w8Q25xsHbxoQw5g7HjwawOQDt/NdRXROrnAId f12VmuMcWjE15uuGDOLfXoY9fW1YZNRh7evE1YU/85ZT2ANQFM4WAMMaedxq D5LbXA7N4KWBXWnP6n171vTiGebEL4TQ2E8i/huf69oXB0mshR52jo1yaS8H s+Q8HHND8TdwlN+fxvkwnm/66Gf2VDhU2CEtQ7L19F88SWGK9BU7u8YgfmWx yamCLAChkJ2PQ3U5PdCRp9Ft5ESAzD6NCKNjHmuNM9T9+vuSU3wxatCo2EzR Rlsu5b9s2y7Zt1EaWHOHfhorgxXuGHoFabJkWBWkg5GmC8zErIZzgpExfy/0 io3w6ylOkx7Q3a48WvmScZt2PutvwQ1wLsoxvcr49l1zK+If96GFDlfCDK7x WDIUqTqgODBbUVifxiW84dDlFP2wZ0nLMQd+uhd1VPikczEOo8UnNhhh5zuz DYi2Fhf25P86NstNtPimBa7F4VfnQWnR/DUVdSigVOKvGgawfwP69njwO0p8 y66Ikx6LKuB04hvxSQIPb8Q5P86F1j2nqYDuDLM703IVE6plIpprzKD0Qvx4 XVrX7pf8pLWApt2ICWFy9O9bEMIjY8vRjEw6GQZ2DGAi17s2540j7W2CsPdK wDx93zMAtzYAp7YYcUb9Elejp5j/OUY5WxBPAzReHjbdmnOIOjXsvQz/6XJ2 zKEP8J7xCVneEHf8MNQ/GoZJhvFpefl3jRRi9sP8cGtiqGzi6KpqJMNvlE+8 2XVp1mgNTD40x0bvbI/PgB/0CMAPxwOwhHAwdcdUTrnve4aZQp1rXOcuCQjR SEPLDuhVqBhFaDBYt+ng5bF4u4kWrpu2d6RzKLv0En5dyWnMbvcjOo9hchiY JuKSo9CNghFSSBQQworoUxMUQrttbaebiCcp0SJPfyiChss4BdLIxg9xc50t RgH+k0FdkPzq60pyx/y7qoiWgyG8BcoOuL8qvYEaLoappddXOotZwCfJHiPu 3ACHA1fkWxcpFSe9KvVvrgh3jDTB+MSlhscZJoEYFl5Rdka5i+8aXo9P1vZQ 5n01CUbOGEkG6QsL5I/VccMmM5zoxInt5xBXjCJ/eFsyasfKbrA5I5pmm+Jj 68OyAWkWbDIc5OBeWNjo2u93HIXmABzKAUi9n1gAfT6SqlqMhdxHe08g68ra SBLAmT42JfmGufELQvDfqKkRP97UYABcsAeOv34cFkyJnpVOm8zLdSl/EmPi CmzJL1TlPJSITjV4fRb29TLLTUY2oi+OvGq5TswsuGyLKPw1umzkerHwiDdh yFcGdXqcr1tEPG4DQQGOjkeihhGHBf3XEiNntG1YLsvCxGmghrQ1f1vSxT9T 5LAOnvg0Ae2JljZjwUy3ofL6jB9i6W/8MDNBUzHE/zdNe2pNX4v45VT6nxo1 YfrHTAi9zmvQFPPkvBKGAhRkiw6W2Vv2kTRWMgEIi7uNtjmngVlK0mAqhczG gdiDWsLo2Amhn1YO347GaO/qz0/25T9WHBnDZfaG16OZbC9E8jyvFucSKDGz yiuiy7BIlg50H9aJV3ccCkbdlUtQboiA408L+WBbUOI22nYo1D8XjYI0zHhy S7tmZXU+f17XRZkKMhfGsekh/rClm+MQ8Hamh55++waB/3JQQ6zu4p/HAD03 tPJ2myThY9RflZvmEBBjQaqry3wQ1BznEUfuMbh4zZsWT4P4sYaP7x/H28Er rPwXloAILtQM2n+glLzk74p3AXmCViEOeUOUAcUp4u3oOSY/53kxNK/JtXDT Q8ouBhUH0FRkqAl9fMIFbZg7/ngouOWCH0gLxn0NPO3lDuCUsJIKbZ2uYHak XS4lpOclL0sb4gNieR1BtCZljFObJ9tFs509xVunQnpXTUPg0eLmnBwa8aQy DC/wOh/N24GRmVeZLHZbTQKUWHvx6j/GIuj0763T5xSeoFO5Yqmfvi8nERPg YHU8IcbJMXSoPnxYVD9jx2Pte4EvndJgupG3sejlFXHmb1vUhvvC8qDjQQqE bUmuYQY4JkXsER0CgIlPdHhCgCyvicwyY61w0e3Wmpi0mQs9WHrPNYeecjAu Gx8lUO997qTwqXQrD6OKyfGk1R4U3z3V32rluAQtawGSP7e3C9deItDJduCu lnCvC0tYMweQTKczdOPrGlO6h9lCspejYIwROgqaNR3gy8IAVn9fIm8jTrws T5KMy7FSHRNgZH6vNwJlk4DqGBVIIRmfaEWiW9zsPPZ3pVaQRFANwkLTsBEg EUAqvg3D7CKBjn9ZciWUY7/lxOLOiqGeHL1ue8I9scIX6hPPGEwkfCp2r2L6 6pMK2o4qOdaPQw8mAjoW+z5AReYf/aaetibmoeSRO/SGlTuf6EOjI7uI6C3y L6gTiFx//qyo0OvGNHI5wS4PCnKHYaeZ2Sk/ULHl2FJ+BaFpeuYrpGNMk8gW ds4iBTxwJy0cDCLLWzFCSb7P/VCd/pnCfFcED81kYA0wJ7cUrbothUMhEXc9 03jLUkgkwuhJLgr1Y6a5dFqdeKHfFkGEf2hsjFziTVjObQWNQJ0R4XPt/lLa ifNthT6PelHGBhiBNbaQQ/2u7ss/n2smCL2+/m6n8TPV5O/rtgZyqAmOKdK4 VxjxY4f+rqRmlwuGBG+TgEsqkkTU8AjRAu7DlmuYbrLtWSsLozz+zmW1p2JT bQovhtoncDkodVh4I3/eeW81RR57U1ILoABIYRacl0/gGhUnVjVb9bEsB7rH AVAk1OyGZ4CllNReT7zjgIyG+VNSy8u8K3EF8eJaWNTjzEn2zbhQVRyJoXhV SsafYMi4DcKhoGrN7gqxHBr4PQzaG9ed8R8QgriGNbnzblIn/JE97f7XMsLo X+eGOTK76m0Mo50zyzqvxXGAFhXaDXGRBswNXBvdYX/FLBL2RQlMLBRFCHOx S5x0W4QPU5DBVFCy8lvQXbhHRuKb4c1b4j3zuAWwIqQXmlZzFNKuYWgGRZUP fij/zWm5/tur09BUUKte0mLoXtAvyT6S4XIGxLHpf5nU90uNT05XjKqsHiKn wJJiDH3fdVpHTq6tpFqNP2VtnpI+NzVC05V1iS/3ZZCARRhBsAYyP6boXk77 XpQ3SzePKf6uiQhdB8DHoYyno8RYFWSeEJC+jVD8cF24zutPEastV32u7rTL Ou6aAZZjeQcD46aa/d9LZtnhYK1T5dogWBgnsTDzsBN2NuNvMrOZrZzDSKBl PAXj3iv7gNV0QcfoBLSf83c4VykPJidSbN8VSrJiRX4setgWJ2kgntgaVeEg XjACeBdZSiV+e93MAObKWA+ZhMdBIeHkpDMV3441KkNHI7NxGNxDKXfQvjEi qh3fiYw8R4zpaHRAqcSPNZ6oBBtnU6UgYDqOmYbz65x32CTqI3qGYrBx0cii BDKOYHTc9p92vRmKdZrpQUgpWsjUIR+Ol0PdonnoN+fxMbdIl3ItsRWXcg1g If3BaMHLpkA+jXgwx5xjC/ZGN2fHxV+3jd2i04m8UQASombUmmaNwArnCVF7 LyE5gqmy7xtLzlBZISlwGb8fBkDxVKMV0z+KC3999runqR0djttg2VSYqlpj fjhNeNh2kJ7U799Zz79vjCpWF6wbM5unuaasCUUQC9k8STdEu+4qIIqiF925 fULqpQ6II7MysddvcJ+n52cqz20pHZQKU8v48xPL4P6phpHQBNr+czLj299M CgictTIG5/CYlQLDl6HXeEt60z426a20A+DimjgX06Vb92NLUbeXunq3DRkP 9Mg9qO2yrgOEFw3tAmB1WkRy/XHmhzIMDi2u4EyryIpgh5FyCh1m9k8sJ87i 4TyeiKaXJHNrw89G2fwcKwt+oibknOoVrkxqmPuRWOZXRiEZx48xTSb1P9XU xdjTLHqB9AcmDGKx9/ZoGNs1RpJeM78YI0AziTvFiJgp497FMMWBy3LUcCfG QKaX/VhXGhtYkJEbxwwKnjw2otMktAkTZjja90nkcuVzX5g1vdlow0NTlyv/ QV9YAssTHjWxeLzfzN9RuZs9yVwBk4rWvDw26+Ml5WPmzdGjn35iE5LfNWrH mh7T5mO4LTxvpZGQVASbV6HN8TcmOQbt3XO8x3lh2HdNwzJMcXPvTREPiUY4 YuuFfXHtyOFljYUDS6b6aDO2xNNkE9244KrMFbEDgoWJGJ7O2XwBtrR1p6yD Yx7QnCEDDZ6Kd4onKLJBEhA+gBP6HIyC7QAazaDZoSZTouC49lR4n0D6VPb3 m1K2n7kCe4v+J3K+b+pNGQ13NfN33dEqmx7/f1/xNHNMPNL2htdh0QLZBvxm gIJETaQXI3ood2ii/blrsMttZCf/XakwusNEtV14vkNt4GwgbtbKcb4TbUHc XtFUiDMe/Kp5dp59NgzcgiFoofAkEbyiAncqldCbAlawavhAYPWvI5rK5MGV AtoMR2YgijjytlSysznA6LZV2CT8DPveMxQfZ7+pUaYiGfn7wCxbYdbemWYb Ae7DGGbY4kwkyTQWLqXXo8nx+0Db9CbuPeozoXBOpRU3Eayw+67pZCKJTrET g5iMWejiDUA9pHpUhJiznQ7jsWhJ84FofRQwlsK/j3sw68k3sJthjJGhpXNj 8Grn2FUZCJyGyzZm2NWNFIyzHqp1mANEkE4ncgYHnZRmNPDYQitFGM8cA3vw jNnF4JaYJTaHALqn4x/EaWjYEyHfF76ifwwvwVhA9i1XPlr+j8W08Y8lnmgD /BzjB7u56HrY0HWVn1liJABl6OWmNM94AkhlrDCdiC8tNgA0WolH2pI4J6UT ySNFl6ILNhD8zSqu4jy/KwRLngD2BXsel5MrYGWJ1kG7xd3Q6XTvp1a57qaV cXJJKWQkEWJCPYbNVCEBKfgyWHSCvI5Q/kxm1qFImOn7H5ofjltmwD9i0Akt AMgJLVKjAOUcdL6YGuVYIjym/8VIaeZd8R7Q2kPjs12RmUtnn1oC0YHACKQS LkL57Xf1XIuFrddPI6Cd4jjhE+ezfRjz3MwUjjbf2eDWNI/CcW1aYA+AyCuc 1jKtuaWjMT8N+gwp/7Gud3TBXiH+L1bX8G3lavl9YqFUjaiO8Q6gUDl4Q1Q+ nFHB1jg2BPY2MP72bHzeU3df79iHPTtyuQQRHYqYvsY3tnfNIjk3Z0kotr3R tqQksjYO2tPDivon7ibgdFhCkdP8PjSazhLirnaXThR9KnMdn/gPeyWU7sex 7qumFFtaDCXN7ONvgWB9n6l2bsp2rUE8T+cUm/dnvhL3otvRIogR3li0w3gj up21Pmudxmxb/P921ycz5LHD66iYxXZq8V9ieUZ8vakbgj5YSILpSV2VFpCO dBIJENCIJeORceVNaVqstsEwL5Cv/H1ZQjoMIXIaOXCT638Y65LhT6yTV3QR 56YvelnusDTUVPFX9UjkAUuYXlh8e1mP86vABnoszLhOmcvGxLlY75Tpd83f 4BUclqc9PIdXxQNj/fXoqnzjD2de14qVHPpYFf7KxahrWGqBIJAza/0MvGEt v9f1p7CkHUSvM4P8prY7cyYeamCLAphrB0bGx7qML8HedfWR/Q76eGPp4stl qRP6oexZHLwtj82Y29podCcrRs2Swd7krT405YHAIdfI8IocHcfgceZ5n7p4 b0fxt6uB2bwW8ptcI5NyOw5dEKrDa3ZQgAlvUj+NTzTnfUkzv6M01oCNmUbT N9Zqk5dJ3Ldil0qM2CzfG/UD0pSt+s7j3obI8TeQN8gSe2Ep9zANpj4BZhy4 a51kymCdlzM29FiPR4Tx4819hUCTzlU+xA+zLDUTZ6gMb9eo/kr/574ZEcM1 3AMmzjCu5ME6SGVH1pwgPiJkHY036gWeAF/kXyYBdt/MsoXD3j9M0lbiOXUF 0ze1eBoomJblSTUc2YFpFTBgOCLkc5XuGWeCQj5TTe6hwVjmLJDXNAs4rNz1 TPS4qV7in40kvcy6aBgoEmBHkGFvEze8cNOQOcXjjJdNp/AO2G/n7a5UaQ5y XHnZpqrsubyHQwOJVA3BhSXf0dWSuZcB53gvbKt/dgKSI3yyGtlWxseezCZ4 yYsZgnyeq9MMO1H89gbL4U7fjQ4tJAvENmFzmJzLh+YNwilhtK2zzOyYrDD5 wec2MSb+Av0dR7RjLbiZNea6KXmuOtJezYxpZvZA/tX4n7F1DjWRN0p+4t6P lrHIywtU7R07lqVPAiX+yZB/SuLkUjFcjOtQU/fPvtBlWRu3qiIj7x1qrTmC 2gGTr9Q7uZOs2XMBp2SA49tVi/86KSapkjj6pj0fzWmwiREjkLVG2AoF5vSx alFByMPy82Lk7VV54gFwEEFm7Rpfhev451E4BEuTL5qi6PBgNfi6zXXyVFWY kEpb5NYY45f2uiyDYRT2deQ+qkyIXz3f+VV1tAEhTtkSqtq+myLdooWfZ6Uc e3sMEjwW16Adyh4cq5uHQ4tvD7IVY3jmg2JRsTZEoxgNnp6a7lOFB+hy7u18 1PHWCdNvG+JFOldi+49sbHpqeHGuyYwjj7772Xf6ziHpsuGpJe2YeZmajEJm BhwbjvlE5tOpvfoEDvHtoTk4xjKeme7+RAhppd0yq3k4TlMCDlGnnYm/Tg3+ ojWobIhGcL4eIAgC9qe+aTrNsRIZ47KW4Cg+dNQFaeTYRdFp3nvIxqmM1kHB +b0Ve4ehmNegBb2cO5KlewSVbfcOY2JvGOtuqnLFJlDhlmLe+yvJlROvxOMy BPOmtB4DDFL1QNKzwDJmgFZ6In97CuUgJcVx3oK1tivNN2m8Q5twiWPuSynD jkLx2ZfWkjzvrzAZkpKU6/YDpkUGgmmANnIMI35RkvemzyGJSK5NyJIZ05w3 Bjr75a752+D3uJzwBrtZZDw2rZ15Kwas1MnjmZgsTlrDc4jhj2PrsSfDsToE vLxjTIvR8+daGMX7Aro4UgqwKJVVWU4P81DNn+h/lrd1nqJrzngMMZhkmsVA oEZNNPm9jdnA3obDDqP7HWDAGUlt3Hp9tukSQldTdoNwLNA7yPejS8oxvq1R 8MyyBagRSVfIRgA+0gPKyyJeOZKXDTHQEX9iq8Or6ieLHOoE6hGA4EVJaDYf o88AWV6Yrt9yTr0uHMIbmLEXjC5GJZrmJJCcn38+393n2/5HP+8wbUjfA2gG W/Zdk+cf8L4tYzJ9x3xFkJlZ8UnWD9FY+yjxCTUPboJZRAaYfNPjP7TetGPD ZOA63Km9d3o9/CjnS6IBbGd839JHD9v08BJwTo3bkJPlBNjML58iz+S5WCZT A+yvmmdhU8BjcFZIgmWaD/nD1BjMXg9NtacpHfOrlsQz327vT9+RmoxJ+OWX WQfVS7VYo+5kQ8NJMooLKSVwpaX2BF36BDxndVUa5apVWFk5UntucgKwATmF X7a4zKK3agji1usOTdPVmX0+FduhQEwKfjLuABnFZSaZeV18Iokdi3+SaOWm pp+9YC8WzVZM60W3by8dY3Ndpz9rQtOhIR0Pk8mkXyIHFr1eEe1YxO6YJBe2 0AwoVtl13SZQTw/QoxtXe1m707bL8Y4LXrWReY5XtXxZNX1hI5DHBnjsujgQ bZg5BCplbJYTRZk67mE3IidMfPtVwRXCEyhW4ti4IC5aYWXrOY5iMxE9TNAe 8XVTBmXPLI1agHsrqPfi+ChkkoIzdBGtOK6zm1kdP7LI0HmOCc7T6GO4DZB4 VdZ+2WbRLYprJDa4arfHMMeAZxGN8zfaS4E4iVtEY0DokNDDiKVGyDA/CMql n8iLI7GFxFPW0bC0fe5JF79eVZgClodzMtUvi9SyigKsOhJq8+ebs2VvOAQU +5twdcYcrGuXWbgqCNucbWod89eEHKyTjJvwLixd42+gBqnZTtleeYZJkBwb P7Hht3jDy1qIzTKI0h7TbZujmAqNmOT4t/eAfx6baVLWnCR3wAGmpRpIUV72 KrNHWM35WPLttSNeK+IF/e4IkAIpEJT1sNZPTXffqgzYoQEPsg6laKG4+E09 hsQ5QwcU4xopwu3AqtT6k2NZgDE91vGIIfO2g0Zf0187Vlrv0KOso8dw5kTs jhO3miudrose5vGsPhhBSpamKHxSI2h6EQtgBJFxmcuz0OzQQ2hE4CZKPi5H okgkRDJSA8bD3tabks3hSitUJ/Ko2tCD4rn+OND3itT53mPSz2ylDXvlQPwz dciP8l5ejcFGHfC8GU6+bO4yRm5rTYjUbVsmwGsb+Jdnl6YJ2zFUFu4IV053 5LqsGu6pow1bKnu2fV1rNztpf2M9vJWEcxlmd4IF5iQeZUs4E5V6V89Eubct 6LhsU1GW11ta8BvUBTm16aZuoar4+b5sErtXxIUILHEmdMMGkFK+PV1MLOW7 x9GXq01pn+t10DUE971mkTWOyHr0FYgbLcd7Mk6scfRWYHoWZf/jZ4IDKE7q LElpLh7h5VkGefFpqRw43W+28R9x56uarOYuzhOHDpplMlbOJ4r7h/5Hy7A1 J9qCqPtK/9E+QnfRCLKn6S17Y6AEHD8opxFv8sCM0Ikj33GHuXrhsr0uSO9z Dx35rnzSY3iezTE9bf3AzJlMapohO/zUZaVPIAS9jBdQht3vqCn7nv6CdoVk xPcGDOGmmmrf4t1Jp9mDXRUDyyCZaO4wXE3cTsX4h8uWWJmwGZCDz4wpx1+P 1dt4NUwsk7HILAZK1tnLUnGggOa8mqUQycPEIheev/rcVOD0cPYItfSJ1h21 n898PtZC8WHiD8mdRov+XTlnqEZcDa/oZQjQP+hxbK9DgwwplbA4vg6lnUFM 0tPz9zyaV+M1vEFKRR5vq0V2kPC5QCY/UvDq+yJjjGWAq2ZbeHluhQ01F+S4 H852atWM7ZkG5L7QhCufDhWR0zadGAYj50f8f6wObM7LqXQ/02dqtaszGgHX ZHKyVxb1ChlFkyfSPJTNrRSNqb+1rTKWiAnoCDsTjwSe1VJ67Xh8Dj+A4teO BpFVZZ0QL75WNpzuw6lcdz8CegszsZqz4ZqkD3qqecLKwdKUGAGE2x3HHhHT GZtF0fAZU6HMMD6uE+aIqqvII8ucaUTJg+J3TEDuRZxgTFTH55EdHod7zumO fIzHsaEeA4d1h2zNmbBBgTjxQ1lkLIzhqMWfaWMPz1bNuQICImBl3rainJO3 sXFxTJcJS8tsw6BiLWjMDrwcKxBWhtm4ZB7vywa9GHTsMKFw7mXlMsmCy9Kk KKERur+oBSznzspe2MGnarOHQ7/XxV8V27+s9WRLCgKbnJhacbkRqm3Z+XQW M4oXHV+Cm7FYYwEMj7vMPqv1c/z2JNxnoSn64XG8lbZUs4+c0vJYt0cC7HPa I7fcboUk4stxPWVwLRkZ8W/+PgZ/1Z9raMAyvJ2eHgBsgxNuqH5nKtKT00Sa ucMEzBkyY2I7FQIcxV59nmLwjDjxF3NQD22Omruf8zExsBIZSoPgja12xcqc FBPm3HoOhsVVBUzC8oKJ5tJQMzypS1LfUIgoRAn2rrtWcy3E4OUKY4/KwoBO +nzaj5sKa7EI1Kwcr7Muq2FmosryFZL/dTdQyY9hgGoQCXkG8yuf5Lqwncs0 AsO3t5rOlls21irZr+SlGw2/zZV4xrHy3+LOG1H832NDzwRKy/UsdllxF1WN sNnoE+famLhxSjJzZPMPcljc/XxfVdFIXoifP1YzXcoEg4fqczjBcTV8FCeQ MK/S+sYvr+ocrnVxCe5PVIapJENMzj6a2/hx9WG+RZcNmslbCyUCe56RuxDN lkUhe+HvtRQGkxXNZRYM5ofRxoXZBCdO+1V5LQzAkKvmtWBMFKtx3kfLtmDg mBFjkJ6v77tHtmWvoa8Zm2T7Zsn8YQud1cYlhxnGvakfmBpWk5M26FNoCDOG y0G7SeDEb+eI3pZJkVOqZaCAHbNVlJP4vBXgp/O0Zybc0Cas4+eGQGZzeKa/ 14RCRts+k78PtTjeu9rz7qw9vtCf0CTy49o1DWDPlIxQVRubktzRig/UtCJk EFqaSzqHW7qWU8PwPRMuy3GJg6fqMYOEdaeiae9u6vbx+fvf//6sgtt07Gaa apqn6TTRHMAebaHJ3CfxQP4W3524Nx2qU+s+XtF2vRvTQ+t2AkxGesYvln6Y oD1sMowJ+pqoEV1qO8ytnLrgCtI1uaapM12xwuFm6rD7ThwwR8IxVNo4RoF/ R+EwN1TjAd3we17zqiULMA/9aV+P3sOAPH2u1cDjszIDzhbCpKW5PDNatXde z1KLf8P3obAMW0zZav4ca/Xjj7clk6y6hZeGgcMMrQV3ISANnJNrvCxamCjZ MHfsqGk84PS2aCkVZVzE+OdRePDJnDo7AaWLMX0OQR+W2Tln4H2Dnw6n2rUY SwNT2hLELRSDSKVDm/AYA84tvynufypB7fkY8aaXZ62p+PD5ND8IJ9otdQ6G p/aE/Df1kgyT1wFM6J8hPHdMmefvGo9nc8CpmA8nf5kStN1ibOW+me3itHWZ 9zRtqSCZmihXK11DXd6ShFoKLExHbq6BtEdpczx787bGeYXSi2j6lVap5ZYL lOCnH0Y1LCm/7mwNWXx689PAPnsd9eLQUv20sPG4WhYnDdP30U/DEE5IMfLY GV7Fg1KA/rZmqzeexSigaxQoaXMA5w+nw926ShJYd9wHP37NBInbHTTdmDMt XyAvRUV5o5i0By9bZAp1RsTP62q5vV0VBJY35K1nPO5qT+3X92etRvx42Rgi 3WZkAjz94qIxVCqzwaAOmNksI4DhU2VX/GY7GQOCFvISAcyrcyAhHfFtPBL4 2LYUSquAbCBHMv69G7ElCAaIAJDDUHI5sMla8XIAblEcziXmvVEE1nX+HeWk VFIKraMzvNLBMMI2Y0FRXhNndxHfbyFJMinnqgmWAdXkBW6bmfGLOCb5I9vp 3Z/NTBAvvYsXOR7p2nwMRg/Y3thja7ftJFV3rOLYRs2EgLwvLOIX4dOFPpdM gxb1XEcUdmhNE3UPlGvRYTYTe4Xpk6OZa5UQGJTFyECFCmPO+TZ7wqK3w99y 4RcuJe+aKnLqjMRIr84cO5tKYKSfqAmTJiGecaga5Qm/Ut15Arl4JOkLdm1W Z3ZYF0JO3v92GvLUya5s41A8SgkhtA+Ngsnh/FXztUFgyLmjhNbbbq59FlQM k11pT+SyoxPRkcPMkO6CGnWaBcWn181lmlN1VSYV1UFjQgL2EpKvvuWKdF9j jwJqKWbHWrgwnAYnfs0JEf9fVZYUtU6ZENMSXZX4ErOCsE8YE3+dKsEVS1ph vZGHFt/GP++WgcP3dMkH2V77o0Ds6akfC2aP2ZGH//4MZzLXfCuUifGlxQ7R AVqA7vG0SYwh7ZYJO4mGpNas4TFpZJNZMwGuHDh02iKiXovFXjeHG+FixhnX WfA41sm7WXYv4+0pJ87UMN6dRuyPsblJg8Qm21Z7UAg4a3EwnaiH4yYPyGBO Sz7kHuP4dW5tyPvbF6aECu+E5WRI42/XuMn3eH3mIZm7slOGfkAz8azsp/jW N1ZC2WabH5voWOkaWyN6OPGf2VDhql4HK2/zkBbpZf3NcjG/kk2Ou2YOfz3s 3zf9saIwDMla98xGhT6P7962goaZfSVnzWPGuDqRA2+BfoddKquiN5i1UQkt +k7dvj82++XRtZuPbRFsOw6AjBKcNNZjo7ZAeeT0omcM7casQKUw52Pi7KVA 7Xkm26Z3PapythBmb93lcFBeD2i/GlST5nJwybHNWqYzDx7n9On7YdBW3jIw 0cupSuLG6WzuOlbzxqk3BdWMDO37Res/DBLOG5/gcmzKIr68rmFbEbgF1hPd q6qmro8HfKxjvE/85p2UnGFI0hOrZEhFJjVghSxjE5D487HlzjNT6Fu+45lo h+6L4ZmQrmeIRLuJ8DOytour479OcCoYmFibsbXp7QMdef6nmZlmdMhtjVu6 Kb1s9kU5MCtAKOa12SkbNd6VBVerRqW7Bwl7GFkdiID9mT0OZaGyDjvmNP96 VdKD7rX0MQqOBy2xISyXBwf9BoPMADo7YdXO9sLsGqwTpNTqsSx43OJH1umf 2hRDrED6K1RbnY89CpDvhkrGLzg/BK6/sP/JoSZJapR0ZuxaMSNdTYZOuUhE UiHuV9WVNtjxiVFjCnJn48ofKV75ttQCUBNMzT7Vdkv4LiqmkfoXEwjNMvOI AAMQD3jznMZ/JivsYEMwC25aWH9m1+fvaxqzIINXi+NE1tFwbIyN+aduIkIZ x0nDIY8hSbpoxG1ZCxsAm/8R3fReWzRPLa/PoXAdU+B0Fv0DXmwJ3SGVtuHF 0lyAAdg2IEypxK5kfkP0WUaqmKLlLP2H4prAS6hRZMPzBJNDx69JH7gbdBr3 9Ho8RMehd3Co+JjD6Bl6yp3qdN60MHGjWaiRaYyIZ+/FOW+bWveg2bVwDo5T tBZf4gWIgwHItpQZeCz9gTL1dwMdH6vZ9qalelg1mQjx5XStv38dlYYuslOj BfeNn2ccDVcWk5xj8dCe4/5yH9KuyQpOK43YyMmWdrmue3AfkzRfZ70gfpqe 5VUDNqZFp2V42d7QKRBLPm/zlBhqJhavmoghlEqufKBOPwQ3gKjm5G3hMJwJ WAo7KLJxvIED4IYX09/+aUvEsT/+Exu7vSnZYVpjTWkg6a8klJO5gc4b0xdH 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 sYeJr7bL1BMDcLccoQ5SiLTfTDaQ5ZDtL3iTkbd2TFvcA6aEDaWyeIeQixFv VXlt8MN2dLuTCRzzXd3MjN2yjxmT2H9jN/GrqdIaT8E10dIZ6DjX3vVu4uRw DNqA69OWrTdc33CkqHP3dOSSdGbhTA/WMyKalyNe+IgolRcIM+IxzrX/X+Vw 0aHaVpsuRD2Dw7RGu69THMgUTXbp6aj9auO/zW7r2M3Eif3LWJqwCXmzhrF5 aNofl9N+AQi2TSBttmboZA6+wy3kCJwe4RO3n1JdMx4QdHmbTaCrAQ9jd/XQ fQiItwaa1t7zIecGseSSiIh55oP5aV1hXK0CtL+HaDpMBhPiyqIKfM9+CnM2 c7ho7WaHM62euSgC7IwPJcThwRtXZGmIVSWjpaCZI+dW29B5q5cq8epmQaPd vwqpvwqpvwqpvwqpvwqpvwqp/x8LqXVxhdVepVTDb98F0iq36Yj9CdHybhoI O+iqePFkWXRZxFGqyhYv+B2dJmWHUV1VJWdD3/YcOCwL/InYjp1vQK/wIZge /AjG146NGQXmFbWXWzdal8Iv0154u/RJeuwz0enXvSNSUGXcE7ne7ZXtEoBj xMK0Llwm8Gi4aeMRwTHn6tDte/9uQreoCg2GSYVoXtV60661c7ya+5HHoHz8 GnVzZewuyyPF6zIHnKb67dHz66lV5olzmxiMOGIutw4btklo8nJ74pD8OoRe e+wm62lTH7vNg92K0Uh78jB9WfTx7STTjDHSLhgT9MS7EOk9Ce4i0OV2123e X9Fj+t6PkTkMS7sVltt+GZfo7tZ+O32fYwhSXeUbfetjEO857SY5CKrd+DKH j8das/+95/sh/0wIfUWGNHmZuX32fCL7rKqAdvYexiT+NCkYdqgZBGVyaogS /GeVMWS/wzGcDiE/7EDypi3EjeOXQipVZucwsE/eUFi+LDpj5rfz9OwjGL4p ZZ7PnlHG6/XEU892oZpAKzn0XMi3Yx8pe4x2AbKKbjNF4+2HimZKhMMosTXC SzTkNykjWocsX8hQXYnX9i/ccw+5Gx0L1OYMx+ZKoXi2o+vtfHsXLJnNAzq9 wgvhBw6LEOeO1mLjGQyl1lPkhpk8ya7Bha9zvfJr1rQ1Hbe1U61JucPSgMqw gLvkRDAYmCjfxxgFQbYrQQi8PV53lb1mDngu7gnhy1fFudb6ZXKcdg2OszHL MBfNLN1VWZZ5Hr4b3fwpz5mnw2Bpj5Gpks9DIB6ez+M7u0jbNuTVfbJzSx/z RK71gBjGlFNDdL3PTtJ5OoBohzqQpqYExlTHCAaP5fD3hXJiDWNnL10lMzdt 8nuId7TDD7k0WY78QrjtOvPIOZYwQ+F+hA+vvf5Vmv6Y7EgaG7/2C3kxdcHa br2dHGQ2FBGwHVuA0zs6wXEH5bxi4uZM5MexVTLcz9q33Uu6ftGV7Fohz0LP 8iqW2myLfIc0+cZmQiNIbqXAhxWyDJhbiRK2NMb1JbY06vlEuTw0DAcqNAl9 7KiXww9k1jgErxYqfByVf3mixeO3t1BNMNCyRovHKs9X0OB9F6SN2Nob7LQO lelqt8mMGQ4AkbWujZMPNgA/opf2eZrPwV1YlGYTvZ1DX63o34Oz3yVnr4aE dXY0s/iy17l6jIvAOmwxwDvoZudMwTE+JjdAENANGxsInfY43YLJwaHLDj8X MiboGedY70Z5PE9CgdizyKrrIdofGjXhcAgWh86hR7gfyZMPk2wjVgHpQZMe WAYR3saXY7MwMsHXj/ls/yzEK4PJ7cyRzLZ8jJ7XLsfoJb0ekoSHLXaZoo0Z 7dE4cfnlFMJh06aGspgYtsfDKjQtWPOyphD3/uM0QlUDIOQNZkS0jaM3vHht KbLgGRZHn1gyQSic7wowBTYUN7UKHk5GV4PXQ3ZEbJvxnepieBwbnFBCrb7C wd88Sl3a9jcq9xlTZi9V5nqsXL5exCFk9ME5P0tYMFfT1dqPVZgzEBNwFkPc PSVIP1QTPAR9BL3HKE+eqQ1+KKLFNs4MUt6nGLfYQSFShZ15ML+9kXKI17uN 0trrUO2Jc0LFMU52EfZ5ohpvd9LDtI0Egh+zhlgbklBHMYXBLdpfr5PLAFFB PFYW26vRd4vSD+s1AtF+0QnNhrkm3AfWxK22TlKTPU5okRg2DG2AS8eJWT/d FULnlKftcKHvatliYdLDDQ51ThO9+L0F3WRkwGD4dGu5dMEiheYZYdrla5D9 Q1u5yuGEkdoWiLGYP4/PYYZRSSpAmURzNdlP7u6QLNdJINb2+byB1LUrpx1/ jslrRy8n/gzv9t/gW7bjUr94OxmOtqORbIbDrA/QdA9SC6XqOAViy1qvuB1u L5uqY0mHkmKI8yL8m4053U4Fe+BsrivRWdhhZbhYHHnTuBpSjZ7ukF9ZMbhr fLkdW5z8OhUmvVzKkhmePxOdvQbfzjDWbtL8xx5alWpb7UieQng4yoIpRAAm nsY2Y5LjrjoP1DmiDULs2Nipbh3vQVqtx/ac7XU0JNhyla2OGDiz53oMRjg9 26tsD5hPdd4Ua/Rm8uY0sm2twppQznHAW4LRHCaKMBiaNhOt7g40zVjPx+R8 2bvUmn+aeH9l7jxHsKmDdCt7gmvzfnPe6MfLhPCQgXBia+dwbfGf6OrbCX+0 EcbtrVm6ZiZuj9AmysIVwcDyCKi9zyFzNuYbLh+7u+xdDnHSGj3m9cluu5vi KRhnSz0DgGGT3J0FC/1xiIyQZvc5JwWo3XHcqXuvsgt8PFTI1KBrmWEjUYIs f5wYtKUPMIJ9Ve3YepwHHiHPcf+1Y7HDeamxFB3BxjLzc+gSiS/pNhDFfls7 +Ghiun+Tso4PcGdN63Zr0nHXVcHGWSX4yK2w8tTwSzjEljY0K+ydfcbpm4lr 1igEuG1w0IdJXNHJVXlv/72qovpcpLU57F/2u3knCnU+Vm1nHLTfh2fMqy6t 5UYLN1mYfZSxcQFBDztWzheKJ91PY2qDtMBxA5Zrj11NmcoML4ByOO2Puaa7 zbCCHu+68dnID3fPgIAaYT7sMGSrZshAWOzAZ9rZD5OVb7XP5G7eINwjuaCj 5YbH/yrfZU/C4BvBGu1jhl/b9jEz7gmQ7dT7qYPWGFnymHR0ysFf5oeJjc2A 0NDOX+b3G69cjQndSK26HbxKDlLtF7To9hhhX0zlGMp29npik3ZY99eh/xug a73io60wuNd9MNAtGHSDdgzGbCc+pPMIbx+yyTLGsmdglpeJnFrXSIPwaica BWGmalMsoJiqj5P1Cpf2l1TRxLjWcAQL+xzf6xxTE50koq0VZjvG6+8mzBRa tTxxZJ4rqdK87S4/V+m+TnunMKvqoyjC57GXU8XhOgPFCeFkSzHNY1fZzUft 5hgC53aSfDaz/MatQ6FyVyfOqnxqio7/SNbQSsysQ+N8roujM7UdvgPROn9u 3sm2/QuL9At1Jee6wkQO1JoWOWMROmI09FPWdorKKZZf3HfIh6lE10iCODOB SfhTjHV+e0+K8Eq0l7Gk+0Ii4681jqEBYc+49/3ETMzDLLG4Z/P4htbIehgc 9Wrnx9Jq74z/If+2YkxbQOm8FmV5gJBP/Jj+tIfNvjmGX8MQE58LWMjshiGR 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 n2v4O5rpIVWTHQuqduUgvG95iUEs7ZsYsFfa0YooADCZLs0NyWvPWQW8TDro tACQe5N1SPeuCsg0uGld7W2LHprYrZu8ynPAiY/RLCvZ2D4bccYBJyEq1oEz fm7X3ycwq5zaT9+OMayBGrdcOzfm5TbrcZ7kl+wj120EHv9i0TdrSV4TZhqj ABRiEquVOnHOvd4cZZHOHpwkpxf0fzt49L96jtEu+JgR7U2UPVZYrJnf8w7n KRt8Zg6KqLVW32uhwYQkmt2n9jOG1FT77CdkxXf+dRyY03Gn6rxDQUzrrGf/ JkCwsibHwKJjXp06bfsbX5GhOFYjaD354+Ts1WCwjWYNSdWIRRnpNelpevK3 yR5TrGMyVgHrrjD8m7/NvGyMg7MDsN/xPD/ZzGw1nhShsoYnBiGysfR8TENh sKDpjgsD2emO17et5BFk45n/ZcNldc5UjSKeniW6Xse9wkzU2H9OCZe+z0qK s0FdGVl/8pz2NwwtNa/CdKByRHdARyV9nTlTvNtPN8/Kp1mQyzdDqp3fSehO dBXceY16ELD9s+7n21Rfzohfkdfj0tXThns4Ru3odcry9/m8xpyUPzW2Dk1n Tghz8p4D+yVh/KNDgTxbX66f0HWfuEMNmTRe0OqmkKSlsEckqyJJX+v7uRuO Xy/4mX7vFGuVM7GfW7E71bb1A+qEVTJMWaeJz7xJQqz/PigQSHPxWSVCPA57 GKZOlgPz6nUDLyfBm7riIfEuh9La3x72VtTa3+FdnyeLSL8llsHqCJilbj6c HJjFrrlIaBwLjHK8gqlAjG7KGKu/BeTY2Bk+nAdVYxk2oKYim7wBomHmOLZg tp4WNG2FqnYz1bRW0mXCWUzAJCBB7bzW37BelxsrJL3yIxbytqE0IBniYbQf /V1yNDBGe7SpLmZozbPKqbUmjFNWsKzReVGduUjEIZVLCsdKbjaG1pSOwZ3b CXMiUpU+XatqbHYcrshoopVUiB+YPf5ZQstKvND/2nfWNUUJqN6BFdH6tvh3 FTnNof1K4ZG0o3fDBFR6BiQ1w6FsZ6906QUyMXXL6FAGl/rdRdiYavblMZU/ YlkXY0p/UfBWk5Pmxqyr8NJzVzXdv/ajJ/d7PdYcw+dyuzh2d2KWtQbrp34j u7ymH1hw1XqAd6msVWss1xy8TgipaQEJxhzN4rfDbNyLET5zjxij9VVCICDD Zplu7xC4Xf9QFMKYWBms66cFDrQrbpdObZ3WNyGuffvHjXdom+sgB7QLyDCD 83tSllG4eqR23l1WhRgb45W6+dHLlLll37qSU1seYYZD+FlRu0+kEP+7UhDr pAOR+0wq60SmVVUstHJmdB8OxN8nflnd8O+/zwuxV17MrfwJ0LpGasNXwbAi kxvTn4fubvmV+f1b5hPcbQJynuRQfaVRE3ebO/JU3uGE76ckwXbSx2k5jKoc mt4aLIv3kdqxJ0CQ/Of3tIdAndeB72VAMXDHpQwYv4Bl3dZcdoUIMafZptP8 63b4NqXt1dVmgCMCM+SbtTuYJG1CRh/VWbbPzUTf2Yo8A8bVLmotNje6LKC4 ganrXmaDHytyJQBYTfysjzyrFtyuAl+a9HQcGeO9oepauVtwuUi8SrT12Nkc l7mIaOSPNwt6UzRDtLJ22+IaYJYzHOPsXRKwrQ0BA9Xndi+3PbazGl7xXRrm 7bcaRihqGRlbTup9z0IPn6WMgfZ9lb+9UmWs3tjfNUBlJewiERMFO8iCdmXx pFGhb5IJN17a/lVLU6fvZ3r6KmFxbSQnsZn42BS1z4jJ/WzjI1QRrVWj0cpc lP5TwHXj8vM517cJd95iG01Qk+4Ee6K9N6MOqyLGNWk9758lt6XSUrsuAAQ5 pfRJrjfTr24bTQHFj4nh10nbrOx8ygDtrMulxEuTMHPPY5CmTZp9O/mzjRhd c7dW2d6Ok9eJtz6X6xWgf7UJcLkQF85veNLAWdTZn/vyDvubSKwiO7va2+0u 6nhTox9/XO+VNJdpnd8OBWWAkGLwkeZcK1Sd182AszDzdncyQF/AoWpuNcXv a/akuk0A5xasPWDe8N8vp7vReHRMxBXGH26N/fYq1nigVJ7i/DEHKGSya4o5 xUyd/j+OcdX+saS0w9sr02t49C1NS+wcco69bOOfj1UOUuMe/N2RipXAbAGd /ZxR4HxjMaMq2l9fbsTAVfCpPk59rJp2Z3C0ZbbI08/X7KO5Yc9kn6+Snuus BIM3z7aqtllW3qh9mL+57d9q2dZv59qLLj2lzhjYyOahM9v7MSpMKlmgx/Vq L6C20apN3fa0C8fhpPCb9vvMFb/cMHDXlRc6qt4i8AJqCzJjetdNqls7EdCk 4Q63L9fJOu4tAe4oUI74HNfZYjcbzDGQyXRFXt5c8oCfegrEmTLhnBkw+c+z UiCu+v87UPTUpZfPkOU+PL9qf27vxMf2m1DY+5LXJb2/msmODiDNgN4M3nzT k8ajuFfL6FG9BZnddkzMX5ka4Ou/6csjlUea06jiEg/2k6M+TVH7KQb7IPI3 G6/bY0vSErOSPKzqjjFVpzGCMLRPjzT1PPzfKP7LBB52Mi3TWEny4qkL6SWF h2xJbYUSrWknX4zNHrisGwRyQqrXb+hbKX3GndXM1f4ELHFQxSBu46aqoqIc f2+UgYliks7q3c2fxYsTYva/K1e2u2O3xkURM6p+hv37aZTfLP0cAynXUa4N u58rXrt9+zg5Fmayfu5au+Yr/G0NbjTYTLxsnzV41M6IRcLb0avTrZ3m7hYZ NXyszImwq33IdqRvo8f8ZQCrB33xl3h9kthHfl5dIjwMSehBDhthKldLSHzT toHLDv829/uQgutaiGiudkDZA4921v05DJ60Cvy82A/8fBieVst3//mZ6xNt f+4re9fktm7LnScyZbf2/90mp6HCRwnLKR1uLt7h1VZFtI7TM7ka1V5IFDC3 QsCcqnA17BKfJSgSHfNieFOF+0S3Pk/O1xy7IXdIANuAFRCgomoEaJgWBqAJ QrWkY6SdJ/OC2YlH+tnShFRl0TJGNYtV+vNxrqv4wuINDueDJz5WLDZ/V+pk y8164WZzpkGsI+DG06yp243pNZvlInCPpL/Ce+LwzSjCIO4qGTGVduL9qFVq v0JirckJCpfpqY3eMyJ2mXoST8s1FqX2oirDc/p8I0l6SPCYlSz58amJilW0 1ECKABDT+T+0NflCsOVhVwpcTcQxunrnKLrY6FY3m3fnlIZ8yVLNoPY37CI9 NxiwULRKPQhgityuupq0qc/Jk5NNrDu6Um57wpE1fZUQ4ZnkZT9NbhOi2RXZ CmuJIpcL6e2El0Loe3k67Iz4VeqbUahAybnyEeeS3+1Yzh8wWnD5WAjiRFel jV4kP0INVQNCXqFjeCbXQ3xzXANvklmI0Tf/YYwwU5lqCm0iq9teVS7HVYCD GnRw2NReqk17XfBh8KB28DfjsSuTsAm0k7oKVZttVFtkWmY1zNXK49ZXzBkC r1Ieh6mJ6Z6hQ/FsmZL27T69N+9itacGIWaa+kVKgqAOBni/SqE+21T3BgOx q3haxVDT7FDYvPUyyGI0wbaWZ7ozwTNstIW24aH8aiNTIknxpJ4T4OCZlz+o smZFE9dEjWD6Xl7y1Y0lFhS1EO1Ce8GEOvtBELTsXZVDd9eC9olreq4GSbJ0 XfblcHwFGc3ZS6elnpvlubDNsakis8Auckkf3sBTT5aKBVgdnBhQlH3pPT0r ji3Jzwc2w3vuWkCrY12HO934rgBNR8QV4TrXE7VmMZ37pu8QHvzwMiFGBabK E+Ov0LTgM6MuJyfN+QUPCZicD8ds6LI+1IrBcmlV1uwLntbHmy6i2U8W6k8+ Ugwhx2yrzR7i0pwRFDYo9BabUEOA3V1snpd5MCTUMg7dpO+RGfuXtjYem5mc HNP98A5jk6cX47Vx1x1SM5kxevLp5chohgkJ7axppw1fyU63L283TgFVhyni MscljFTFqPrNBdgwIxrLGiZGzbg8mdF1aoiVOZ94fJvKcvkVqCK+1r7dpvtS nnkUYYx4pvbrL5J75Gf2s/k7ndGoZ7JCB6/ind0yfwZNDQ2Ta+kEtNzKP1q4 fhBpcyqPXYqs23306kG9pqamxjWNe56qGtkCGKBhw7YK/9d92TsvIVMh5Gxa q6u6xswoKO0VcT3EKAtTVQE7Wf/D0xGX9cpA9yOlIFOVUdR23tE4YUfd25Cs gT13aRnSyg3NAVM932zm7dSVwnvVqf7f7pIeR3FWU17BFn//isnNecuQ093a 7z9LpbeSjSl1OFdJw0v9OG0Jz9FyiA2fMSfb2jozNdSZdo1TIKyRyzbXCUbv ifCwCUHVPgyHmCF7wX7mMGO/TmbGUFrzjDA3Pt+mw4JZreOa72AzWUU9Y+vj bxGJe5MsLbdwc9Qwg+vMTTwh+3o0a60iQ7TW9z5PbIJCkdAMaLx/zXc0jZsE 5iIxFPWhaObX45lMneyeuOmrC5KgOwgjP/n0Sl6tXf0wVOTDeLN4+lbSdQKZ 2iPaZ4RtJqOkR6A8mwe5mdx0ZjAsD8tzU6P2eiZFjBFHVdlxAHZkd2pSAJ+W gxYBGytCmS/dJktZ06jsRUcEaUpzKDYfNv45v/qZCQBTB1svc7CCqDmnqIeC bp84eT9Z+80gOKhrRhHXo1U2msMINNjizi4RNT3EAO9F7rzQEmgz2JB3PSct JRr3erONeZUFZxLCF4Pg0I2l2qcUI3dR/Dz7o5WMWNPypz3uGAZfbOQO7uFh ZN3MltPJbAzvmuLkpcC5hqFcs62Si38xXGWKGrL/DyNCgfGwm1lsXCo9vO45 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 /Nbc1wHSh4Wid0i9NY7djjoxElMXdp0msp6Px7DmzZQl15/ah/2JGTS1sxhN CdfZ4R726TqBDXMl6zzKOhvRPrrXvzaIzdWV59YP3YpqN87jOPdf//VfV1Nz hia3AovV1kBP5WHnxa2fQKdJZPKx1cShQ3+UBpdeLKEmSpilOCGeNjGqp+DL IdV7nRhsh8FMpoOIF5mbK8GFClsCRr34CVTKaztWQtSupfPbKo6o5KtxqLqI uFs2mgTeycRlSHppZgOLyFFy3cMNa3+db4T/UOxjMFjFf0/s+iadjmHF3WyF 9im3dQp53LUV8cmwEg5HOW7DUHVEhje3Gm9nMyPVbaKVJid1CtAMbR1TWe9J XZpG7HvCSGXjaUOxG3DYxrmgYDfIbO9nnOTF/MLOaqzxsoqjbnqDIDsXONJI l9hi8ffEHu9T/6NxVy6+bXndM96EftjkueXB6FrRV8zfyD9vvd6gY75mYjGo YDvwMGrV/MnugXm6QJSgmTE696y53VCl/IFX7WYvRyO5oRiLxrv2vZqYR9Nx 7AkAxfLUfN+ZbHWRFBdM6ZgaEtEkVobBLyafbbW23FkoQZnG/KgJqf9hTUL2 Esrybx9cbnSi1MUJ9Yy6g8JFUKtStW7BbdSp4aiMu4QVNuw1b7Ab8WO3967e E/K0ww/jTKd0QDVMY92Y3zDhOJaes1vpmDk7izigTY+ttqCPaSyOV606Dep2 +C5JY7YCzZejk2JxTiOznfTp0rjYgtO3MYvu9/a8WY+Blxzx8nby6zSgrT7Z wjJ6Oc/GvLvGnmQolw8Es2ZBTVYN77/3HYIASmrdcMVtqIRB9IJurXQtzdFg s4CVHTdgUb0VF9wf6u+uv14W6tCe5bKuRb3ZK2nHD12kxPL7PL7jDqgTpcf5 ltn8V8mML3i3Fw+vPKk+IXegKKYhuaNYUvO55Lpz7t4C7fztFSW8qeOA/CCs zqmRR5Ae249jLYDXtSRTp8t3I4X9X63r8s128dE+3wLjWZfRHOyj/XGbzJnV Np/ePsPP+PN6jZ1XC9v+ctfek6tcGYgIzq6A9uG5pxNNiqoHNPhNK13gErEU L/QpaGVrc2CgZzifDdiAtRgjlCN4SFDkk8Fxmp1jrV3V08Js3WzWLqymzuhg HsFo5TtAZOl35tAcEjeJGbeXidvYwIUv1b79PElvFi3gOFgQ/E9r1Vgd7mPl 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 yHvWpS9ANxoHmBlgZnfPniFWZEfkyIoMscySIJssstgiiwQJFiTIJvEK+wh4 BZAgD1lsb6ir/WafqqtFRANLVEWkh7u5ubnZr6q/XozvVyOp7zQUVy/ku/C+ 9DjEaV1OvYaSl3pSpjw5/XQNpbuGk+WnqHx0xayZUlwKnCyVHZzvxb6o33K3 UdfShqqw/Prv0q+yoqT7aLwQk77pAzEWy04kXL+pWasubp6CXlwRRzkblAi2 yVpzYgqJUZlcFGEo5LT+LkShCwAShVMB0H+oaT+1oWRZCr5tuy6XQT1XLXwt yJo0qypNTBqo9yLvEstFmr0vxrj4MD+G98CK6JJSOSam2zZDZxC3xwK5OUG3 CTwWsqMvS71QzIXiOEdP78uZw15yBizmu2/MqhXTwiock+5XEMoEHQJDWySS HSy/KgwidaGmchMVkUN3jCBaLiQJF63RrJRrTXu/flUq33J0U7xKd83nZ6jX b1nllutASo/O79vu2YWbgO4aJpp/hMsqm1n8V7YrsllJyaDz6O+P1SiuO2lb VXWSnUmSN9NNehVqg+p/lbQK8aEoEylLrVnuYaunZ342TUw9/cxio97EkeRI M+wOE0Bh7Nlm12fmCSRbyBtAZIvlg4ISFBdOvR9GXZUskbKB1wZAzGm2/Uhs 0ITPk54kzCcr/DyUbhpdQyG/DYkvldLdjuWmGPMRylcT+N6P3Y8o8OCwYk27 lRmzo1UUBdLwTS0tXEf/0swu2oYGuxy5JLl3Az9UNqJOmJDnYjbsxQ3n4z6I AkgcWU/cWNXe8QiP2YVgTUkMpBDEIlLacZfhOTTvZt4werFkS0kqamdzm6TV ruMjpv6bQFaQiiH1n70sLJAqrBGQcNWSd2ko7+vq52EtZWWRHjWuM66vrOzm LlOQcV8gClIqqiAkVRyUpiSfgsaVunM1YhQ3IWfYj33Rh4fPQsYLpE44lqUA CdGkQg/zx/ufoZpvWUJMfzPpTbfpAuUXK4IyE5Az7YYylZMok50EX3RRtHVO Ph+a0T4IKYA1d3TNcQnMk5LMoiQl3vuA2rdfrOzJTKWS/8vvlJoJJxWt+Dzf e1S//XgdxGqWnSrHwkGndMv1Gjmlgk3W4kO48j3dT74K1QWVX4OYUkVfjPi1 bZB+gsNtw9tswFnbR9mwgVhaOaPiZq05bbaMwKiTsWjeqMkh3V7F/Y3GJhXR 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 NJfyWTom4/Z5I77RxC6Ut1BTmzGI+zDBQt7eOoMElcVfr8IRqmBd9ZlJ1eXo 34YINMb6Mi5YWShHO4vR3rknHCkGsiFk2u96swoc5+U9x+hdX6iU6Iz408LK ngvaQiI5hQ/yywg/ZFBkx5dhyhEWs0Jon08FND2fRrNFneP2JqUtPN1DMW+x mFqvLOlLHb3VsQq4nxr2qmId3XfZTUAevI1l27ly8dGPXCb42xWVajNFagFx aKhk2z5t2nyQpkZMEl5r2tj3CnepqVCp/Khtg++6ssjgAHEJupV6ShWNzbrh 75ofYXhc5wBm37WCtUiOx/ZIpNMiZjGdahXnmNKBk3chVSsnO/D6cZ+47UEL oR24tFthDDGW3dOmkuwuMCrsX03RIN1V6LJpyQrcdyDj3aZD11WLwNPVfPDc 64yYAm2UWdoHKYMGmNHOwWJtvl0bMUqTOGL71YtM+dS8c+heqrKhno0oRNau ZWb6MMnehHRyfqplrpmse9A6Mq2yCot52zTBhGZVKtBDfWoVq9hYyyp5KHtl BgsRz/v18v91twPogJJzS65W2QCZkLKHF2d31YaVFq125aUc+9SKv7zahLHk Br4QpGqV8JVjZRjU1KFsBKASyrIdyx4EgN1masBbve06s37iPMDp2lqe5qvK JVN30GqnWunT3n7ZZq1nQw2P5eVVZUCWtNrhcGrdfVSG1y5rPliW172pjLfs XkIFBABvQtdZLHkAlrdE4Dv+vi1wVFDAJz5+95V9yIMU4HE04QKpem+56OeQ HtfhWFZFpVfme/MTKmoGLX6qNBChp9LKx7mRGgnt+Fz9YjX79eyav3neksXI 6qg+jzhX1RiclwWsov8m+xcVWuaiRq4K1VZAu2v/81jEv4uQ9eftVBESzRXL mF1R/HIrSztkANamxdno/fgaddjjUPu0vAvvsDI1aakKE7US/Jj9/0W4Xkgs wFNb0rv4u0CQrxqi0Zt/6N3i7CAaUq8Kj8hn1z0cPvar3UNa/1hVTRi1G/j3 GDQl5ddzeVbg1Zdh1PGC9bfW2ax3zZb2TNBRere4wStZfrkKJUep609RN9Kz qHovNzDMNQoqyKkBfahxfKKuUDn06FYUTbkpIWVE1v9n2W9R59C+FVRxGlsN iNGtsbF8u+c2iYX207b1ktKCLzvicuceqrLe1ytLnqtANTsy+ZS+b3AaV4OE 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 ec4bPve4wixt9F2oyNJOoTSiKw6sqEiwlUpCfo+Bax1vDqt3qvdIc4IxcDlm 4fuRop9Dr6kMelTqdTiemyLfQuROKptinDmJZcRrpmY/iUTKCOnzKf9l0AUr akzKLx00tMjVA5b8V7jupsGI/KVeLW9mcDwuiKI3TSASJrL8qORtD3s+lZS6 C5UdFVns5bSueyXHXDrLJmkVdiFsVTFw+6dIZVWN1P30XaW1VI2Sqgi3vGC9 dG17oP6wePjx3gcAn30TpKs51kuxJliAWyO8b/gxUax6e6xLIBVBCgdnDVcP TbVscg3u+9O6UkFHZFHY4lLZwyrCr0KweYjORS6USo1UzGw135bzWz714cR5 VS5fVQq3gnZVBlIUjga+F020t7/vFRpTbTr/2cNnWBbb6Rcnpxi6zUVOZSwb kf1FxuQO5aBIxCbVk96vwdTbsaeggEoYVPY/r40mztOKRMrQJZBktPYIQnGX AGORlXmRjH5FZzBqRN+FyxoJCKMWWDdoJa1PQZSq8mk9L9Wl17Nk26BAm41L BRMQq5ySylExmkCIeDq1f+zSoCK1+q7auio0uHj27Mc6vsG76k5w64KAV91g HUIdYzUoyZKhyDyE+7DKClFLJXr1yJJN9G9V7dl3bnejMtjcFcJtPddvUekr CaE6vM6OsZywQF4qbJs5Yn7EcWnea65KLDcLTAs5W0/UFzTdqQjb57EH7yCd KrHgKt9aMlYqX5VJXZXPeWioNrlnq3J2apZWYTUTdqUK9JmwpnM11uu8j+qu 9m7eBbTRUFOt1acUT1FIQnAxjdIUfR8NB1aijl5dpZyCtVRyH30LwmV+DuB9 F0CTBKgmHAkK2kKS7FR8I1f1zyvFNpOstKtEgPA8arfM1tD1JE5y+2RUaRb4 4nq9EiR6VYLMBHNdJyUmCeea9M+rRgXu7PZe/Mld4qyur7L0fVOKffZ+xrn5 1EFESrEwn6WkuJ0MwXGZ9pthALpeK8uKkMmCtVIupRwOlb9cRPKI2XNIw1fH XFrse6Cx0LDHgayx4pTTg+V1l5Lp1u4mvKurts+PPKxDlsytWmG9tqgU7stO 5NyCgpKZsLHMNmE1K2KF+s7w441gkuZbKueWfc6r7ZynGy7dKav53icO+zk9 sDp1Esr0AnQVRPk4PvQlmmFH45VloSPkgDUyo9V3tjdz2Oh3ZwEHw0gjiH+r HRKrgjr19/eqib4NYRzJzMo9JtChpRXDwMJAAsyW2eGFdoTq+icSdYQU7MIQ 6eZL57ZtDOh3Y3lCPf9IGt11TVSqlf92/GsDUY6JvYGGazdnZQpWqxBdIDVQ DO/QVWrNmftykGYgUJGWsPNV33o+45860cXt1bgbldpmXxuxeSJ4ed+NfG4K tuRl2x/7DtWiJ+zU5ed1i/uGBzpNI0vnBvfipYd3Tvu9DqPM1GABqShhqqYk 3docB0NwvbLQuOoVHqA22nTdNgBmdkIlUqrq5BkQZ9e2rQOTMpxF4efPn2f4 OD9Ws7RXVUP2qZq6yiQgH0jYoVMIhDgyTG76AGdGsIEKYwhT8O3I0nkJMlG6 JvXC7DFnj6UGq1pYPj/QDoeAvzmURpq1Y/C2d6XJF/fn33bTis+rT41Vr5q2 XapsycT/PlbvEUpq6lbUiYQL6xLaNz0/I99lMmx9a5/hKheKTmRsnq/uirKW Nn0Zj515rvuy5DZ8Y0uysSoq5cM+lf8l95eWu8Ba7ctDJPDy2fxladjZp4BU TBYzdnN/xaRIb1c781SOuw6oKkLEUkf0Zvl89Kg9Pvu8bTdprX29w2YEaBMl HZJ8kGlhl7mS5ZvvKSaBuxu2x62inIZV51FOWu/VEgEGMBhfp1J/kPStsP9n 9RysyM6K2PxmhrehzvnFUaX2eVf3aLKD4jMmoYYrO4VoZGb7nhqmFrh+k10v e50UORY5nDPPwZMk45r3oP9d0AVW9KoLUH+pPwuCNgvSfDPiPdGLKJ470x5a bBXz5AVmLKXTmt000U32VNLoOCl0NgGZFEGVSEgxI0cyC/fzmJ0DmKjyHbS6 xVo6CgwQHkEBvqSFgEIUbnJVI4XrESRwmUnLMn5SJ1XeDGUwGCAkP6hH3u36 MQHc2CKzdrDkHQIIxMvLsUsfO/6KJxFWUuEtDNZaZ/Z98PhulhR6a3cfWFEx rB1cHsPr4vY9QlRGdUGB8En2GJbqbFlxaVM9RaIHFabGxWIHSwedVJ7pu/by KlRb5sUXNVjdphc0QUNSR81yn/i/qismRv6lNUJu0rMpt9jXj+tcHz+OPTdo WgtfOpi50iJ90+e2Hbvr2KhPko8kAl2WuVOR9rJutW1iNNvVw3r/de8qCUlC p3C9otyJ95UM4d8ahqR2U1S/0uSlLSSslRVOOUa0/F6FK78JFn3mRwm4hHId E32tpaXXI11HixkAO3ZsUkq4TQ+NiS1tvUfFcIz4jl2v8Cjn0YDPIhdEVKzN O+stcyfUy4HnPsGEZJ5NO9FI2rFRH2sxIqyB+1XsqJ2gGcu0oLCW1rl3DtBu rmgUmzjTjp8KL/6jb8jnfdqFVqLUcbSQFJEuveCYV7fRYclNe7UCW+qiHETN /nYd4/SRF6AEK6obYsTI1ml+dy/WbZiHXAaao41/r2bBpRvZVC96ojv+sri8 0nAPK8310iTyKabvC1FRTcvZsdHVOtXTIfy5h3gTv1RyRutP6odmt7DyD21X nldPYQFw11liht6t3qVg0KHtt8GiIW+g40zSFcTKtSYBTPjN9CjZDQZkEc6J jdSYl8Jc9uOh5JGz5qtauLIGpNPmCubUZ/Woyj1hdzMbpnt9VDLYNoxe16hv +uoVA62XYr8WIQZjto5d4AXTAruGJQqOZ+h9P3wIqkWefHHSPi130FsiVhNS BX564yZlPp+kZDc9yqzrINIi7Gac1ZrxdqK4XnVy3zopOFVHsApWYlG4KjlQ O6HtrLs+l/LelRxyfa9e1wb9k1YsI4IiWn0la6opL78TtQsuMS2HYdWO0B9a q6JgNXcZbb0Ok5jGpa4Lv10UwloRDRPH04kNMuzmZextJTgqafD3lhaxf4/t mfUSbSBl1shS9En8rh+j7gU536OpNRn0XRNT2CyYHyEGu34OVWxFo1KdFigR QzN3a8dcmX8bcF2TikBKlipnLBIk2zWuYzyE2xEjdQnJ71C3Q/sK8R4+fa8D tUOAt3NVpVFxCQ7c70fmYO40TR0N1ELvuhZQ1fHtCuO2kwVdhRv2FKGI0tb+ bq3O43duu5pM4pmo0SaNWEfZ+0T16wZAil7T4Fd6AG+nnhtITFwgEkUiWIRB jK750DKvGvioB0tAwExPul2pXfJPaQz6cy9S4/faQ9gV8RWQ3Kzas08YSVdt FRCErwYhdhv4xkzZgnHwFm4CPVgAseIOVEdmwM1FjO0kbSDHd9lnleaaY77G fKtxmJrzTwPPE1TKRG5UJaaUV8xj0gqW129f3oWoau76TOpJnli7nHsY0R8i vO2mrhxoVDwzmmkO2MVEM5JZXXv01/+yQlrNPH1XQ5p8JEg0w2SXJgTOZJrY MKJtDiADj6I9FYn99FxqCPLWcJ11/jjKGZGi8WNPIY8hD6kQUkMrYFFs166w re3T/WnWyn3HM9oM9CYSUv/2t7+djJXa9HooHgA4kDaDsngL67UK3c1VwljA SWpqV9GvQ94Uhf2I7orUuLBOmiqVAxiAwjoqmHN2JXrNF8i1i+5WvaMZp09l 9J0M6Hzo9Q/4kGyWb28EzbgBRXONqNu+b9qEoFWYJxwnoTVz7HFdznh97NIM rGosJflPVYCv4h5yhdEZveA6ctnFS9XdpYnNeFUTBaCmMOYhyPFZFVzmb/R6 RdHqzY6ggUMok5I9YcNoGjJdqywbR8Iz/82NLPJaWtnCjQHjdsVjmEJEaZIB dBn2FQ52LnnxVL6IlwvOWO8kp8sxLo8LhcJFw5mH1699HY5V7fB6UoEUCZ/G 5qGZIeSlGrmlnvfnzzlKN08m+/S8Xmv0vr+c7I8lVqrHR3jxefp4snn7lFFO TbXbMbsOLJpiHrw6X75aHrIPeG3TWh3F1HWNmH2iyKC38y50ld/lOyXCUdTR ANEzVIy9IEXWR4P8wEsgFWIMj/3hcUonRtdbve6uW/WSYZZQuDZhzqiuH6cg jDWFStEozQZpH2+PX0qx4jPts2Iy8pbu5YNelOlWueoq1fj4Zk5pEtXk+7Gn v2W2ZCbNTtbRqmf4408fCX+8O7mvA77TbUaQyp6MDjQfA+erN00XxYB3u/Bm 9RshvOvmo0CIllFDb5bGIm9AtQMCiRufaNYqjJgdIBlCF2MG3dHGh7EdU7ZD Kjtlefqdm6guZjOvTU5R+c/0VkrRgnjetNVEMaSxupQ8eVnWocxqKpICG0oL wYV9rvWfw2wddFz3oXAGXBwH8Z4Syv72VTuycq2vnBUEQ0FPR6NNMF1qtfBz dL2Kaa9czgyapM/mOA6+pNbpcirwXUzk/sjM+VV8dmUOSCZQltDK4GtKko3q hOZIT5H1xcAo/IJIXC0CSVNPb4wYlObZqY0fTunoDXYroJynqKzKI87rFV6U mFHdPXMwhPP1tgPl3SbsyyUVE2eqfVXNfSUJJgUhx1X2PoGjiDmPmb6d4ni3 4qgFfXmyE64zbaNPHVPx7MzjkbzO/k2BJ9plZDZndOuK/3wXlih7mu3fbnn4 iNyFEZEpo26wCtD3yDwRFeb+Kjv7pT+adH3G9FF5z6YZz7vK8k4d4742FEnW wYUF7rNjbUd6eKsbNtSNdVMaQfw9B3olueA6r4eeCiNzU4w4ZbC+/e0BIT+G 8P9xk0br5JpgGo9hrEXb7zj1HVfelkgmHR9iJqBhpf+3YZhD2Da4RX8/Up/Y EgQaQ33OVF21e9vY+uN++qQ8O6G8eKRKe+FcJiGqaH/aNJp13OxaC0lD2wIU Tyi9VRDoCsv39RNPQpgv3RXwQuS3f6eQ/xRm279mC1RO2InoGvmo8yTtKd6P AoOH4vmWDKgOkNfEzJWY97n3vNKJmWKXVQWuq0BK3K3Ua32XPkPGnPhNgG5N i21WjwkVhEnC/pIIbm29hJ/48BRcumuuiiH3gBTCtII8Jviph+3xFnpAcfDC Yv6ebS4ZAO9VYOM6qMB8bUPWHHpTLLTOHWDGWtvn+bN8HnGWCQ8aAH/om8AL 0/hq83iD9S0kpbKteisZTSUJiIX6/Tigc0L1ZVFfEuWwoqVo32iAyEXM3aIu H+0ekiXupxzqke79SYkG+9D0yvpaV2CkV1imIv1OlBcfF+PbropJhqKZ1I5W IkNVKotL1qlywLJ2lheFfS7Bib9f3Mt6j3Zxd+qcV5Oz+G4DNVebz4edXBqU PXSIHJ5NRJ3r9lWlwZVAy/MnT4Yq/KDC7HNKfBXscx+KsGYVWLCgF7fYg64p UNGuqhBrduscTpMeT71fYJN+v3SXqPK7fNDfXE40GURPDdG065OaHLvqDVB3 ztQPqa40EGGQ2IY/+XOwiilwFMNIiGef2/mCaKpcVSSNCxn7ZZRE0LANqN8H KWzfW4XgKyibWVOQBqHdFzXqgdLd9CU9FMmdeI+1IGExH/tGbpmacevqBkOq +XHbmuAeYIncIM6ymxI+iHhf5c9r5ZKzlyLBgdVt9HLaPrtsSpE9nxvVQ0Yq W7qcVmKPhtO4gDSBP/25lPMuII5Hds0Oz7Y29Qz1LHOclJO6loH5VeoTzCzB mvR7PYD9nZX1dunM0hxKyDQMYC3wz5NKlUdhzq7VhmodtD4RW9uu+VxqLEzs uLP1na54FmFeU075PU1Mr5V6WfaEXC2BrO3ruPaVBgM+6AbXA+y0x5UJwClI u5JKRRcNI147aFOHAHFqPTMFir3hpM6qjAAkr6pOie66QOEaydpwJ15aSKP0 9Oo27dVwew28EfpsqWvzhUpEibVJSoMfuw7HbF6wM1sYfKS15NAf0SLZSo9y xOBOY8fcK9pRfLv2PReDIyB7330TRZNH1cyZTU2NpBy2x3uoQr9uo7heTjoZ UjpGTLSmRynAKTfAiFWJRprFUe/YL+cX9ro//N1KSKv8VUXPuOR8DhKSUpJy h/oFze/u6t1VBnuPdlCzLPh+ac07gFQN4OeiaCrdttqyoDrvpCP3Ii16QD8f dJdmV3qdWCoXO2bHaF4Uyj8EQLKvGW9rlqdeeSLdN8AshmpkHaKzkvbl6462 VMGyYkPgospGY5S6NVF8LMtdaD/aCPuSnJe34thNRicJxUWVcw3RLs4CQl3k fr/0buRCEA6E9te71ZoUUNKEyWtS33k++wqBHbcGqBpqIeh1GuA4JqWBGxIU 3hwmPdgdVgrNJuGX/ZN6TUInurid3CHbeNSJFUMtp/Q4dR9IMliFJAmLmJJZ JLRX/PMno14yrF5vlvMPxQuuxwBfBx0mWzmSC+y5HRmv4Uzi+suKQeQtKpsw z9chnvahm5i7yvem+jFYWH+Cqtre1Ks+0eXPeCkvJX3mkmJ1x2qDztLntVKl ar2/6s5F7/G8XDtD6Ve5WkuYh72e18H6pIpMMkKTWbubEUjCar8PRgHV3QwS gS3wsGThLy1N3knztqrFIpzgXM40DCmhymTPWN5NCztw1y/LkJ4vHSzSTUDb nC31wTxgbmqpqrXcAwNdx/69disn0+56F0gWqVmSSsOc24bNjyfTWBvRsZYm 5cOwksZ+fj0XESrbPuiFkNYjjYI4rt1CP489qbjvqC7BrnacJfTXsgxLBTM8 xpy9nJ/HT+7cJyCvCtirvdwWZ2/eI3W2n4MP47+EcjREa/p/MpJTIFHhoT2a n5F+DSpdVLR0/VFWXhS5s9Kf51vdX0TdzFPxz583p30mNtqKnxnWZoN3Ue3J +Xp3QS/tc+pWKHvuM02lOwfI2Dt5vXqrhF2iASMwssoBRpSTiMtUl/ea2Dcr ZObciSv9EDS6SrN2Jd7++ioHCqyeJvOQ7EN+Uv7W8IPuawL+2oc8MJAVYTQq SdlmeA91d/1Nbl6f4m+oz1Ln1ffGy2/GFL0O88k+FYU4IHwb3v17eYFHRMcs wlHSQbtfEVTogtAI6qXrPBWFnre97bp6G0WfU3cBp/guNWp0RM+DKF66sp7x kdKd80gWn9oa2Px2NdL8FO7n+amJQ/qpfZ+7+uJGMkxXzyxZN7Htj1jZE7Pd 3/TblSBiUY/KBMjmpn2HFcNMuEIAVBy3Ju8khHFS6/XSDWky7Lp9dRnEjjIz K8ZmYhucclHz2D7JSaomP4YKTufjNG/b/LBVo2mby8CQqOs57cc/nFuPAQFc YmNVX3fA0D9CqdQwCpuBCsMSTJZ2++1taI8qSRUunl1SXE7dgl+w3OFOzzOw +zb0kehE0dC9zrtArUeovw5WUTZpmLSblyijdSq66/h9i5En9KsgwJhd0xQP wzldNqykwc5kS+p7K9FwXhtr84puTk4bik11XLr8ERluGhAL57M6QsFMUalh Y8nHTAuYOHwf0zo4eXKSnX0/9ujQVpJaIWtRqBeMRlCrWKZVLSmtDCYlZgWa n2PljT2JmTLL1dLZymGA6VTRMHoQDt0lZa3s87ZDUuUfmvAylxAq1KAnasaU S1mxkDMNuRARo/5BU9mrHuQiBUm6T42OpXfVzjwnc6bjkyrKT5VnuJEYC3Cy YrNS+hQ3oN9kR0vTkNqgAqXUgAfkO25pcmYrUJNUYoaLdym+4RORQXLQ+O9p Caz4dOm/4BRBVd8EUUXc7eW5htpDerwBAbXqIlls+VSAfdeKH4MPjlvpEOjU GZgv7uq66ThIxUnHjgh9LohNkh39zzokIUEj2iuyvJxUU4l3WQhpBMnvUApV q2DXdCd5Xe3cyi/z8SM3zWwYlXmabWssrw4aWCGTIjlzoKLOjeibMB5S2zF7 2DJniR1dfJ4/hsyBmJZsb5Vma/6EFFA2PCU23yzFkM7lWqJQoG5BpsrOGUXG 60I6GefKTRF+lIZ8YSPlNDmVhDrzUF6qviMO4NXY22Elw2ZC8AxtvssEz5BN E0vmGs0qmQIbqlz1zai1NRX38tDGrAtc2BS9CZtGcXOW9p0KKokHAHXTMH7Z 93CgMMipUIRJ0oOcgLxO58k1IPDLKtjHsWMwZQu9DIQRxRhVvs1TpoLDjSvU om3Iv4wgcedHkm9V+ei6DdERsCApVYie5TujKJdptmtzUq7T8Yi3gXXSKGey YgJssCDvl4mq/btz6A+RrpNg9uW68ynVokb7u0U+8UHdFrRvh5Wl1QYgNOhQ 4Nq3DBbpDZRG7VNFD9dL9lS49dj9iVxfTn7gQond+2LVtoCdrCkXG3kqajqc lR9aLYpN09M5k/XKlbxNY5ftNp3+fGRuHaFYJQn9HcGR1W0c7ybIu8DomcDG latgaa2mZOZCppJZl1X6nT18JYLqogz2/8+WV2SrhFul2jHtJqgdoLQbFHcX 5HftS5L34Gob/F21HHemjVJV7Vyvm4Y0FLt2/j/60iMPqla0NuSPrIxkom9F GeYsERabYZW0vJ6Ip0R9JnNmfjUH4ycFnWYzm9w0WODlUviGS2LQ6eq+FH4y NIU+JE6TlF2nm0YIkPdk9M6+jS0zJkmwPuUZgTSYqFvCfJCW9qDwtp6qAEjW Rk3Q7aOek0m25nt498QEfgw1IXVVLvLGl2ffjwaDP/Hd1LjhfJuRmrTITFnp YACO43k5ypwnITQFtYQ0K3OGBfZ2NVmzCZ0dWLoNF6N+X+R/BP5TclGfw4dx asPfM+xHfWmu7d66VPk/KxkiGFUKQBccJSk+JuYFKsD5SP6quMOlNFlVwnje 3V+HLbiF89oXVlt0i+xRjr8sApbF5HYwNum0A43NFNVx5QwiM6KV1TZZ+LT4 2bgmKvaH0oSco+TGZihWu9VcHubovi+2JDy8za9DByuqNDshBA8CJ8ssoNyi mitgF5Orc/QvSMo3nbOQ6iVGltxPxkQe0znd8K72e+N3lc1IhlIYe74PsXEG ziNjxKfaU9+4J3MDGYQokcUhzqNQ3nRlPbtuku0U7Dh7S4w40mdVdm2UG3BS T+3YMUmtT4pPcM6PBHf73GMUbJFQF8l50hwJjYw1pYI82a+ZPR4cxUH5219v etv6R2M7uz9o8ql9lVgbVuo6g68Xsnh1PhJe5dsqwIxveioHfkLZmapwcRV3 f2ojjkqdV1DlKi+v8jb8OKnw0X5/Ov20lQjzhXzfaTVtb5MRWyjdPp3Dcccr gVtmutedtyPf9j3AWE14BjiZLuDcogILayDo1UMBtqP3XSfPczyTQX0ljot1 C+nShHICg0uEDwutTQYh176RDr7Ash18E/gbNanLhBNcQdlq4PUbgEixIpUy q0ETjzEL1JOOLrI6cCsjMl6D0LLglp+TtuMzzHfuFm1YwRbhhw9q3+NW7Gu+ VoZIf1i7+C7gelZOOQjWhJy6JhOq6hO5S5xNGbSrxDN+p+bBRGOF2JMwEusy Nz+qqClhrXrIOm3gd0SVccJld4z/er1asnH+e8fteyHBRlKEWPMp9zwhgG76 TKr2/DjFxU+SiH7CXvTnC6pe1ExT8y/g77OYsEfNiXdNgFeCoNffO58NPCfB Yu0+8TqCe+nt+m4T1P1pNvF+GTao5MaM2nZEWwTpep0rEZGVOuJqhnIqhl3t XeZ2B/SHgPVESK3wnIjrRoVPfNIZ1GWHbnQf0KIqQEO9/ZN2PLsN+rXglEUo 2vOq+j2xgjJDvZqwTNho5LDCNOYRDI3PqSHBbl9jV4BK4TjJhCb3FGbPkCn7 zu191tPwNrxi4l+aDozTtBmU0GYKKsr9jdFUg5vyR3egpOhYikOd1Kxku2sO k/nIMbXNFpOfJnmMZ8SFrZIluMmauAngS13fjn1W/MabruJzPtHcJCv16dMo +p9VeH8OO/oS1lrybHR1i+pbLgBhspokScYiqv1I64z68fGkS/CsQlgXlutj E0FxCe8zu03araSp+hXRUlkGw/Nwbgfx2YycUk7uoH63vAvhr1R04bL4F5lu iivglr46jzvpumlwG7Y6yXTuah3sw7RBcnsjY4b2gpBKbmuUFwRhpN1Zmz9R DjDmhDYILx0uzW3A9Pcj6pw6EbFdtW8E3DRh2ndufqleSJ3i3bBJCsP3yOik EKJs0zeN94yWI2errHxf+vZtxP9TEtIKqKqGVdu4aX+NoK7vAv0cie6RWHRi pYot0v4N2cajnUneQbc08XBy45WHPjBsFnRbSSadqqTSSn7aN+1Dq0uTSF0x Zh7+MDTcz+SaETKlf7By+1zKFnRm7HzY34X4nHwNH19rk89BEcF5cqqSzufT DP0sTWStxUbU+/UMouEkKWB5MC7ceOpXP0UGJBX7rnVHx2w9KLhA40XotWNS vzNlLhgWA5OImv67+FCKdmqmzBpXH4DJ5CipbDQfF2v+QTHIOeP61xr3qx7C nOQ8oaeU/XaMFHI4Ot0HBCXoMtJGEc/wVhKn6Q4YYGx/3fRmSb2CtOGlAzft 2N2KL1CvqmCSU3UQde2mKcBZ/aIlY38PPJhXohdbMB7/NtgCmc6ydu37se+3 DXDNOpSaTyhhVGZFvHnFgWoZff7MCpyExz4VdwHRBhHhuGVniIiY17iNExOj R7eKeq8n+rxOpQyYdRuWtZYv9ZL26VPvaTXDs7zS75KY9ODmUGWfsPbXNsu5 v3drqPBwF20HONlD9cvi1NsTN6PibL+fKBFwPoyn8oye2mNwInpOZgvcdt+n 7CCtAOnJLejdaZLXXW2WO9TeFtlyyQOdJ1Wbqvp75cL964qcoKVHzYQkBRdP tlxpWGaVr6JHqaZk7Uh/+9J87IuXrIdQVbkibLv1n+EkEaAfSbCH37m+cpNS wBGivwknZyRgI0vE0npabbhcVL623TRLBD0+NWt7dJKoXGJ6NRt0i1piG3LJ Nib2QMk5BE0jG+kRS7cBk3q0//mtq7SdMANN+giM7V749LZ8hgA4FQroK9AE T3uL20ZvzeYue8Y9Hji3Ay7vy6n+SZ6Um6CQqxXM9DyZ3JgZdh2tTBt95FGw r5c4Oav8izMonvj3U1tV89SfFiMyJSfyJhtJ97+O6P+qBOruDzkT5/7TKhHk IZ7Ygz42b8JhGbXiU8SnUfEWeGtrbgUTDN5k0wWCG3j2y10/X4o951tmPsSO MrSX5QkiN2nfnqeGmtYvlXGe1yRKdpsOw30XIiJHSTNr6BDUaK0wovV4nPuA 3BrCDMgBARed3Hls6t3e3heB1QfVvpIc5Mcp1NimnWPYFXi3SQn5xXnubyjD AAkJvV0NI1fhbHI2PKNhM3KL7P+RissRtwk4YORUrJ1vEK1JIPmQRL3K8vDJ ToLbriv4eh9jao6NzShK9J4Qh1MFeti/JoVkI1YUYYqrX7MQc+tEITmaBLJO qKaoaT/2sLKE9LYpCLkOfajtrJG9kfn5VodZgFhVLygY8/EcZ2iYeMnr07Bb VcPZzAdzLqbCZoE/Kajl0BehythXy8crwt8tbJSUFda80DEyKg7SuxXLQuKb wYtyeGqSSIvv/MO2v3/qDUqOo/Ws5UwgGtR0JNARRqPyBdRDsqjQ2lI3mE80 bmPfvg16G7GSAFYZCBIXStXK3AW1URkGkhkML9AxYIHqOld0kXf7OqwwKt6+ h6tNhMfZGuifYn+T0411gPLCtV8096pQm7EGrnt994pgJjuXs42Pf2sbY+3r SnJP/FXuVuUWgLfpJaCISuXoLVIx4HPzs8dyng6wU1XW7PSQiGq3IsOInlUJ tvqeDRrVjCHY8zsfKqkTwSakzfD7tkWVYoIpWEB3T6Vfdm62f1Aj1mbQbCLN S/5O0bOKajyZ5XDR4WMHg+Ye23+a3nOW/1qNXjZPhjCryKBBypmoFM9Cmsa+ L1mnSyqrvrUgBhHpgnVPVLruurgIHMXBfOrOk22YLR0tdkHrGLmb9ttNOKZV h6UrZY4Ljt8Hb3EIUJsXrPgg9lTnfVABGodOuRqzQZBTfj501rvazGR4Of08 a3XPWxKYrjq0g+XfBFlFp0RmQnpiSeSRMf8VmGgvj1cTDrSEK46W5b+h4Aw5 ogRLmT3U/Jh8Fjzhu9WGVOMhdsvsFVUW38GoQ0fZoe/yzC793De0aFueriRD n6kDcQWVgrJpwVjFi9IkVCeoipCfme9GG5eu/VMEKW2lJpR8xs038OO01xze YK5KNdDWCtnyIKxblyoYtmOohFxjdxXjAxib1Nj/OyoFX7rX6yXEut98AfUq 7L06vdra76TvfnX4XTts017426PPvwxpQ1WxAfuUxiINXFBNmoUpSppQPgt+ sVpV0l+pJOTKwXkxVfRKdS4qEmutUGcd68guuAmATPPYfl22IfvQOeIC15Y7 7Brm8PJRp9fVaq0d/XON3I18LuXFE+FLkHaqlPXMdOQIDzpEtw2aMwzaJz0X aqOSblkcRXY0Sob0ya0r6u6OzBXdxuZPlU6yOAmcwqLVrylRTY0G2Fm1zSKM wSiKT1JTCcLV6sWbYF13rZ9Mkd609BTagpo5K918HYqi6o+c/mqKUYVrZ8So htfp9Kx400rpbvmHMLY54rGIWB+z5Lw38CKn4iUFvmZN/tRjnOkjGWOUHqBP tSwsw45UIZrr56118/WDTcVX5u8Umdi0a/eY3oYEUtWOIYI3ruWqCXfp5G7l e1UaFh2Tbt/1y5+tNAQt1vw9L+RssZPeo3M1ZBp9taKWqdcQlIn/DGihkqNj AHz5CakD6TIwJwgu7J/KDaHqQ4KcIoK9VFv6TXmm9k/xjzM6unERefUN95fN RkbKjcbuwtBlGJG+HlFuWoJAcoSCWm5BPX8yEc4HrO073cEXnAj76KYYBpNd VuGFD9BTXys0urIRo7b0dGFTch+L1wED7J8Y/0yQZFFOW/Yvf/nL3FO4C30b LiHXd3Kp0j4WfsJLf0gmXtMNxllANooqCaNmNCuYs1VlJ/WB2hS6A74LS6u4 13R6FZg0Lw5WQ+fxNpeWEv4Jya6bKCtelZaESMdCgTphzl2WRzU75j7dXy9v TamqImUE7DZjUZesO1hVhIaaPwsRKPJGv9kcUT4rzMw+kxTa4Rbyc7AVKQnI 1ypkMq+gT4pgeA4SQZOYwkc6dV6QnTaxL3dBNyP661N391rALiUQHcnoSVEv 9AC7YLnpTSrwhrdZ1C+/lLGYDPeWBj302GFXyNboTM7DbM31T4ECe6H83Syk NYYDWaeZlbaW+Vqi9Im8lD+F0802A9Wkr77XXQawDRpwJIUSI0ZmCATxTR8C YY6GIejAN2GmZKPw2KV58e9IwcgXwN722JhhHFH0VgHf6f35z4fF1Ccjl6f+ eKVv+krke9Ex2iuUWZWSNWTCPsgTO9LquFzgyLgErj/Xke3B4tgknWcqic7H 8di/U9uu8vJLdoYdjxevPVXRrAb8n1BheO7qmI5xFk2xV7Y8Nt108LQPW1rX XWSolplNRNUvu1qO3odjJgLk7s25rG2SUdcYlITNshjbkCUFcEG6oKblwN83 faUx9UKuAzVPP1au/huXgLXwEGwJLnRCVE0JxCpkWa8dcPkUrA32i/emOOI9 yadkm0c6JZe+fV+8OuuJK7NT0fUyRMiRteCjTITYZ6X6/BicVoe+1ZGupydA b5QObolEe4thBUyjjnMwJ5kxwCdNCgm+aoFrDwxp/unVb5uywJFW4ObndYRh syMkXGydSbRV5LvCQ9XJuXJ5U+JKqAdoDbysaDZ7Hrk+KC24QvmZqKaHYEpk CpfzcN3ny2ikfv58U+N47OTegrtu4tg/vZZ9ambWx3DbLNn4jpd4zHWb1YZi uoy7Tk2cHvPcjZ8kDy4JPWo9vm+LiqeaTqLKxPZpK6eJiG3bFtkWix3Wqe4c sm9eSUGXqWKmgo5UFVOuhygi1ttTNjynuUxtpYcMjuoHvr7eBSWILKgc4MKm zCoxGjErWq7o7uVxCMvpk0KlD2GRCJR0C91adBP1tGSHvBKdnUgxv/T1io6W XBE1TXmo9UtroYVxVvnmQDB7s/a2R2DSXUispJatO2i8bCWmPQUZC5s5lXxM CG6TRXNzm+Yr12aOXV1S7j6O4nZ8zSKZpsAjtVRmLxsOxArFvvWgoq6q+o1a JsMCvAnqhF6RBrjnMlfr+nmFOIydk7JFxwUH41PMyx5Kl/3/ZbBFKrOSZrl+ 43Jj5ED+rHwzsu3OcVReXLXP1bN17UelvURY0R5WIcsecH+e4yz6TlpsyJv1 LIPzfITYruTMIjLm3u1aU0JA6EXlgCrPxskgKEd6RSgY0tt367xJBf6tesr+ wu3XQ5/+vEafdsw+r1r1DMMfa0/+i+4X93XdioUE0lf0En0TWcvR/NS1BMp2 jObMgKWPY2cPXUdmh1DRyx44RSKQ6AyTmxCjoiVdEl0j33f7IFElWrWEf2zS 8RBsmez1YIlHSTPXzruQcdkDHmageZIYx0a0CW52CVGU0XbpG54UAef6QVkm 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 XtNc3d8PP3xGgLVHcjytvOQ9LcSXIbJJHdFzjONl5BjjrzJc8Kg0S09M537F BxAbVLmZMnZQTiemoegpv18p61GOReDYDz20jcn4mNeVIdtKMJjTYhgk+2ow efVT8RJMq6syaQj0TkI2JgFE6hNzSf0sNCXIqNhA4QguSw/hgFH6ehxzZkxB QidjE56dMZG9ymCRs5luO2XaTp9B+jptxg4jdhWdhmyp25HUk5xJVYKJrkGq rgD9TtGFea6jWPYrcBptGoGA38hbPAqrIE+Gim+CHEsqRwE/WvWuQ7mgjfbR y7z/cucAqhiKXWmkLjc993GuM7QXqaicJb+d2ZYC79M2F19tn0a4472H3Jjx +dg9/v4UjUzojr3vHFiAKGPgKkhqXHtzVOI1fljlB6hwydw1cLqiFQSrLjG5 cJavbDKeLt+rWHkMVkfut8v/D2PC2xFT+B31LFlfT12KmxbMKEYlPZWDwvJS GAnv64KmtrL/2Z7H6o76C6G2K3hGE23e8lt5tP0anAnK20qmfRzr1VduIZbf ne6uVeNfFVV/3avqMHYGbCJh1JdGKHgzlH1ZX5ZtNm7aP4TglAVv/bzo0z9S 9/tnbed2BjSjPaVXmP6Nt8P0HsWAPWkKvRMTkL0zxNlXd+si7Mk+rXfN5LKM 3y9f7kYwpYAShW0pRqXwyZpiOehKmDenCwuEFVhr7edwkvbvn0XZloOF0uPy KK7Y3ca1h7OFibei69NFwKfaa+H5Yjj8to+J74JtDs7jvhDq7xcN5SXuc1Pt vN8t/38R5JWsMONtnLKmKVc5sbtkl5dx/rB41c+Ksj9vLFPFWg4baxSO9zph 5h6VQ7WJAtbmElZKF+Ml17MljLuzYN19UaujvskgJk7+sYU/jOGAvvcKTNjB WOs+eT8pmvtpUfaX7S38bjWhK2a4OicTAvxtOe4lvZfa+rTpXhHr703PdyzL K90+H4t6/92xUy8g+dnMRNZ5DOWDl5zLRwJZ3HlLec6KmEYyyR8o2rhF7l+3 X0kbf7xzEarQ9X8XZX9NfQsztM8PMO3frGD0Mj2wmU9xdeHc0oIyPk7wj79+ rkHYuArtdZzqmlh9uHDKVPavouzvRZmSAcwg3cYxOIAwX9qb0pNOVSEV5Kx0 KRUMuC/qzc/tq5ySoeqXTcq6ib3W0+X/X2xUXpFiYGe/1jBN5TTP9iFRmP78 hXx5c73UfrSY61cqYx6P3cVK6f36G94zKmI=\ \>"], "Text", CellMargins->{{28.625, Inherited}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0, ImageSize->{246.5, 326}, ImageMargins->{{34.625, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}], Cell[BoxData[ RowBox[{"The", " ", "Hagelin"}]], "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "The ", StyleBox["Hagelin", FontSlant->"Italic"], ", invented by the Swede B. Hagelin and used by the U.S. Army, has 6 rotors \ with 26, resp. 25, 23, 21, 19 and 17 pins. Each of these pins can be put into \ an active or passive position by letting it stick out to the left or right of \ the rotor. After encryption of a letter (depending on the setting of these \ pins and a rotating cylinder), the 6 rotors all turn one position. So, after \ 26 encryptions the first rotor is back in its original position. For the \ sixth rotor this takes only 17 encryptions." }], "Text", TextAlignment->Left, TextJustification->0], Cell[CellGroupData[{ Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0 0.0025 0 0.00412023 [ [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath 0 g .5 Mabswid .25 .35022 m .325 .35022 L .325 .39142 L .25 .39142 L .25 .43262 L .325 .43262 L .325 .47383 L .25 .47383 L s .35 .3461 m .425 .3461 L .425 .38854 L .35 .38854 L .35 .42727 L .425 .42727 L .425 .47383 L .35 .47383 L s .45 .33786 m .525 .33786 L .525 .38318 L .45 .38318 L .45 .4285 L .525 .4285 L .525 .47383 L .45 .47383 L s .55 .32962 m .625 .32962 L .625 .37906 L .55 .37906 L .55 .42438 L .625 .42438 L .625 .47383 L .55 .47383 L s .65 .32138 m .725 .32138 L .725 .37082 L .65 .37082 L .65 .42438 L .725 .42438 L .725 .47383 L .65 .47383 L s .75 .31314 m .825 .31314 L .825 .3667 L .75 .3667 L .75 .42026 L .825 .42026 L .825 .47383 L .75 .47383 L s .45 .18541 m .525 .18541 L .525 .59743 L .45 .59743 L .45 .18541 L s .55 .18541 m .625 .18541 L .625 .59743 L .55 .59743 L .55 .18541 L s .65 .18541 m .725 .18541 L .725 .59743 L .65 .59743 L .65 .18541 L s .75 .18541 m .825 .18541 L .825 .59743 L .75 .59743 L .75 .18541 L s .35 .18541 m .425 .18541 L .425 .59743 L .35 .59743 L .35 .18541 L s .25 .18541 m .325 .18541 L .325 .59743 L .25 .59743 L .25 .18541 L s gsave .2875 .30902 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .2875 .3667 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (y) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .2875 .4079 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (z) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .2875 .4491 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (a) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .2875 .51503 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .3875 .3049 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .3875 .36382 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (x) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .3875 .40667 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (y) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .3875 .4491 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (a) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .3875 .51503 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .6875 .28018 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .6875 .3461 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (r) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .6875 .39966 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .6875 .4491 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (a) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .6875 .51503 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .7875 .27193 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .7875 .34198 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (p) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .7875 .39554 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (q) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .7875 .4491 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (a) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .7875 .51503 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .4875 .29666 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .4875 .35846 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (v) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .4875 .40378 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (w) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .4875 .4491 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (a) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .4875 .51503 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .5875 .28842 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .5875 .35434 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (t) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .5875 .39966 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (u) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .5875 .4491 -66.5938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 460.000000 16.562500 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (a) show 70.187500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .5875 .51503 -66.5938 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 460.000000 17.875000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.125000 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\[RightGuillemet]) show 70.187500 14.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Courier grestore gsave .2875 .0824 -71.375 -10.75 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.5 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.500000 moveto 460.000000 17.500000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.500000 lineto closepath clip newpath 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (26) show 79.750000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .3875 .0824 -71.375 -10.75 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.5 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.500000 moveto 460.000000 17.500000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.500000 lineto closepath clip newpath 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (25) show 79.750000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .4875 .0824 -71.375 -10.75 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.5 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.500000 moveto 460.000000 17.500000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.500000 lineto closepath clip newpath 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (23) show 79.750000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .5875 .0824 -71.375 -10.75 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.5 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.500000 moveto 460.000000 17.500000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.500000 lineto closepath clip newpath 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (21) show 79.750000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .6875 .0824 -71.375 -10.75 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.5 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.500000 moveto 460.000000 17.500000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.500000 lineto closepath clip newpath 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (19) show 79.750000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .7875 .0824 -71.375 -10.75 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.5 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.500000 moveto 460.000000 17.500000 lineto 460.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.500000 lineto closepath clip newpath 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (17) show 79.750000 13.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore % End of Graphics MathPictureEnd \ \>"], "Text", CellMargins->{{Inherited, 84.625}, {Inherited, Inherited}}, PageBreakWithin->False, TextAlignment->Center, TextJustification->0, ImageSize->{267.375, 165}, ImageMargins->{{54, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 m7AJm7AJm7AJm7AzwA579F/0/UlX7q38A68d0jo=\ \>"], ImageRangeCache->{{{0, 400.063}, {246.5, 0}} -> {-0.611034, -0.000750002, \ 1.50435, 0.912781}}], Cell["\<\ The six rotors in the Hagelin machine, each with its own number of positions.\ \>", "NumberedFigure", CellMargins->{{18, 134.25}, {Inherited, Inherited}}, PageBreakWithin->False, TextAlignment->Center, TextJustification->0] }, Closed]] }, Closed]], Cell[TextData[{ "Since the number of pins on the rotors are coprime, the Hagelin can be \ viewed as a mechanical Vigen\[EGrave]re cryptosystem with period ", Cell[BoxData[ FormBox[ RowBox[{ "26", "\[Times]", "25", "\[Times]", "23", "\[Times]", "21", "\[Times]", "19", "\[Times]", "17"}], TraditionalForm]]], " = 101,405,850. We refer the reader who is interested in the cryptanalysis \ of the Hagelin to Section 2.3 in ", ButtonBox["[BekP82]", BaseStyle->"Hyperlink", ButtonData:>"RefBek82"], "." }], "Text", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "Enigma" }], "Subsection", PageBreakAbove->True, CellTags->"SubSClass Enigma"], Cell[GraphicsData["CompressedBitmap", "\<\ eJzsvT+MZUmW3ted7955k9Wt2ukd7iwlLckVBRoEIQhryGizAYECBhAElFne JiGATECgwKSXZprpprwy22x57bbZZhkyyhPKLDPNdEsvT8YXvy9ORNaswJ1B T/dxqt7N99698eec7zvvixMn/te//8///n//P/7+P/+Hf/f3f/u//Ke//z// /X/4d1d/+2//4386/enw+WefHb777LP9//nbzx5ff/zsM/1z9tnHjx/3z+7v 7+PV4bOHh4f98dXZ46v2rl4dHj933v+2je+mu2z91dnT/d6/f3/47O3bt2dP n3v37l27/PDhw9lnP/74Y/twXMaH9bX4W3v39LW4wcFexTfipvG5+Mbpcn+8 PD59Ld5NN43vxuXpVntvVeuCPhIDEU/bxue2+8XD1bQYoe3pDe53utyfnqH+ Hh77uz1eHj774YcfWgtOf2vdP/3NB+e7775rD4q/MVZx+7hfPC3ejeZqTFsv T29sNjgxLvHIuNRzo1X+N/obl3Hn77///qy3pV1GW6JVaUJpc3Qh7hz9je/G 5emNdhnPiPvFSMbl6Y396Rtx+e2337ZnxN9OH+Yu+1NLTx9pDdfXWjPijZiZ +Fw8KD6nFrTn0sH4btyFSdGIf/n03Ghf2AZ31vjt/SM+PTSIFmiI26zGGxhX tCBNRcyWxqpdqgvtkXrlrha3kjm6qSS3wp7ja+Ek0T45RBsNjDCaG5dy8XZ5 euPYTe/YMWK3W8W7p79t5pLhv3rFN37TUeX/7Sj1Lx9fffZZQVlBWUFZQdnP AsqiO/r4WYey+PhxBLXmqAmiBvDj1cG+qxZuI3w49DAAmH9cnt7dDMoSsgnF DuOg8Ma+AGcHP2BLX/vEJfPFc/XG0cA0zVICU/Vjz69ofUJeEJW+JbyNS4gi Pnx694sM9prurdvx0WY/tZ4W8IYu92yGwxw5M6gtPmo0SJ6+PbnOMPt7H3tH CXXV4SNaBT4OBHXoQDyxDy1V6zf7yMyO6wmVCexmokwPs3V6tXWjdtfQR7g8 PpmtHrk/jdAz7sJc+l1SEMElKDGY1J5fDbHMcXHnmLfj0hHleY5Eyf1oAZeY QHwNdI9Ox7uaae9WAmJIZnDT3Qw4+RZ3To6dkJdZTUOS8OX06osx+It3/68C 3QLdAt0C3QLdAt0C3QLdAt0C3Z836J7+O44gOUHocNsVwDIF6ck+tGqrm9Kp s8enfsqs9/7KZbf3XWVNcxN3Tj41fG7PaDd4ehrkbeliXMbXkmcy/3pQa1UI cKkzTLgud/uGIGpSkbDjhJ4JM1ceTKfBRyZ0lrWmViG/gqNxK1TgBFF4IcOU 5letd/UZU1mhe/KLmAoNZ+I/vwvvvm+S3csMlzzjWbhEHU9ch4Fgf+DjMPaA 0ISUvGKSmX2MIU2ozPHMFHgCmjQkK+aaARvTO1p/eeQwPY5EcauEqAn77138 nKDlvsugCUY+jSqAEaOmzwFQ5/1vU8yYGskgDuHiuQFFgBbUh4IcOAQUhCxN MBTvxiUSedwlLuMNLSL45z40IfvQFfP2SGwyLmkQXjtAS7NJfcS/hoMlhsO4 EsOBV0NMgZD9VfFL8UvxS/FL8Uvxyx+ZX/bF9O3Pz/D9pBzt46zv/W+bQd5A Lb7mDujyoAQfV1dXbWRubm5aSsTt7W0bhTdv3rQkgJiR00cmxAcW4sNxv4uL izbrZFIkkASdNM1nn93d3R0+u76+PrPnnv7mwkXcOdpyeXnpZhPPjQ9ji/G1 U5uPTx+OFsRHEuyn9frIcogWxK1Or5qLkf4A6sSruCmWKv5zww2ziYGNvIi4 VSDHwOiTdAIMDq/S0LmsljJ+GHuly7QHxehGS6Or0dzoL1YO63HJw1di1YDz ia4B5z3bAX4bgwOY4oDYMwy8Mm+clzSJZ9mR6GyIv/ymJHQ8w5MT8XyKT+GN 3QZHnXEkT5NHg4Zwx1Fghenq/mYtHVqwFnSQ6QYm/I2hzwxkINcn1O/TnV8s wuj/pr/678enTVynLrx44qaHpjC5/PYHGfMst5TWM8QrvsdDNVtb/xURH/mL wv7C/sL+wv7C/l8u9quF+3NtOI5juf6lKDfZxrlxu0v6BL9H0iW/ZQIpw+cD zk+vjga1wyv/kc1PdfwiAFts4ZCHLSL84PNxeYLk/akZgDP0FSwQ7Tvd3sE5 CEU85PYe7+qmnn48/MhubY4Pn57R8pyjC5FciwNGz09j5Q+KcYn1Mjp9usu0 EndqRiOFE1957vP7npg7zCqy0B9aYVvhGQpTApy41ddff+0ZyjHiD10xON30 5RLEh1/L3j5ML8mNMeyvX79uXT29ap+LgYjRBSnxhQTEtIURAomSokbgk0w+ vhazj4XFK4UEvjY7g/OkWDEBAz/74jPDRAsUTvjoInDMAIuGtI34A/hNYMWk 3PdkBcwnTEC2MS1wYz4zTK8zKh7WAjmx6rEb4Tb28sv+tb9a3ArYfzmC5TY+ /D8WwBbAFsAWwBbAFsAWwBbAFsAWwP55Amwasgdfp13h7bOtnuYhmj6PjA+j kj6P2Sa0Ibj5RQiEccme3PDCeONd3zOsd6fsBSHloUt7DaEBHB5OCgiwz6I9 lqAP7/YGpglqJ8/k4YGK3B5RmM+Fu7PT+m3fNh4PClEYuIy/nd7dzbXRg/U3 z6C+79pqAGxcasXb+Qr/HubXJ57PMTgf+8L7Q5MjP5E9rHe3J1z5/e9/71K/ BsfVSXKGo/sfR4XxWS00MTrJNMx+PAiW18A6jwNWaUggeDwgIcdgna4Icsld YgyYlFODWvmAxGsfvOSBtyXIEidOSLTyX7yWaQxG0joI+ROrHn16V8nRbgrU DuDHq+0pbglPERSshNiVmLqWUGdcOx8f2SKxiJzEZsfFd1/0h39pvWQkYwIi SorlIgUMzSHiGQFpsPd9z8KnLamDUNVAuUnCT52eii6EgwEKMaYxodEqcezf jN1Kq4hHm27SarTsFX70XxXJFMkUyRTJFMkUyfwpSOZLG7I0//N8rRLr12vV H9qOvinvIP2WXkEehpsUppO1AaHtQcp8aNMX1hGX5LGTnQJWK/d+Wh9Wg3w/ Iimr8d2gqvkbrp+oM1O6ephcYNfHJgdMitowGkfDM6AnXqUf9++f25IKcpwa 3vyWzwWRMQapC2paGqbdRuN0g5c2l0ytJL7WaXJrJEetNaTEZmTF4KMAdjxD 7OOSDWpX9FKaY7uMAljIOHhrEh9WkpfofzLbVeu5c3z41atXbiqh1TELEePd j6oTxp94PI3QR9eQXE1iQrHYmABpUocOCwlNEjc9mwO/LRuZgs64fXQ/LuGN U1tWoeuLfmcy516Of2ujKxDHhVL+fMLHv8xhdMQoJxZtgBf3iyGJ0Au2PbXq q+fD7YFUPVSPnkeIi+2G4wRxg9Dy2v/x6SNBQWEgVJM7me1meX8aq18VnBec F5wXnBec/6zgXG3YljM3t9VnLv3mSb8e34+7H0FowGDl0PEub5z6NO2DfN9T fpGKeAa1SWO1NIbsZEVtTTOGIl69b6nah76M6quCNENVT1v38W+14NCLeCZR oTlHuhWTEa8kb7WHo58Iona7HwidgB3h52NfbpWlAvHtw/FDPszrQ19FZuWM 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 0PTWnsxE3bVUyM2Ut7vHlL803eKcKWcQ3k0oEI+MrM8ITwjbLnudE4KraG46 9YiJx2Gh6xtPnJ7OlyWORBxWIOCRxBBu+xytePJuTKiMV+Kr9kuFnqddmAo7 3GEphcIMJozg9lA4oRLCfIzB27dvnQmfzaqchdFtJMt00M1u+ZXSXRN5FScW JxYnFicWJxYnFicmTiRzBeaC3FYSKdz5sVejZAseQiuZMKS+sKtuKGLZUm7S 7dP2PbSmGN8oKxkD/6odM+ooJs4Bp1xbw5QgLXQRHEbONt0++RkogYEz6yAR hEd5Bax30F0RMzypATZLRfrSI5Fmk8yJNgTEp0AAWk9dpfUoPSBbktoQClGI 77x2wh9KKEkjidshGg3E6OpU4hLQCdJKgjbgDPRgG4w43A79J6X2m2++cTkZ 8oDwZC+7zVai3KEzu/VDFJ6yXvwMI2CQ6HFYJJhiBSae5oL9SetMYQJdOI3Q i25rx6eIEj9KHIYsSRnNVS3Ii55+RgiEE/O15I2rWIsWqB/nFtDc9O282lLa 2pKomZNoKP5x05JlHIyYUMJAfFBNmwpWRl1PIIgalFDLQNwUk5zmjROxbrp2 Gh8OgZJNcSGRgj7DGTeTPgtoJcl/CCy8ShDIxTOGsNyrxMbDE8OtFNOHfqqa eM2/ob+dj0zIXdKHeypN0WHRYdFh0WHRYdFh0WHRYdFh0WHRYdFh0WHRoReE 0auWeRNsJlo62hszr7XGUb5sdQpQWkpMRJuWIm77+TNg8OlvRzOgYR1kz46Q 8Ay1nWWb5CGgNraNs9319DSVuj10Ad0Be4Xu1/1oYZZosGieC2zhDRhVotz4 xrAu5dj6ph+JImOeUuCgjNvnCtdCLXc9pxbaBFcAcRALCgJqL3rSXOoHkCyU ZeXJmZVB1DNa/eabXj83MT/8TN9uW6IuQDLl8sZzyeUl6mJSZKzTqimtP3X6 hUVTaVGRr9EZLrESFmYgbs3+ek31ohUwns6UZs4J/riVTGCzEAPmYjGJHl30 fEhcl2U+yBIHS2Ebn0uzpR55nWdiVbIF5OLuR9wlcWfMYNrMiNOlWPC2Z30C FFAkUSvOxPilcDY2jaawErvCDSBfkapPLYjErEYHY4HztqdvxmW0RVDlxhUo etfPBx8sIh0y5I0ECVOgzNbnZOMY67Dw26I4ziIQ7Xzx+OpFJ63jIoGUV+fP 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 xSDYMaEp6hrAw6P5pAYzVim+xrjU/aMZZppVuoWdQl93fYcacE0wBAQxH6jB RLwpw/0Z7c/XmLh8aEeUPpuh+OlNbJ8X9RX1FfUV9RX1FfX9Qqlv0BIPpiUO xST3/EoN9v1mnD86pILsduSN+NQLW8YN3r596+dTDnqbL0kmU7/pW8jQ1gCN tP2Cd8FCRFAsK2kqYByQhwcPMqKbCMLoZT+mHptIjJ7I7aYnsmAsFEiUPuYS EMiGogv+QK/AWzivaM7hMo39INw6skkhcRjEZXkaAhHvzqzcWI/JwynjQcFh 4XF0FS0M3RClhwQGxj6tmkMPpDfc9vNH+Rpbr5huZiapy5p9xxrYGzNLs4qJ JsX+66+/9l1hdDAZzZBn5M+Fc2Snz+Y8ORpHg0IOpW/p4aioCGdppkWlnk2l sGg30yOYvOwb1iIsenbEU8oI4j/emDw5hR0QiuzZbZfpQbiV7R6fGnnxuCHs su86ZZITPJC1JtbzttBwBYTtMpJCIFqQgacxtXgUAUPc4GIsQsS8MZJprYfS mhqmT8TXHA6Fwnnp22+ntSNIH3OECdmvnHaZ8ca9H1aahMxEfZ6LOOif2/hG 0WHRYdFh0WHRYdFh0WHRYdFh0WHRYdFh0WHRoW08QIhN295YGIQsh6zPdZnm 1Z67VNgrLtWx9T689NwgS9wJXfuqHVvTcguZ3ABOXfp+kLtWesotC+Felr9m PVnHPjIcVunVd8AQfDlW1eAcLSL4USd8JCF+WqhIyv+rXoWXz4EmYKYoLRVx dkwHl3ExoZgfDMIs0F/6cdVPehEu+wLilWfstQ7qZBGPb/CpmA/tePPVX2qx xYPYDaSc0Ja8G/Mbf2Ofls7vIS5wAk1cx0olSzmsRQJvRFj4PLWLY6Ju2jLk FK1cjPWYGA3aN7za7G/kdULIgJqmcV1+mTDrVa+AxXSzGMxcpgiLZySUfT3u 5ktx2gouiWq4fRq65LBpcYq4FPZJy17Unhu6sFlnAlXggwvfunawLohKfU2Q mJv+wtQraiah8rqvZw/ec7RvKKRKhZg9uDqx1KGvQKY2t+5zFyFm6zQDdve4 wTbsnoxqLkXmvkiJsb72rc+HfvsW7VEsMlFVJKVAJyz4sUHv9BH23O22Tigm 3MZv9KrNxXXFdcV1xXXFdcV1P2+u2+0WJ0I5jLKkEw8cplf8BvXTWPXGbzNj kgR6epBPOMCetJKbvkEliX0kT5IpmGiJH/zQjeyEkhqOcaiPSCcAO41EPVMK pl+CNQmIB3DxOsoDsk3Eg4HLrF3AQrNA6AqXlQk352U0YKl0CYpJZ5nyCJPe i5tI82FCz+1+8q72EV7FM8IppbP4TYcgwpmfmQF0gTcOj41iE8padEnpuqc9 xq4/kcJuMlPcmSMs4d0E0xQYic+lg2JpPc1I43fbj8FBaktqEpeDpudIjgco lJu0P/XcIywGgvm97ieqYkiYgEK5baQgjwUJn5LoRj8GQplOlb3tZ0XBwAo2 znKDSFvGifEUvjYEG57am5JyI5CSa7RxxsEG6bMNMXWo6S9AphE/jgsMHo3e tkriWwYyes5A0HPhkB/CnPRKuQHZsB7KxWWMgSLA/Wk4yfRFkeQS100p2UxA guG4fTCcqOM4ypJny0u94gzWIKVz29d3347ucSqa1vCK3IrcityK3Ircitx+ PuQ2ZZCk4in622Yq5f3jmXdJSyQtJZiLy3nTPb9Qm14ZP6P5/b9SetLPfFiF n/liFVd1rsdTRFALUX/Cyk+j7+UkVEgDATBlVHiFSpHM0WBQ5LEbhgyq4nRu BmCVUBGzFiA6dsU3VAhiMylQm36mhAh0AuBDRLs9jQsohuMPN92NxzUV7XPU Dn01HnlKDpAUOm7v296GLUGTQpdCFoIIIC9domfRmSAt4eihi4yN63jkSvAU SjiVwpgJFsBWxp7yokwAARJ9Q6bjQdFmKuQAakhodAs96/oxo4LI5KaloHiZ IT5MvJToGqX2WRE+kSoRAgaiy73PlrsLExopLZAvkQ7eo2f4njvwViHGxLEE z5e9vgoTyrsoecBN0iZft5Ip1Go6Pl0m7X5Wan1dIsRXuImQnklGRhxGfO/x MMsP09HQ6bdDzLliikS07j3xDM2WW6ciys3UR1yXWiqxt5utdSKCVS0V/vbl MrVk2JvX19eKuYq5irmKuYq5irmKuYq5irmKuYq5irmKuf54zCUKYl/abudv P0tQadsbciS0xCoYl6idQVpUASOxkeNyhjUZz49hkJk+mAaOgPA05r68wzLG bJou5rP7BC6BIxLlQl/AArajxQa/C/B22bb1bIZdfAQ7vl0U8lmtw/Eul/E5 XTJ0u43V5XgcN8grz5zsPaVwve5pigwO8JGy/VKEcPV4+svluLQmMPBD1mUM vv0sbg9YSeX33U8pLxGnpAvwEKuwoDufo14ZOBqtJ2hK38WA0xyxRIOBrJA3 Wq/NRrt1CwJgtYKCZ9gf0dlABcfMseLxtd3zYRbZYD0tJXpnmKg5LtjsDWoI i659zY1nMJxpVyKLwbBUohuFBHu3uglaIFpFXb7cyyDe9ZJXgXpDIiLbz475 ayxYcXtoE6/A/mYmPGRHZHk7rVAlzLnqWxgHP0qT7B+RhTUyV+U89zxWB5mZ WImmQclYL3u9eRiChS1xndfvGhguHcKdCoClamF8ra+RFesV6xXrFesV6xXr /XJYj7NLh73hE33x61GXjSeVMrln0oIdV1VL2LqWKnYia6QkN9KhmCWywfjN jfUqoShBt+cNoduQGCWi8Mskg6Gf6JGefLXC9It2MoYnI2Fo1749zlsq8nVd E6pX0/7Qw9W+6bihlFk1aH++HTDR63Bnbz1jj8DGiKOAwY5APGSJoKPv7nYX BiccC4iHTwcOawhIEmNcqibHbjIYELrK9xqYa7dgCOUNUKPIirRJN1EMEx0I eyYcE55tNjOXfeukKO24jNMwYCXl+v6rIJQUJdF9dH+wdcjInCqeMIhEEoMc 6pcJkqEvPbc1kuLbUB/aJJ8Dl4GMV23znMcUt36ClbufmN8lekFQazMd5EQn 7sLCBgIvzAXvIoKCPmAdenmi+qQ+ite8rhAwAoDG58LQseJoEPMbywrJazln GNtlZuhHJEpi4zi7BodVBj5HpEMW5FR5OSmcg6R53v/2spPSr4rNis2KzYrN is2KzYrNis2KzYrNis2KzYrNfjpslpbM2AHNJjdlRq5zJFfra1CVXvlS3bA2 d8xsloprYkWYJk4kS9jNhAedd6p2DHpedsF7mIzzzAzQF8ZHUhp2Am3ishxe hsnhgBguNAfC0L6rns2UGOT0uS+spbL3lAx36CDpCy4MCVmLycmxcrCVFrzq m7Ohf82bn6ylV7vlOTIakc2ppvkKHxmUzJbOt07D5DuloSU5fnO7u76FmmEC dIMYb8ciQOxABcU0FY2vXrVduI7L7NBm5Y6FKJCN1kMjsK1YD9Nz9oFftKF8 zyuGTCh8xUqHWM+nO8HWEFJNy0rC220MCXzYITKYn25d9gIJuAFrc/HwYSQ3 8xSRqoPuXdsL3Zhfq1HnNiREHMwCowEaq/vTgi7+y2wNBLqba+A4A1t4lbdh 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 3ZqXhToqvOq5j3U6Fxl/zbVrxjhiE2c7Kx2PnbyYo+28GZcXP5Ka2QsYjo24 N7ECbjbK15lNqpw3s09t6MTRnlSfRq4bERZ1edOTZC8ifBRoKajyMH0ODGQG OKx+f4shiuJL8aJch13e4l9nOthiBctGrOwQ2PDV8NXw1fDV8NXw9QPCV8Qo jdcLlngfXJ3BCBleg1r8i/OBv9e6hAFa/N/Azq8zS6H+AkWDDxyDsDSvEnU5 /+kvWwwtn8VUw1O9bNzn4Lh0l8IRagr1gYBH7MIQoEig8DC/w7OqBTwij+MS xhQibBUlcpZb2qP2xb29sbsClbPWMbontqxFyu9iXbL3W+ypJSgk8OqYKJpf zhDKvv2Y+gJHA7jxypU5Ot50F8B9m56bBm5MBAjyrgpFO5mnIPJC3t5y2Fgo 0hCBR+8BbObTSP16SWymgcxu3V5nNuHdYYNpAk/VNbk4xiPnVOyGmFkYOEih sAuZlpnkgqdGjP6UNkQ40p1+BOK3hcL9KWloYK6szJKY2Hg0tlqZ2MxMw7K9 DO+8TPQbL8x4NQ5bgAIyy/kV8eE0hQmhiGMOz7Qjs/7SEfz1W6YayD7J3+us JorzM3kmUKWhpOH0suVmdwn3Z6TgDvD0QQIERVOPyXuwvDwbi/4j1RtsbGps amxqbGpsamz6o2ET3g5AwZeZdkJcnVUo1JsttCm4vyPV3AClvp+FAraQr0Lg 62sut7G4aegyiqUNNa0a4AKUOyJdUiEurZI4TIOlkKesRy3eQusv2YnP6A+e AxDYfB5G4GyFB4deZ0ox8CX6ciYwQrPRXYqFqFdESlCMMfZ83gMWm6ItC1XJ yG81193zCA3L5ANTsm7KfWwKPAaHA+ALzhFECnU09GjM0JKeQgBgtBCV/Yzr jOY/JhiGiDPapSDc+YbAuqElMy2mGyWrQO7k0/Q6MEwEc2AB1WfVTyl4kBVT gYLxDtCnUG1L4BPvsLvWaGGTPqThx9vyz+S5ch1s5p9ro/lnrIftsnLSMYRb mLLnmsIvUD6DjME6+409XYTGPKKWA00s94fKDF7S+jL3zC6vZLl3W+MdodFf j97dMhtHOgtSep3qKlKCbEnFRulSjxixVwKVMuYUYu+ovNyildfvkwdvj2Sr pfkRUlXcNKpxqlGqUapRqlGqUapRqlGqUapRqlGqUapRqlHqP4VSxEYVbMom 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 9M3yF4eEgmbLjR10rNmTcBR/z6bVkNaQ1pDWkNaQ1pD2Q0Oaus777rfO6rBx zCaOhGt49fPmXeKq6E0mD7/W5PaBmFahmck7Z6/MZSQHIBGdoFXCEizhQ3cZ GxdacZTwZul116peX2t1Q5AQd4nnmvShqA98CMYQpOM0deokkU7GHZBLoPBe mUQpG/VMSkMqRSujPR/KZWBdkMi5hHdR2JnowglBSoNtZzqYwCyNTc+pG4iF gRbdNZUHtUMYHZr8NvNbMAfBiR5v3YCt1i8oKslaGh3F/r5PSa5fyCkEURZi 6gYMeyxUbp5hFaX2bpaMnMtCN6BnJD6aTnQIih0UQPkZGW6EJ6rRjgS6G3Fu l3nMGopOae7oqf0WsWVEMcWnQwuMlRqF2tahToyfcJIDks0aMBcuCjm4Kt52 eBCbTmy4pNnO4/TIxHLY1RlZzUtHxF/ZAckOPkG97xlEpM5iwThhcS59mkkd n6erj6RdUkdRIDhMvUN0N58DsTWON/UasJTTWBRY+pAcMfDf+HVJjbTEbukg UNT6Hh35Fik+fLNcSeNV41XjVeNV41XjVeNV41XjVeNV41XjVePV/x68wtRk biE7bxJzOuQuQEY5kJXF3LGT+7vxjiP9hWWshArkBpgFhoBLopAhFvJIToda Zl2CTeDL68zOQrDWvanHt8soIJrtSNcasWUcO+h4G/ElORADWHoa/lmLpyBb MXzAKMZh5ZqXNE47373A7Fx0Ija+keXZgPNa06OiQ0Ca8NzMilPTpFnTemDT iu2ZA3dMHcmrTWv0POtc7EDGIkPA02ImGG+7LumAvhNCZoE7EgFObKTVklrQ MZBeFXvEYu2xwdxmviMUsfqCXTkkduhbCXqxftiBZjkXhEkFiR1LoXX7bSZf EzqqFXTEy/CkzYMxSy9ApktNDuIopNYQqCrEyUkApX0Z2mJohgjBy9bGcqTK 9pznmpLLpDisjQ9vQ7UzD5PDCtLx27RocjLZRWZyngM2S/K1DChY1KNU+zhz g2EMhiMBr8QQysmd9HT4G4KYmmf0eHEAP6fzwJHu/vYtrBZwsE8TPEZ/Hdlr 9/arcGnPd7kRYna8af5i7NI3y38Lc1bDV8NXw1fDV8NXw9cPCF+/z0Bow4PA oczfqURI4NVw1McJxYYDqnAZX4X529L8CEOEj9SeduuvI7wrx20zdgm4tCLL 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 hSa0Pd8W4Hkyl2ZYR+kGZIyKqnEK+XkO+pIWlFeWWfs5LYBZpXfM223yY2A2 3g5lSh5d6+zOD7TCJfkjQEJTq1J+WgppJ9b8VuPDAq4v6S87cUiJc6ZAOnGM Kau1TAmnCxYepWvOLfe/Bgdn3iwGaSF1gFZuJQ4v9GW8XDue3psUF7E1mjPL mu398qK/65Cjwy4nQK2R3BbUPzJUagWpYEVFLBMaDqzUI2aU5oihR0Lv5hoy 5evgUnHoTJhTIOhImr94Nuy96oq+z3k6jOyzViydU8G6hqqGqoaqhqqGqoaq hqqGqoaqhqqGqoaqhqr/LVD1ZSbbJXMUHiFgUwRNHcmYhJkq/u9MQGbTAyLx s10EGI76xdvPCsks08NzkK5WJlqXEhbZryjfgYbZKabYHPu7qApz28PGw29t G+8UHZfPNUNNtLxsXvj+MJ4NqxWuQIHFoz0mByTcKaEYQjaFAS2hyoZvnCZC +0xUegRc5aZsQ5tWpGUQE+WC+yFz9csvv+ysPcvUGQK/M+h3Ewlne1MB5BwV BnxFEAz+i7mW8P3y5/RybCO8EpRHcdoQMDAZAj/lCKadtQz71aUqxOHwWZY2 A/KtemRyGLJLxnGdJiSwyY53yORu2oFXzfN9Yk8/YBY1ffFOsjIxJdniFROx sx3mbYrlbuf2CAgiIICq7XhDH1yPQSlcA3Upw5Yu9XIdsuMwPuCL86GaFwjq ERAdy7YeKbVSlkLQwAjughisdhCEU987wVq84zGBUdjITgfG+KyxcmF/+vZX g1aDVoNWg1aDVoPWDwVapudBC2MGce1gEIEgZyIUC393pJ/xooDIHNn1Zabh 5/MTRIJGDD4wX+JmwpcnWKzL15kCU7pVS6+/ItNFdjZb9UDWsmT6RSDtEooK OUHUQ0UdU6jyNo7mMy0JixXbKccPmSJGhIUbTJgE0oRKnkE76gn6412oesmO frmnWlrNvWaXL3ydFYoOzpzotTq0mR4IBfaYYER7PnbXIJEVkaKljSwPC7cb DeBelZUzCyr00SNGuephvU15nle0zcMK9ZaJUTuABPQt+TxwCNRlKQ90+mBo PljFDJaFJMt8ZUGfHGrG4aDQYGdCQuvpy4wAi7myCDXm+UwHi5fhtZhTKO8S eBiqXIevIsNays3GlFiUXk4mYtw43f08q8CyRnBw73D8eR8xDrKBi8yVbYG6 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 4Ro/DQ463CzwIHGDYfqx53PR7ExtFBja9qbQMZWt2o1NctZ459J0ojXO497z BR5WlWxeLhf6Nwu0vIygfXHcX/VfvZJNQaYgU5ApyBRkCjJ/SMjsJoNhatNj JlAkm04RTjZ5HWlwzX4PaSlOqYFcvvZAkuS4lHYk8CSWTMclHQ0cDpLhtNIB Vxn6nQs/qdZmdJswdCy+FuZNazn5sghxWhwHQVCTEOcQ2IIbQyhaSqDZn/9z 5xBpcA4FVCesOzrQx7aclw8T7B4KjviSNnczTDdjPBoXUMzWPu7Y7JAECmLP NBTX2TaQkG+EMWUs3/RsG/RFviV6YNwD7Wq4x9HR4qFyP/TaCYSJxblsSo7y lAce8oexsCRRcqLZZnrgii+J6PctpswLuQI8bk4/0NN7+8Vbpm+eyMUmkAkl VCSckAGfBZTd1C5Uu7hUjN9AQVqgDO0vxi/qI+0MyNDWSKDhqUAVkYI8ASKt 1GAC1XxuxMCBZhgAZLUPPc6MMaM0nDbBZFymfqr+tz+3mhDU2hSzmcSvmIzr 16qCwAvZLDoj/vYfXsRSQlqqMbOPt1zF0H3V//brIleRq8hV5CpyFbl+nuQC LZ8XEQtcERRgxFebIggpQdvIxHiQL09zcgWUh14oAKB87gXgEPYG8fArC2BI QQgcPKiFk/aHQhc9JgCAHaAYASEK/CPPuWxSVYDgAsS5VQk1HXw8I4huHSEK 3A3LixuVfB80Btk9V6KwWIBMI2Sq5aXrHZkqbAoeXnhAltJHumqmOVRXgxxN bzAGK6p4mr4Ul91AFr8GC+NipF5mt7ZCKETLCf0TSQl1D4oOEQuTsopnHlFL upwXRkBrgmEYYuYAYXkxfgRdYNN1Pf++tCkaISEUPAFucsA4rGrge9Hv4sok 1STuxqz1Q69DAItTGs7dUzAK0jG1EwAej8Hrf3xaKSIl7BNvQTQGMTYM8fi+ RCxQ4wNJGHnwsq84d9VLb0ijfmOjUV/LV31Mczc19mazH/RKogl+qlaX7O7n lttDQYHVMgZphbiU5cMyC18sznhdVCmqFFWKKkWVokpRpahSVCmqFFWKKn/K VOHOc6DaOtcl2e9kofWr+V/m7JhpM+mKEdCWXD7J2KeknxSjpjOO7o7ZLV4u 0TFdFMxFj9YO/2hpHcQk2EZfVHVON/bqSh7ekgL/VeNzN1S976sVEE0XyTdX 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 8ijQCUK+6gaSGQ2Hyniw5wSVVuNAtGeZd2cPgGkSgYLfyYSUqBlAfNv9qeAr vXLtD2ijToSyubN2yLyE1xh1UItdR/yQXSKvQJ9akNaVsXBx1g/8+RRs1PKb qDVWFwth0+9130bTXq4WWuMg9PlX9B/Y5DP+BZRKH95DJvKRGWCahKwJT7eI nSnnIF5UPufglc8geDcWA1CNe2MUbxRvFG8UbxRvFG98IG+gSfHscX2z7pU1 ZRWc7Xg7d6+68h7KXGz/XcQW/IBNlBI9eOzfkcGG9pUy43P6kVr5ed9lBqIw ECednzZXWfPO0XaHzUdlE/eEYs5cdnj8tTjOIZEhXAJzIbp96zPCrT3W3Hud QChWfc299bYe7IKDRxcQhfBjj4dfjk/ZHDqJaSxb99qn4ubgHCRKmg/YAE5x sZV5VNQaLHAHRUuCnTB9iCAB55NCB0tx1g6lEXoysqEn5PBhyNcTGSfoSkg2 3vdMv84mIqMPZLnqPmp6b6svrXE9+JR5+qdx1PbnuUOTZjYjbrWzJ48E+7ND KGgmb1EPxq7CuJlbm8tsTug048/+YwbYNLW32SefPhNau0Aoz9s2WIubH4w6 taQfhJT+apLEL7XB7DM60cO7psnPLh7csK5i8lS96Mwh3PjdbA89n3KTfhG0 98nNr2KLYotii2KLYotiiw9hCx4x04tmQYknDq8m9u5TTLPFYs60qxPcxHja vWS3Ctyhzr3nJjQRFeyLJMT3Zm32gkm2cjth+ZAt5tsO0Z9Qp4wU7BJzYT8+ 5czFkJOBKsWDYANH77jsBmlMg4lVZAv0pkEoMulZetTBUQsoAehi2mfe2uOT eflZ39QT/mOSX3dRSwyy9qK1l5MbPMlbHIbEPJ71dg/Vkv7xMnEmPmj1kNjn 9UrBTEMO/fJtH1S21VEBFPm2x5rvkiVnqb4ekMzknhkgN5A8KZKwNw9NREE9 uC5w4urI4/qkYTjV7a0PMx/qAQVBqjyPdn7dN1F6GndGJcb9+KtJVJokczO5 Rh1xVW2A2Hu1+ZUXlvngskHIFwfaLpWG5dVM6dOVuO2ZRDWX7fXfNvmPuBEy kV9McJcQ9Vk0+aEooyijKKMooyijKKMooyijKKMooyijKON3QxkCzuTcNLMz bH20zXZ7RY+bWdqH6979hiYQyMjvFh6w/2xy78Xtk8cKtr5+03yz/VbMbHWM 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 jpMSoXrksWaR+G3bNI5eaF37bU9bZu8AUlg4oicw4BhNgsbVmQntOrYcsxWv rmv2UsapXWImVfgAbJVNthXNDtOQ57aEwWaUpBjYS9PLAfYZgwC1WgA3JLcl PXvIo7NYS9p/1ucypLbeQoGwV1rNWVWz+mZeclZgf+ihz0N2cvQijGqXk3Ru x6L9XeFe4V7hXuHeDxP3/vkEz2a6/L1+9ucdsWauEqf9Xr0aapNcuqjPGWSj MvWD/bJGZtVqh2j19BeLAwY9ywmN7UF1tpZmHLOKM4iy9RIwyANYrWAFwFec J2ulSJoxfx12CGCaDifGLDgfeTsEJTApmxNggymz5JcEutULq/NLedtTyCJH gzosmRnldh3C9Jue0hI8w7OIpU1QrBeHy9IE/GGCaZyZwP4kQyBgv+u+TSzH APukvfAOnoIpikUYzLBLI0kul9uVlxfe9t2t9A3gnbxk+GpLuZBzd73tt6RF MIqfdo+64yVbNtwwmYRsHucNnWSLaWKB/Yeqg6LxtG1zwQIdFDPdYevfKH6X XG5jJh9hdclOhga6MzMC3lV8DQR16v8toCugK6AroCugK6AroCugK6D7OIDu v+920NORjycyihDKqul0p/vc+IALGwR21soPDrC5rYQNv/VtapkXPT4kLOpX t9rH7hasrmCDf0ByZZOT0qDWJRuvQGh1Mo8ByZMeNyyQ9NuEAKbW/5zQbR5M kThA4/Q8G/RUgTaVddZHNFlLvuiJuhEc8QjT/Bk8uICyV32nE8HvoWuh/l4O GQL2KMSdGWZSDPiAmY5Z2dpP4ifyzdpL6j0NL/vuf1j0oFywOrmFGfgJYe50 NzOPnsn/TFlpFmdLl2l9QEVNurRTxwelxJYNn2CXxX1JoNpScNwa4IgZYIul 2PPdjzoCzhhImhpzM7V+tbB9meB9hDPznK8GaxKp1Mn9Yes14kvsP+i//raQ rZCtkK2Q7WNFNvYA+Xf6ry/7RWyFPdugli7Y3Ce8hoiHBRrKLsHi+KKFAh/i t6n3VLJW0KG3XAFWWNZwOcJbnVUmbxPqsH71iEXCFxywMMeyKmQ9jI2NCaiu 90ikie9d21mw0q/2NlzFAESzVjLGzNSHEYy1/tPu6c4yWpa6ITxCA3dx12H1 IuAZXMGtCZDU2PacozW3bwPsboCQ7HNzm+fsRWoXb5tnSQ+5YYRlUgKXj3sk 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 oe8ACP3ej/4/dSGb+Q==\ \>"], "Text", TextAlignment->Center, TextJustification->0, ImageSize->{188.625, 298.75}, ImageMargins->{{80.375, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}], Cell["The Enigma", "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.293651 0.00396825 -0.138834 0.00511829 [ [.02381 .47536 0 -6.28125 ] [.02381 .47536 52 6.28125 ] [.02381 .24504 0 -6.28125 ] [.02381 .24504 94 6.28125 ] [.5 .01472 0 -6.28125 ] [.5 .01472 76 6.28125 ] [.97619 .19386 0 -6.28125 ] [.97619 .19386 76 6.28125 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .42063 .09149 m .53968 .09149 L .53968 .60332 L .42063 .60332 L .42063 .09149 L s .57937 .09149 m .69841 .09149 L .69841 .60332 L .57937 .60332 L .57937 .09149 L s .7381 .09149 m .85714 .09149 L .85714 .60332 L .7381 .60332 L .7381 .09149 L s .89683 .09149 m .97619 .09149 L .97619 .60332 L .89683 .60332 L .89683 .09149 L s .89683 .27063 m .93651 .27063 L s .93651 .52654 m .89683 .52654 L s .42063 .52654 m .48611 .44209 L s % Start of user PostScript 180. 130. 196.5 113.5 MAarrowhead1 % End of user PostScript .48611 .44209 m .53968 .373 L s .57937 .373 m .64484 .23224 L s % Start of user PostScript 220. 100. 236.5 72.5 MAarrowhead1 % End of user PostScript .64484 .23224 m .69841 .11708 L s .7381 .11708 m .80357 .20153 L s % Start of user PostScript 260. 50. 276.5 66.5 MAarrowhead1 % End of user PostScript .80357 .20153 m .85714 .27063 L s .85714 .52654 m .79167 .5547 L s % Start of user PostScript 290. 130. 273.5 135.5 MAarrowhead1 % End of user PostScript .79167 .5547 m .7381 .57773 L s .69841 .57773 m .63294 .35252 L s % Start of user PostScript 250. 140. 233.5 96. MAarrowhead1 % End of user PostScript .63294 .35252 m .57937 .16826 L s .53968 .16826 m .47421 .23864 L s % Start of user PostScript 210. 60. 193.5 73.75 MAarrowhead1 % End of user PostScript .47421 .23864 m .42063 .29622 L s .02381 .52654 m .24206 .52654 L s % Start of user PostScript 80. 130. 135. 130. MAarrowhead1 % End of user PostScript .24206 .52654 m .42063 .52654 L s .42063 .29622 m .20238 .29622 L s % Start of user PostScript 180. 85. 125. 85. MAarrowhead1 % End of user PostScript .20238 .29622 m .02381 .29622 L s .93651 .27063 m .93651 .41138 L s % Start of user PostScript 310. 80. 310. 107.5 MAarrowhead1 % End of user PostScript .93651 .41138 m .93651 .52654 L s gsave .02381 .47536 -61 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Keyboard) show 111.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .02381 .24504 -61 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Indicator) show 123.000000 12.812500 moveto (Light) show 153.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .5 .01472 -61 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Three) show 99.000000 12.812500 moveto (Rotors) show 135.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .97619 .19386 -61 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 12.812500 moveto (\.98) show 81.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Reflector) show 135.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .53968 .38835 m .57937 .35764 L .57937 .38323 L .53968 .35764 L .53968 .38835 L F .53968 .18362 m .57937 .15291 L .57937 .18362 L .53968 .15291 L .53968 .18362 L F .69841 .13244 m .7381 .10173 L .7381 .12732 L .69841 .10173 L .69841 .13244 L F .69841 .59308 m .7381 .56237 L .7381 .58796 L .69841 .56237 L .69841 .59308 L F .85714 .28598 m .89683 .25527 L .89683 .28087 L .85714 .25527 L .85714 .28598 L F .85714 .5419 m .89683 .51119 L .89683 .53678 L .85714 .51119 L .85714 .5419 L F 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Text", TextAlignment->Center, TextJustification->0, ImageSize->{357.625, 220.125}, ImageMargins->{{55.125, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 1Jfuu9Kzxe3yW/lzdySMhFYIk2v/BwEy5bo=\ \>"], ImageRangeCache->{{{0, 535.438}, {329.188, 0}} -> {73.9989, 12.3164, \ 0.875584, 0.678847}}], Cell["A Schematic Description of the Enigma", "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "The electro-mechanical ", StyleBox["Enigma", FontSlant->"Italic"], ", used by Germany and Japan, was invented by A. Scherbius in 1923. It \ consists of three rotors and a reflector. See ", ButtonBox["Figure 2.4", BaseStyle->"Hyperlink", ButtonData:>"FigClass Enigma Rot"], ". When punching in a letter, an electronic current will enter the first \ rotor at the place corresponding with that letter, but will leave it \ somewhere else depending on the internal wiring of that rotor. The second and \ third rotors do the same, but have a different wiring. The reflector returns \ the current at a different place and the current will go through rotors 1, 2 \ and 3 again but in reverse order. The current will light up a letter, which \ gives the encryption of the original letter.\nSimultaneously, the first rotor \ will turn position. After 26 rotations of the first rotor the second will \ turn one position. When the second rotor has made a full cycle, the third \ rotor will rotate over one position. " }], "Text", TextAlignment->Left, TextJustification->0], Cell["The key of the Enigma consists of ", "Text", TextAlignment->Left, TextJustification->0], Cell["\<\ i)\tthe choice and order of the rotors, ii)\ttheir initial position and iii)\ta fixed initial permutation of the alphabet. \ \>", "DisplayFormula", TextAlignment->Left, TextJustification->0] }, Closed]], Cell[TextData[{ "For an idea about the cryptanalysis of the Enigma the reader is referred to \ Chapter 5 in ", ButtonBox["[Konh81]", BaseStyle->"Hyperlink", ButtonData:>"RefKonh81"], "." }], "Text", GeneratedCell->True, TextAlignment->Left, TextJustification->0] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectClass Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nThe following ciphertext about president Kennedy has been made with a ", ButtonBox["simple substitution", BaseStyle->"Hyperlink", ButtonData:>"DefClass SimpleSubst"], ". What is the corresponding\nplaintext?\n\t\t\"", StyleBox["rgjjg mvkto tzpgt stbgp catjw pgocm gjs", FontFamily->"Courier New"], "\"" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nDecrypt the following ciphertext, which is made with the ", ButtonBox["Playfair cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Playfair"], " and the key ''hieronymous'' (as in Subsection 2.3.2).\n\n\t\t\"", StyleBox["erohh mfimf ienfa bsesn pdwar gbhah ro", FontFamily->"Courier New"], "\"" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nEncrypt the following plaintext using the ", ButtonBox["Vigen\[EGrave]re system", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], " with the key ''vigenere''.\n\n\t\t\"", StyleBox["who is afraid of virginia woolf", FontFamily->"Courier New"], "\"" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], StyleBox[" \n", FontWeight->"Bold"], "Consider a ciphertext obtained through a ", ButtonBox["Caesar", BaseStyle->"Hyperlink", ButtonData:>"DefClass Caesar Cipher"], " encryption. Write a ", StyleBox["Mathematica", FontSlant->"Italic"], " program to find all substrings of length 5 in the ciphertext that could \ have been obtained from the word \"Brute\".\nTest this program on the text \ \"xyuysuyifvyxi\" from ", ButtonBox["Table 2.1", BaseStyle->"Hyperlink", ButtonData:>"TableClass Anal Caesar"], ". (See also the ", ButtonBox["input", BaseStyle->"Hyperlink", ButtonData:>"InputClass Find Match"], " in Example 2.2)" }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tShift Register Sequences" }], "Chapter", CellTags->"Chap Shift"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tPseudo-Random Sequences" }], "Section", CellTags->"SectShift pseudo seq"], Cell[TextData[{ "During and after World War II, the introduction of logical circuits made \ completely electronic cryptosystems possible. These turned out to be very \ practical in the sense of being easy to implement and very fast. The analysis \ of their security is not so easy! Working with logical circuits often leads \ to the alphabet ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], ". There are only two possible permutations (", ButtonBox["substitutions", BaseStyle->"Hyperlink", ButtonData:>"DefClass SimpleSubst"], ") of the set ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], ". One action interchanges the two symbols. This can also be described by \ adding 1 (modulo 2) to the two elements. The other permutation leaves the two \ symbols invariant, which is the same as adding 0 (modulo 2) to these two \ elements. " }], "Text"], Cell[TextData[{ "Since the ", ButtonBox["Vernam cipher", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vernam"], " is unconditionally secure but not very practical, it is only natural that \ people came up with the following scheme." }], "Text"], Cell[CellGroupData[{ Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0670996 0.0021645 0.0147151 0.00392403 [ [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .02381 .25016 m .28355 .25016 L .28355 .36788 L .02381 .36788 L .02381 .25016 L s .71645 .25016 m .97619 .25016 L .97619 .36788 L .71645 .36788 L .71645 .25016 L s .11039 .4856 m .24026 .4856 L .24026 .60332 L .11039 .60332 L .11039 .4856 L s .75974 .4856 m .88961 .4856 L .88961 .60332 L .75974 .60332 L .75974 .4856 L s gsave .1645 .30902 -95.3438 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Algorithm) show 127.687500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .85714 .30902 -95.3438 -16.875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 33.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 29.750000 moveto 464.000000 29.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 29.750000 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 77.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Same) show 63.000000 26.000000 moveto (Algorithm) show 127.687500 26.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .17532 .54446 -73.7813 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (Key) show 84.562500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .82468 .54446 -77.375 -16.875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 33.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 29.750000 moveto 464.000000 29.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 29.750000 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (Same) show 63.000000 26.000000 moveto (Key) show 84.562500 26.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .51732 .258 -98.9375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (ciphertext) show 134.875000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .17532 .07358 -95.3438 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (plaintext) show 127.687500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .17532 .4856 m .17532 .39142 L s % Start of user PostScript 50. 120. 50. 96. MAarrowhead1 % End of user PostScript .17532 .39142 m .17532 .36788 L s .82468 .4856 m .82468 .39142 L s % Start of user PostScript 350. 120. 350. 96. MAarrowhead1 % End of user PostScript .82468 .39142 m .82468 .36788 L s .28355 .30902 m .35281 .30902 L s % Start of user PostScript 100. 75. 132. 75. MAarrowhead1 % End of user PostScript .35281 .30902 m .37013 .30902 L s .37662 .21092 m .42338 .21092 L s % Start of user PostScript 143. 50. 164.6 50. MAarrowhead1 % End of user PostScript .42338 .21092 m .43506 .21092 L s .17532 .11282 m .33117 .11282 L s % Start of user PostScript 50. 25. 122. 25. MAarrowhead1 % End of user PostScript .33117 .11282 m .37013 .11282 L s .71645 .30902 m .64719 .30902 L s % Start of user PostScript 300. 75. 268. 75. MAarrowhead1 % End of user PostScript .64719 .30902 m .62987 .30902 L s .62987 .11282 m .78571 .11282 L s % Start of user PostScript 260. 25. 332. 25. MAarrowhead1 % End of user PostScript .78571 .11282 m .82468 .11282 L s .56494 .21092 m .61169 .21092 L s % Start of user PostScript 230. 50. 251.6 50. MAarrowhead1 % End of user PostScript .61169 .21092 m .62338 .21092 L s [ .001 .006 ] 0 setdash .45671 .21092 m .53896 .21092 L s [ ] 0 setdash .37013 .30902 m .37013 .22269 L s .62987 .30902 m .62987 .22269 L s .37013 .11282 m .37013 .19914 L s .62987 .11282 m .62987 .19914 L s gsave .37013 .20895 -67.1875 -10.9094 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .62987 .20895 -67.1875 -10.9094 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .32684 .34826 -70.4375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 14.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.875000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .67316 .34826 -70.4375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 14.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.875000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .32684 .07358 -70.4375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (m) show 71.375000 14.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.875000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .71645 .07358 -70.4375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (m) show 71.375000 14.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.875000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .4026 .17168 -70.4375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 14.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.875000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .59091 .17168 -70.4375 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 14.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.875000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore % End of Graphics MathPictureEnd \ \>"], "Text", TextAlignment->Center, TextJustification->0, ImageSize->{353.25, 218}, ImageMargins->{{44.25, 0}, {0, 1.25}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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\ \>"], ImageRangeCache->{{{0, 352.25}, {217, 0}} -> {-31.7487, -3.75078, 1.31582, \ 0.725808}}], Cell[TextData[{ "A binary cryptosystem with pseudo-random ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "-sequence." }], "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigShift pseudo random"] }, Closed]], Cell[TextData[{ "Of course one would like the sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " to be random, but with a finite state machine and a deterministic \ algorithm one can not generate a random sequence. Indeed, one will always \ generate a sequence, which is ultimately periodic. This observation shows \ that (apart from a beginning segment) the scheme is a special case of the ", ButtonBox["Vigen\[EGrave]re cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], ". On the other hand, one can try to generate sequences that appear to be \ random, have long periods and have the right cryptographic properties. Good \ reference books for this theory are ", ButtonBox["[Bek82]", BaseStyle->"Hyperlink", ButtonData:>"RefBek82"], ", ", ButtonBox["[Gol67]", BaseStyle->"Hyperlink", ButtonData:>"RefGol67"], ", and ", ButtonBox["[Ruep86]", BaseStyle->"Hyperlink", ButtonData:>"RefRuep86"], "." }], "Text", GeneratedCell->True, CellTags->"PostShift Eventually Periodic"], Cell[TextData[{ "In ", ButtonBox["[Gol67]", BaseStyle->"Hyperlink", ButtonData:>"RefGol67"], ", S.W. Golomb formulated three postulates that a binary, periodic sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " should satisfy to be called ", StyleBox["pseudo-random", FontSlant->"Italic"], ". Before we can give these, we have to introduce some terminology. " }], "Text", GeneratedCell->True, CellTags->"DefShift pseudo random"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "A sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " is called ", StyleBox["periodic", FontSlant->"Italic"], " with ", StyleBox["period", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", if ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is the smallest positive integer for which\n\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", RowBox[{"i", "+", "p"}]], "=", SubscriptBox["s", "i"]}], TraditionalForm]]], " \tfor all ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefShift Period"], Cell[TextData[{ "A ", StyleBox["run", FontSlant->"Italic"], " of length ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is a subsequence of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " consisting of ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " identical symbols, bordered by different symbols. If the run starts at \ moment ", Cell[BoxData[ FormBox["t", TraditionalForm]]], ", one has in formula: " }], "Text", CellTags->"DefShift run"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["s", RowBox[{"t", "-", "1"}]], "\[NotEqual]", SubscriptBox["s", "t"]}], "=", RowBox[{ SubscriptBox["s", RowBox[{"t", "+", "1"}]], "=", RowBox[{"\[Ellipsis]", "=", RowBox[{ SubscriptBox["s", RowBox[{"t", "+", "k", "-", "1"}]], "\[NotEqual]", SubscriptBox["s", RowBox[{"t", "+", "k"}]]}]}]}]}], TraditionalForm]]], ". " }], "DisplayFormula"], Cell["One makes the following distinction:", "Text"], Cell[TextData[Cell[BoxData[ FormBox[GridBox[{ {GridBox[{ { RowBox[{ StyleBox["a", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], " ", StyleBox["block", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}], " ", "of", " ", "length", " ", RowBox[{"k", ":"}]}], " "} }], RowBox[{"0", OverscriptBox[ OverscriptBox[ RowBox[{"11", "\[Ellipsis]1"}], "\[LongLeftRightArrow]"], "k"], "0"}]}, {GridBox[{ { RowBox[{ RowBox[{ StyleBox["a", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}, FontColor->GrayLevel[0]], " ", StyleBox["gap", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}], " ", "of", " ", "length", " ", RowBox[{"k", ":"}]}], " "}], " "} }], RowBox[{"1", OverscriptBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]0"}], "\[LongLeftRightArrow]"], "k"], "1"}]} }], TraditionalForm]]]], "DisplayFormula", CellTags->"DefShift Gap Block"], Cell[TextData[{ "The ", StyleBox["autocorrelation ", FontSlant->"Italic"], Cell[BoxData[ FormBox[ RowBox[{"AC", "(", "k", ")"}], TraditionalForm]], FontSlant->"Italic"], " of a periodic sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " with period ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is defined by:" }], "Text", CellTags->"DefShift AC(k)"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"AC", "(", "k", ")"}], "=", FractionBox[ RowBox[{ RowBox[{"A", "(", "k", ")"}], "-", RowBox[{"D", "(", "k", ")"}]}], "p"]}], ","}], TraditionalForm]], "NumberedEquation", CellTags->"FormShift AC(k)"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{"A", "(", "k", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"D", "(", "k", ")"}], TraditionalForm]]], " denote the number of agreements resp. disagreements over a full period \ between ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", RowBox[{"i", "+", "k"}]], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ", which is ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " shifted over ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " positions to the left. So" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"A", "(", "k", ")"}], "=", RowBox[{"|", RowBox[{"{", " ", RowBox[{ RowBox[{ RowBox[{"0", "\[LessEqual]", "i", "<", "p"}], " ", "|", " ", SubscriptBox["s", "i"]}], "=", SubscriptBox["s", RowBox[{"i", "+", "k"}]]}], " ", "}"}], "|"}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"D", "(", "k", ")"}], "=", RowBox[{"|", RowBox[{"{", " ", RowBox[{ RowBox[{"0", "\[LessEqual]", "i", "<", "p"}], " ", "|", " ", RowBox[{ SubscriptBox["s", "i"], "\[NotEqual]", SubscriptBox["s", RowBox[{"i", "+", "k"}]]}]}], " ", "}"}], "|"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Note that one can also write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"AC", "(", "k", ")"}], "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"2.", RowBox[{"A", "(", "k", ")"}]}], "-", "p"}], ")"}], "/", "p"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider a sequence that is periodic with period ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " given by its first ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " elements.\nWith the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Count", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Length", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Mod", BaseStyle->"RefGuideLink"], ", ", ButtonBox["RotateLeft", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Table", BaseStyle->"RefGuideLink"], " one easily computes all values of the autocorrelation function ", Cell[BoxData[ FormBox[ RowBox[{"AC", "(", "k", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "k", "\[LessEqual]", RowBox[{"p", "-", "1"}]}], TraditionalForm]]], "." }], "Example"], Cell[BoxData[{ RowBox[{ RowBox[{"segment", "=", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"p", "=", RowBox[{"Length", "[", "segment", "]"}]}], ";"}], "\n", RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"2", "*", RowBox[{"Count", "[", RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{"segment", "-", RowBox[{"RotateLeft", "[", RowBox[{"segment", ",", "k"}], "]"}]}], ",", "2"}], "]"}], ",", "0"}], "]"}]}], "-", "p"}], ")"}], "/", "p"}], ",", RowBox[{"{", RowBox[{"k", ",", "0", ",", RowBox[{"p", "-", "1"}]}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", RowBox[{"-", FractionBox["1", "2"]}], ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is a multiple of ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " one has that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"A", "(", "k", ")"}], "=", "p"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"D", "(", "k", ")"}], "=", "0"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{"AC", "=", "1"}], TraditionalForm]]], ". One speaks of the ", StyleBox["in-phase", FontSlant->"Italic"], " autocorrelation. \nIf ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " does not divide ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ", one speaks of the ", StyleBox["out-of-phase", FontSlant->"Italic"], " autocorrelation.The value of AC now lies between ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"+", "1"}], TraditionalForm]]], "." }], "Text", CellTags->"DefShift AC in/out"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\t\t", FontWeight->"Bold"], StyleBox["Golombs Randomness Postulates", FontWeight->"Bold", FontSlant->"Italic"], "\n", StyleBox["G1", FontWeight->"Bold"], ": The number of zeros and the number of ones are as equal as possible per \ period, i.e. both are ", Cell[BoxData[ FormBox[ RowBox[{"p", "/", "2"}], TraditionalForm]]], " if ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is even and they are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "\[PlusMinus]", "1"}], ")"}], "/", "2"}], TraditionalForm]]], " if ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is odd.\n", StyleBox["G2", FontWeight->"Bold"], ": Half of the runs in a cycle have length 1, one quarter of the runs have \ length 2, one eight of the runs have length 3, and so forth. Moreover half of \ the runs of a certain length are gaps, the other half are blocks.\n", StyleBox["G3", FontWeight->"Bold"], ": The out-of-phase autocorrelation AC(", Cell[BoxData[ FormBox["k", TraditionalForm]]], ") has the same value for all values of ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "." }], "Definition", CellTags->"PostShift Golomb"], Cell[TextData[{ StyleBox["G1", FontWeight->"Bold"], " states that zeros and ones occur with roughly the same probability. One \ can count these occurrences quite easily with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["Count", BaseStyle->"RefGuideLink"], "." }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"segment", "=", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{"Count", "[", RowBox[{"segment", ",", "0"}], "]"}], "\n", RowBox[{"Count", "[", RowBox[{"segment", ",", "1"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["5"], "Output"], Cell[BoxData["3"], "Output"], Cell[TextData[{ StyleBox["G2", FontWeight->"Bold"], " implies that after 011 the symbol 0 (leading to a block of length 2) has \ the same probability as the symbol 1 (leading to a block of length \ \[GreaterEqual]3), etc. So, ", StyleBox["G2", FontWeight->"Bold"], " says that certain ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-grams occur with the right frequencies. These frequencies can be computed \ by means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Count", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Length", BaseStyle->"RefGuideLink"], ", ", ButtonBox["RotateLeft", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Table", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Take", BaseStyle->"RefGuideLink"], ". " }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"segment", "=", RowBox[{"{", RowBox[{ "0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"p", "=", RowBox[{"Length", "[", "segment", "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"ngram", "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1"}], "}"}]}], ";", RowBox[{"k", "=", RowBox[{"Length", "[", "ngram", "]"}]}], ";"}], "\n", RowBox[{"Count", "[", RowBox[{ RowBox[{"Table", "[", RowBox[{ RowBox[{ RowBox[{"Take", "[", RowBox[{ RowBox[{"RotateLeft", "[", RowBox[{"segment", ",", "i"}], "]"}], ",", "k"}], "]"}], "==", "ngram"}], ",", RowBox[{"{", RowBox[{"i", ",", "p"}], "}"}]}], "]"}], ",", "True"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["3"], "Output"], Cell[TextData[{ "The interpretation of ", StyleBox["G3", FontWeight->"Bold"], " is more difficult. It does say that counting the number of agreements \ between a sequence and a shifted version of that sequence does not give any \ information about the period of that sequence, unless one shifts over a \ multiple of the period. A related situation is described in ", ButtonBox["Lemma 2.1", BaseStyle->"Hyperlink", ButtonData:>"LemClass Kasiski"], ", where such a comparison made it possible to determine the length of the \ key used in the Vigen\[EGrave]re cipher. In cryptographic applications ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " will be too large for such an approach. " }], "Text"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be a binary sequence with period ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"p", ">", "2"}], TraditionalForm]]], ", which satisfies ", ButtonBox["Golomb's randomness postulates", BaseStyle->"Hyperlink", ButtonData:>"PostShift Golomb"], ".\nThen ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is odd and ", Cell[BoxData[ FormBox[ RowBox[{"AC", "(", "k", ")"}], TraditionalForm]]], " has the value ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"-", "1"}], "/", "p"}], TraditionalForm]]], " when ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is not divisible by ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Consider a ", Cell[BoxData[ FormBox[ RowBox[{"p", "\[Times]", "p"}], TraditionalForm]]], " cyclic matrix with top row ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"p", "-", "1"}]]}], TraditionalForm]]], ". We shall count in two different ways the sum of all the agreements minus \ the disagreements between the top row and all the other rows. Counting \ rowwise we get by ", ButtonBox["G3", BaseStyle->"Hyperlink", ButtonData:>"PostShift Golomb"], " for each row ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "i", "\[LessEqual]", "p"}], TraditionalForm]]], ", the same contribution ", Cell[BoxData[ FormBox[ RowBox[{"p", ".", RowBox[{"AC", "(", "k", ")"}]}], TraditionalForm]]], ". This gives a total value of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "(", RowBox[{"p", "-", "1"}], ")"}], ".", RowBox[{"AC", "(", "k", ")"}]}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\<\ We shall now evaluate the above sum, by counting columnwise, the number of \ agreements minus the number of disagreements between all lower entries with \ the top entries.\ \>", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Case: ", FontVariations->{"Underline"->True}], Cell[BoxData[ FormBox["p", TraditionalForm]], FontVariations->{"Underline"->True}], StyleBox[" even", FontVariations->{"Underline"->True}], ". \nBy ", ButtonBox["G1", BaseStyle->"Hyperlink", ButtonData:>"PostShift Golomb"], ", the contribution of each column will be ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"p", "/", "2"}], "-", "1"}], ")"}], "-", RowBox[{"p", "/", "2"}]}], "=", RowBox[{"-", "1"}]}], TraditionalForm]]], ", since each column counts exactly ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"p", "/", "2"}], "-", "1"}], TraditionalForm]]], " agreements of a lower entry with the top entry and exactly ", Cell[BoxData[ FormBox[ RowBox[{"p", "/", "2"}], TraditionalForm]]], " disagreements. Summing this value over all columns gives ", Cell[BoxData[ FormBox[ RowBox[{"-", "p"}], TraditionalForm]]], " for the total sum. Equating the two values yields ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], RowBox[{"AC", "(", "k", ")"}]}], "=", RowBox[{"-", "1"}]}], TraditionalForm]]], ". However, Equation ", ButtonBox["(3.1)", BaseStyle->"Hyperlink", ButtonData:>"FormShift AC(k)"], " implies that ", Cell[BoxData[ FormBox[ RowBox[{"p", ".", RowBox[{"AC", "(", "k", ")"}]}], TraditionalForm]]], " is an integer. This is not possible when ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"AC", "(", "k", ")"}], "=", RowBox[{ RowBox[{"-", "1"}], "/", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]}]}], TraditionalForm]]], ", unless ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "2"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Case: ", FontVariations->{"Underline"->True}], Cell[BoxData[ FormBox["p", TraditionalForm]], FontVariations->{"Underline"->True}], StyleBox[" odd.", FontVariations->{"Underline"->True}], "\nOne gets for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "2"}], TraditionalForm]]], " columns the contribution ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}], "-", RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}]}], TraditionalForm]]], ", which is 0, and for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}], "/", "2"}], TraditionalForm]]], " columns the contribution ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"p", "-", "3"}], ")"}], "/", "2"}], "-", RowBox[{ RowBox[{"(", RowBox[{"p", "+", "1"}], ")"}], "/", "2"}]}], TraditionalForm]]], ", which is ", Cell[BoxData[ FormBox[ RowBox[{"-", "2"}], TraditionalForm]]], ". Hence one obtains the value ", Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{"(", RowBox[{"p", "-", "1"}], ")"}]}], TraditionalForm]]], " for the summation. Putting this equal to ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"p", "(", RowBox[{"p", "-", "1"}], ")"}], ".", "AC"}], RowBox[{"(", "k", ")"}]}], TraditionalForm]]], " yields the value ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"AC", "(", "k", ")"}], "=", RowBox[{ RowBox[{"-", "1"}], "/", "p"}]}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "The well known ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Chi]", "2"], TraditionalForm]]], "-test and the spectral test, ", ButtonBox["[CovM67]", BaseStyle->"Hyperlink", ButtonData:>"RefCov67"], ", yields ways to test the pseudo-randomness properties of a given sequence. \ We shall not discuss these methods here. The interested reader is referred to \ ", ButtonBox["[Golo67]", BaseStyle->"Hyperlink", ButtonData:>"RefGol67"], ", Chapter IV, ", ButtonBox["[Knut81]", BaseStyle->"Hyperlink", ButtonData:>{ FrontEnd`FileName[{"G:", "HENK"}, "Galois.nb", CharacterEncoding -> "WindowsANSI"], "RefKnut81"}], ", Chapter 3, or Maurer's universal statistical test ", ButtonBox["[Maur92]", BaseStyle->"Hyperlink", ButtonData:>"RefMaur92"], "." }], "Text", GeneratedCell->True], Cell[TextData[{ "There are also properties of a cryptographic nature which the sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " in ", ButtonBox["Figure 3.1", BaseStyle->"Hyperlink", ButtonData:>"FigShift pseudo random"], " should satisfy." }], "Text"], Cell[TextData[{ StyleBox["C1", FontWeight->"Bold"], ": The period ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " has to be taken very large (about the order of magnitude of ", Cell[BoxData[ FormBox[ SuperscriptBox["10", "50"], TraditionalForm]]], ").\n", StyleBox["C2", FontWeight->"Bold"], ": The sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " should be easy to generate.\n", StyleBox["C3", FontWeight->"Bold"], ": Knowledge of part of the plaintext with corresponding ciphertext should \ not enable a cryptanalist to generate the whole ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "-sequence (", ButtonBox["known plaintext attack", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Known Pl. Att."], ")." }], "Text", CellTags->"PostShift Crypt"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\t", "Linear Feedback Shift Registers" }], "Section", CellTags->"SectShift Linear"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t(Linear) Feedback Shift Registers" }], "Subsection", CellTags->"SubsShift linear"], Cell[TextData[{ "Feedback shift registers are very fast implementations to generate binary \ sequences. Their general form is depicted in ", ButtonBox["Figure 3.2", BaseStyle->"Hyperlink", ButtonData:>"FigShift FSR"], "." }], "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.0650423 0.00277662 -0.169224 0.00735755 [ [.21262 .12508 -9.4375 -8.5 ] [.21262 .12508 9.4375 8.5 ] [.40698 .12508 -9.4375 -8.5 ] [.40698 .12508 9.4375 8.5 ] [.68465 .12508 -15.4375 -8.5 ] [.68465 .12508 15.4375 8.5 ] [.87901 .12508 -15.4375 -8.5 ] [.87901 .12508 15.4375 8.5 ] [.54581 .49296 -89.7188 -8.5 ] [.54581 .49296 89.7188 8.5 ] [.02381 .0515 -27.125 -8.5 ] [.02381 .0515 27.125 8.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .15709 .01472 m .26815 .01472 L .26815 .23544 L .15709 .23544 L .15709 .01472 L s gsave .21262 .12508 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .35145 .01472 m .46252 .01472 L .46252 .23544 L .35145 .23544 L .35145 .01472 L s gsave .40698 .12508 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .62911 .01472 m .74018 .01472 L .74018 .23544 L .62911 .23544 L .62911 .01472 L s gsave .68465 .12508 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .82348 .01472 m .93454 .01472 L .93454 .23544 L .82348 .23544 L .82348 .01472 L s gsave .87901 .12508 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .15709 .38259 m .93454 .38259 L .93454 .60332 L .15709 .60332 L .15709 .38259 L s gsave .54581 .49296 -150.719 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (f) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 72.562500 16.187500 moveto (H) show 82.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 91.687500 18.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.375000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 98.750000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (,) show 108.312500 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 117.875000 18.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.375000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 124.937500 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (,) show 134.500000 16.187500 moveto %%IncludeResource: font Math4Mono %%IncludeFont: Math4Mono /Math4Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\272) show 150.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (,) show 159.812500 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 169.375000 18.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.375000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 175.937500 18.562500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 11.375000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 182.500000 18.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.375000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 189.562500 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (,) show 199.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 208.687500 18.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.375000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 215.250000 18.562500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 11.375000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 221.812500 18.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.375000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 228.875000 16.187500 moveto (L) show 238.437500 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math4Mono %%+ font Math1Mono %%+ font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math4Mono %%+ Math1Mono %%+ Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math4Mono %%+ font Math1Mono %%+ font Math2Mono %%+ font Courier grestore .21262 .23544 m .21262 .32373 L s % Start of user PostScript 100. 55. 100. 67. MAarrowhead1 % End of user PostScript .21262 .32373 m .21262 .38259 L s .40698 .23544 m .40698 .32373 L s % Start of user PostScript 170. 55. 170. 67. MAarrowhead1 % End of user PostScript .40698 .32373 m .40698 .38259 L s .68465 .23544 m .68465 .32373 L s % Start of user PostScript 270. 55. 270. 67. MAarrowhead1 % End of user PostScript .68465 .32373 m .68465 .38259 L s .87901 .23544 m .87901 .32373 L s % Start of user PostScript 340. 55. 340. 67. MAarrowhead1 % End of user PostScript .87901 .32373 m .87901 .38259 L s .97619 .49296 m .97619 .27223 L s % Start of user PostScript 375. 90. 375. 60. MAarrowhead1 % End of user PostScript .97619 .27223 m .97619 .12508 L s .15709 .12508 m .03214 .12508 L s % Start of user PostScript 80. 40. 35. 40. MAarrowhead1 % End of user PostScript .35145 .12508 m .26815 .12508 L s % Start of user PostScript 150. 40. 120. 40. MAarrowhead1 % End of user PostScript .51805 .12508 m .46252 .12508 L s % Start of user PostScript 210. 40. 190. 40. MAarrowhead1 % End of user PostScript .62911 .12508 m .57358 .12508 L s % Start of user PostScript 250. 40. 230. 40. MAarrowhead1 % End of user PostScript .82348 .12508 m .74018 .12508 L s % Start of user PostScript 320. 40. 290. 40. MAarrowhead1 % End of user PostScript .93454 .49296 m .97619 .49296 L s .93454 .12508 m .97619 .12508 L s gsave .02381 .0515 -88.125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Output) show 113.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore [ .001 .01 ] 0 setdash .46252 .12508 m .57358 .12508 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{290, 179.125}, ImageMargins->{{30, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztXF1u00AQdmwnbWmapk3bFOhPVB6QEJWAA/BYiqCHiCqk9gGBSs+CuEfv wQMXCtmxM2sn327GiSF1MhHCq5ndmW++2V2v3V1f9e9vvnzt399e93sf7vrf b26vf/Quvt0NRVEtCGpnQRA89AJTHgyL6X+D4b/BC/Ofkfy/8ntzOTUQDkzp xJRes2yfS7uZ6kEUJJjJUPAcyPaA7BmQvRLa6wjrtRXmysIkFWl61QB8BFSn Cv0fQ69zN6FSSHWiRJf+Iq4Sm1IsrNyqBgEU0zCerGoUUASahVbha1Siwa1q EIliS2RxTjYl2rUSqd1W5pQ5KXM0DsMZOdxZHr7SX5jnpJGXoVk/dDWryATm uxNsgmb71R039q7fXK7AKrI4V5gKU2EqTIU5P0y6M9GK44kQMK1H6D6/LoQ+ tkCkEslo2YRWVSgwp5U6y+RhJ4/XE8vcDSEH6H4uZWMduw6ZEBRKLCRpqnFk qCB3DSbd8bAgZbHOhuoz8plExGGJkEj7my9CNFZmYRGawNlDo0HKsQApkskz gDpsgNf9yFEHxz1uN0lIAbsp/WfmQvMFmmw35yPdTkZtoJV2FES1tXzEJVQP 0b+Fg8Jv0EbG0ayG+g96N+mh/9hczF+qkuFox6u97RxybEjbtvlwpAmLbTvS 77BVst9lQmLOntU2TSnJd/InAAoN3VzdAxmlZHwuCvDbD+mwRUZj7ukRky4Y sWj2iGy/njo67UCe3rWT8OC8aG/pqDsikA1vC3QLpsoHTvz5UEfG0XN9wdge 05pQoSt0ha7QFbpCV+gKXaErdIWu0BW6QlfoCl2hK/TVhS44xYBe7acmroDq LZBdCut11ZW6UlfqaoVd0WRsN30sg4NPdJnYO/wmpTErHl0vfE0mxIfssZEJ iQTvuPQRyA6wvdTK53wLivISWHnq7h3lm3DG4jFR4eGgrtSVulJX6kpdVdwV PXD/MQrPIzV6ofAbyAq+k1ATakJNqAk1UVUTJ0D2E8jQm+aCro6BjDbgkgjt h6UNqZmDBHkt2oHaYnupwczPbo1FvmQt0cbiEnbtImqaaaOsbIQL0YH2QUtp 2/b4QqGgTds+G+6VSelUtjlX6LgBEdKwSfbQa1/8NLiErFG9LpfWuIXvyH7I KNG29DrwH6fEI2u+fo1w785PM+ptyIT70H+Rj5RMylCobl/T26JRgXqo8yMq 0mMpyKg7mIm99IV8LTj3G7PkmQJEJ5ScmbQDxX7NZqxkB9T4rDr6cR7RNwli LzD0TQpUb8HZoCAy0wTOS5NrIbhNL8stbtv2eLAHYNFs7yQpe6Ko7AmJ6kWu 7K9zgC+Bdo/bosNE+9wWYUHZ95x5nCdEO7YQ61Z77tX2vFq0U6BgiLSIWHN1 P/sJsMxwM9eOS3HuUvRcCrR9ooQ8oaO0v4AMZedxuCISnAsr6TODxwF6mtHq Wl2rL311en2dfteWtAv4/G5Q+wtsIfrv\ \>"], ImageRangeCache->{{{0, 289}, {178.125, 0}} -> {-4.41807, 19.8759, 1.34254, \ 0.506654}}], Cell["General Form of a Feedback Shift Register", "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigShift FSR"], Cell[TextData[{ "A ", StyleBox["feedback shift register", FontSlant->"Italic"], " (FSR) of ", StyleBox["length", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " contains ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " memory cells, which together form the (beginning) ", StyleBox["state", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " of the shift register. The function ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is a mapping of ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "n"], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], " and is called the ", StyleBox["feedback function ", FontSlant->"Italic"], "of the register. Since ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " can be represented as a Boolean function, it can easily be made with \ elementary logical functions." }], "Text", CellTags->"DefShift State"], Cell[TextData[{ "After the first time unit, the shift register will output ", Cell[BoxData[ FormBox[ SubscriptBox["s", "0"], TraditionalForm]]], " and go to state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", "n"]}], ")"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "n"], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], ". \nContinuing in this way, the shift register will generate an infinite \ sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider the case that ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "3"}], TraditionalForm]]], " and that ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"]}], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["s", "0"], SubscriptBox["s", "1"]}], "+", SubscriptBox["s", "2"]}]}], TraditionalForm]]], ". Starting with an initial state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"]}], ")"}], TraditionalForm]]], ", one can quite easily determine the successive states with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Mod", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Do", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Print", BaseStyle->"RefGuideLink"], " as follows:" }], "Example"], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "f", "]"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"f", "[", RowBox[{"x_", ",", "y_", ",", "z_"}], "]"}], ":=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"x", "*", "y"}], "+", "z"}], ",", "2"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2"}], "}"}], "=", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{"Do", "[", " ", RowBox[{ RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2"}], "}"}], "=", RowBox[{"{", RowBox[{"s1", ",", "s2", ",", RowBox[{"f", "[", RowBox[{"s0", ",", "s1", ",", "s2"}], "]"}]}], "}"}]}], ";", "\t ", RowBox[{"Print", "[", RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2"}], "}"}], "]"}]}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "6"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0"}], "}"}]], "Print"], Cell[TextData[{ "In this section, we shall study the special case that ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is a linear function, say:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["c", "0"], SubscriptBox["s", "0"]}], "+", RowBox[{ SubscriptBox["c", "1"], SubscriptBox["s", "1"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "1"}]], SubscriptBox["s", RowBox[{"n", "-", "1"}]]}]}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "where all the ", Cell[BoxData[ FormBox[ SubscriptBox["c", "i"], TraditionalForm]]], "'s are binary and all the additions are taken modulo 2." }], "Text"], Cell[TextData[{ "The general picture of a ", StyleBox["linear feedback shift register", FontSlant->"Italic"], ", which we shall shorten to ", StyleBox["LFSR", FontSlant->"Italic"], ", is depicted in the figure below." }], "Text", CellTags->"DefShift LFSR"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.0650423 0.00277662 -0.211671 0.00905544 [ [.21262 .15055 -9.4375 -8.5 ] [.21262 .15055 9.4375 8.5 ] [.40698 .15055 -9.4375 -8.5 ] [.40698 .15055 9.4375 8.5 ] [.68465 .15055 -15.4375 -8.5 ] [.68465 .15055 15.4375 8.5 ] [.87901 .15055 -15.4375 -8.5 ] [.87901 .15055 15.4375 8.5 ] [.17097 .42221 -9.4375 -8.5 ] [.17097 .42221 9.4375 8.5 ] [.36533 .42221 -9.4375 -8.5 ] [.36533 .42221 9.4375 8.5 ] [.643 .42221 -15.4375 -8.5 ] [.643 .42221 15.4375 8.5 ] [.83736 .42221 -15.4375 -8.5 ] [.83736 .42221 15.4375 8.5 ] [.40698 .60332 -6.1875 -8.67 ] [.40698 .60332 6.1875 8.33 ] [.68465 .60332 -6.1875 -8.67 ] [.68465 .60332 6.1875 8.33 ] [.87901 .60332 -6.1875 -8.67 ] [.87901 .60332 6.1875 8.33 ] [.02381 .05999 -27.125 -8.5 ] [.02381 .05999 27.125 8.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .15709 .01472 m .26815 .01472 L .26815 .28638 L .15709 .28638 L .15709 .01472 L s gsave .21262 .15055 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .35145 .01472 m .46252 .01472 L .46252 .28638 L .35145 .28638 L .35145 .01472 L s gsave .40698 .15055 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .62911 .01472 m .74018 .01472 L .74018 .28638 L .62911 .28638 L .62911 .01472 L s gsave .68465 .15055 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .82348 .01472 m .93454 .01472 L .93454 .28638 L .82348 .28638 L .82348 .01472 L s gsave .87901 .15055 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .21262 .60332 m .32924 .60332 L s % Start of user PostScript 100. 90. 142. 90. MAarrowhead1 % End of user PostScript .32924 .60332 m .40698 .60332 L s .40698 .60332 m .47362 .60332 L s % Start of user PostScript 170. 90. 194. 90. MAarrowhead1 % End of user PostScript .47362 .60332 m .51805 .60332 L s .57358 .60332 m .64022 .60332 L s % Start of user PostScript 230. 90. 254. 90. MAarrowhead1 % End of user PostScript .64022 .60332 m .68465 .60332 L s .68465 .60332 m .80126 .60332 L s % Start of user PostScript 270. 90. 312. 90. MAarrowhead1 % End of user PostScript .80126 .60332 m .87901 .60332 L s .97619 .60332 m .97619 .33166 L s % Start of user PostScript 375. 90. 375. 60. MAarrowhead1 % End of user PostScript .97619 .33166 m .97619 .15055 L s .21262 .49465 m .21262 .55985 L s % Start of user PostScript 100. 78. 100. 85.2 MAarrowhead1 % End of user PostScript .21262 .55985 m .21262 .60332 L s .40698 .49465 m .40698 .55985 L s % Start of user PostScript 170. 78. 170. 85.2 MAarrowhead1 % End of user PostScript .40698 .55985 m .40698 .60332 L s .68465 .49465 m .68465 .55985 L s % Start of user PostScript 270. 78. 270. 85.2 MAarrowhead1 % End of user PostScript .68465 .55985 m .68465 .60332 L s .87901 .49465 m .87901 .55985 L s % Start of user PostScript 340. 78. 340. 85.2 MAarrowhead1 % End of user PostScript .87901 .55985 m .87901 .60332 L s .21262 .49465 m .25427 .4041 L s .40698 .49465 m .44863 .4041 L s .68465 .49465 m .72629 .4041 L s .87901 .49465 m .92066 .4041 L s .21262 .28638 m .21262 .37693 L s % Start of user PostScript 100. 55. 100. 65. MAarrowhead1 % End of user PostScript .40698 .28638 m .40698 .37693 L s % Start of user PostScript 170. 55. 170. 65. MAarrowhead1 % End of user PostScript .68465 .28638 m .68465 .37693 L s % Start of user PostScript 270. 55. 270. 65. MAarrowhead1 % End of user PostScript .87901 .28638 m .87901 .37693 L s % Start of user PostScript 340. 55. 340. 65. MAarrowhead1 % End of user PostScript .15709 .15055 m .03214 .15055 L s % Start of user PostScript 80. 40. 35. 40. MAarrowhead1 % End of user PostScript .35145 .15055 m .26815 .15055 L s % Start of user PostScript 150. 40. 120. 40. MAarrowhead1 % End of user PostScript .51805 .15055 m .46252 .15055 L s % Start of user PostScript 210. 40. 190. 40. MAarrowhead1 % End of user PostScript .62911 .15055 m .57358 .15055 L s % Start of user PostScript 250. 40. 230. 40. MAarrowhead1 % End of user PostScript .82348 .15055 m .74018 .15055 L s % Start of user PostScript 320. 40. 290. 40. MAarrowhead1 % End of user PostScript gsave .17097 .42221 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .36533 .42221 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .643 .42221 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .83736 .42221 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .40698 .60332 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .68465 .60332 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .87901 .60332 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .87901 .60332 m .97619 .60332 L s .93454 .15055 m .97619 .15055 L s gsave .02381 .05999 -88.125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Output) show 113.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore [ .001 .01 ] 0 setdash .51805 .15055 m .57358 .15055 L s .51805 .60332 m .57358 .60332 L s .51805 .42221 m .57358 .42221 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Text", TextAlignment->Center, TextJustification->0, ImageSize->{272, 168}, ImageMargins->{{43, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztXVlvFEcQHu9pwDnM5fiIPZsYo0AUIZQDgZBzEPPEaxJQhGI2RiCFQIxz /olEeYr/R6L8uUiOu2a2enf8dU+1ZzzeWdcK7bSrq+v7uqqmd2a6e7i3ufNk 69nmztP+Znx3e/PFk6f9l/HG8+19UXMqiqb+iqLovzgy5b39Yvq1t/9vb9d8 Gcnxlx+Yw1VDbZlLt4Fsfkg9akZJX8hQdBnIloR6t0q2N6c0labSVJpjRvOK ObRNxdV6EH4XVCl1pe6k3uUMn+ZS1Erq7KdtBC1T6gBTLXnzV+rhFdTLJuy5 Q6/h8lWDa7Ntkawoxpl6uLsNqpBMGgIkm/a6rIjl1+rhZES968qeIk7OyJwZ qu5Wd6u71d1ed+uIXW1Om4+07Ql1d5N9ZEvTptRkGUWELnjbo3qZFjP18Iz0 +mwWyFbrmxDSYefsZHXb3hJemKyO1eShk9JUmkpTaSpNpak0labSVJpKE9Kk GxS6z35VCEAt6OYGTUUh6nSPnogOTGydYWvo4QHC91mbYWvoLtPjhvNAhh4K oekgRHIOyKTuSvTaI7JBP2c8dVIH+uyj+9AJdSWygR7JqAv9Gddx5V4Z+WgR pLOZHreeysgSAAf7Iv52AqGHoe5AjLpkUCYpPVijJ/uIJzKJfLVUDUxeSBo2 vvKRLSgWQwj5OSo9M5xG7eqB1B2Dz+tBcakKLQ3P+2wHPaDMpnQSrMSFmfSR Rgs9HD4XBJ3fNxRLhLvGnT+NO4XOXDSsovPE3VERzMWwOF4zBzK8BpRmi8WM ukci1HlkfKCPfhattTUmjSZ00LTxuTQPMliRqzd2Qgn5EyGcZ3Yo21Jv0yK1 a6YCzWFYULq6jl16zmHoopE0PV1tYpfbMZssoFPowmj3YpceCjShztoW0Xvm 0HEl3WmuzRpL4B3pJGi2yioz2BFUF4PmHZsKskYck4wsOWWj6xzqsOEzf/xr smU0m1SOZXv+BYx/6GcqS/bQhjyullzb8VnVcDlOcuGWb+UW7qW9cFp2Qgc2 CnSIPXmGLgvMEd1cIF8EGUBucDR/U+iQgOaBrhmnRzNKXakrdaWu1JW6Ulfq Sl2pK3WlrtSVulJX6kpdqSt1pa7UlbpSV+pKXakrdaWu1JW6UlfqNacueAEr WjiYmngOqjaAbEuo95ZCKZRCKZRCKZRCHRNUz3zTMthTCnBMALH5tm+ljaLv 6NAZURqU9z+f+asfFWp9gMwzOrSGdczncyz+Nki7B8Fa3KLFJjOyHrYXaCX2 u6IbZu1t91n7PafQXS49BjK0m2HSTNR4sPRA0R+/n9z6/ugJQfuF7ptSou15 FcF1j5Z9xYDn5HoEqtDOQLSjBL0KHe2O+pi+w18TgO6ne4H66F0RaF/bmLgD PYVAu2OP2A1fceo49/FmZGirTcxW0KZFtLnxQ27R8XTQv5kfdXUu0C7qNQoN 2qqWuvBLUIX2wiJnSh28IsRA3UHu/0Boz76SXrrZHsmku4XLQfOE6guny+Sb dpF5FB7p1n40wKDwoJ3te/Jd9mgPM4rLEcCghPYEBG14RPkgDQSiJHU6sof2 oCNPog2TFboHDfoxkNGeShI5x+mMbNFzxqAOop/GJUZFpzAKj8cl1AXnbmTU aWkcFjxdzd0C7xzJnK/0cToEuRDlF8rNQGcicgtA1ivQ9iNhW3Q5+0aBtijD 837FKYpobgnd5vhb3PC2uARq54NbeLpor/Wi0f3LKESrIco3XcooCIshyijx 0+78BqqK3LZ6oH4tGQrlcPVQv5QMhZK1eqifS4ZC+T7RUD+VDLU4FlA/lgyF xvfqoXZKhkJvsqge6mXJUOhKqXqo7ZKhVsYC6oeSoeKxgHpRMhS6WK4eajLn FBRKoRRKoRSqEqjjXHXhoZWsv2gPa/Pxjqeuf8h2uVSOZimIZ4K3hAUYZa3h oJoNLm0B2UlYBjKZA4BCKZRCKVQtoOwyqz6X7nAp8F6Zrk7QTDia5HsYorwe oux5xoRYf0rfeEYfrcL4OlD/dqC+58Efor/MxlC0Gl6oLpCh7WRoKYHfMnp+ vhJsJdAVsfkmR6OGFsr5fx5TW3IAVaL/2ddvZaEAA89jbOrsjvXSId8rv2tK 6erzP82BbiTQpIB0fRbx6xrJDbaHlp1J7S2wPZRAUitrSRf/4GCgzJMa67CV m1xCa0ek9ubZChqnArv4t1Mdp8jDQP31QP13hmgNndUeMrla6yKtFPif0YQ/ eH/4TZ7CJ3kKV5I//uUwohvAZAVsstx5d3zK0dT/4m/rzQ==\ \>"], ImageRangeCache->{{{92.0625, 363.063}, {585.625, 418.625}} -> {-139.826, \ 206.667, 1.44163, 0.44204}}], Cell["General linear feedback shift register (LFSR)", "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigShift LFSR"], Cell[TextData[{ "The output sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " of such a LFSR can be described by the starting state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " and the linear recurrence relation:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", RowBox[{"k", "+", "n"}]], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["c", "i"], SubscriptBox["s", RowBox[{"k", "+", "i"}]]}]}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShift Lin Rec"], Cell["or, equivalently", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SubscriptBox["s", RowBox[{"k", "+", "i"}]]}]}], "=", "0"}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShift Full Lin Rec"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "n"], "=", "1"}], TraditionalForm]]], " by definition. Let ", Cell[BoxData[ FormBox[ SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", "i", ")"}]], TraditionalForm]]], " denote the state at time ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", "i", ")"}]], "=", RowBox[{"(", RowBox[{ SubscriptBox["s", "i"], ",", SubscriptBox["s", RowBox[{"i", "+", "1"}]], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"i", "+", "n", "-", "1"}]]}], ")"}]}], TraditionalForm]]], ". Then, similarly to ", ButtonBox["(3.2)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Lin Rec"], " one has the following recurrence relation for the successive states of the \ LFSR:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", RowBox[{"k", "+", "n"}], ")"}]], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", RowBox[{"k", "+", "i"}], ")"}]]}]}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShift Rec States"], Cell[TextData[{ "The coefficients ", Cell[BoxData[ FormBox[ SubscriptBox["c", "i"], TraditionalForm]]], " in ", ButtonBox["(3.2)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Lin Rec"], " and ", ButtonBox["Figure 3.3", BaseStyle->"Hyperlink", ButtonData:>"FigShift LFSR"], " are called the ", StyleBox["feedback coefficients", FontSlant->"Italic"], " of the LFSR. If ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "i"], "=", "0"}], TraditionalForm]]], " then the corresponding switch in ", ButtonBox["Figure 3.3", BaseStyle->"Hyperlink", ButtonData:>"FigShift LFSR"], " is open, while if ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "i"], "=", "1"}], TraditionalForm]]], " this switch is closed. We shall always assume that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "0"], "=", "1"}], TraditionalForm]]], ", because otherwise the output sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " is just a delayed version of a sequence, generated by a LFSR with its ", Cell[BoxData[ FormBox[ SubscriptBox["c", "0"], TraditionalForm]]], " equal to 1. \nAs a consequence, any state of the LFSR not only has a \ unique successor state, as is natural, but also has a unique predecessor. \ Indeed, for any ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "0"}], TraditionalForm]]], " the value of ", Cell[BoxData[ FormBox[ SubscriptBox["s", "k"], TraditionalForm]]], " is uniquely determined by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", RowBox[{"k", "+", "1"}]], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "+", "n"}]]}], TraditionalForm]]], " by means of ", ButtonBox["(3.2)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Lin Rec"], ". Later on (in ", ButtonBox["Thm. 3.22", BaseStyle->"Hyperlink", ButtonData:>"TheoShift unique pred"], ") we shall prove this property in a more general situation." }], "Text", CellTags->"DefShift feedb coeff"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nWith ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"n", "=", "4"}], ",", " ", RowBox[{ SubscriptBox["c", "0"], "=", RowBox[{ SubscriptBox["c", "1"], "=", "1"}]}], ",", RowBox[{ SubscriptBox["c", "2"], "=", RowBox[{ SubscriptBox["c", "3"], "=", "0"}]}]}], TraditionalForm]]], ", we get the following LFSR: " }], "Example"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.0735585 0.00304275 -0.279587 0.0117721 [ [.23072 .1913 -9.4375 -8.5 ] [.23072 .1913 9.4375 8.5 ] [.44371 .1913 -9.4375 -8.5 ] [.44371 .1913 9.4375 8.5 ] [.6567 .1913 -9.4375 -8.5 ] [.6567 .1913 9.4375 8.5 ] [.86969 .1913 -9.4375 -8.5 ] [.86969 .1913 9.4375 8.5 ] [.44371 .60332 -6.1875 -8.67 ] [.44371 .60332 6.1875 8.33 ] [.02381 .07358 -27.125 -8.5 ] [.02381 .07358 27.125 8.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .16986 .01472 m .29157 .01472 L .29157 .36788 L .16986 .36788 L .16986 .01472 L s gsave .23072 .1913 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .38285 .01472 m .50456 .01472 L .50456 .36788 L .38285 .36788 L .38285 .01472 L s gsave .44371 .1913 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .59585 .01472 m .71756 .01472 L .71756 .36788 L .59585 .36788 L .59585 .01472 L s gsave .6567 .1913 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (3) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .80884 .01472 m .93055 .01472 L .93055 .36788 L .80884 .36788 L .80884 .01472 L s gsave .86969 .1913 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (4) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .44371 .60332 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .23072 .36788 m .23072 .50914 L s % Start of user PostScript 100. 55. 100. 67. MAarrowhead1 % End of user PostScript .23072 .50914 m .23072 .60332 L s .44371 .36788 m .44371 .50914 L s % Start of user PostScript 170. 55. 170. 67. MAarrowhead1 % End of user PostScript .44371 .50914 m .44371 .60332 L s .23072 .60332 m .35851 .60332 L s % Start of user PostScript 100. 75. 142. 75. MAarrowhead1 % End of user PostScript .35851 .60332 m .44371 .60332 L s .44371 .60332 m .7632 .60332 L s % Start of user PostScript 170. 75. 275. 75. MAarrowhead1 % End of user PostScript .7632 .60332 m .97619 .60332 L s .97619 .60332 m .97619 .35611 L s % Start of user PostScript 345. 75. 345. 54. MAarrowhead1 % End of user PostScript .97619 .35611 m .97619 .1913 L s .16986 .1913 m .03294 .1913 L s % Start of user PostScript 80. 40. 35. 40. MAarrowhead1 % End of user PostScript .38285 .1913 m .29157 .1913 L s % Start of user PostScript 150. 40. 120. 40. MAarrowhead1 % End of user PostScript .59585 .1913 m .50456 .1913 L s % Start of user PostScript 220. 40. 190. 40. MAarrowhead1 % End of user PostScript .80884 .1913 m .71756 .1913 L s % Start of user PostScript 290. 40. 260. 40. MAarrowhead1 % End of user PostScript .93055 .1913 m .97619 .1913 L s gsave .02381 .07358 -88.125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Output) show 113.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Text", TextAlignment->Center, TextJustification->0, ImageSize->{259.875, 160.25}, ImageMargins->{{68.9375, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztnN1O2zAUx90kbRnjS3wN7QO6XW/AFTfTJK42aWwPUcEkuJg2Ma6AbdJ4 kT3DXrDUx6lL2n8ch6RVPf4R2NY59jm/c+zETUL53L04/fK1e3F23O18OO9+ Pz07/tF5/+28L4obSjVipdTfjtLtXr+ZFr3+Ty/RhZbU336nq23tasO21oFs 5U53pVGVtPTvUyBb8+y3WrO9JWISk5gPB/OZrkSzEwbwc6DaJvqE0Zt2mUgr kj6x0aVHbLvI1ph4dl4MIwFmu29mVIOAYjAsGipcg2o0uBBGIlFsRpZkZAXR tmtM7RIzx8z5Zk7Ow+ieOVz5f/KVHlE2J62sDF31o7xhgVzAXDvBYzBsI9zz Zrjro7kJOLBAPpwTk5jEJCYxiUlMYhKTmMSEmMu6lBvKR54O5MGj3MbNeaKX 9yEj4jwfjnCMauzpBLKS63dE5htlRdfoEUe7XPBNOzNJNZahoWaFhAyttDxj c7PEzoVXlJcRmetJVAT6oxBycaGvYlmpxHrYSyYSx9iqQq4dK/cVUG0B2XwN M4T6oUct8xVmCPVDL2emH08b+hrU6FqcTtELXb3UCgl45JWUDHyS1SZWK643 y4wd0S5YWdmzuXgOqpyxyF6Vs3MafGi9xvmplSUnKxRthAjOPQKlp24fJUOc pY9lRCc60YlOdKITnehEJzrRiU50ohOd6EQnOtGJTnSiE53oRCf6A0T3+C8B 8uJYXiGnL44/AZt7QHY19YHX+dH6mriUcuwrRcnUQWiCJmiCJmhi1kx8lGps i9jF4p/5ho50Jfvcvm39CqT7bEwFTdAETdBE+Cbe6FI2D8eGgQa+lrKVkQ3a /aMkBvr+vLnX9P/j6kMgOyjA+KcV6d3eiU3F6n08y8i3pt9lSQO/jfbKndM/ pnFtvd0YQc8IJtZWjVu6Nv6A\ \>"], ImageRangeCache->{{{0, 258.875}, {159.25, 0}} -> {-5.55252, 22.3738, \ 1.38437, 0.35782}}], Cell[TextData[{ "Example of LFSR with ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "4"}], TraditionalForm]]], "." }], "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigShift LFSR n=4"], Cell["\<\ With starting state (1,0,0,0) one gets the subsequent list of successive \ states:\ \>", "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3"}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0"}], "}"}]}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3"}], "}"}], "=", RowBox[{"{", RowBox[{"s1", ",", "s2", ",", "s3", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"s0", "+", "s1"}], ",", "2"}], "]"}]}], "}"}]}], ";", "\t ", RowBox[{"Print", "[", RowBox[{"i", ",", "\"\< \>\"", ",", RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3"}], "}"}]}], "]"}]}], ",", RowBox[{"{", RowBox[{"i", ",", "15"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ InterpretationBox[ RowBox[{"1", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[1, " ", {0, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"2", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[2, " ", {0, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"3", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[3, " ", {0, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"4", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[4, " ", {1, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"5", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[5, " ", {0, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"6", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[6, " ", {0, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"7", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[7, " ", {1, 1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"8", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[8, " ", {1, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"9", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[9, " ", {0, 1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"10", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[10, " ", {1, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"11", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[11, " ", {0, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"12", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[12, " ", {1, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"13", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[13, " ", {1, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"14", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[14, " ", {1, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"15", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[15, " ", {1, 0, 0, 0}], Editable->False]], "Print"], Cell[TextData[{ "Note that the state at ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "15"}], TraditionalForm]]], " is identical to the state at ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", "0"}], TraditionalForm]]], ", so the output sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " has ", ButtonBox["period", BaseStyle->"Hyperlink", ButtonData:>"DefShift Period"], " 15." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "One can easily determine the output sequence of a LFSR with the ", StyleBox["Mathematica", FontSlant->"Italic"], " Functions ", ButtonBox["Table", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Mod", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Do", BaseStyle->"RefGuideLink"], " as follows:" }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"Clear", "[", "s", "]"}], ";", " ", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"s", "[", "0", "]"}], ",", RowBox[{"s", "[", "1", "]"}], ",", RowBox[{"s", "[", "2", "]"}], ",", RowBox[{"s", "[", "3", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0"}], "}"}]}], ";", RowBox[{ RowBox[{"s", "[", "j_", "]"}], " ", ":=", " ", RowBox[{"Mod", "[", " ", RowBox[{ RowBox[{ RowBox[{"s", "[", RowBox[{"j", "-", "4"}], "]"}], "+", RowBox[{"s", "[", RowBox[{"j", "-", "3"}], "]"}]}], ",", " ", "2"}], "]"}]}]}], "\n", RowBox[{"Table", "[", RowBox[{ RowBox[{"s", "[", "j", "]"}], ",", " ", RowBox[{"{", RowBox[{"j", ",", " ", "0", ",", " ", "15"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "Since there are precisely ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], " different states in a LFSR of length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and the all-zero state always goes over into itself, one can conclude that \ the period of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " will never exceed ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], "." }], "Text"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tPN-Sequences" }], "Subsection", CellTags->"SubsShift PN"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "A ", StyleBox["PN-sequence", FontSlant->"Italic"], " or pseudo-noise sequence is an output sequence of an ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-stage LFSR with period ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefShift PN Seq"], Cell[TextData[{ "If an ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-stage LFSR does not run cyclically through all ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], " non-zero states, it certainly does not generate a PN-sequence. As a \ consequence we have the following theorem." }], "Text"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nAn ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-stage LFSR that generates a PN-sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " runs cyclically through all ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], " non-zero states.\nAny non-zero output sequence of this LFSR is a shift of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "." }], "Theorem", CellTags->"LemShift All States"], Cell[TextData[{ "We want to classify all LFSR's which generate PN-sequences. To this end, we \ associate with an LFSR with feedback coefficients ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "0"], ",", SubscriptBox["c", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["c", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], " its ", StyleBox["characteristic polynomial", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ", which is defined as follows:" }], "Text", CellTags->"DefShift Char Pol"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["c", "0"], "+", RowBox[{ SubscriptBox["c", "1"], "x"}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "1"}]], SuperscriptBox["x", RowBox[{"n", "-", "1"}]]}], "+", SuperscriptBox["x", "n"]}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox["x", "i"]}]}]}]}], TraditionalForm]]], "," }], "NumberedEquation"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "n"], "=", "1"}], TraditionalForm]]], " ", "by definition and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "0"], "=", "1"}], TraditionalForm]]], " by assumption." }], "Text"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{"f", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], ". Then\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], FontFamily->"Times", FontSize->12, FontWeight->"Plain", FontSlant->"Plain", FontVariations->{"StrikeThrough"->False, "Underline"->False}], "=", RowBox[{ RowBox[{"{", " ", RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], " ", "|", " ", RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "satisfies", " ", ButtonBox[ RowBox[{"(", "3.2", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShift Lin Rec"]}]}], " ", "}"}], "."}]}], TraditionalForm]]] }], "Definition", CellTags->"DefShift Omega"], Cell[TextData[{ "In words, \[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], " is the set of all output sequences of the LFSR with characteristic \ polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " be the characteristic polynomial of an ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-stage LFSR. Then ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], TraditionalForm]]], " is a binary vector space of dimension ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Theorem", CellTags->"LemShift Omega=linear"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Since ", ButtonBox["(3.2)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Lin Rec"], " is a linear recurrence relation, \[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], " obviously is a linear vectorspace. Also, each ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " in \[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], " is uniquely determined by its first ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " entries ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], "(the beginning state), so the dimension of \[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], " is at most ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ". On the other hand, the ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " different sequences starting with" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ OverscriptBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]0"}], "\[OverBrace]"], "i"], TraditionalForm], "1", OverscriptBox[ FormBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]\[Ellipsis]00"}], "\[OverBrace]"], TraditionalForm], RowBox[{"n", "-", "i", "-", "1"}]]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "1"}]}], TraditionalForm]]], ", are clearly independent. So, the dimension of \[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], " is at least ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " be a polynomial of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", say ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "n"], "\[NotEqual]", "0"}], TraditionalForm]]], ". Then, the ", StyleBox["reciprocal polynomial", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is defined by" }], "Text", CellTags->"FormShift Reciprocal"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}], " ", "=", RowBox[{ RowBox[{ SuperscriptBox["x", "n"], RowBox[{"f", "(", RowBox[{"1", "/", "x"}], ")"}]}], "="}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["c", "0"], SuperscriptBox["x", "n"]}], "+", RowBox[{ SubscriptBox["c", "1"], SuperscriptBox["x", RowBox[{"n", "-", "1"}]]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "1"}]], "x"}], "+", SubscriptBox["c", "n"]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "i"}]], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], "," }], "NumberedEquation", CellTags->"FormShift Rec pol"], Cell[TextData[{ "With a sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " we associate the ", StyleBox["power series (", FontSlant->"Italic"], "also called ", StyleBox["generating function)", FontSlant->"Italic"] }], "Text", CellTags->"DefShift power series"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", RowBox[{ SubsuperscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "\[Infinity]"], RowBox[{ SubscriptBox["s", "i"], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShift Gen Function"], Cell[TextData[{ "Instead of writing ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]"}], TraditionalForm]]], "\[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], ", we shall also use the notation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "\[Element]"}], TraditionalForm]]], "\[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], ". We know that ", Cell[BoxData[ FormBox[ RowBox[{"S", "(", "x", ")"}], TraditionalForm]]], " is uniquely determined by the beginning ", ButtonBox["state", BaseStyle->"Hyperlink", ButtonData:>"DefShift State"], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " and the ", ButtonBox["characteristic polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefShift Char Pol"], " ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ". In the following theorem and corollary, we shall now make this dependency \ more explicit." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]"}], TraditionalForm]]], "\[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " given by ", ButtonBox["(3.5)", BaseStyle->"Hyperlink", ButtonData:>"DefShift Char Pol"], ". Further, let ", Cell[BoxData[ FormBox[ RowBox[{"S", "(", "x", ")"}], TraditionalForm]]], " be the generating function of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ". Then, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}], TraditionalForm]]], " is a polynomial of degree less than ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Theorem", CellTags->"TheoShift S(x)f*(x)=pol"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ":" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["=", RowBox[{ RowBox[{ ButtonBox[ RowBox[{"(", "3.6", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShift Gen Function"], "&"}], ButtonBox[ RowBox[{"(", "3.7", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShift Reciprocal"]}]], RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubsuperscriptBox["\[Sum]", RowBox[{"k", "=", "0"}], "\[Infinity]"], RowBox[{ SubscriptBox["s", "k"], SuperscriptBox["x", "k"]}]}], ")"}], ".", RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "l"}]], SuperscriptBox["x", "l"]}]}], ")"}]}], "="}]}], TraditionalForm]]], "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], "\[Infinity]"], RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "0"}], RowBox[{"min", RowBox[{"{", RowBox[{"j", ",", "n"}], "}"}]}]], RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "l"}]], SubscriptBox["s", RowBox[{"j", "-", "l"}]]}]}], ")"}], SuperscriptBox["x", "j"]}]}], "="}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "0"}], "j"], RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "l"}]], SubscriptBox["s", RowBox[{"j", "-", "l"}]]}]}], ")"}], SuperscriptBox["x", "j"]}]}], "+"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "n"}], "\[Infinity]"], RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "l"}]], SubscriptBox["s", RowBox[{"j", "-", "l"}]]}]}], ")"}], SuperscriptBox["x", "j"]}]}], "="}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "0"}], "j"], RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "l"}]], SubscriptBox["s", RowBox[{"j", "-", "l"}]]}]}], ")"}], SuperscriptBox["x", "j"]}]}], "+"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "n"}], "\[Infinity]"], RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SubscriptBox["s", RowBox[{ RowBox[{"(", RowBox[{"j", "-", "n"}], ")"}], "+", "i"}]]}]}], ")"}], SuperscriptBox["x", "j"], OverscriptBox["=", ButtonBox[ RowBox[{"(", "3.3", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShift Full Lin Rec"]]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "0"}], "j"], RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "l"}]], SubscriptBox["s", RowBox[{"j", "-", "l"}]]}]}], ")"}], SuperscriptBox["x", "j"]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Remark:", FontWeight->"Bold"], "\nNote that the proof above implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", FractionBox[ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]]}], TraditionalForm]]], "with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "(", "x", ")"}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "0"}], "j"], RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "l"}]], SubscriptBox["s", RowBox[{"j", "-", "l"}]]}]}], ")"}], SuperscriptBox["x", "j"]}]}]}], TraditionalForm]]], ". This polynomial is of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], " and has coefficients depending on the initial state and the characteristic \ polynomial.\nNote also that the mapping ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"S", "(", "x", ")"}], "\[LongRightArrow]", RowBox[{"S", "(", "x", ")"}]}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}], TraditionalForm]]], " is one-to-one since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}], "\[NotEqual]", "0"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Consider the LFSR with", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox["n", TraditionalForm]]], "=5, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"]}]}], TraditionalForm]]], "and take as beginning state (1,1,0,1,0). Then ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " can be computed with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["PolynomialMod", BaseStyle->"RefGuideLink"], " as follows:" }], "Example"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"c", "[", "0", "]"}], ",", RowBox[{"c", "[", "1", "]"}], ",", RowBox[{"c", "[", "2", "]"}], ",", RowBox[{"c", "[", "3", "]"}], ",", RowBox[{"c", "[", "4", "]"}], ",", RowBox[{"c", "[", "5", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], ";", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"s", "[", "0", "]"}], ",", RowBox[{"s", "[", "1", "]"}], ",", RowBox[{"s", "[", "2", "]"}], ",", RowBox[{"s", "[", "3", "]"}], ",", RowBox[{"s", "[", "4", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]}], ";", RowBox[{"u", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "0"}], "4"], RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"l", "=", "0"}], "j"], RowBox[{ RowBox[{"c", "[", RowBox[{"5", "-", "l"}], "]"}], RowBox[{"s", "[", RowBox[{"j", "-", "l"}], "]"}], SuperscriptBox["x", "j"]}]}]}], ",", "2"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}]], "Output"], Cell[TextData[{ "To check Theorem 3.4 up to some term ", Cell[BoxData[ FormBox[ SuperscriptBox["x", "L"], TraditionalForm]]], ", we use ", ButtonBox["(3.2)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Lin Rec"], " to compute the ", Cell[BoxData[ FormBox[ SubscriptBox["s", "i"], TraditionalForm]]], "'s up to ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " (here we use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Mod", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Print", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["PolynomialMod", BaseStyle->"RefGuideLink"], "):" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"c", "[", "0", "]"}], ",", RowBox[{"c", "[", "1", "]"}], ",", RowBox[{"c", "[", "2", "]"}], ",", RowBox[{"c", "[", "3", "]"}], ",", RowBox[{"c", "[", "4", "]"}], ",", RowBox[{"c", "[", "5", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"s", "[", "0", "]"}], ",", RowBox[{"s", "[", "1", "]"}], ",", RowBox[{"s", "[", "2", "]"}], ",", RowBox[{"s", "[", "3", "]"}], ",", RowBox[{"s", "[", "4", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"fstar", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "5"], RowBox[{ RowBox[{"c", "[", RowBox[{"5", "-", "i"}], "]"}], SuperscriptBox["x", "i"]}]}]}], ";"}], "\n", RowBox[{ RowBox[{"L", "=", "60"}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"s", "[", "i_", "]"}], ":=", RowBox[{ RowBox[{"s", "[", "i", "]"}], "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"s", "[", RowBox[{"i", "-", "5"}], "]"}], "+", RowBox[{"s", "[", RowBox[{"i", "-", "3"}], "]"}]}], ",", "2"}], "]"}]}]}], ";"}], "\n", RowBox[{ RowBox[{"S", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "L"], RowBox[{ RowBox[{"s", "[", "i", "]"}], SuperscriptBox["x", "i"]}]}]}], ";", RowBox[{"Print", "[", "S", "]"}], ";"}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"S", "*", "fstar"}], ",", RowBox[{"{", RowBox[{ SuperscriptBox["x", "L"], ",", "2"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "13"], "+", SuperscriptBox["x", "15"], "+", SuperscriptBox["x", "16"], "+", SuperscriptBox["x", "19"], "+", SuperscriptBox["x", "20"], "+", SuperscriptBox["x", "21"], "+", SuperscriptBox["x", "22"], "+", SuperscriptBox["x", "23"], "+", SuperscriptBox["x", "27"], "+", SuperscriptBox["x", "28"], "+", SuperscriptBox["x", "30"], "+", SuperscriptBox["x", "31"], "+", SuperscriptBox["x", "32"], "+", SuperscriptBox["x", "34"], "+", SuperscriptBox["x", "36"], "+", SuperscriptBox["x", "41"], "+", SuperscriptBox["x", "44"], "+", SuperscriptBox["x", "46"], "+", SuperscriptBox["x", "47"], "+", SuperscriptBox["x", "50"], "+", SuperscriptBox["x", "51"], "+", SuperscriptBox["x", "52"], "+", SuperscriptBox["x", "53"], "+", SuperscriptBox["x", "54"], "+", SuperscriptBox["x", "58"], "+", SuperscriptBox["x", "59"]}]], "Print"], Cell[BoxData[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}]], "Output"], Cell["Note that the output is indeed the same as above.", "Text"], Cell[TextData[{ StyleBox["Corollary ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], "=", RowBox[{"{", " ", RowBox[{ FractionBox[ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]], " ", "|", " ", RowBox[{ RowBox[{"degree", "(", RowBox[{"u", "(", "x", ")"}], ")"}], "<", "n"}]}], " ", "}"}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorShift S=u/f"], Cell[TextData[{ StyleBox["Remark", FontWeight->"Bold"], ": Writing ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", RowBox[{ RowBox[{"u", "(", "x", ")"}], "/", RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}]}], TraditionalForm]]], " means the same as ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"S", "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}], "=", RowBox[{"u", "(", "x", ")"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": From ", ButtonBox["Theorem 3.4", BaseStyle->"Hyperlink", ButtonData:>"TheoShift S(x)f*(x)=pol"], " and the remark below it we know that each member of \[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], " can be written as ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "(", "x", ")"}], "/", RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}], TraditionalForm]]], " with degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "(", "x", ")"}], ")"}], "<", "n"}], TraditionalForm]]], " and we know that this ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " is unique. This proves the \[Subset]-inclusion.\nOn the other hand, \ \[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], " has cardinality ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "n"], TraditionalForm]]], " by ", ButtonBox["Lemma 3.3", BaseStyle->"Hyperlink", ButtonData:>"LemShift Omega=linear"], " and there are also exactly ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "n"], TraditionalForm]]], " binary polynomials ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["It is now easy to prove the following lemma.", "Text"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " be two (characteristic) polynomials and let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "g", ")"}]}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["lcm", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], "[", RowBox[{"f", ",", " ", "g"}], "]"}], TraditionalForm]]], " denote the least common multiple of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["g", TraditionalForm]]], ". Then\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["t", "i"]}], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", RowBox[{"lcm", "[", RowBox[{"f", ",", "g"}], "]"}], ")"}]}], TraditionalForm]]], "." }], "Theorem", GeneratedCell->True, CellTags->"LemShift s+t seq"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Write ", Cell[BoxData[ FormBox[ RowBox[{"h", "=", RowBox[{"lcm", "[", RowBox[{"f", ",", "g"}], "]"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"h", "=", RowBox[{"a", ".", "f"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"h", "=", RowBox[{"b", ".", "g"}]}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{"S", "(", "x", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"T", "(", "x", ")"}], TraditionalForm]]], " be the generating functions of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ".\n", ButtonBox["Corollary 3.5", BaseStyle->"Hyperlink", ButtonData:>"CorShift S=u/f"], " implies that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", RowBox[{ RowBox[{"u", "(", "x", ")"}], "/", RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"T", "(", "x", ")"}], "=", RowBox[{ RowBox[{"v", "(", "x", ")"}], "/", RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]}]}], TraditionalForm]]], ", where degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "(", "x", ")"}], ")"}], "<"}], TraditionalForm]]], "degree", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}], TraditionalForm]]], " and degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"v", "(", "x", ")"}], ")"}], "<"}], TraditionalForm]]], "degree", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"g", "(", "x", ")"}], ")"}], TraditionalForm]]], ". Since" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"S", "(", "x", ")"}], "+", RowBox[{"T", "(", "x", ")"}]}], "=", RowBox[{ RowBox[{ FractionBox[ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]], "+", FractionBox[ RowBox[{"v", "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]]}], "=", RowBox[{ RowBox[{ FractionBox[ RowBox[{ RowBox[{ SuperscriptBox["a", "*"], "(", "x", ")"}], RowBox[{"u", "(", "x", ")"}]}], RowBox[{ RowBox[{ SuperscriptBox["a", "*"], "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}]], "+", FractionBox[ RowBox[{ RowBox[{ SuperscriptBox["b", "*"], "(", "x", ")"}], RowBox[{"v", "(", "x", ")"}]}], RowBox[{ RowBox[{ SuperscriptBox["b", "*"], "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]}]]}], "=", FractionBox[ RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["a", "*"], "(", "x", ")"}], RowBox[{"u", "(", "x", ")"}]}], "+", RowBox[{ RowBox[{ SuperscriptBox["b", "*"], "(", "x", ")"}], RowBox[{"v", "(", "x", ")"}]}]}], RowBox[{ SuperscriptBox["h", "*"], "(", "x", ")"}]]}]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "and both ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["a", "*"], "(", "x", ")"}], RowBox[{"u", "(", "x", ")"}]}], TraditionalForm]]], " as well as ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["b", "*"], "(", "x", ")"}], RowBox[{"v", "(", "x", ")"}]}], TraditionalForm]]], " have degree less than degree", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"h", "(", "x", ")"}], ")"}], TraditionalForm]]], ", it follows that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"S", "(", "x", ")"}], "+", RowBox[{"T", "(", "x", ")"}]}], "\[Element]"}], TraditionalForm]]], "\[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "h", ")"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tWhich Characteristic Polynomials give PN-Sequences?" }], "Subsection", CellTags->"SubsShift which char"], Cell[TextData[{ "The ", StyleBox["period", FontSlant->"Italic"], " of a polynomial ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "0", ")"}], "\[NotEqual]"}], TraditionalForm]]], "0, is the smallest positive ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "m"], "-", "1"}], TraditionalForm]]], ", i.e. the smallest positive ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "m"], "\[Congruent]", RowBox[{"1", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}]}]}]}], TraditionalForm]]], ". It is well defined, since the sequence of successive powers of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], ", reduced modulo ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ", has to be periodic. Indeed, if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "i"], "\[Congruent]", RowBox[{ SuperscriptBox["x", "j"], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"0", "<", "i", "<", "j"}], TraditionalForm]]], " then also ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{"i", "-", "1"}]], "\[Congruent]", RowBox[{ SuperscriptBox["x", RowBox[{"j", "-", "1"}]], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}], TraditionalForm]]], ", because ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"x", ",", RowBox[{"f", "(", "x", ")"}]}], ")"}], "=", "1"}], TraditionalForm]]], ". (The term ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " has a multiplicative ", ButtonBox["inverse", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Group"], " by ", ButtonBox["Corollary B.14", BaseStyle->"Hyperlink", ButtonData:>"CorAppB A(x)U(x)=1 mod F(x)"], ", so we can indeed divide by ", Cell[BoxData[ FormBox["x", TraditionalForm]]], ".) We can repeat this process until we get ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[Congruent]", RowBox[{ SuperscriptBox["x", RowBox[{"j", "-", "i"}]], " ", RowBox[{"(", RowBox[{"mod", " ", RowBox[{"f", "(", "x", ")"}]}], ")"}]}]}], TraditionalForm]]], "." }], "Text", GeneratedCell->True, CellTags->"DefShift period pol"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"1", "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}]}], TraditionalForm]]], ". Its period can be computed with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["While", BaseStyle->"RefGuideLink"], " and ", ButtonBox["PolynomialMod", BaseStyle->"RefGuideLink"], " in the way described above. So, starting with x (trying ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "1"}], TraditionalForm]]], "), we compute the successive powers of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " by multiplying the previous power by ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " (this amounts to a cyclic shift), and then reducing the answer modulo ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ", until we arrive at the outcome 1." }], "Example"], Cell[BoxData[{ RowBox[{ RowBox[{"f", " ", "=", " ", RowBox[{"1", " ", "+", " ", SuperscriptBox["x", "4"], "+", " ", SuperscriptBox["x", "5"]}]}], ";", " ", RowBox[{"m", " ", "=", "1"}], ";", RowBox[{"u", "=", "x"}], ";", RowBox[{"While", "[", RowBox[{ RowBox[{"u", "=!=", "1"}], ",", RowBox[{ RowBox[{"u", "=", " ", RowBox[{"PolynomialMod", "[", " ", RowBox[{ RowBox[{"x", "*", "u"}], ",", RowBox[{"{", " ", RowBox[{"f", ",", "2"}], "}"}]}], "]"}]}], " ", ";", " ", RowBox[{"m", "=", RowBox[{"m", "+", "1"}]}]}]}], "]"}]}], "\n", "m"}], "Input", GeneratedCell->True], Cell[BoxData["21"], "Output"], Cell[TextData[{ "It follows from ", ButtonBox["Theorem B.35", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Factor x^p^m-x"], " that a binary, irreducible polynomial of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}]], "-", "1"}], TraditionalForm]]], ", so it also follows that the period ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " of such a polynomial will divide ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], ". \n(This observation can be used to determine the period of a polynomial \ more efficiently, however we shall not discuss that technique at this moment. \ See the end of ", ButtonBox["Example 8.2", BaseStyle->"Hyperlink", ButtonData:>"ExamDiscr 2 primitive"], ")" }], "Text", GeneratedCell->True, CellTags->"FactShift period"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is a polynomial of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and period ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " has a period dividing ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Theorem", CellTags->"LemShift Period div m"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Write ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "m"], "-", "1"}], "=", RowBox[{ RowBox[{"f", "(", "x", ")"}], RowBox[{"g", "(", "x", ")"}]}]}], TraditionalForm]]], ". Taking the reciprocal on both sides gives ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", "m"], "-", "1"}], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]}], TraditionalForm]]], ". By ", ButtonBox["Corollary 3.5", BaseStyle->"Hyperlink", ButtonData:>"CorShift S=u/f"], ", there exists a polynomial ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], " such that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", RowBox[{ FractionBox[ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]], "=", RowBox[{ FractionBox[ RowBox[{ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]}], RowBox[{ RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]}]], "="}]}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]}], RowBox[{"(", RowBox[{"1", "-", SuperscriptBox["x", "m"]}], ")"}]], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}], RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "m"], "+", SuperscriptBox["x", RowBox[{"2", "m"}]], "+", "\[Ellipsis]"}], ")"}]}], TraditionalForm]]] }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Since degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]}], ")"}], "<", RowBox[{"degree", "(", RowBox[{ RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}], RowBox[{ SuperscriptBox["g", "*"], "(", "x", ")"}]}], ")"}]}], "=", RowBox[{ RowBox[{"degree", "(", RowBox[{ SuperscriptBox["x", "m"], "-", "1"}], ")"}], "=", "m"}]}], TraditionalForm]]], ", we see that ", Cell[BoxData[ FormBox[ RowBox[{"S", "(", "x", ")"}], TraditionalForm]]], " must have period ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " or a divisor of it. " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is an irreducible polynomial of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and period ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " also will have period ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "Theorem", CellTags->"LemShift Period=m"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " have period ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". By ", ButtonBox["Lemma 3.7", BaseStyle->"Hyperlink", ButtonData:>"LemShift Period div m"], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], TraditionalForm]]], "=", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"p", "-", "1"}]], RowBox[{ SubscriptBox["s", "i"], SuperscriptBox["x", "i"]}]}], TraditionalForm]]], ". It follows that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", RowBox[{ RowBox[{ FormBox[ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], TraditionalForm], RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "p"], "+", SuperscriptBox["x", RowBox[{"2", "p"}]], "+", "\[Ellipsis]"}], ")"}]}], "=", FractionBox[ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], RowBox[{"1", "-", SuperscriptBox["x", "p"]}]]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "while on the other hand, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", RowBox[{ RowBox[{"u", "(", "x", ")"}], "/", RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}]}], TraditionalForm]]], " by ", ButtonBox["Corollary 3.5", BaseStyle->"Hyperlink", ButtonData:>"CorShift S=u/f"], ". Equating these two\nexpressions yields" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}], "=", RowBox[{ RowBox[{"u", "(", "x", ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "p"], "-", "1"}], ")"}]}]}], TraditionalForm]]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["and thus", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], ")"}], "*"], RowBox[{"f", "(", "x", ")"}]}], "=", RowBox[{ RowBox[{ SuperscriptBox["u", "*"], "(", "x", ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["x", "p"], "-", "1"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Since ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is irreducible of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "(", "x", ")"}], ")"}], "<", "n"}], TraditionalForm]]], ", it follows that ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SuperscriptBox["x", "p"], "-", "1"}], ")"}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", the period of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ", must divide ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "m"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider the irreducible polynomial ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]}], TraditionalForm]]], ", which has period 5, since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["x", "5"], "-", "1"}], ")"}], "=", RowBox[{ RowBox[{"(", RowBox[{"x", "-", "1"}], ")"}], RowBox[{"f", "(", "x", ")"}]}]}], TraditionalForm]]], ". Output sequences in ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], TraditionalForm]]], " also have period 5, by the above lemma, as can easily be checked." }], "Example"], Cell[BoxData[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3"}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}]}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3"}], "}"}], "=", RowBox[{"{", RowBox[{"s1", ",", "s2", ",", "s3", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"s0", "+", "s1", "+", "s2", "+", "s3"}], ",", "2"}], "]"}]}], "}"}]}], ";", "\t ", RowBox[{"Print", "[", RowBox[{"i", ",", "\"\< \>\"", ",", RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3"}], "}"}]}], "]"}]}], ",", RowBox[{"{", RowBox[{"i", ",", "5"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ InterpretationBox[ RowBox[{"1", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[1, " ", {1, 0, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"2", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[2, " ", {0, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"3", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[3, " ", {0, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"4", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[4, " ", {0, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"5", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[5, " ", {1, 1, 0, 0}], Editable->False]], "Print"], Cell[TextData[{ "A roundabout way to find an irreducible polynomial of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is to factor ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}]], "-", "1"}], TraditionalForm]]], "by means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["Factor", BaseStyle->"RefGuideLink"], ":" }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "5"}], ";", RowBox[{"Factor", "[", RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}]], "-", "1"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "5"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "5"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}], ")"}]}]], "Output"], Cell[TextData[{ StyleBox["In ", "MR"], StyleBox["Mathematica", "MR", FontSlant->"Italic"], StyleBox[" one can find an irreducible polynomial over ", "MR"], Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime, with the function ", ButtonBox["IrreduciblePolynomial", BaseStyle->"RefGuideLink"], StyleBox[" for which the package ", "MR"], ButtonBox["Algebra`FiniteFields`", BaseStyle->"AddOnsLink"], StyleBox[" needs to be loaded first.", "MR"] }], "Text"], Cell[BoxData[ RowBox[{"<<", "\<\"FiniteFields`\"\>"}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "2"}], ";", " ", RowBox[{"deg", "=", "11"}], ";", StyleBox[ RowBox[{"IrreduciblePolynomial", "[", RowBox[{"x", ",", "p", ",", "deg"}], "]"}], "MR"]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["x", "9"], "+", SuperscriptBox["x", "11"]}]], "Output"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be a ", ButtonBox["PN", BaseStyle->"Hyperlink", ButtonData:>"DefShift PN Seq"], "-sequence, generated by a ", ButtonBox["LFSR", BaseStyle->"Hyperlink", ButtonData:>"FigShift LFSR"], " with ", ButtonBox["characteristic polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefShift Char Pol"], " ", Cell[BoxData[ FormBox["f", TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is irreducible." }], "Theorem", CellTags->"LemShift PN=> Irred"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Write ", Cell[BoxData[ FormBox[ RowBox[{"f", "=", RowBox[{ SubscriptBox["f", "1"], SubscriptBox["f", "2"]}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ SubscriptBox["f", "1"], TraditionalForm]]], " irreducible, say of degree ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "1"], ">", "0"}], TraditionalForm]]], ". \nBy ", ButtonBox["Corollary 3.5", BaseStyle->"Hyperlink", ButtonData:>"CorShift S=u/f"], ", the sequence ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "/", RowBox[{ SubsuperscriptBox["f", "1", "*"], "(", "x", ")"}]}], "\[Element]", RowBox[{"\[CapitalOmega]", "(", SubscriptBox["f", "1"], ")"}]}], TraditionalForm]]], ", so the period of ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", RowBox[{ SubsuperscriptBox["f", "1", "*"], "(", "x", ")"}]}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", SubscriptBox["n", "1"]], "-", "1"}], TraditionalForm]]], " by ", ButtonBox["Lemma 3.7", BaseStyle->"Hyperlink", ButtonData:>"LemShift Period div m"], " and ", ButtonBox["Theorem B.35", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Factor x^p^m-x"], ".\nOn the other hand, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"1", "/", SubsuperscriptBox["f", "1", "*"]}], RowBox[{"(", "x", ")"}]}], "=", RowBox[{ RowBox[{ RowBox[{ SubsuperscriptBox["f", "2", "*"], "(", "x", ")"}], "/", RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}]}], TraditionalForm]]], ", so by ", ButtonBox["Lemma 3.2", BaseStyle->"Hyperlink", ButtonData:>"LemShift All States"], " ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", RowBox[{ SubsuperscriptBox["f", "1", "*"], "(", "x", ")"}]}], TraditionalForm]]], " is a cyclic shift of ", Cell[BoxData[ FormBox[ RowBox[{" ", SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]]}], TraditionalForm]]], " and thus its period is ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], ". This is only possible if ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", SubscriptBox["n", "1"]}], TraditionalForm]]], ", i.e. if ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is equal to the irreducible factor ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "1"], "(", "x", ")"}], TraditionalForm]]], ". " }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}], RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], ")"}]}], "=", RowBox[{"1", "+"}]}]}], TraditionalForm], SuperscriptBox["x", "4"]}], "+", SuperscriptBox["x", "5"]}], TraditionalForm]]], ". It is easy to check that ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "3"], "-", "1"}], TraditionalForm]]], " and that ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "7"], "-", "1"}], TraditionalForm]]], ". Since 3 and 7 are relatively prime, it follows that ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " divides ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "21"], "-", "1"}], TraditionalForm]]], ". We conclude that each output sequence has a period dividing 21.\nThis can \ be checked for different beginning states as follows." }], "Example", CellTags->"ExamShift f1 f2"], Cell[BoxData[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3", ",", "s4"}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3", ",", "s4"}], "}"}], "=", RowBox[{"{", RowBox[{"s1", ",", "s2", ",", "s3", ",", "s4", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"s0", "+", "s4"}], ",", "2"}], "]"}]}], "}"}]}], ";", "\t ", RowBox[{"Print", "[", RowBox[{"i", ",", "\"\< \>\"", ",", RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3", ",", "s4"}], "}"}]}], "]"}]}], ",", RowBox[{"{", RowBox[{"i", ",", "21"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ InterpretationBox[ RowBox[{"1", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[1, " ", {0, 0, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"2", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[2, " ", {0, 0, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"3", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[3, " ", {0, 0, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"4", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[4, " ", {0, 1, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"5", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[5, " ", {1, 1, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"6", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[6, " ", {1, 1, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"7", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[7, " ", {1, 1, 1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"8", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[8, " ", {1, 1, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"9", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[9, " ", {1, 0, 1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"10", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[10, " ", {0, 1, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"11", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[11, " ", {1, 0, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"12", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[12, " ", {0, 1, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"13", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[13, " ", {1, 0, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"14", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[14, " ", {0, 0, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"15", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[15, " ", {0, 1, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"16", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[16, " ", {1, 1, 0, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"17", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[17, " ", {1, 0, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"18", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[18, " ", {0, 0, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"19", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[19, " ", {0, 0, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"20", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[20, " ", {0, 1, 0, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"21", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[21, " ", {1, 0, 0, 0, 0}], Editable->False]], "Print"], Cell[TextData[{ "The reader may want to try the beginning state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "0"}], ")"}], TraditionalForm]]], " and see what the period of the output sequence is. This output sequence \ could also have been generated with the LFSR with characteristic polynomial ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}], TraditionalForm]]], " and beginning state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "1", ",", "1"}], ")"}], TraditionalForm]]], " (see also ", ButtonBox["Example 3.11", BaseStyle->"Hyperlink", ButtonData:>"ExamShift f1 f2 bis"], ")." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "We are now able to prove the main result of this subsection. We remind the \ reader of the definition of a ", ButtonBox["primitive polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim Pol"], " (of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "), which is an irreducible polynomial with the property that ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], TraditionalForm]]], ". This translates directly into the equivalent property that ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " has (full) period ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nA non-zero output sequence of a LFSR with characteristic polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is a ", ButtonBox["PN", BaseStyle->"Hyperlink", ButtonData:>"DefShift PN Seq"], "-sequence if and only if ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is a primitive polynomial." }], "Theorem", CellTags->"TheoShift PN iff Prim"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " have degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ".\n\[DoubleLongRightArrow] Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], " be a PN-sequence. It follows from ", ButtonBox["Lemma 3.9", BaseStyle->"Hyperlink", ButtonData:>"LemShift PN=> Irred"], " that ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " must be irreducible. ", ButtonBox["Lemma 3.8", BaseStyle->"Hyperlink", ButtonData:>"LemShift Period=m"], " in turn implies that ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " must have period ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], ", which makes it a primitive polynomial.\n\[DoubleLongLeftArrow] If ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " is primitive, it certainly is irreducible. By Lemma 3.8, ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " has the same period as ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " has, which is ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " is a PN-sequence." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Mathematica", FontSlant->"Italic"], " finds a primitive polynomial of degree ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " over ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " in the variable ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " by means of the ", ButtonBox["FieldIrreducible", BaseStyle->"RefGuideLink"], " function." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", "5"}], ";", " ", RowBox[{"p", "=", "2"}], ";", RowBox[{"FieldIrreducible", "[", RowBox[{ RowBox[{"GF", "[", RowBox[{"p", ",", "m"}], "]"}], ",", "x"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "5"]}]], "Output"], Cell["\<\ Let us check that this polynomial indeed defines a PN sequence.\ \>", "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3", ",", "s4"}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3", ",", "s4"}], "}"}], "=", RowBox[{"{", RowBox[{"s1", ",", "s2", ",", "s3", ",", "s4", ",", RowBox[{"Mod", "[", RowBox[{ RowBox[{"s0", "+", "s3"}], ",", "2"}], "]"}]}], "}"}]}], ";", "\t ", RowBox[{"Print", "[", RowBox[{"i", ",", "\"\< \>\"", ",", RowBox[{"{", RowBox[{"s0", ",", "s1", ",", "s2", ",", "s3", ",", "s4"}], "}"}]}], "]"}]}], ",", RowBox[{"{", RowBox[{"i", ",", "31"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[BoxData[ InterpretationBox[ RowBox[{"1", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[1, " ", {0, 0, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"2", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[2, " ", {0, 0, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"3", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[3, " ", {0, 0, 1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"4", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[4, " ", {0, 1, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"5", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[5, " ", {1, 0, 1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"6", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[6, " ", {0, 1, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"7", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[7, " ", {1, 0, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"8", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[8, " ", {0, 1, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"9", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[9, " ", {1, 1, 1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"10", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[10, " ", {1, 1, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"11", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[11, " ", {1, 0, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"12", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[12, " ", {0, 1, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"13", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[13, " ", {1, 1, 0, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"14", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[14, " ", {1, 0, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"15", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[15, " ", {0, 0, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"16", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[16, " ", {0, 0, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"17", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[17, " ", {0, 1, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"18", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1", ",", "1"}], "}"}]}], SequenceForm[18, " ", {1, 1, 1, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"19", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[19, " ", {1, 1, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"20", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[20, " ", {1, 1, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"21", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[21, " ", {1, 1, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"22", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1", ",", "1"}], "}"}]}], SequenceForm[22, " ", {1, 0, 0, 1, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"23", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "1", ",", "0"}], "}"}]}], SequenceForm[23, " ", {0, 0, 1, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"24", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0", ",", "1"}], "}"}]}], SequenceForm[24, " ", {0, 1, 1, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"25", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[25, " ", {1, 1, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"26", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[26, " ", {1, 0, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"27", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], SequenceForm[27, " ", {0, 1, 0, 0, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"28", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}]}], SequenceForm[28, " ", {1, 0, 0, 1, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"29", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}]}], SequenceForm[29, " ", {0, 0, 1, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"30", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[30, " ", {0, 1, 0, 0, 0}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"31", "\[InvisibleSpace]", "\<\" \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "0"}], "}"}]}], SequenceForm[31, " ", {1, 0, 0, 0, 0}], Editable->False]], "Print"], Cell[TextData[{ "To find all primitive polynomials of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " one can factor the ", ButtonBox["cyclotomic polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cycl Pol"], " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["Q", RowBox[{"(", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], ")"}]], "(", "x", ")"}], TraditionalForm]]], " (see Definition B.19). With the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Factor", BaseStyle->"RefGuideLink"], " and ", ButtonBox["Cyclotomic", BaseStyle->"RefGuideLink"], " this goes as follows. " }], "Text", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "2"}], ";", RowBox[{"m", "=", "6"}], ";", RowBox[{"n", "=", RowBox[{ SuperscriptBox["p", "m"], "-", "1"}]}], ";", RowBox[{"Factor", "[", RowBox[{ RowBox[{"Cyclotomic", "[", RowBox[{"n", ",", "x"}], "]"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "6"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "6"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}], ")"}], " ", RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}], ")"}]}]], "Output"], Cell[TextData[{ "The next corollary now follows directly from ", ButtonBox["Theorem 3.10", BaseStyle->"Hyperlink", ButtonData:>"TheoShift PN iff Prim"], " and ", ButtonBox["Theorem B.40", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Number Prim Pol"], "." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Corollary ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThere are ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CurlyPhi]", "(", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], ")"}], "/", "n"}], TraditionalForm]]], " different ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-stage LFSR's generating PN-sequences.\nHere \[CurlyPhi] stands for ", ButtonBox["Euler's totient function", BaseStyle->"Hyperlink", ButtonData:>"DefAppA Euler Totient"], " (Definition A.6)." }], "Theorem", GeneratedCell->True], Cell[TextData[{ "The more or less exponential growth of \[CurlyPhi]", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], ")"}], "/", "n"}], TraditionalForm]]], " as function of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", makes it for moderate values of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " already impossible for a cryptanalist to guess the right primitive \ polynomial or to check them all exhaustively." }], "Text"], Cell[TextData[{ "With the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["EulerPhi", BaseStyle->"RefGuideLink"], " one can easily verify this." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "100"}], ";", RowBox[{ RowBox[{"EulerPhi", "[", RowBox[{ RowBox[{"2", "^", "n"}], "-", "1"}], "]"}], "/", "n"}]}]], "Input", GeneratedCell->True], Cell[BoxData["5707676340000000000000000000"], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tAn Alternative Description of ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], TraditionalForm]]], " for Irreducible ", Cell[BoxData[ FormBox["f", TraditionalForm]]] }], "Subsection", CellTags->"SubsShift alternative"], Cell[TextData[{ "We shall now solve recurrence relation ", ButtonBox["(3.2)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Lin Rec"], " for the case that the corresponding ", ButtonBox["characteristic polynomial", BaseStyle->"Hyperlink", ButtonData:>"DefShift Char Pol"], " ", Cell[BoxData[ FormBox[ RowBox[{"f", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], " is irreducible. This includes, of course, the case that ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is primitive, for which we know that the corresponding ", ButtonBox["LFSR", BaseStyle->"Hyperlink", ButtonData:>"FigShift LFSR"], " outputs ", ButtonBox["PN", BaseStyle->"Hyperlink", ButtonData:>"DefShift PN Seq"], "-sequences." }], "Text"], Cell["\<\ We follow the standard mathematical method for solving linear recurrence \ relations.\ \>", "Text"], Cell[TextData[{ "Substituting ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "j"], "=", RowBox[{"A", ".", SuperscriptBox["\[Alpha]", "j"]}]}], TraditionalForm]]], ", for all ", Cell[BoxData[ FormBox[ RowBox[{"j", "\[GreaterEqual]", "0"}], TraditionalForm]]], ", in ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", RowBox[{"k", "+", "n"}]], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["c", "i"], SubscriptBox["s", RowBox[{"k", "+", "i"}]]}]}]}], TraditionalForm]]], " leads to the equation" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"A", ".", SuperscriptBox["\[Alpha]", RowBox[{"k", "+", "n"}]]}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["c", "i"], ".", "A", ".", SuperscriptBox["\[Alpha]", RowBox[{"k", "+", "i"}]]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Here ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " and \[Alpha] are elements from an extension field of GF(2) that will be \ determined in a moment. Dividing the above relation by ", Cell[BoxData[ FormBox[ RowBox[{"A", ".", SuperscriptBox["\[Alpha]", "k"]}], TraditionalForm]]], ", one arrives at ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "n"], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox["\[Alpha]", "i"]}]}]}], TraditionalForm]]], ", i.e." }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "\[Alpha]", ")"}], "=", "0"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "We shall study the case that ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is ", ButtonBox["irreducible", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], " in more detail. The Galois Field GF", Cell[BoxData[ FormBox[ RowBox[{"(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], "= ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.16", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field Iff Irred"], ") contains a zero of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " as an element. Calling this zero \[Alpha], we note that" }], "Text", GeneratedCell->True], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], " ", "=", " ", RowBox[{"{", " ", RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["a", "i"], SuperscriptBox["\[Alpha]", "i"]}]}], " ", "|", " ", RowBox[{ SubscriptBox["a", "i"], "\[Element]", RowBox[{"GF", "(", "2", ")"}]}]}], ",", " ", RowBox[{"0", "\[LessEqual]", "i", "<", "n"}]}], " ", "}"}]}], TraditionalForm]]], "," }], "DisplayFormula", CellTags->"FormShift GF(2^n)"], Cell[TextData[{ "with the normal coefficient-wise addition and with the regular product rule \ (see ", ButtonBox["(B.3)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Pol add mult"], " and ", ButtonBox["(B.4)", BaseStyle->"Hyperlink", ButtonData:>"FormAppB Pol add mult"], "), but always reducing powers of \[Alpha] with an exponent ", Cell[BoxData[ FormBox[ RowBox[{"\[GreaterEqual]", "n"}], TraditionalForm]]], " by means of the relation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "n"], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox["\[Alpha]", "n"]}]}]}], TraditionalForm]]], " to an expression of degree ", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], " (as shown in the ", ButtonBox["Example B.5", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB Add Mult"], ", where the letter ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is used instead of the symbol \[Alpha].)." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}]}], TraditionalForm]]], " and let \[Alpha] be a zero of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "4"], "=", RowBox[{"1", "+", "\[Alpha]"}]}], TraditionalForm]]], ". \nAdding the elements ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "\[Alpha]", "+", SuperscriptBox["\[Alpha]", "3"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "+", SuperscriptBox["\[Alpha]", "2"]}], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"GF", "(", "2", ")"}], "[", "x", "]"}], "/", RowBox[{"(", RowBox[{"f", "(", "x", ")"}], ")"}]}], TraditionalForm]]], " gives ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", SuperscriptBox["\[Alpha]", "2"], "+", SuperscriptBox["\[Alpha]", "3"]}], TraditionalForm]]], ". Multiplication gives ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "+", SuperscriptBox["\[Alpha]", "3"], "+", SuperscriptBox["\[Alpha]", "4"], "+", SuperscriptBox["\[Alpha]", "5"]}], TraditionalForm]]], " which is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"\[Alpha]", "+", "1"}], ")"}], RowBox[{"f", "(", "\[Alpha]", ")"}]}], "+", RowBox[{"(", RowBox[{"1", "+", "\[Alpha]", "+", SuperscriptBox["\[Alpha]", "2"], "+", SuperscriptBox["\[Alpha]", "3"]}], ")"}]}], TraditionalForm]]], ", so the result is ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", "\[Alpha]", "+", SuperscriptBox["\[Alpha]", "2"], "+", SuperscriptBox["\[Alpha]", "3"]}], TraditionalForm]]], ".\nThis could also have been computed with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["PolynomialMod", BaseStyle->"RefGuideLink"], ", as follows:" }], "Example"], Cell[BoxData[{ RowBox[{ RowBox[{"f", "=", RowBox[{"1", "+", "a", "+", SuperscriptBox["a", "4"]}]}], ";", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "a", "+", SuperscriptBox["a", "3"]}], ")"}], "+", RowBox[{"(", RowBox[{"a", "+", SuperscriptBox["a", "2"]}], ")"}]}], ",", RowBox[{"{", RowBox[{"f", ",", "2"}], "}"}]}], "]"}]}], "\n", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", "+", "a", "+", SuperscriptBox["a", "3"]}], ")"}], "*", RowBox[{"(", RowBox[{"a", "+", SuperscriptBox["a", "2"]}], ")"}]}], ",", RowBox[{"{", RowBox[{"f", ",", "2"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["a", "2"], "+", SuperscriptBox["a", "3"]}]], "Output"], Cell[BoxData[ RowBox[{"1", "+", "a", "+", SuperscriptBox["a", "2"], "+", SuperscriptBox["a", "3"]}]], "Output"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " be a binary, irreducible polynomial of degree ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " and let \[Alpha] be a zero of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], ". Further, let ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " be a non-trivial, linear mapping from ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], " to GF(2). Then\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox[ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], BaseStyle->"Hyperlink", ButtonData:>"DefShift Omega"], "=", RowBox[{ RowBox[{"{", " ", RowBox[{ SubscriptBox[ RowBox[{"{", RowBox[{"L", "(", RowBox[{"A", ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}], "}"}], RowBox[{"j", "\[GreaterEqual]", "0"}]], " ", "|", " ", RowBox[{"A", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}]}]}], " ", "}"}], "."}]}], TraditionalForm]]] }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": We need to check several things.\ni) The sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "j"], "}"}], RowBox[{"j", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "=", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{"L", "(", RowBox[{"A", ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}], "}"}], RowBox[{"j", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " clearly is a binary sequence, because ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " maps ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], " to GF(2).\nii) The sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "j"], "}"}], RowBox[{"j", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "=", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{"L", "(", RowBox[{"A", ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}], "}"}], RowBox[{"j", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " satisfies (3.2). To see this, we check the equivalent condition ", ButtonBox["(3.3)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Full Lin Rec"], ". By the linearity of ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " and the relation ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "\[Alpha]", ")"}], "=", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox["\[Alpha]", "i"]}]}], "=", "0"}]}], TraditionalForm]]], ", it follows that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SubscriptBox["s", RowBox[{"k", "+", "i"}]]}]}], "=", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], RowBox[{"L", "(", RowBox[{"A", ".", SuperscriptBox["\[Alpha]", RowBox[{"k", "+", "i"}]]}], ")"}]}]}], "=", RowBox[{ RowBox[{"L", "(", RowBox[{"A", ".", RowBox[{ SuperscriptBox["\[Alpha]", "k"], "(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "n"], RowBox[{ SubscriptBox["c", "i"], SuperscriptBox["\[Alpha]", "i"]}]}], ")"}]}], ")"}], "=", RowBox[{ RowBox[{"L", "(", "0", ")"}], "=", "0"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "iii) Each of the ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "n"], TraditionalForm]]], " choices of ", Cell[BoxData[ FormBox[ RowBox[{"A", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}]}], TraditionalForm]]], " leads to a different binary solution of (3.3), as we shall now show. By ", ButtonBox["Lemma 3.3", BaseStyle->"Hyperlink", ButtonData:>"LemShift Omega=linear"], ", these must constitute all the elements in ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], TraditionalForm]]], ". \nSuppose that the sequences ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{"L", "(", RowBox[{"A", ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}], "}"}], RowBox[{"j", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{"L", "(", RowBox[{"B", ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}], "}"}], RowBox[{"j", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " are identical. It follows from ", Cell[BoxData[ FormBox[ RowBox[{"L", "(", RowBox[{"A", ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}], TraditionalForm]]], "=", Cell[BoxData[ FormBox[ RowBox[{"L", "(", RowBox[{"B", ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"j", "\[GreaterEqual]", "0"}], TraditionalForm]]], ", and the linearity of ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " that in particular ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"L", "(", RowBox[{ RowBox[{"(", RowBox[{"A", "-", "B"}], ")"}], ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}], "=", "0"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "j", "<", "n"}], TraditionalForm]]], ". However, the elements ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Alpha]", ",", "\[Ellipsis]", ",", SuperscriptBox["\[Alpha]", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], "form a ", ButtonBox["basis", BaseStyle->"Hyperlink", ButtonData:>"FormShift GF(2^n)"], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], ", because ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is irreducible. It follows from the linearity of ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"L", "(", RowBox[{ RowBox[{"(", RowBox[{"A", "-", "B"}], ")"}], ".", "\[Omega]"}], ")"}], "=", "0"}], TraditionalForm]]], " for each field element \[Omega] in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " was a non-trivial mapping, we can conclude that ", Cell[BoxData[ FormBox[ RowBox[{"A", "=", "B"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "A convenient non-trivial linear mapping ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "n"], ")"}], TraditionalForm]]], " to GF(2) to consider is the ", ButtonBox["Trace", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Trace"], " function Tr, introduced in Problem B.16.\nAn alternative, is the \ projection of an element ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["a", "i"], SuperscriptBox["\[Alpha]", RowBox[{"i", " "}]]}]}], TraditionalForm]]], "to its constant term ", Cell[BoxData[ FormBox[ SubscriptBox["a", "0"], TraditionalForm]]], "." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nTake the irreducible polynomial ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "4"], "+", "x", "+", "1"}]}], TraditionalForm]]], " of degree 4 (it even is primitive) and let \[Alpha] a zero of ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "\[Alpha]", ")"}], "=", "0"}], TraditionalForm]]], ". The Trace function is given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Tr", "(", "x", ")"}], "=", RowBox[{"x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "8"]}]}], TraditionalForm]]], ". \nAny element ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"A", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "4"], ")"}]}], "=", RowBox[{"{", " ", RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "3"], RowBox[{ SubscriptBox["a", "i"], SuperscriptBox["\[Alpha]", "i"]}]}], " ", "|", " ", RowBox[{ SubscriptBox["a", "i"], "\[Element]", RowBox[{"GF", "(", "2", ")"}]}]}], ",", " ", RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", "3"}]}], " ", "}"}]}], TraditionalForm]]], " defines a unique binary sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "j"], "}"}], RowBox[{"j", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ", defined by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "j"], "=", RowBox[{"Tr", "(", RowBox[{"A", ".", SuperscriptBox["\[Alpha]", "j"]}], ")"}]}], TraditionalForm]]], ". Below, we have taken ", Cell[BoxData[ FormBox[ RowBox[{"A", "=", RowBox[{"1", "+", "\[Alpha]", "+", SuperscriptBox["\[Alpha]", "2"]}]}], TraditionalForm]]], ".\nThe output sequence, corresponding with any value of ", Cell[BoxData[ FormBox["A", TraditionalForm]]], ", can be evaluated with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["PolynomialMod", BaseStyle->"RefGuideLink"], " and ", ButtonBox["Table", BaseStyle->"RefGuideLink"], ", as follows:" }], "Example"], Cell[BoxData[{ RowBox[{ RowBox[{"n", "=", "4"}], ";", RowBox[{"f", "=", RowBox[{"1", "+", "a", "+", SuperscriptBox["a", "4"]}]}], ";", RowBox[{"A", "=", RowBox[{"1", "+", "a", "+", SuperscriptBox["a", "2"]}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"Tr", "[", "x_", "]"}], ":=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], SuperscriptBox["x", SuperscriptBox["2", "i"]]}]}], ";"}], "\n", RowBox[{ RowBox[{ RowBox[{"s", "[", "j_", "]"}], ":=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"Tr", "[", RowBox[{"A", "*", SuperscriptBox["a", "j"]}], "]"}], ",", RowBox[{"{", RowBox[{"f", ",", "2"}], "}"}]}], "]"}]}], ";"}], "\n", RowBox[{"Table", "[", RowBox[{ RowBox[{"s", "[", "j", "]"}], ",", RowBox[{"{", RowBox[{"j", ",", "0", ",", RowBox[{ SuperscriptBox["2", "n"], "-", "2"}]}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}]], "Output"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tCryptographic Properties of PN Sequences" }], "Subsection", CellTags->"SubsShift crypt prop"], Cell[TextData[{ "We shall now investigate to which extent ", ButtonBox["PN", BaseStyle->"Hyperlink", ButtonData:>"DefShift PN Seq"], "-sequences meet Golomb's randomness postulates ", ButtonBox["G1-G3", BaseStyle->"Hyperlink", ButtonData:>"PostShift Golomb"], ". After that, we check the cryptographic requirements ", ButtonBox["C1-C3", BaseStyle->"Hyperlink", ButtonData:>"PostShift Crypt"], ". As always, we let ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " denote the length of the LFSR." }], "Text"], Cell[TextData[{ StyleBox["Ad G1", FontWeight->"Bold"], ": By ", ButtonBox["Lemma 3.2", BaseStyle->"Hyperlink", ButtonData:>"LemShift All States"], " each non-zero state occurs exactly once per period. The leftmost bit of \ each state will be the next output bit. So, the number of ones per period is ", Cell[BoxData[ FormBox[ SuperscriptBox["2", RowBox[{"n", "-", "1"}]], TraditionalForm]]], "and the number of zeros per period is ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", RowBox[{"n", "-", "1"}]], "-", "1"}], TraditionalForm]]], ", as the all-zero state does not occur. " }], "Text"], Cell[TextData[{ StyleBox["Ad G2", FontWeight->"Bold"], ": There are ", Cell[BoxData[ FormBox[ SuperscriptBox["2", RowBox[{"n", "-", RowBox[{"(", RowBox[{"k", "+", "2"}], ")"}]}]], TraditionalForm]]], " states whose leftmost ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", "2"}], TraditionalForm]]], " coordinates are of the form ", Cell[BoxData[ FormBox[ RowBox[{"0", OverscriptBox[ OverscriptBox[ RowBox[{"11", "\[Ellipsis]1"}], "\[LongLeftRightArrow]"], "k"], "0"}], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ RowBox[{"1", OverscriptBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]0"}], "\[LongLeftRightArrow]"], "k"], "1"}], TraditionalForm]]], ". Thus, ", ButtonBox["gaps and blocks", BaseStyle->"Hyperlink", ButtonData:>"DefShift Gap Block"], " of the length ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[LessEqual]", RowBox[{"n", "-", "2"}]}], TraditionalForm]]], ", occur exactly ", Cell[BoxData[ FormBox[ SuperscriptBox["2", RowBox[{"n", "-", RowBox[{"(", RowBox[{"k", "+", "2"}], ")"}]}]], TraditionalForm]]], " times per period. \nThe state ", Cell[BoxData[ FormBox[ RowBox[{"0", OverscriptBox[ OverscriptBox[ RowBox[{"11", "\[Ellipsis]1"}], "\[LongLeftRightArrow]"], RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], " occurs exactly once. Its successor is the all-one state, which in turn is \ followed by state ", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox[ OverscriptBox[ RowBox[{"11", "\[Ellipsis]1"}], "\[LongLeftRightArrow]"], RowBox[{"n", "-", "1"}]], "0"}], TraditionalForm]]], ". Therefore, there is no block of length ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], "and one block of length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ".\nSimilarly, there is one gap of length ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], "and no gap of length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Ad G3", FontWeight->"Bold"], ": With ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], " also ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", RowBox[{"i", "+", "k"}]], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], " by ", ButtonBox["Lemma 3.2", BaseStyle->"Hyperlink", ButtonData:>"LemShift All States"], ". The linearity of ", Cell[BoxData[ FormBox[ RowBox[{"\[CapitalOmega]", "(", "f", ")"}], TraditionalForm]]], " implies that also ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["s", RowBox[{"i", "+", "k"}]]}], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], " The number of agreements per period between ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", RowBox[{"i", "+", "k"}]], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " equals the number of zeros in one period of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["s", RowBox[{"i", "+", "k"}]]}], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " which is ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", RowBox[{"n", "-", "1"}]], "-", "1"}], TraditionalForm]]], " by Lemma 3.2 and G1. Similarly, the number of disagreements is ", Cell[BoxData[ FormBox[ SuperscriptBox["2", RowBox[{"n", "-", "1"}]], TraditionalForm]]], ". Thus, the out-of-phase autocorrelation ", Cell[BoxData[ FormBox[ ButtonBox[ RowBox[{"AC", "(", "k", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShift AC(k)"], TraditionalForm]]], " is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"-", "1"}], "/", RowBox[{"(", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], ")"}]}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "k", "<", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "We conclude that PN-sequences meet Golomb's randomness postulates in a most \ satisfactory way. Let us now check ", ButtonBox["C1-C3", BaseStyle->"Hyperlink", ButtonData:>"PostShift Crypt"], "." }], "Text"], Cell[TextData[{ StyleBox["Ad C1", FontWeight->"Bold"], ": Since the ", ButtonBox["period", BaseStyle->"Hyperlink", ButtonData:>"DefShift Period"], " of a PN-sequence generated by an ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-stage LFSR is ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], TraditionalForm]]], ", one can easily get sufficient large periods. For instance, with ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", " ", "166"}], TraditionalForm]]], " the period is already about ", Cell[BoxData[ FormBox[ SuperscriptBox["10", "50"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Ad C2", FontWeight->"Bold"], ": LFSR's are extremely simple to implement." }], "Text"], Cell[TextData[{ StyleBox["Ad C3", FontWeight->"Bold"], ": PN-sequences are very unsafe! Indeed, knowledge of ", Cell[BoxData[ FormBox[ RowBox[{"2", "n"}], TraditionalForm]]], " consecutive bits, say ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "k"], ",", SubscriptBox["s", RowBox[{"k", "+", "1"}]], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "+", RowBox[{"2", "n"}], "-", "1"}]]}], TraditionalForm]]], ", enables the cryptanalist to determine the feedback coefficients ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "0"], ",", SubscriptBox["c", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["c", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], " uniquely and thus the whole ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "-sequence. This follows from the matrix equation:" }], "Text", CellTags->"PostShift Ad C3"], Cell[TextData[{ Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"(", GridBox[{ { SubscriptBox["s", "k"], SubscriptBox["s", RowBox[{"k", "+", "1"}]], "\[Ellipsis]", "\[Ellipsis]", SubscriptBox["s", RowBox[{"k", "+", "n", "-", "1"}]]}, { SubscriptBox["s", RowBox[{"k", "+", "1"}]], SubscriptBox["s", RowBox[{"k", "+", "2"}]], "\[Ellipsis]", "\[Ellipsis]", SubscriptBox["s", RowBox[{"k", "+", "n"}]]}, {".", ".", "\[Ellipsis]", "\[Ellipsis]", "."}, {".", ".", "\[Ellipsis]", "\[Ellipsis]", "."}, {".", ".", "\[Ellipsis]", "\[Ellipsis]", "."}, { SubscriptBox["s", RowBox[{"k", "+", "n", "-", "1"}]], SubscriptBox["s", RowBox[{"k", "+", "n"}]], "\[Ellipsis]", "\[Ellipsis]", SubscriptBox["s", RowBox[{"k", "+", RowBox[{"2", "n"}], "-", "2"}]]} }], ")"}], RowBox[{"(", GridBox[{ { SubscriptBox["c", "0"]}, { SubscriptBox["c", "1"]}, {"."}, {"."}, {"."}, { SubscriptBox["c", RowBox[{"n", "-", "1"}]]} }], ")"}]}], "=", RowBox[{"(", GridBox[{ { SubscriptBox["s", RowBox[{"k", "+", "n"}]]}, { SubscriptBox["s", RowBox[{"k", "+", "n", "-", "1"}]]}, {"."}, {"."}, {"."}, { SubscriptBox["s", RowBox[{"k", "+", RowBox[{"2", "n"}], "-", "1"}]]} }], ")"}]}]]], "." }], "NumberedEquation", CellTags->"FormShift break PN"], Cell[TextData[{ "The above system has a unique solution as we shall now show. If ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " consecutive states of the LFSR exist that are linearly dependent, i.e. if ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " consecutive states span a ", Cell[BoxData[ FormBox[ RowBox[{"\[LessEqual]", RowBox[{"(", RowBox[{"n", "-", "1"}], ")"}]}], TraditionalForm]]], " dimensional subspace, then this remains so because of ", ButtonBox["(3.4)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Rec States"], ". This, however, contradicts the linear independence of state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "0", ",", "\[Ellipsis]", ",", "0", ",", "1"}], ")"}], TraditionalForm]]], " and its ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], "successor states. We conclude that any ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " consecutive states (and in particular the ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " rows in the matrix above) are linearly independent. Therefore, the unknown \ feedback coefficients ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "0"], ",", RowBox[{ SubscriptBox["c", "1"], "\[Ellipsis]"}], ",", SubscriptBox["c", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], "can easily be determined." }], "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nAssume that we know the following substring of length 10: \ 1,1,0,1,1,1,0,1,0,1. Assuming that ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "5"}], TraditionalForm]]], ", we can solve (3.9) by means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["LinearSolve", BaseStyle->"RefGuideLink"], " as follows:" }], "Example"], Cell[BoxData[ RowBox[{ RowBox[{"m", "=", RowBox[{"(", GridBox[{ {"1", "1", "0", "1", "1"}, {"1", "0", "1", "1", "1"}, {"0", "1", "1", "1", "0"}, {"1", "1", "1", "0", "1"}, {"1", "1", "0", "1", "0"} }], ")"}]}], ";", RowBox[{"b", "=", RowBox[{"(", GridBox[{ {"1"}, {"0"}, {"1"}, {"0"}, {"1"} }], ")"}]}], ";", RowBox[{"LinearSolve", "[", RowBox[{"m", ",", "b", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", "1", "}"}], ",", RowBox[{"{", "0", "}"}], ",", RowBox[{"{", "1", "}"}], ",", RowBox[{"{", "0", "}"}], ",", RowBox[{"{", "0", "}"}]}], "}"}]], "Output"], Cell[TextData[{ "The feedback coefficients are: ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "0"], "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "3"], "=", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "4"], "=", "0"}], TraditionalForm]]], ". One can check this quite easily with the ", StyleBox["Mathematica", FontSlant->"Italic"], " Functions ", ButtonBox["Table", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Mod", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Do", BaseStyle->"RefGuideLink"], " as follows:" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "5"}], ";", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"c", "[", "0", "]"}], ",", RowBox[{"c", "[", "1", "]"}], ",", RowBox[{"c", "[", "2", "]"}], ",", RowBox[{"c", "[", "3", "]"}], ",", RowBox[{"c", "[", "4", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0", ",", "0"}], "}"}]}], ";", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"s", "[", "0", "]"}], ",", RowBox[{"s", "[", "1", "]"}], ",", RowBox[{"s", "[", "2", "]"}], ",", RowBox[{"s", "[", "3", "]"}], ",", RowBox[{"s", "[", "4", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "1", ",", "1"}], "}"}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"s", "[", "k", "]"}], "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ RowBox[{"c", "[", "i", "]"}], "*", RowBox[{"s", "[", RowBox[{"k", "-", "n", "+", "i"}], "]"}]}]}], ",", "2"}], "]"}]}], ",", RowBox[{"{", RowBox[{"k", ",", "n", ",", SuperscriptBox["2", "n"]}], "}"}]}], "]"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{"s", "[", "k", "]"}], ",", RowBox[{"{", RowBox[{"k", ",", "0", ",", RowBox[{ SuperscriptBox["2", "n"], "-", "2"}]}], "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "Of course, one does not know in general what the length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " is of the LFSR in use. We shall ", ButtonBox["address", BaseStyle->"Hyperlink", ButtonData:>"ExamShift Lin Equiv"], " that problem in a more general setting in Subsection 3.3.1. " }], "Text", FontSlant->"Italic"], Cell[TextData[{ "If only a string of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "n"}], "-", "1"}], TraditionalForm]]], " consecutive bits of a PN-sequence is known, the feedback coefficients are \ not necessarily unique, as follows from the example ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "4"}], TraditionalForm]]], " and the subsequence 1101011. This remains true even if we had used the \ additional information that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "0"], "=", "1"}], TraditionalForm]]], ". Below we have added ", ButtonBox["NullSpace", BaseStyle->"RefGuideLink"], " to show the dependency in the linear relations." }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"m", "=", RowBox[{"(", GridBox[{ {"1", "1", "0", "1"}, {"1", "0", "1", "0"}, {"0", "1", "0", "1"} }], ")"}]}], ";", RowBox[{"b", "=", RowBox[{"(", GridBox[{ {"0"}, {"1"}, {"1"} }], ")"}]}], ";", RowBox[{"NullSpace", "[", RowBox[{"m", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "\n", RowBox[{"LinearSolve", "[", RowBox[{"m", ",", "b", ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"{", RowBox[{"0", ",", "1", ",", "0", ",", "1"}], "}"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", "1", "}"}], ",", RowBox[{"{", "1", "}"}], ",", RowBox[{"{", "0", "}"}], ",", RowBox[{"{", "0", "}"}]}], "}"}]], "Output"], Cell[TextData[{ "We have the solutions ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], ")"}], "+", RowBox[{"\[Lambda]", "(", RowBox[{"0", ",", "1", ",", "0", ",", "1"}], ")"}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"\[Lambda]", "\[Element]", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], TraditionalForm]]], "." }], "Text"], Cell["\<\ Since sequences generated by LFSR's fail to meet requirement C3, the next \ step will be to study nonlinear shift registers. However, since so much is \ known about PN-sequences, it is quite natural that one tries to combine \ LFSR's in a non-linear way in order to get pseudo-random sequences with the \ right cryptographic properties.\ \>", "Text"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\t", "Non-Linear Algorithms" }], "Section", CellTags->"SectShift Non-linear"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tMinimal Characteristic Polynomial" }], "Subsection", CellTags->"SubsShift minimal"], Cell[TextData[{ "As already mentioned at the ", ButtonBox["beginning", BaseStyle->"Hyperlink", ButtonData:>"PostShift Eventually Periodic"], " of Section 3.1, any deterministic algorithm in a finite state machine will \ generate a sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ", which is ultimately periodic, say with period ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". This means that, except for a beginning part, ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " will be generated in a trivial way by the LFSR with characteristic \ polynomial ", Cell[BoxData[ FormBox[ RowBox[{"1", "+", SuperscriptBox["x", "p"]}], TraditionalForm]]], ". Therefore, the sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " which was possibly made in a non-linear way, can also be made by a LFSR \ (except for a finite beginning part). If this beginning part is non empty, \ not every state has a unique predecessor and the output sequence certainly \ will not have maximal period. We shall address this problem in ", ButtonBox["Theorem 3.22", BaseStyle->"Hyperlink", ButtonData:>"TheoShift unique pred"], ". Here, we shall assume that the output sequence is periodic right from the \ start. The discussion above justifies the following definition." }], "Text"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "The ", StyleBox["linear complexity", FontSlant->"Italic"], " (or ", StyleBox["linear equivalence", FontSlant->"Italic"], ") of a periodic sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " is the length of the smallest LFSR that can generate ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "." }], "Definition", CellTags->"DefShift Lin Compl"], Cell["\<\ The following two lemmas are needed to prove explicit statements about the \ linear complexity of periodic sequences.\ \>", "Text"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " be the characteristic polynomials of an ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "-stage, resp. ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-stage LFSR. Then,\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[CapitalOmega]", "(", "h", ")"}], "\[Subset]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], "\t\[DoubleLongLeftRightArrow]\t", Cell[BoxData[ FormBox[ RowBox[{"h", "|", "f"}], TraditionalForm]]], "." }], "Theorem", CellTags->"LemShift O(f)"Bold"], ":\n\[DoubleLongRightArrow] Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "/", SuperscriptBox["h", "*"]}], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "h", ")"}], "\[Subset]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], ", it follows from ", ButtonBox["Corollary 3.5", BaseStyle->"Hyperlink", ButtonData:>"CorShift S=u/f"], " that a polynomial ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " of degree", Cell[BoxData[ FormBox[ RowBox[{"<", "n"}], TraditionalForm]]], " exists, such that one has ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "/", RowBox[{ SuperscriptBox["h", "*"], "(", "x", ")"}]}], "=", RowBox[{ RowBox[{"u", "(", "x", ")"}], "/", RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}]}], TraditionalForm]]], ". We conclude that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}], "=", RowBox[{ RowBox[{ SuperscriptBox["h", "*"], "(", "x", ")"}], RowBox[{"u", "(", "x", ")"}]}]}], TraditionalForm]]], " and thus that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{"h", "(", "x", ")"}], RowBox[{ SuperscriptBox["u", "*"], "(", "x", ")"}]}]}], TraditionalForm]]], ", which means that ", Cell[BoxData[ FormBox[ RowBox[{"h", "|", "f"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\[DoubleLongLeftArrow] Writing ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{"a", "(", "x", ")"}], RowBox[{"h", "(", "x", ")"}]}]}], TraditionalForm]]], " with degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"a", "(", "x", ")"}], ")"}], "=", RowBox[{"n", "-", "m"}]}], TraditionalForm]]], ", one has by the same Corollary 3.5 that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\[CapitalOmega](", StyleBox["h", FontSlant->"Italic"], ")\t= ", Cell[BoxData[ FormBox[ RowBox[{"{", " ", RowBox[{ FractionBox[ RowBox[{"v", "(", "x", ")"}], RowBox[{ SuperscriptBox["h", "*"], "(", "x", ")"}]], " ", "|", " ", RowBox[{ RowBox[{"degree", "(", RowBox[{"v", "(", "x", ")"}], ")"}], "<", "m"}]}], " ", "}"}], TraditionalForm]]], " = ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ FractionBox[ RowBox[{ RowBox[{ SuperscriptBox["a", "*"], "(", "x", ")"}], RowBox[{"v", "(", "x", ")"}]}], RowBox[{ RowBox[{ SuperscriptBox["a", "*"], "(", "x", ")"}], RowBox[{ SuperscriptBox["h", "*"], "(", "x", ")"}]}]], " ", "|", " ", RowBox[{ RowBox[{"degree", "(", RowBox[{"v", "(", "x", ")"}], ")"}], "<", "m"}]}], " ", "}"}], TraditionalForm]]], "\n\n\t= ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ FractionBox[ RowBox[{ RowBox[{ SuperscriptBox["a", "*"], "(", "x", ")"}], RowBox[{"v", "(", "x", ")"}]}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]], " ", "|", " ", RowBox[{ RowBox[{"degree", "(", RowBox[{ RowBox[{ SuperscriptBox["a", "*"], "(", "x", ")"}], RowBox[{"v", "(", "x", ")"}]}], ")"}], "<", "n"}]}], " ", "}"}], TraditionalForm]]], " \[Subset] \[CapitalOmega]", Cell[BoxData[ FormBox[ RowBox[{"(", "f", ")"}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nThe sequence ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "=", RowBox[{"100101110", "\[Ellipsis]"}]}], TraditionalForm]]], " is the output sequence of the LFSR with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"h", "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}]}], TraditionalForm]]], " and beginning state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", "0", ",", "0"}], ")"}], TraditionalForm]]], ", as can be checked by" }], "Example", CellTags->"ExamShift f1 f2 bis"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "3"}], ";", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"s", "[", "0", "]"}], ",", RowBox[{"s", "[", "1", "]"}], ",", RowBox[{"s", "[", "2", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0"}], "}"}]}], ";", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"c", "[", "0", "]"}], ",", RowBox[{"c", "[", "1", "]"}], ",", RowBox[{"c", "[", "2", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "1", ",", "0"}], "}"}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"s", "[", "k", "]"}], "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ RowBox[{"c", "[", "i", "]"}], "*", RowBox[{"s", "[", RowBox[{"k", "-", "n", "+", "i"}], "]"}]}]}], ",", "2"}], "]"}]}], ",", RowBox[{"{", RowBox[{"k", ",", "n", ",", SuperscriptBox["2", "n"]}], "}"}]}], "]"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{"s", "[", "k", "]"}], ",", RowBox[{"{", RowBox[{"k", ",", "0", ",", SuperscriptBox["2", "n"]}], "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "However, since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"h", "(", "x", ")"}], RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}]}], "=", RowBox[{"1", "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}]}], TraditionalForm]]], ", the same output sequence can also be obtained from the LFSR with \ characteristic polynomial ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"1", "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "5"]}]}], TraditionalForm]]], " (see also ", ButtonBox["Example 3.7", BaseStyle->"Hyperlink", ButtonData:>"ExamShift f1 f2"], "). As beginning state one now has to take the first five terms of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "5"}], ";", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"s", "[", "0", "]"}], ",", RowBox[{"s", "[", "1", "]"}], ",", RowBox[{"s", "[", "2", "]"}], ",", RowBox[{"s", "[", "3", "]"}], ",", RowBox[{"s", "[", "4", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}]}], ";", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"c", "[", "0", "]"}], ",", RowBox[{"c", "[", "1", "]"}], ",", RowBox[{"c", "[", "2", "]"}], ",", RowBox[{"c", "[", "3", "]"}], ",", RowBox[{"c", "[", "4", "]"}]}], "}"}], "=", RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0", ",", "1"}], "}"}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"s", "[", "k", "]"}], "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"n", "-", "1"}]], RowBox[{ RowBox[{"c", "[", "i", "]"}], "*", RowBox[{"s", "[", RowBox[{"k", "-", "n", "+", "i"}], "]"}]}]}], ",", "2"}], "]"}]}], ",", RowBox[{"{", RowBox[{"k", ",", "n", ",", SuperscriptBox["2", "n"]}], "}"}]}], "]"}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{"s", "[", "k", "]"}], ",", RowBox[{"{", RowBox[{"k", ",", "0", ",", SuperscriptBox["2", "n"]}], "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " and suppose that one is looking for a polynomial ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " of smallest degree such that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "h", ")"}]}], TraditionalForm]]], ". Then, ", ButtonBox["Lemma 3.13", BaseStyle->"Hyperlink", ButtonData:>"LemShift O(f)"LemShift gcd(u f)=1"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "f", ")"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", RowBox[{ RowBox[{"u", "(", "x", ")"}], "/", RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}]}], TraditionalForm]]], ". Then, \n\n\t", Cell[BoxData[ FormBox[ SubscriptBox["\[Exists]", RowBox[{ RowBox[{"h", "|", "f"}], ",", " ", RowBox[{"h", "\[NotEqual]", "f"}]}]], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"[", RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "h", ")"}]}], "]"}], TraditionalForm]]], "\t\[DoubleLongLeftRightArrow]\t\t", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{"u", "(", "x", ")"}], ",", RowBox[{ RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}], "\[NotEqual]", "1"}]}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Let ", Cell[BoxData[ FormBox[ RowBox[{"d", "(", "x", ")"}], TraditionalForm]]], " divide ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{"u", "(", "x", ")"}], ",", RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]}], ")"}], TraditionalForm]]], " with degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"d", "(", "x", ")"}], ")"}], ">", "1"}], TraditionalForm]]], ".\nThen, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", RowBox[{ FractionBox[ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}]], "=", FractionBox[ RowBox[{ RowBox[{"u", "(", "x", ")"}], "/", RowBox[{"d", "(", "x", ")"}]}], RowBox[{ RowBox[{ SuperscriptBox["f", "*"], "(", "x", ")"}], "/", RowBox[{"d", "(", "x", ")"}]}]]}]}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", RowBox[{"f", "/", SuperscriptBox["d", "*"]}], ")"}]}], TraditionalForm]]], ". It follows that there exists a proper divisor ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["f", TraditionalForm]]], ", namely ", Cell[BoxData[ FormBox[ RowBox[{"f", "/", SuperscriptBox["d", "*"]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "h", ")"}]}], TraditionalForm]]], ".\nThe proof in the reverse direction goes exactly the same." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be a binary, periodic sequence, say with period ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". Let the first ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " terms of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], "=", RowBox[{ SubscriptBox["s", "0"], "+", RowBox[{ SubscriptBox["s", "1"], "x"}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["s", RowBox[{"p", "-", "1"}]], SuperscriptBox["x", RowBox[{"p", "-", "1"}]]}]}]}], TraditionalForm]]], ". \nThen there exists a unique polynomial ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " with the following two properties:\n", StyleBox["i)", FontWeight->"Bold"], " \t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "m", ")"}]}], TraditionalForm]]], ", \n", StyleBox["ii)", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[ForAll]", "h"], RowBox[{"[", " ", RowBox[{ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{ RowBox[{"\[CapitalOmega]", "(", "h", ")"}], " ", "\[DoubleLongRightArrow]", " ", "m"}]}], "|", "h"}], "]"}]}], TraditionalForm]]], " .\nThe ", ButtonBox["reciprocal", BaseStyle->"Hyperlink", ButtonData:>"FormShift Reciprocal"], " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is given by\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], "=", StyleBox[ FractionBox[ RowBox[{"1", "-", SuperscriptBox["x", "p"]}], RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], ",", RowBox[{"1", "-", SuperscriptBox["x", "p"]}]}], ")"}]], FontSize->16]}], TraditionalForm]]], ".\n\nThe polynomial ", Cell[BoxData[ FormBox[ RowBox[{"m", "(", "x", ")"}], TraditionalForm]]], " is called the ", StyleBox["minimal characteristic polynomial", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoShift Min Char Pol"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " have period 15 and let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["S", RowBox[{"(", "15", ")"}]], "(", "x", ")"}], "=", RowBox[{"1", "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "7"], "+", SuperscriptBox["x", "8"], "+", SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "12"], "+", SuperscriptBox["x", "13"], "+", SuperscriptBox["x", "14"]}]}], TraditionalForm]]], ". Then" }], "Example", CellTags->"ExamShift Lin Equiv"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["x", "15"], "-", "1"}], ",", RowBox[{ SuperscriptBox["S", RowBox[{"(", "15", ")"}]], "(", "x", ")"}]}], ")"}], TraditionalForm]], FontWeight->"Plain"], Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{"(", RowBox[{"1", "+", "x"}], ")"}], RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"]}], ")"}], RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}], ")"}], RowBox[{"(", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}], ")"}]}]}], TraditionalForm]], FontWeight->"Plain"], StyleBox[".", FontWeight->"Plain"] }], "DisplayFormula", FontWeight->"Bold", FontSlant->"Italic"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["x", "15"], "-", "1"}], ")"}], "/", RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["x", "15"], "-", "1"}], ",", RowBox[{ SuperscriptBox["S", RowBox[{"(", "15", ")"}]], "(", "x", ")"}]}], ")"}]}], "=", RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]}]}], TraditionalForm]]], " and thus ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"m", "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"]}]}], TraditionalForm]]], ". Indeed, this ", Cell[BoxData[ FormBox[ RowBox[{"S", "(", "x", ")"}], TraditionalForm]]], " is the output sequence of the LFSR in ", ButtonBox["Figure 3.4", BaseStyle->"Hyperlink", ButtonData:>"FigShift LFSR n=4"], ".\nThe above calculations can be executed with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["PolynomialGCD", BaseStyle->"RefGuideLink"], ", ", ButtonBox["PolynomialQuotient", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["PolynomialMod", BaseStyle->"RefGuideLink"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "15"}], ";", RowBox[{"S", "=", RowBox[{"1", "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "7"], "+", SuperscriptBox["x", "8"], "+", SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "12"], "+", SuperscriptBox["x", "13"], "+", SuperscriptBox["x", "14"]}]}], ";", RowBox[{"g", "=", RowBox[{"PolynomialGCD", "[", RowBox[{"S", ",", RowBox[{ SuperscriptBox["x", "p"], "-", "1"}], ",", RowBox[{"Modulus", "->", "2"}]}], "]"}]}], ";", RowBox[{"MSTAR", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{"PolynomialQuotient", "[", RowBox[{ RowBox[{ SuperscriptBox["x", "p"], "-", "1"}], ",", "g", ",", "x"}], "]"}], ",", "2"}], "]"}]}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"1", "+", SuperscriptBox["x", "3"], "+", SuperscriptBox["x", "4"]}]], "Output"], Cell[TextData[{ StyleBox["Proof of Theorem 3.15", FontWeight->"Bold"], ": \nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "m", ")"}]}], TraditionalForm]]], ". If ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[Element]", RowBox[{"\[CapitalOmega]", "(", "h", ")"}]}], TraditionalForm]]], " for some divisor ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", replace ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " by ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " and continue with this procedure until it can be assumed that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], "\[NotElement]", RowBox[{"\[CapitalOmega]", "(", "h", ")"}]}], TraditionalForm]]], " for any divisor of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". \nWe shall show that such an ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is unique and of the form given in Theorem 3.15.\nSince the period of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " is ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", ", ButtonBox["Corollary 3.5", BaseStyle->"Hyperlink", ButtonData:>"CorShift S=u/f"], " implies that for some ", Cell[BoxData[ FormBox[ RowBox[{"u", "(", "x", ")"}], TraditionalForm]]], " with degree", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"u", "(", "x", ")"}], ")"}], "<"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"degree", "(", RowBox[{"m", "(", "x", ")"}], ")"}], TraditionalForm]]], "," }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FractionBox[ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], RowBox[{"1", "-", SuperscriptBox["x", "p"]}]], "=", RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], RowBox[{"(", RowBox[{"1", "+", SuperscriptBox["x", "p"], "+", SuperscriptBox["x", RowBox[{"2", "p"}]], "+", "\[Ellipsis]"}], ")"}]}], "=", RowBox[{ RowBox[{"S", "(", "x", ")"}], "=", FractionBox[ RowBox[{"u", "(", "x", ")"}], RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}]]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "By our assumption on ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " and by ", ButtonBox["Lemma 3.14", BaseStyle->"Hyperlink", ButtonData:>"LemShift gcd(u f)=1"], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], ",", RowBox[{"u", "(", "x", ")"}]}], ")"}], "=", "1"}], TraditionalForm]]], ", so" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], ",", FractionBox[ RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}]}], RowBox[{"1", "-", SuperscriptBox["x", "p"]}]]}], ")"}], "=", "1"}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["It follows that", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], RowBox[{"(", RowBox[{"1", "-", SuperscriptBox["x", "p"]}], ")"}]}], ",", RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}]}]}], ")"}], "=", RowBox[{"1", "-", SuperscriptBox["x", "p"]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["i.e.", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], ".", RowBox[{"gcd", "(", RowBox[{ RowBox[{"1", "-", SuperscriptBox["x", "p"]}], ",", RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}]}], ")"}]}], "=", RowBox[{"1", "-", SuperscriptBox["x", "p"]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["Hence", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["m", "*"], "(", "x", ")"}], "=", FractionBox[ RowBox[{"1", "-", SuperscriptBox["x", "p"]}], RowBox[{"gcd", "(", RowBox[{ RowBox[{"1", "-", SuperscriptBox["x", "p"]}], ",", RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}]}], ")"}]]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Corollary ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe ", ButtonBox["linear complexity", BaseStyle->"Hyperlink", ButtonData:>"DefShift Lin Compl"], " of a binary, periodic sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " with period ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and initial segment ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"p", "-", "1"}]], RowBox[{ SubscriptBox["s", "i"], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], " is equal to\n \n\t", Cell[BoxData[ FormBox[ RowBox[{"p", "-", RowBox[{"degree", "(", RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["x", "p"], "-", "1"}], ",", RowBox[{ SuperscriptBox["S", RowBox[{"(", "p", ")"}]], "(", "x", ")"}]}], ")"}], ")"}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"CorShift Lin Compl"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "The Berlekamp-Massey Algorithm" }], "Subsection", CellTags->"SubsShift Berlekamp"], Cell[TextData[{ ButtonBox["Corollary 3.16", BaseStyle->"Hyperlink", ButtonData:>"CorShift Lin Compl"], " may be of help to the designer of a non-linear system to determine how \ safe his system is against the kind of attack described in the discussion \"", ButtonBox["Ad C3", BaseStyle->"Hyperlink", ButtonData:>"PostShift Ad C3"], "\" in Subsection 3.2.5. \nA cryptanalist, on the other hand, who knows a \ segment of the output sequence, say ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], ", can try the following strategy:\ni) find the smallest LFSR that \ generates ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], ", \nii) determine the next output bit of this LFSR and hope that it \ correctly \"predicts'' the next bit ", Cell[BoxData[ FormBox[ SubscriptBox["s", "k"], TraditionalForm]]], " of the sequence." }], "Text"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "k"], "(", SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}], TraditionalForm]], FontSlant->"Italic"], " is the length of the shortest LFSR that generates ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], ".\nWhen it is clear from the context which ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " is involved we shall simply write ", Cell[BoxData[ FormBox[ StyleBox[ SubscriptBox["L", "k"], FontSlant->"Italic"], TraditionalForm]]], ". The polynomial ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], FontSlant->"Italic"], TraditionalForm]]], " will denote the characteristic polynomial of any ", Cell[BoxData[ FormBox[ SubscriptBox["L", "k"], TraditionalForm]]], "-stage LFSR that generates the sequence ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], "." }], "Definition", CellTags->"DefShift Lk and fk"], Cell[TextData[{ "Clearly ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["L", "k"], "(", SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}], "\[LessEqual]", "k"}], TraditionalForm]]], " for any sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ", since any ", Cell[BoxData[ FormBox["k", TraditionalForm]]], "-state LFSR will generate ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], ", simply by taking ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], " as starting state." }], "Text"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be an output sequence starting with ", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox[ FormBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]0"}], "\[LongLeftRightArrow]"], TraditionalForm], RowBox[{"k", "-", "1"}]], "1"}], TraditionalForm]]], ". Then, \n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["L", "k"], "(", SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}], "=", "k"}], TraditionalForm]]], "." }], "Theorem", CellTags->"LemShift zeros1"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Any LFSR of length ", Cell[BoxData[ FormBox[ RowBox[{"n", ",", RowBox[{"n", "<", "k"}]}], TraditionalForm]]], ", that is filled with the first ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " symbols of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " (which are all zero) will output the all-zero sequence, so ", Cell[BoxData[ FormBox[ SubscriptBox["t", RowBox[{"k", "-", "1"}]], TraditionalForm]]], " will not be 1." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be two output sequences. Then, for all ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "0"}], TraditionalForm]]], " \n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["L", "k"], "(", SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["t", "i"]}], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}], "\[LessEqual]", RowBox[{ RowBox[{ SubscriptBox["L", "k"], "(", SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}], "+", RowBox[{ SubscriptBox["L", "k"], "(", SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"LemShift sk+tk segment"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": This is a direct consequence of ", ButtonBox["Lemma 3.6", BaseStyle->"Hyperlink", ButtonData:>"LemShift s+t seq"], ". Indeed, let the LFSR's with characteristic polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " generate the first ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " terms of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ". Then by Lemma 3.6, the first ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " terms of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["t", "i"]}], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " will be generated by the LFSR with characteristic polynomial ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["lcm", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Pol Equiv Def"], "[", RowBox[{ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], ",", RowBox[{ SuperscriptBox["g", RowBox[{"(", "k", ")"}]], "(", "x", ")"}]}], "]"}], TraditionalForm]]], ". This lcm has degree at most the sum of the degrees of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], "." }], "Text", GeneratedCell->True, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "It follows from ", ButtonBox["Definition 3.6", BaseStyle->"Hyperlink", ButtonData:>"DefShift Lk and fk"], " that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "\[GreaterEqual]", SubscriptBox["L", "k"]}], TraditionalForm]]], " for any sequence ", Cell[BoxData[ FormBox[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm], TraditionalForm]]], ". More can be said." }], "Text"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be an output sequence. Suppose that the LFSR with characteristic \ polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " does not output ", Cell[BoxData[ FormBox[ SubscriptBox["s", "k"], TraditionalForm]]], " correctly. Then \n\n\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "\[GreaterEqual]", RowBox[{"max", RowBox[{"{", RowBox[{ SubscriptBox["L", "k"], ",", RowBox[{"k", "+", "1", "-", SubscriptBox["L", "k"]}]}], "}"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"LemShift Lk+1>="], Cell[TextData[{ "\n", StyleBox["Proof", FontWeight->"Bold"], ": We already know that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "\[GreaterEqual]", SubscriptBox["L", "k"]}], TraditionalForm]]], ".\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be a sequence starting with ", Cell[BoxData[ FormBox[ OverscriptBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]0"}], "\[LongLeftRightArrow]"], "k"], TraditionalForm]]], "1 as beginning sequence. Since the LFSR with characteristic polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " does generate ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], ", but not ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", "k"]}], TraditionalForm]]], ", it follows that this LFSR will generate ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["t", "i"]}], "}"}], RowBox[{"i", "=", "0"}], "k"], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "\[GreaterEqual]", SubscriptBox["L", "k"]}], TraditionalForm]]], ", we can conclude that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "(", SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["t", "i"]}], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ SubscriptBox["L", "k"], "(", SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["t", "i"]}], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ SubscriptBox["L", "k"], "(", SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"(", RowBox[{"=", "L)"}]}], "k"], TraditionalForm]]], ". \nThe statement now follows with ", ButtonBox["Lemma 3.17", BaseStyle->"Hyperlink", ButtonData:>"LemShift zeros1"], " and ", ButtonBox["Lemma 3.18", BaseStyle->"Hyperlink", ButtonData:>"LemShift sk+tk segment"], " from" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "+", "1"}], "=", RowBox[{ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "(", SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}], "\[LessEqual]", RowBox[{ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "(", SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}], "+", RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "(", SubscriptBox[ RowBox[{"{", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["t", "i"]}], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], ")"}]}]}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "+", SubscriptBox["L", "k"]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "The following theorem shows that in fact equality holds in the above lemma. \ The proof follows from the Berlekamp-Massey algorithm, that constructs ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " recursively, cf. ", ButtonBox["[Mass69]", BaseStyle->"Hyperlink", ButtonData:>"RefMas69"], ". This algorithm is well known in algebraic coding theory for the decoding \ of BCH codes and Reed-Solomon codes (see ", ButtonBox["[Berl68]", BaseStyle->"Hyperlink", ButtonData:>"RefBer68"], ", Chapter 7)." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be an output sequence. Suppose that the LFSR with characteristic \ polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " does not output ", Cell[BoxData[ FormBox[ SubscriptBox["s", "k"], TraditionalForm]]], " correctly. Then \n\n\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "=", RowBox[{"max", RowBox[{"{", RowBox[{ SubscriptBox["L", "k"], ",", RowBox[{"k", "+", "1", "-", SubscriptBox["L", "k"]}]}], "}"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoShift Ber-Mas"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": In view of ", ButtonBox["Lemma 3.19", BaseStyle->"Hyperlink", ButtonData:>"LemShift Lk+1>="], ", it suffices to find a polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " of degree equal to ", Cell[BoxData[ FormBox[ RowBox[{"max", RowBox[{"{", RowBox[{ SubscriptBox["L", "k"], ",", RowBox[{"k", "+", "1", "-", SubscriptBox["L", "k"]}]}], "}"}]}], TraditionalForm]]], " that does output the first ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", "1"}], TraditionalForm]]], " terms of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " correctly. This is exactly what the Berlekamp-Massey algorithm does in a \ very efficient way.\nWe shall prove the theorem by induction." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Getting the induction argument started", FontVariations->{"Underline"->True}], ".\nDefine ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "0"], "=", "0"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["f", RowBox[{"(", "0", ")"}]], "(", "x", ")"}], "=", "1"}], TraditionalForm]]], ".\nThe sequence ", Cell[BoxData[ FormBox[ OverscriptBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]0"}], "\[LongLeftRightArrow]"], "k"], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " can be generated by the (degenerate) LFSR with characteristic polynomial ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], "=", "1"}], TraditionalForm]]], " of degree ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "k"], "=", "0"}], TraditionalForm]]], ". \nThe sequence ", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox[ OverscriptBox[ RowBox[{"00", "\[Ellipsis]0"}], "\[LongLeftRightArrow]"], "k"], "1"}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ RowBox[{"k", "+", "1"}], TraditionalForm]]], " can be generated by any ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"k", "+", "1"}], ")"}], TraditionalForm]]], "-stage LFSR, but not by a shorter LFSR, as we already saw in ", ButtonBox["Lemma 3.17", BaseStyle->"Hyperlink", ButtonData:>"LemShift zeros1"], ". In this case," }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "=", RowBox[{"k", "+", "1"}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"k", "+", "1", "-", SubscriptBox["L", "k"]}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"max", RowBox[{"{", RowBox[{ SubscriptBox["L", "k"], ",", RowBox[{"k", "+", "1", "-", SubscriptBox["L", "k"]}]}], "}"}]}]}], TraditionalForm]]], ". " }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["This proves the first induction step. ", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["The induction step", FontVariations->{"Underline"->True}], ": ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "\[LongRightArrow]", "k"}], "+", "1"}], TraditionalForm]]], ".\nBy putting ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "+", "n"}], "=", "j"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "i"], "=", SubsuperscriptBox["f", "i", RowBox[{"(", "k", ")"}]]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{" ", FormBox[ RowBox[{"n", "=", SubscriptBox["L", "k"]}], TraditionalForm]}], TraditionalForm]]], " in ", ButtonBox["(3.2)", BaseStyle->"Hyperlink", ButtonData:>"FormShift Lin Rec"], ", the induction hypothesis for ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " can be formulated as:" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{ SubscriptBox["L", "k"], "-", "1"}]], RowBox[{ SubsuperscriptBox["f", "i", RowBox[{"(", "k", ")"}]], SubscriptBox["s", RowBox[{"j", "-", SubscriptBox["L", "k"], "+", "i"}]]}]}], "=", SubscriptBox["s", "j"]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "k"], "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"k", "-", "1"}]}], TraditionalForm]]], "." }], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormShift BM j<=k-1"], Cell[TextData[{ "If (3.9) also holds for ", Cell[BoxData[ FormBox[ RowBox[{"j", "=", "k"}], TraditionalForm]]], ", then ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"k", "+", "1"}]], "=", SubscriptBox["L", "k"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["f", RowBox[{"(", RowBox[{"k", "+", "1"}], ")"}]], "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}]}], TraditionalForm]]], " and there remains nothing to prove. " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["If (3.9) does not hold, then", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{ SubscriptBox["L", "k"], "-", "1"}]], RowBox[{ SubsuperscriptBox["f", "i", RowBox[{"(", "k", ")"}]], SubscriptBox["s", RowBox[{"j", "-", SubscriptBox["L", "k"], "+", "i"}]]}]}], "=", RowBox[{ SubscriptBox["s", "j"], "+", "1"}]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"j", "=", "k"}], TraditionalForm]]], "." }], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormShift BM j=k"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " be the unique integer smaller than ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " defined by" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "i)\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "m"], "<", SubscriptBox["L", "k"]}], TraditionalForm]]], ",\nii)\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"m", "+", "1"}]], "=", SubscriptBox["L", "k"]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "so ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is the index of the last increase of ", Cell[BoxData[ FormBox["L", TraditionalForm]]], ".\nBecause we have already proved the start of the induction argument, this \ number is well defined. It follows from the induction hypothesis and the \ above definition of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " that:" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{ SubscriptBox["L", "m"], "-", "1"}]], RowBox[{ SubsuperscriptBox["f", "i", RowBox[{"(", "m", ")"}]], SubscriptBox["s", RowBox[{"j", "-", SubscriptBox["L", "m"], "+", "i"}]]}]}], "=", RowBox[{ StyleBox["{", SpanMaxSize->Infinity], GridBox[{ { RowBox[{ SubscriptBox["s", "j"], ","}]}, { RowBox[{ RowBox[{ SubscriptBox["s", "m"], "+", "1"}], ","}]} }]}]}], TraditionalForm]], TextJustification->1], "\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["L", "m"]}], "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"m", "-", "1"}]}], ","}]}, { RowBox[{"j", "=", RowBox[{"m", "."}]}]} }], TraditionalForm]]] }], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormShift BM j<=m"], Cell[TextData[{ "Notice that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "k"], "=", RowBox[{ SubscriptBox["L", RowBox[{"m", "+", "1"}]], "=", RowBox[{ RowBox[{"max", RowBox[{"{", RowBox[{ SubscriptBox["L", "m"], ",", RowBox[{"m", "+", "1", "-", SubscriptBox["L", "m"]}]}], "}"}]}], "=", RowBox[{"m", "+", "1", "-", SubscriptBox["L", "m"]}]}]}]}], TraditionalForm]]], ". \nDefine ", Cell[BoxData[ FormBox[ RowBox[{"L", "=", RowBox[{"max", RowBox[{"{", RowBox[{ SubscriptBox["L", "k"], ",", RowBox[{"k", "+", "1", "-", SubscriptBox["L", "k"]}]}], "}"}]}]}], TraditionalForm]]], ". We claim that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], "\t=\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{"L", "-", SubscriptBox["L", "k"]}]], RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}]}], "+", RowBox[{ SuperscriptBox["x", RowBox[{"L", "-", RowBox[{"(", RowBox[{"k", "+", "1", "-", SubscriptBox["L", "k"]}], ")"}]}]], RowBox[{ SuperscriptBox["f", RowBox[{"(", "m", ")"}]], "(", "x", ")"}]}]}], TraditionalForm]]], "\n\n\t=\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{"L", "-", SubscriptBox["L", "k"]}]], RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}]}], "+", RowBox[{ SuperscriptBox["x", RowBox[{"L", "-", "k", "+", "m", "-", SubscriptBox["L", "m"]}]], RowBox[{ SuperscriptBox["f", RowBox[{"(", "m", ")"}]], "(", "x", ")"}]}]}], TraditionalForm]]] }], "NumberedEquation", FontColor->RGBColor[0.500008, 0, 0.500008], CellTags->"FormShift f(x) in BM"], Cell[TextData[{ "will be a suitable choice for ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", RowBox[{"k", "+", "1"}], ")"}]], "(", "x", ")"}], TraditionalForm]]], ". " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Clearly, the first term in (3.12) has degree ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"L", "-", SubscriptBox["L", "k"]}], ")"}], "+", SubscriptBox["L", "k"]}], "=", "L"}], TraditionalForm]]], " and the second term has degree ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"L", "-", "k", "+", "m", "-", SubscriptBox["L", "m"]}], ")"}], "+", SubscriptBox["L", "m"]}], "<", "L"}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " has the right degree. But also, by ", ButtonBox["(3.9)", BaseStyle->"Hyperlink", ButtonData:>"FormShift BM j<=k-1"], ", ", ButtonBox["(3.10)", BaseStyle->"Hyperlink", ButtonData:>"FormShift BM j=k"], ", ", ButtonBox["(3.11)", BaseStyle->"Hyperlink", ButtonData:>"FormShift BM j<=m"], "," }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"L", "-", "1"}]], RowBox[{ SubscriptBox["f", "i"], SubscriptBox["s", RowBox[{"j", "-", "L", "+", "i"}]]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["=", RowBox[{"(", "3.12", ")"}]], RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", RowBox[{"L", "-", SubscriptBox["L", "k"]}]}], RowBox[{"L", "-", "1"}]], RowBox[{ SubsuperscriptBox["f", RowBox[{"i", "-", RowBox[{"(", RowBox[{"L", "-", SubscriptBox["L", "k"]}], ")"}]}], RowBox[{"(", "k", ")"}]], SubscriptBox["s", RowBox[{"j", "-", "L", "+", "i"}]]}]}], "+", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", RowBox[{"L", "-", RowBox[{"(", RowBox[{"L", "-", "k", "+", "m", "-", SubscriptBox["L", "m"]}], ")"}]}]}], RowBox[{"L", "-", "k", "+", "m"}]], RowBox[{ SubsuperscriptBox["f", RowBox[{"i", "-", RowBox[{"(", RowBox[{"L", "-", "k", "+", "m", "-", SubscriptBox["L", "m"]}], ")"}]}], RowBox[{"(", "m", ")"}]], SubscriptBox["s", RowBox[{"j", "-", "L", "+", "i"}]]}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ OverscriptBox["=", RowBox[{"subst", ".", " ", "i"}]], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{ SubscriptBox["L", "k"], "-", "1"}]], RowBox[{ SubsuperscriptBox["f", "i", RowBox[{"(", "k", ")"}]], SubscriptBox["s", RowBox[{"j", "-", SubscriptBox["L", "k"], "+", "i"}]]}]}], "+"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{ SubscriptBox["L", "m"], "-", "1"}]], RowBox[{ SubsuperscriptBox["f", "i", RowBox[{"(", "m", ")"}]], SubscriptBox["s", RowBox[{"j", "-", SubscriptBox["L", "m"], "-", "k", "+", "m", "+", "i"}]]}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"+", SubscriptBox["s", RowBox[{"j", "-", "k", "+", "m"}]]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", " ", RowBox[{"{", GridBox[{ { RowBox[{ RowBox[{ RowBox[{ SubscriptBox["s", "j"], "+", "0"}], "=", SubscriptBox["s", "j"]}], ","}]}, { RowBox[{ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["s", "k"], "+", "1"}], ")"}], "+", "1"}], "=", SubscriptBox["s", "k"]}], ","}]} }]}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{"L", "\[LessEqual]", "j", "\[LessEqual]", RowBox[{"k", "-", "1"}]}], ","}]}, { RowBox[{"j", "=", RowBox[{"k", "."}]}]} }], TraditionalForm]]], " " }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "This proves that the LFSR with characteristic polynomial ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "x", ")"}], TraditionalForm]]], " indeed can generate ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", "k"]}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ ButtonBox["Theorem 3.20", BaseStyle->"Hyperlink", ButtonData:>"TheoShift Ber-Mas"], " only proves that the degree ", Cell[BoxData[ FormBox[ SubscriptBox["L", "k"], TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " is unique. In general, the polynomial ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", RowBox[{"(", "k", ")"}]], "(", "x", ")"}], TraditionalForm]]], " itself will not be unique." }], "Text"], Cell["\<\ The algorithm, described in the proof above, can be executed and summarized \ as follows:\ \>", "Text"], Cell[TextData[{ StyleBox["Algorithm ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t\t", FontWeight->"Bold"], StyleBox["Berlekamp-Massey\n", FontSlant->"Italic"], "\n\t", StyleBox["input", FontWeight->"Bold"], "\t\ta binary sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ", an index ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " \n\t", StyleBox["initialization", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{"f", "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"L", "=", "0"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"j", "=", "0"}], TraditionalForm]]], "\n\t", StyleBox["parameters used \n\t\t", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "ne"], ",", SubscriptBox["L", "ne"]}], TraditionalForm]]], ": stand for the characteristic polynomial and length of the LFSR\n\t\t\t \ as desired by the present iteration; \t\t\n\t\t", Cell[BoxData[ FormBox[ SubscriptBox["f", "ol"], TraditionalForm]]], ",", Cell[BoxData[ FormBox[ RowBox[{" ", SubscriptBox["L", "ol"]}], TraditionalForm]]], " : stand for the polynomial and length just before the last change\n\t\t\t \ in length;\n\t\tdiff \t: the difference between the present iteration number \ and \n\t\t\t the iteration number after the last change in length. \n\t", StyleBox["while", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["s", "j"], "=", "0"}], ")"}], "\[And]", RowBox[{"(", RowBox[{"j", "\[LessEqual]", "u"}], ")"}]}], TraditionalForm]]], " ", StyleBox["do ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"j", "=", RowBox[{"j", "+", "1"}]}], TraditionalForm]]], "\n\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"j", "=", RowBox[{"u", "+", "1"}]}], TraditionalForm]]], " ", StyleBox["then", FontWeight->"Bold"], " STOP\n\t", StyleBox["put", FontWeight->"Bold"], " \t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "ol"], "=", "1"}], TraditionalForm]]], "; ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "ol"], "=", "0"}], TraditionalForm]]], "\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"f", "=", SuperscriptBox["x", RowBox[{"j", "+", "1"}]]}], TraditionalForm]]], "; ", Cell[BoxData[ FormBox[ RowBox[{"L", "=", RowBox[{"degree", "(", "f", ")"}]}], TraditionalForm]]], "\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"k", "=", RowBox[{"j", "+", "1"}]}], TraditionalForm]]], "; ", Cell[BoxData[ FormBox[ RowBox[{"diff", " "}], TraditionalForm]]], "= 0\n\t", StyleBox["while", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{"k", "<", "u"}], TraditionalForm]]], " ", StyleBox["do\n\t\tbegin", FontWeight->"Bold"], "\n\t\t", StyleBox["if", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"L", "-", "1"}]], RowBox[{ SubscriptBox["f", "i"], SubscriptBox["s", RowBox[{"k", "-", "L", "+", "i"}]]}]}], "\[NotEqual]", SubscriptBox["s", "k"]}], TraditionalForm]]], " ", StyleBox["then", FontWeight->"Bold"], "\n\t\t\t", StyleBox["begin", FontWeight->"Bold"], "\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "ne"], "=", RowBox[{"max", RowBox[{"{", RowBox[{"L", ",", RowBox[{"k", "+", "1", "-", "L"}]}], "}"}]}]}], TraditionalForm]]], "\n\t\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["f", "ne"], "=", RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{ SubscriptBox["L", "ne"], "-", "L"}]], ".", "f"}], "+", RowBox[{ SuperscriptBox["x", RowBox[{ SubscriptBox["L", "ne"], "-", RowBox[{"(", RowBox[{"diff", "+", "1", "+", SubscriptBox["L", "ol"]}], ")"}]}]], ".", SubscriptBox["f", "ol"]}]}]}], TraditionalForm]]], "\n\t\t\t\t", StyleBox["if ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SubscriptBox["L", "ne"], TraditionalForm]]], StyleBox[" ", FontWeight->"Bold"], "\[NotEqual] ", StyleBox["L ", FontSlant->"Italic"], StyleBox["then\n\t\t\t\t\tbegin\n\t\t\t\t\t ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SubscriptBox["f", "ol"], TraditionalForm]]], StyleBox[" =", FontWeight->"Bold"], StyleBox[" ", FontWeight->"Bold", FontSlant->"Italic"], Cell[BoxData[ FormBox["f", TraditionalForm]]], Cell[BoxData[ FormBox[";", TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["L", "ol"], "=", " ", "L"}], ";"}], " "}], TraditionalForm]]], "\n\t\t\t\t\t ", StyleBox["L = ", FontSlant->"Italic"], Cell[BoxData[ FormBox[ SubscriptBox["L", "ne"], TraditionalForm]]], "; diff = 0;\n\t\t\t\t\t ", StyleBox["end\n\t\t\t\telse\n\t\t\t\t\tbegin\n\t\t\t\t\t", FontWeight->"Bold"], " diff = diff + 1;\n\t\t\t\t\t", StyleBox["end", FontWeight->"Bold"], " \n\t\t\t", Cell[BoxData[ FormBox[" ", TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"f", "=", SubscriptBox["f", "ne"]}], TraditionalForm]]], "\n\t\t\t", StyleBox["end", FontWeight->"Bold"], "\n\t\t", StyleBox["else\n\t\t\tbegin\n\t\t\t", FontWeight->"Bold"], "diff = diff + 1;\n\t\t\t", StyleBox["end", FontWeight->"Bold"], "\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"k", "=", RowBox[{"k", "+", "1"}]}], TraditionalForm]]], "; \n\t\t", StyleBox["end", FontWeight->"Bold"], "\n\t", StyleBox["output", FontWeight->"Bold"], " ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " the characteristic function of the shortest LFSR that can output ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", "u"]}], ")"}], TraditionalForm]]], "." }], "Theorem", CellTags->"AlgShift Ber-Mas"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold", FontSlant->"Plain"], "Consider the sequence" }], "Example", TextAlignment->Left, TextJustification->1], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "=", "0"}], "30"], "=", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", " ", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "The ", StyleBox["Mathematica", FontSlant->"Italic"], " version of the Berlekamp-Massey algorithm that we give below makes use of \ the functions ", ButtonBox["Do", BaseStyle->"RefGuideLink"], ", ", ButtonBox["CoefficientList", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Mod", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Max", BaseStyle->"RefGuideLink"], ", ", ButtonBox["PolynomialMod", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Length", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Print", BaseStyle->"RefGuideLink"], ". Note that we have combined the two while statements in the algorithm \ above into a single Do statement. All intermediate functions are also printed." }], "Text", TextAlignment->Left, TextJustification->1, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"s", "=", RowBox[{"{", RowBox[{ "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "0", ",", "1", ",", "1", ",", "1", ",", "1", ",", "0"}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"Lol", "=", "0"}], ";", RowBox[{"fol", "=", "1"}], ";"}], "\n", RowBox[{ RowBox[{"diff", "=", "0"}], ";", RowBox[{"Clear", "[", "x", "]"}], ";"}], "\n", RowBox[{ RowBox[{"f", "=", "1"}], ";", RowBox[{"L", "=", "0"}], ";", RowBox[{"g", "=", RowBox[{"CoefficientList", "[", RowBox[{"f", ",", RowBox[{"{", "x", "}"}]}], "]"}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{ RowBox[{"Mod", "[", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "L"], RowBox[{ RowBox[{ "g", "\[LeftDoubleBracket]", "i", "\[RightDoubleBracket]"}], " ", RowBox[{"s", "\[LeftDoubleBracket]", RowBox[{"j", "-", "1", "-", "L", "+", "i"}], "\[RightDoubleBracket]"}]}]}], ",", "2"}], "]"}], "==", RowBox[{"s", "\[LeftDoubleBracket]", "j", "\[RightDoubleBracket]"}]}], ",", RowBox[{"diff", "=", RowBox[{"diff", "+", "1"}]}], ",", "\t\t", RowBox[{ RowBox[{"Lne", "=", RowBox[{"Max", "[", RowBox[{ RowBox[{"j", "-", "L"}], ",", "L"}], "]"}]}], ";", "\t\t", RowBox[{"fne", "=", RowBox[{"PolynomialMod", "[", RowBox[{ RowBox[{ RowBox[{ SuperscriptBox["x", RowBox[{"Lne", "-", "L"}]], " ", "f"}], "+", RowBox[{ SuperscriptBox["x", RowBox[{"Lne", "-", "Lol", "-", "diff", "-", "1"}]], " ", "fol"}]}], ",", "2"}], "]"}]}], ";", RowBox[{"If", "[", RowBox[{ RowBox[{"Lne", "\[NotEqual]", "L"}], ",", RowBox[{ RowBox[{"fol", "=", "f"}], ";", RowBox[{"Lol", "=", "L"}], ";", RowBox[{"L", "=", "Lne"}], ";", RowBox[{"diff", "=", "0"}]}], ",", RowBox[{"diff", "=", RowBox[{"diff", "+", "1"}]}]}], "]"}], ";", RowBox[{"f", "=", "fne"}], ";", RowBox[{"g", "=", RowBox[{"CoefficientList", "[", RowBox[{"f", ",", RowBox[{"{", "x", "}"}]}], "]"}]}]}]}], "]"}], ";", RowBox[{"Print", "[", RowBox[{ "\"\\"", ",", "j", ",", "\"\<, L=\>\"", ",", "L", ",", "\"\<, f=\>\"", ",", "f"}], "]"}]}], ",", RowBox[{"{", RowBox[{"j", ",", RowBox[{"Length", "[", "s", "]"}]}], "}"}]}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "0", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", "1"}], SequenceForm["j=", 1, ", L=", 0, ", f=", 1], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "0", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", "1"}], SequenceForm["j=", 2, ", L=", 0, ", f=", 1], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "3", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "0", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", "1"}], SequenceForm["j=", 3, ", L=", 0, ", f=", 1], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "4", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "0", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", "1"}], SequenceForm["j=", 4, ", L=", 0, ", f=", 1], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "5", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "0", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", "1"}], SequenceForm["j=", 5, ", L=", 0, ", f=", 1], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 6, ", L=", 6, ", f=", 1 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "7", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 7, ", L=", 6, ", f=", 1 + x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "8", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 8, ", L=", 6, ", f=", 1 + x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "9", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 9, ", L=", 6, ", f=", 1 + x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "10", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 10, ", L=", 6, ", f=", 1 + x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "11", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 11, ", L=", 6, ", f=", 1 + x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "12", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{ SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 12, ", L=", 6, ", f=", x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "13", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{ SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 13, ", L=", 6, ", f=", x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "14", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{ SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 14, ", L=", 6, ", f=", x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "15", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{ SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 15, ", L=", 6, ", f=", x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "16", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{ SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 16, ", L=", 6, ", f=", x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "17", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{ SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "6"]}]}], SequenceForm["j=", 17, ", L=", 6, ", f=", x^5 + x^6], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "18", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "12", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "11"], "+", SuperscriptBox["x", "12"]}]}], SequenceForm["j=", 18, ", L=", 12, ", f=", 1 + x^11 + x^12], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "19", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "12", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "10"], "+", SuperscriptBox["x", "12"]}]}], SequenceForm["j=", 19, ", L=", 12, ", f=", 1 + x^10 + x^12], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "20", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "12", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "9"], "+", SuperscriptBox["x", "12"]}]}], SequenceForm["j=", 20, ", L=", 12, ", f=", 1 + x^9 + x^12], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "21", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "12", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "8"], "+", SuperscriptBox["x", "12"]}]}], SequenceForm["j=", 21, ", L=", 12, ", f=", 1 + x^8 + x^12], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "22", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "12", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "7"], "+", SuperscriptBox["x", "12"]}]}], SequenceForm["j=", 22, ", L=", 12, ", f=", 1 + x^7 + x^12], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "23", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "12", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "6"], "+", SuperscriptBox["x", "12"]}]}], SequenceForm["j=", 23, ", L=", 12, ", f=", 1 + x^6 + x^12], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "24", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "12", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "12"]}]}], SequenceForm["j=", 24, ", L=", 12, ", f=", 1 + x^5 + x^12], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "25", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "13", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"x", "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "13"]}]}], SequenceForm["j=", 25, ", L=", 13, ", f=", x + x^5 + x^13], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "26", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "13", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "12"], "+", SuperscriptBox["x", "13"]}]}], SequenceForm["j=", 26, ", L=", 13, ", f=", 1 + x + x^12 + x^13], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "27", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "14", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "12"], "+", SuperscriptBox["x", "13"], "+", SuperscriptBox["x", "14"]}]}], SequenceForm[ "j=", 27, ", L=", 14, ", f=", 1 + x + x^2 + x^5 + x^12 + x^13 + x^14], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "28", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "14", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{ SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "14"]}]}], SequenceForm["j=", 28, ", L=", 14, ", f=", x^2 + x^5 + x^14], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "29", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "14", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{ SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"], "+", SuperscriptBox["x", "14"]}]}], SequenceForm["j=", 29, ", L=", 14, ", f=", x^2 + x^5 + x^14], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "30", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "16", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "7"], "+", SuperscriptBox["x", "12"], "+", SuperscriptBox["x", "13"], "+", SuperscriptBox["x", "16"]}]}], SequenceForm[ "j=", 30, ", L=", 16, ", f=", 1 + x + x^4 + x^7 + x^12 + x^13 + x^16], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{"\<\"j=\"\>", "\[InvisibleSpace]", "31", "\[InvisibleSpace]", "\<\", L=\"\>", "\[InvisibleSpace]", "16", "\[InvisibleSpace]", "\<\", f=\"\>", "\[InvisibleSpace]", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "4"], "+", SuperscriptBox["x", "7"], "+", SuperscriptBox["x", "12"], "+", SuperscriptBox["x", "13"], "+", SuperscriptBox["x", "16"]}]}], SequenceForm[ "j=", 31, ", L=", 16, ", f=", 1 + x + x^4 + x^7 + x^12 + x^13 + x^16], Editable->False]], "Print"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tA Few Observations about Non-Linear Algorithms" }], "Subsection", CellTags->"SubsShift Observations"], Cell[TextData[{ "The problem with non-linear feedback shift registers, in general, is the \ difficulty of their analysis. One has to answer questions like: how many \ different cycles of output sequences are there, what is their length, what is \ their linear complexity, etc. The following theorem will make it clear that \ it is possible to say at least a little bit about general non-linear feedback \ shift registers. \nClearly, the output sequence of a non-linear FSR does not \ have maximal period if there are two different states with the same successor \ state. A state with more than one predecessor is called a ", StyleBox["branch point", FontSlant->"Italic"], "." }], "Text", TextAlignment->Left, TextJustification->1, CellTags->"DefShift branch point"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t\n", FontWeight->"Bold"], "An ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-stage feedback shift register with (non-linear) feedback fuction ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", RowBox[{ SubscriptBox["s", RowBox[{"0", ","}]], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " has no branch points if and only if a Boolean function ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", RowBox[{ SubscriptBox["s", RowBox[{"1", ","}]], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " exists such that ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{"f", "(", RowBox[{ SubscriptBox["s", RowBox[{"0", ","}]], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm], "=", RowBox[{ SubscriptBox["s", "0"], "+", RowBox[{"g", "(", RowBox[{ SubscriptBox["s", RowBox[{"1", ","}]], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}]}]}], TraditionalForm]]], "." }], "Theorem", CellTags->"TheoShift unique pred"], Cell[TextData[{ "\n", StyleBox["Proof", FontWeight->"Bold"], ": Since ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is a Boolean function, one can write " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{"f", "(", RowBox[{ SubscriptBox["s", RowBox[{"0", ","}]], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm], "=", RowBox[{ RowBox[{"g", "(", RowBox[{ SubscriptBox["s", RowBox[{"1", ","}]], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], "+", RowBox[{ SubscriptBox["s", "0"], RowBox[{"h", "(", RowBox[{ SubscriptBox["s", RowBox[{"1", ","}]], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\[DoubleLongRightArrow] If ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"h", "(", RowBox[{ SubscriptBox["s", RowBox[{"1", ","}]], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], "=", "0"}], TraditionalForm]]], " for some ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], ", then both states ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " will have the same successor state. Thus a branch point would exist, \ contradicting our assumption. We conclude that ", Cell[BoxData[ FormBox[ RowBox[{"h", "\[Congruent]", "1"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "\[DoubleLongLeftArrow] The state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " has successor ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]], ",", SubscriptBox["s", "n"]}], ")"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "n"], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"g", "(", RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], ", while state ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"1", ",", SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " has successor ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"n", "-", "1"}]], ",", RowBox[{ SubscriptBox["s", "n"], "+", "1"}]}], ")"}], TraditionalForm]]], ". Therefore, there are no branch points." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "There are many ways to use LFSR's in a non-linear way. Below we depict two \ proposals that are extensively discussed in ", ButtonBox["[Ruep86]", BaseStyle->"Hyperlink", ButtonData:>"RefRuep86"], ". Others ideas can be found in ", ButtonBox["[MeOoV97]", BaseStyle->"Hyperlink", ButtonData:>"RefMeOV97"], ", Chapter 6." }], "Text", GeneratedCell->True], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.309524 0.0952381 0.0147151 0.0840863 [ [.35714 .30902 -6.1875 -8.5 ] [.35714 .30902 6.1875 8.5 ] [.7381 .05676 -35.5 -8.5 ] [.7381 .05676 35.5 8.5 ] [.7381 .18289 -35.5 -8.5 ] [.7381 .18289 35.5 8.5 ] [.7381 .43515 -35.5 -8.5 ] [.7381 .43515 35.5 8.5 ] [.7381 .56128 -35.5 -8.5 ] [.7381 .56128 35.5 8.5 ] [.16667 .26697 -27.125 -8.5 ] [.16667 .26697 27.125 8.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .30952 .01472 m .40476 .01472 L .40476 .60332 L .30952 .60332 L .30952 .01472 L s gsave .35714 .30902 -67.1875 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (f) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .5 .01472 m .97619 .01472 L .97619 .0988 L .5 .0988 L .5 .01472 L s gsave .7381 .05676 -96.5 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (LFSR) show 104.875000 16.187500 moveto (k) show 130.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .5 .14084 m .97619 .14084 L .97619 .22493 L .5 .22493 L .5 .14084 L s gsave .7381 .18289 -96.5 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (LFSR) show 104.875000 16.187500 moveto (k) show 113.250000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 121.625000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 130.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .5 .3931 m .97619 .3931 L .97619 .47719 L .5 .47719 L .5 .3931 L s gsave .7381 .43515 -96.5 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (LFSR) show 104.875000 16.187500 moveto (2) show 130.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .5 .51923 m .97619 .51923 L .97619 .60332 L .5 .60332 L .5 .51923 L s gsave .7381 .56128 -96.5 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (LFSR) show 104.875000 16.187500 moveto (1) show 130.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .5 .05676 m .44286 .05676 L s % Start of user PostScript 2. 0.5 1.4 0.5 MAarrowhead1 % End of user PostScript .44286 .05676 m .40476 .05676 L s .5 .18289 m .44286 .18289 L s % Start of user PostScript 2. 2. 1.4 2. MAarrowhead1 % End of user PostScript .44286 .18289 m .40476 .18289 L s .5 .43515 m .44286 .43515 L s % Start of user PostScript 2. 5. 1.4 5. MAarrowhead1 % End of user PostScript .44286 .43515 m .40476 .43515 L s .5 .56128 m .44286 .56128 L s % Start of user PostScript 2. 6.5 1.4 6.5 MAarrowhead1 % End of user PostScript .44286 .56128 m .40476 .56128 L s .30952 .30902 m .02381 .30902 L s % Start of user PostScript 0 3.5 -3. 3.5 MAarrowhead1 % End of user PostScript gsave .16667 .26697 -88.125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (output) show 113.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .008 w [ .005 .02 ] 0 setdash .7381 .27538 m .7381 .34265 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", PageBreakBelow->False, ImageSize->{262.25, 161.75}, ImageMargins->{{8, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztXUtvEzEQ3jyaJlWhLW15XCACChLieeWKaMvrR0RVoQUhqtILJ87whzjw hzjzB0pmmjrJ6ttl1x47djOrauPMjj97xvas91s7fTc4Odj/PDg53Bv0d44H RweHe1/721+Oh6JWI8saP7Is+9vPKH06TI5Op8O/0590Iol9+ht93CPILUr9 ptTSxKWslZ2Vx5my20B2B8h+AVlXYRVWYeOHfUDnJZI0KbVIqcWcHh1tOi3Q 14Wzr8MUayybVItSrPfST10fAlkbyJpA1qNz0xhRAQXJLlcsTcABm6bCyz5c kZMhp7QqylZGCJOy826z6+6INdOtkPfjc0R7SjY8Xln44D5JHteyDTfASsW6 I/+s0plFr92bkSvSqdOMvRKzEAa7htXXc1eFTFg3PbHqkOyZKo1T+eha6n2Z 3mQZW8saoAv0l2qNE28BQ8I81EjuoSHfX4fHdmh77UKltO0Co1Ha7EJzCmcN xaM2iLE8dRuHFJ7EdYxsZM95hvHsLh8cPdbwgM4seuungLTm2gobP6wNKfJH 1VV9jtStB0qC8UBhFVZhi2C9sIf8vNCj1CM/tU6HR0Rz9SfuTrkY3OJVP85J nm+8JuSXyDhIri6HBUTOCDQ8N/dinYaXZSive+zPXOilOmbJspZSfTIn2zC9 oxYjG5jT9BSokuI5N2LwgV3YlvaHp3GeDh8a0AGCHOk41uSyPfVT9TF5esN4 /ZmfotJ66FDYuYVVdtaD+gv64HiIwktJRrTKJUmIvvFA16RG98SJg295PJnp AKh29ezo7lJSu1vgEro5F97Em0V1bpqr+bxI5lrGWj2zb4JLVadiVaveLa26 C/JmpMbmZIUtpmar2cmaHcOIdonatm1Mhwuei9nf6cyi92d1Gd9UF8yl9nSq S6mWkXFXbP8/xxXbKj0HSnclbU6/gKhmpgLqzHkWkrqVzEccDqI1/IKhSeOe ZAErRvBBEpaf1o5IgOZ/CGLUmszodlzrMwLjSxxa9t3BULtybfntBGLZSzIK lB1HB0Vgq6YNET9vHXzCZ0wl3Km6qqt6ROq6Vk5hFTYpWJlFbfykuuOnhrNf wIamc0gv1p3AOZnLK370XPnG3ezU1uhNywQ2FEmuw5Nfl4YeZkU3+tqvLUPc z657e1hu4LVcR4boDoFoarmF18OCMWRg8M2gYRaFobVfAW8Ms1r7hYigGd8j w679KgxTYRxgufYLvV1A1nkarB/pzBHK007/tCbjCju3sLrYS9VV3dNASTAe KKzCKmwRrAxryW+wAz6GhmUt0XtsAWYkHaoOsVYCDkhny6yUA6LYG4ueVGdH 9MXEVYb9pT5P7SBB5bkwlJ6CRYwMZRSm2kXIOTBbho0MOEotmUdujhZQ8cQE fjI+9PT7f2nNoBX2wsHif3bAepb/QyFr/AO6kQVG\ \>"], ImageRangeCache->{{{102.063, 363.313}, {347.938, 187.188}} -> {-7.39345, \ 8.3838, 0.0403694, 0.0457233}}], Cell[TextData[{ "Combining several PN's with one non-linear function ", Cell[BoxData[ FormBox["f", TraditionalForm]]], "." }], "NumberedFigure", PageBreakAbove->False, TextAlignment->Center, TextJustification->0], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.015873 0.0026455 0.161866 0.00490503 [ [.24868 .35807 -9.4375 -8.5 ] [.24868 .35807 9.4375 8.5 ] [.43386 .35807 -9.4375 -8.5 ] [.43386 .35807 9.4375 8.5 ] [.69841 .35807 -15.4375 -8.5 ] [.69841 .35807 15.4375 8.5 ] [.8836 .35807 -15.4375 -8.5 ] [.8836 .35807 15.4375 8.5 ] [.56614 .08829 -85.75 -8.5 ] [.56614 .08829 85.75 8.5 ] [.18254 .50522 -17.8125 -8.5 ] [.18254 .50522 17.8125 8.5 ] [.39418 .50522 -9.4375 -8.5 ] [.39418 .50522 9.4375 8.5 ] [.65873 .50522 -15.4375 -8.5 ] [.65873 .50522 15.4375 8.5 ] [.84392 .50522 -15.4375 -8.5 ] [.84392 .50522 15.4375 8.5 ] [.43386 .60332 -6.1875 -8.67 ] [.43386 .60332 6.1875 8.33 ] [.69841 .60332 -6.1875 -8.67 ] [.69841 .60332 6.1875 8.33 ] [.8836 .60332 -6.1875 -8.67 ] [.8836 .60332 6.1875 8.33 ] [.06878 .13734 -27.125 -8.5 ] [.06878 .13734 27.125 8.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .19577 .28449 m .30159 .28449 L .30159 .43164 L .19577 .43164 L .19577 .28449 L s gsave .24868 .35807 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .38095 .28449 m .48677 .28449 L .48677 .43164 L .38095 .43164 L .38095 .28449 L s gsave .43386 .35807 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .6455 .28449 m .75132 .28449 L .75132 .43164 L .6455 .43164 L .6455 .28449 L s gsave .69841 .35807 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .83069 .28449 m .93651 .28449 L .93651 .43164 L .83069 .43164 L .83069 .28449 L s gsave .8836 .35807 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .19577 .01472 m .93651 .01472 L .93651 .16187 L .19577 .16187 L .19577 .01472 L s gsave .56614 .08829 -146.75 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (NonLinear) show 146.750000 16.187500 moveto (Function) show 222.125000 16.187500 moveto (f) show 230.500000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .24868 .60332 m .35979 .60332 L s % Start of user PostScript 100. 90. 142. 90. MAarrowhead1 % End of user PostScript .35979 .60332 m .43386 .60332 L s .43386 .60332 m .49735 .60332 L s % Start of user PostScript 170. 90. 194. 90. MAarrowhead1 % End of user PostScript .49735 .60332 m .53968 .60332 L s .59259 .60332 m .65608 .60332 L s % Start of user PostScript 230. 90. 254. 90. MAarrowhead1 % End of user PostScript .65608 .60332 m .69841 .60332 L s .69841 .60332 m .80952 .60332 L s % Start of user PostScript 270. 90. 312. 90. MAarrowhead1 % End of user PostScript .80952 .60332 m .8836 .60332 L s .97619 .60332 m .97619 .45617 L s % Start of user PostScript 375. 90. 375. 60. MAarrowhead1 % End of user PostScript .97619 .45617 m .97619 .35807 L s .24868 .43164 m .24868 .53465 L s % Start of user PostScript 100. 55. 100. 76. MAarrowhead1 % End of user PostScript .24868 .53465 m .24868 .60332 L s .43386 .54446 m .43386 .57977 L s % Start of user PostScript 170. 78. 170. 85.2 MAarrowhead1 % End of user PostScript .43386 .57977 m .43386 .60332 L s .69841 .54446 m .69841 .57977 L s % Start of user PostScript 270. 78. 270. 85.2 MAarrowhead1 % End of user PostScript .69841 .57977 m .69841 .60332 L s .8836 .54446 m .8836 .57977 L s % Start of user PostScript 340. 78. 340. 85.2 MAarrowhead1 % End of user PostScript .8836 .57977 m .8836 .60332 L s .24868 .28449 m .24868 .21092 L s % Start of user PostScript 100. 25. 100. 10. MAarrowhead1 % End of user PostScript .24868 .21092 m .24868 .16187 L s .43386 .28449 m .43386 .21092 L s % Start of user PostScript 170. 25. 170. 10. MAarrowhead1 % End of user PostScript .43386 .21092 m .43386 .16187 L s .69841 .28449 m .69841 .21092 L s % Start of user PostScript 270. 25. 270. 10. MAarrowhead1 % End of user PostScript .69841 .21092 m .69841 .16187 L s .8836 .28449 m .8836 .21092 L s % Start of user PostScript 340. 25. 340. 10. MAarrowhead1 % End of user PostScript .8836 .21092 m .8836 .16187 L s .43386 .54446 m .47354 .49541 L s .69841 .54446 m .7381 .49541 L s .8836 .54446 m .92328 .49541 L s .43386 .43164 m .43386 .48069 L s % Start of user PostScript 170. 55. 170. 65. MAarrowhead1 % End of user PostScript .19577 .08829 m .02381 .08829 L s % Start of user PostScript 80. -15. 15. -15. MAarrowhead1 % End of user PostScript .69841 .43164 m .69841 .48069 L s % Start of user PostScript 270. 55. 270. 65. MAarrowhead1 % End of user PostScript .8836 .43164 m .8836 .48069 L s % Start of user PostScript 340. 55. 340. 65. MAarrowhead1 % End of user PostScript .38095 .35807 m .30159 .35807 L s % Start of user PostScript 150. 40. 120. 40. MAarrowhead1 % End of user PostScript .53968 .35807 m .48677 .35807 L s % Start of user PostScript 210. 40. 190. 40. MAarrowhead1 % End of user PostScript .6455 .35807 m .59259 .35807 L s % Start of user PostScript 250. 40. 230. 40. MAarrowhead1 % End of user PostScript .83069 .35807 m .75132 .35807 L s % Start of user PostScript 320. 40. 290. 40. MAarrowhead1 % End of user PostScript gsave .18254 .50522 -78.8125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 77.875000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (=) show 86.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 94.625000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .39418 .50522 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .65873 .50522 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .84392 .50522 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .43386 .60332 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .69841 .60332 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .8836 .60332 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .8836 .60332 m .97619 .60332 L s .93651 .35807 m .97619 .35807 L s gsave .06878 .13734 -88.125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (output) show 113.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore [ .001 .01 ] 0 setdash .53968 .35807 m .59259 .35807 L s .53968 .60332 m .59259 .60332 L s .53968 .50522 m .59259 .50522 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", PageBreakBelow->False, ImageSize->{288, 177.875}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztXe9yFEUQX26zd0mIoAkQhOglAVGRIGD5B0VMARoTRMu/36wyRUUJQonA N1/AN7D86hPIA2j5ZmdmdtOzu/n1bM/uJrkkfQV3k56ZX/d098zOzvTs3ll9 em/t4erT9burs0uPVx/dW7/7ZPaTXx5vkOJDUXTo743/47ORSQ+iaPNrsPFv 8Mx8GUr99Pfmx0JeNV+nc9QojlJWg/S/+X4bZLyodbSO1tE6B6+OHS4TQxkx qY5JdYmWUKpTTI2bVGxSY5QqlbN4XYASU42eSR2h1BiVS6tE+Y/5G3FIqOYI yT5W3YoJ4jobprCXAM2pLgG5MVejRRri2xPW5eVLiu6VWSQhIyIOk4A2znFl dSaVE9EQXoe4jQo11cRqRwBtvrmblUWiPiBQQNtO2MThOoA2JuSBaFKXC3P+ apmljjsBaN2W7Rbocn3qD9eEztfJWOdp6n+76n/Ir4bQ1+wUwzrO9QPqa2Oc 9FJuk1lOnpYpBV7QDqinHTc/yyaj71EYYi4d3pu4FlJYkyGLlc9Oa/m5mbpR hRudJCXyA9bBcy32CmmnEVMmleyUI+3hmdcMKYqfeYmufNLbIVs35rwTtZz1 JhYlSD72pq9M47hNZKXztM3yQd4X3h63PlKzB4Zb6GiYf0luJjkDuAUVd4/v lmyQat3CS4+rkRRTXVDuqMegrnxJTSyvTIubYPavUYKywo57G2rFsXO2/vbo +WVA+1rohm8A2gctuQjr3UMosLurcF7rxlbUHW+Yb7twuSDswBeai/ktoP0O aFYku1qKdD0EC8XbUec82etijdrIOvsBp0dayY1pac/KfRLyf9RhR+TVn68h ImLZznXULdSW6yJaUx5o7lbVdumqUJP5/KhX/ibIaK1qaFpcorG207Zr2/dL 24eml7ctg8Ta5tP2VmidtrtLrrsfGCmm7B1E6cZjpLoGunurkmYOZJ1tqaV7 FXuYp7E4Au0pqLACaA8A7TagvamwCquwCquwCrs/YJ+YHzsB/kwItkI1Lpch blPqYRG2QfHH5iem4jb1oAgRNyxu55DLlPqZUiuUulSr+K/mJ6HiNnW/CJGU i1s5I7d+TiVLc/YOgeX2qvLlEVCeUdQtmDUHseSqj5Tz1j15n/phM497ZH96 hVKlkqkEW/fg0B3oj4K2VHDbkx1XYRVWYRVWYXcG1q4wXDQZsya1YFI3KDVH Kc/ht/OAhrYaXwe0RWG5vrCcZ61FxVQxVUwVU8VUMVVMFVPFVDFVTBVTxRxa MafNt10uRcEOSGBbwy4+PycU3UbnpqQtoYyHCQ2FsKAG+tAmCA2F+3jUcALQ pIeg+JjfIk2qrrQcDqj3nZ6QKtCHj5xgn6oSYaBDH7ugwvL5Y/Nx4Uot6pZl hCL7eKUX91A2gQaFroiV5Z4zgqLBeI9ug6M0SrDKUOyRKGSZxtYSH8Dym6y4 Q1bZCpuLZEccEEp/V7gG9DEH4fGblroZJy7iwZsQy4mGMLShi04O8IbbGV4e c/lOPwcdHrXyoWsUCmyUGqRHyOcpdRiUQ8dwkSyIb88rPUI+3lztL0ALy2jI BC7y9qSQm4vaRRfWmPBeoxQyELqeTXlcio2nZmVHHI6R7KineNRufadLgrj5 +Tw10Oayl+mThuIO0sSZV5Wa6subNn+7i+V0sSlnirlojmY9bdJQxvmGSkdG 5MpdzhRS0GOwl218zlHDfBM9ZFP0QJSek7MZEDrwNBqmW/ews2ku13oCGmL8 eOwwZtvseufhql5n0fpetBO1MQJV6PphVDyXjFqLrvwsAHLoRUDrcACIG2px EECgeoZpjUNFV9FVdBVdRVfRVXQVXUVX0VV0FV1FV9FVdBVdRVfRD67oguMn aJMug2j7YAx6roiyUlbKarDDB5gDhUvPaScFiM3f+568ivPdtaSICxxqHWp/ pQZf9ij+WeIyXgHBHv4XQViOlvSAUs0gSg84OEupKgj2CQxtQdgmjTXvlyvb A4u6+xw5xHYyQN7s4We/L/g7ocfx7Xf6KGD/cJJhfEFKRk8V+5A09AO5iS8w +B1PKRfw+yrflz8HWWg8RZO3jwBt1X6HB+i+68lDwS1D0iQUT/Nee025RSaU xlC6R3yjMJ0rhIeiY76j3K6nCf6w1IWSxHUCTT0KuQmypO+mQLQpllWRdlnI lw8hK9KuCvFcmJI01BPdqqBAIFZrjbmh0KHMfDdYlcmjF93LGVFsEDLeJaGh EDekOmS8JEMotUIa8YnGBcQaDwP1eaBQG4+tUCRlk26FLINCI1FA1vuA1he6 LeqS0qgyFN60yyqzE0lLQj6D3klw2tPpUKNPcRgx522BarJNYMPr0p7pn19J fQnhz2RcSvjC+FDQEoRvSagTIuUib0SejHpG5WALlMQOqGkNdmYsHVtnAA29 JwjVRbeip4V10e0zH6LMzy+sudGMkR2Rr3ihkH3RS7lcjXNCL3E1kN7QyLdl shkVoyERF/eCrNKV5y0OBVlskSuMzNbnCp8R9qmsnesgy4WSo/eaSG8/azP9 pgFTpNeM6Zr5iYHG3DuNmnBGfTrjfI/cYzSYFVoAQC6YsXJPvkQv7pEyQF17 C4OvGihLxODLBgzQ3MezboHukqWsZsNY3WnACi2StMAKuQB6AZKHlfTJrqhV gawQhJQVGhyHYzV/f7Ia6j2KJT/HdX/2duxU+PZL8GYFmmvV2azI0VIDVfBt a5OE3eHYTTD/rgeaeu4oGLsTsptg4Rss28Rgbw2QymrvsHI7uPcp5XZ661x8 0CiKro1rIYVvUuE0d8vVN3AShOa3ZwDywLMMhNZSFgHtRCAuut1DzUs1gVf4 Aqefdg5uSWg23vGK627/FimFNgj8KDNeCeL2mjpPzo3u1/h3OBKsnR25XVz2 GQEsygyhsIs70NJFWr+i2b+Rpuuegf/L/J1FMPzZisxWPjvdvUZ4aGVZijdD eGihQoqSRjJGf5gfdtteCtYlx7hOeKg3SPFOER4asgKb+A9bHHettcDyaG3V V34hJ1bOEz3CVJa6KSqVMf6XCpevKtnnp6oCH1cVSN+iG/1HzuCm8suUyl4v YuV71jwdHfofcG2dvw==\ \>"], ImageRangeCache->{{{94.0625, 381.063}, {239.938, 63.0625}} -> {-132.153, \ 13.0051, 1.35452, 0.730551}}], Cell["One LFSR with a non-linear output.", "NumberedFigure", PageBreakAbove->False, TextAlignment->Center, TextJustification->0] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\t", "Problems" }], "Section", PageBreakAbove->False, CellTags->"SectShift Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be binary, periodic sequence of period 17, starting with the sequence \ 01101000110001011. To which extent does ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " satisfy ", ButtonBox["Golomb's Randomness Postulates", BaseStyle->"Hyperlink", ButtonData:>"PostShift Golomb"], "? \n(Note for the interested reader. The sequence above has its ones at the \ positions corresponding to the ", ButtonBox["quadratic residues", BaseStyle->"Hyperlink", ButtonData:>"DefAppA QR"], " modulo 17 (see also ", ButtonBox["input", BaseStyle->"Hyperlink", ButtonData:>"InputAppA ListQuadRes"], " line above Theorem A.21). The parameters that arise when checking ", ButtonBox["G3", BaseStyle->"Hyperlink", ButtonData:>"PostShift Golomb"], " can be predicted by ", ButtonBox["Theorem A.22", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA chi(u)chi(u+k)"], " and ", ButtonBox["Corollary A.24", BaseStyle->"Hyperlink", ButtonData:>"CorAppA Chi(-1)"], ")" }], "Problem", GeneratedCell->True, TextAlignment->Left, TextJustification->0], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nExpress the polynomial ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["x", "m"], "-", "1"}], ",", RowBox[{ SuperscriptBox["x", "n"], "-", "1"}]}], ")"}], TraditionalForm]]], " in terms of ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"gcd", "(", RowBox[{"m", ",", "n"}], ")"}], TraditionalForm]]], ". (See also ", ButtonBox["Problem A.3", BaseStyle->"Hyperlink", ButtonData:>"ProbAppA gcd a^m-1 a^n-1"], ".)" }], "Problem", GeneratedCell->True], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["v", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be the output sequences of binary LFSR's of length ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{"m", ",", RowBox[{"n", "\[GreaterEqual]"}]}], TraditionalForm]]], "2. Assume that ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["v", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " are both ", ButtonBox["PN", BaseStyle->"Hyperlink", ButtonData:>"DefShift PN Seq"], " sequences and that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{"m", ",", " ", "n"}], ")"}], "=", "1"}], TraditionalForm]]], ". Hence, also ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"gcd", "(", RowBox[{ RowBox[{ SuperscriptBox["2", "m"], "-", "1"}], ",", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}]}], ")"}], "=", "1"}], TraditionalForm]]], "(see ", ButtonBox["Problem A.3", BaseStyle->"Hyperlink", ButtonData:>"ProbAppA A.3"], "). Let the sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["w", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be defined by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["w", "i"], "=", RowBox[{ SubscriptBox["u", "i"], SubscriptBox["v", "i"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], ", and let ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " be the period of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["w", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "." }], "Problem", GeneratedCell->True], Cell[TextData[{ "a)\tProve that ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is a divisor of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["2", "m"], "-", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], ")"}]}], TraditionalForm]]], ".\nb)\tHow many zeros and how many ones appear in a subsequence of length ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["2", "m"], "-", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], ")"}]}], TraditionalForm]]], " in the \n\tsequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["w", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "?\nc)\tProve that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["2", "m"], "-", "1"}], ")"}], RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], ")"}], "/", "p"}]}], TraditionalForm]]], " must divide the two numbers determined in ii).\nd)\tProve that ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["2", "m"], "-", "1"}], ")"}], RowBox[{"(", RowBox[{ SuperscriptBox["2", "n"], "-", "1"}], ")"}]}]}], TraditionalForm]]], ".\ne)\tHow many gaps of length 1 does the ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["w", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "-sequence have per period when ", Cell[BoxData[ FormBox[ RowBox[{"m", ",", RowBox[{"n", "\[GreaterEqual]", "4"}]}], TraditionalForm]]], "?" }], "Problem", CounterIncrements->"Non"], Cell[CellGroupData[{ Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " be the binary sequence defined by" }], "Problem"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "i"], "=", RowBox[{"{", RowBox[{GridBox[{ { RowBox[{"1", ","}]}, { RowBox[{"0", ","}]} }], GridBox[{ {" "}, {" "} }], GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", "i"}], "=", RowBox[{ SuperscriptBox["2", "l"], "-", "1"}]}], ",", RowBox[{"l", "\[Element]", "\[DoubleStruckCapitalN]"}], ","}]}, { RowBox[{ RowBox[{"otherwise", "."}], " "}]} }]}]}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "So, the ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " starts like 11010001000000010. Let ", Cell[BoxData[ FormBox[ SubscriptBox["L", "k"], TraditionalForm]]], " be the ", ButtonBox["linear complexity", BaseStyle->"Hyperlink", ButtonData:>"DefShift Lin Compl"], " of ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["s", RowBox[{"k", "-", "1"}]]}], TraditionalForm]]], ". Prove that " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["L", SuperscriptBox["2", "l"]], "=", SuperscriptBox["2", RowBox[{"l", "-", "1"}]]}], ",", RowBox[{"l", "\[GreaterEqual]", "1"}]}], TraditionalForm]]], "." }], "DisplayFormula"] }, Closed]], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\nLet a binary sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " have period 15 and start with 010110000101010.\nWhat is the ", ButtonBox["minimal characteristic polynomial", BaseStyle->"Hyperlink", ButtonData:>"TheoShift Min Char Pol"], " of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and what is the ", ButtonBox["linear complexity", BaseStyle->"Hyperlink", ButtonData:>"DefShift Lin Compl"], " of this sequence?" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nConsider the binary, periodic sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " determined by the period ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "12"], "-", "1"}], TraditionalForm]]], " and the values ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "0"], "=", RowBox[{ SubscriptBox["s", RowBox[{ SuperscriptBox["2", "9"], "-", "1"}]], "=", "1"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["s", "i"], "=", "0"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox["0", TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"0", "\[LessEqual]", "i", "<", RowBox[{ SuperscriptBox["2", "12"], "-", "1"}]}], ",", " ", RowBox[{"i", "\[NotEqual]", "0"}], ",", RowBox[{ SuperscriptBox["2", "9"], "-", "1"}]}], TraditionalForm]]], ".\nWhat is the ", ButtonBox["minimal characteristic polynomial", BaseStyle->"Hyperlink", ButtonData:>"TheoShift Min Char Pol"], " of ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], "? What is the ", ButtonBox["linear complexity", BaseStyle->"Hyperlink", ButtonData:>"DefShift Lin Compl"], " of this sequence?" }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["", "M"], TraditionalForm]]], "\nConsider the binary polynomials ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{"1", "+", "x", "+", SuperscriptBox["x", "3"]}]}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"g", "(", "x", ")"}], "=", RowBox[{"1", "+", SuperscriptBox["x", "2"], "+", SuperscriptBox["x", "5"]}]}], TraditionalForm]]], ". The corresponding LFSR's are denoted by LFSR(", Cell[BoxData[ FormBox["f", TraditionalForm]]], ") resp. LFSR(", Cell[BoxData[ FormBox["g", TraditionalForm]]], "). Let ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["t", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " denote the output sequences of LFSR(", Cell[BoxData[ FormBox["f", TraditionalForm]]], ") resp. LFSR(", Cell[BoxData[ FormBox["g", TraditionalForm]]], "). \nThe sequence ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], " is defined by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["u", "i"], "=", RowBox[{ SubscriptBox["s", "i"], "+", SubscriptBox["t", "i"]}]}], ",", " ", RowBox[{"i", "\[GreaterEqual]", "0"}]}], TraditionalForm]]], ".\nThe ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "8"], TraditionalForm]]], " different initial states ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["s", "0"], ",", SubscriptBox["s", "1"], ",", SubscriptBox["s", "2"], ",", SubscriptBox["t", "0"], ",", SubscriptBox["t", "1"], ",", SubscriptBox["t", "2"], ",", SubscriptBox["t", "3"], ",", SubscriptBox["t", "4"]}], ")"}], TraditionalForm]]], " generate different periodic sequences ", Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"{", SubscriptBox["u", "i"], "}"}], RowBox[{"i", "\[GreaterEqual]", "0"}]], TraditionalForm]]], ".\nWhat are the cycle lengths (=", ButtonBox["periods", BaseStyle->"Hyperlink", ButtonData:>"DefShift Period"], ") of these periodic sequences? Give an initial state of each cycle." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nConsider the binary shift register depicted in the figure below.\n" }], "Problem"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .4 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.230849 0.0414079 0.0730159 0.0529101 [ [ 0 0 0 0 ] [ 1 .4 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 0 m 1 0 L 1 .4 L 0 .4 L closepath clip newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.014 0 moveto -0.02 -0.005 lineto 0 0 lineto -0.02 0.005 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .18944 .00952 m .27226 .00952 L .27226 .13651 L .18944 .13651 L .18944 .00952 L s gsave .23085 .07302 -73.6563 -11.6875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 23.375 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 19.375000 moveto 464.000000 19.375000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 19.375000 lineto closepath clip newpath 63.000000 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 69.562500 17.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 74.312500 17.750000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 79.062500 17.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 69.562500 10.125000 moveto (H) show 74.312500 10.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 79.062500 10.125000 moveto (L) show 84.312500 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Math2Mono %%+ font Courier grestore gsave .27226 .31111 -73.6563 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 69.562500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 74.312500 15.562500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 79.062500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 84.312500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .35507 .07302 m .27226 .07302 L s % Start of user PostScript 3. 0 1. 0 MAarrowhead1 % End of user PostScript .31366 .20529 m .31366 .12593 L s % Start of user PostScript 2. 2.5 2. 1. MAarrowhead1 % End of user PostScript .31366 .12593 m .31366 .07302 L s .31366 .39048 m .31366 .32698 L s % Start of user PostScript 2. 6. 2. 4.8 MAarrowhead1 % End of user PostScript .31366 .32698 m .31366 .28466 L s .31366 .28466 m .35507 .20529 L s gsave .31366 .07302 -67.1875 -12.325 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .02 w .31366 .39048 Mdot .5 Mabswid .14803 .39048 m .24741 .39048 L s % Start of user PostScript -2. 6. 0.4 6. MAarrowhead1 % End of user PostScript .24741 .39048 m .31366 .39048 L s .35507 .00952 m .43789 .00952 L .43789 .13651 L .35507 .13651 L .35507 .00952 L s gsave .39648 .07302 -73.6563 -11.6875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 23.375 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 19.375000 moveto 464.000000 19.375000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 19.375000 lineto closepath clip newpath 63.000000 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 69.562500 17.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 74.312500 17.750000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 79.062500 17.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 69.562500 10.125000 moveto (H) show 74.312500 10.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 79.062500 10.125000 moveto (L) show 84.312500 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Math2Mono %%+ font Courier grestore gsave .43789 .31111 -73.6563 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 69.562500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 74.312500 15.562500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 79.062500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 84.312500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .5207 .07302 m .43789 .07302 L s % Start of user PostScript 7. 0 5. 0 MAarrowhead1 % End of user PostScript .4793 .20529 m .4793 .12593 L s % Start of user PostScript 6. 2.5 6. 1. MAarrowhead1 % End of user PostScript .4793 .12593 m .4793 .07302 L s .4793 .39048 m .4793 .32698 L s % Start of user PostScript 6. 6. 6. 4.8 MAarrowhead1 % End of user PostScript .4793 .32698 m .4793 .28466 L s .4793 .28466 m .5207 .20529 L s gsave .4793 .07302 -67.1875 -12.325 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .02 w .4793 .39048 Mdot .5 Mabswid .31366 .39048 m .41304 .39048 L s % Start of user PostScript 2. 6. 4.4 6. MAarrowhead1 % End of user PostScript .41304 .39048 m .4793 .39048 L s .4793 .39048 m .51242 .39048 L s .6118 .39048 m .64493 .39048 L s [ .001 .01 ] 0 setdash .5207 .39048 m .60352 .39048 L s .54141 .07302 m .58282 .07302 L s [ ] 0 setdash .68634 .00952 m .76915 .00952 L .76915 .13651 L .68634 .13651 L .68634 .00952 L s gsave .72774 .07302 -73.6563 -11.6875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 23.375 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 19.375000 moveto 464.000000 19.375000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 19.375000 lineto closepath clip newpath 63.000000 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 69.562500 17.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 69.562500 10.125000 moveto (H) show 74.312500 10.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 79.062500 10.125000 moveto (L) show 84.312500 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .60352 .31111 -68.9063 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 69.562500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 74.812500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .68634 .07302 m .60352 .07302 L s % Start of user PostScript 11. 0 9. 0 MAarrowhead1 % End of user PostScript .64493 .20529 m .64493 .12593 L s % Start of user PostScript 10. 2.5 10. 1. MAarrowhead1 % End of user PostScript .64493 .12593 m .64493 .07302 L s .64493 .39048 m .64493 .32698 L s % Start of user PostScript 10. 6. 10. 4.8 MAarrowhead1 % End of user PostScript .64493 .32698 m .64493 .28466 L s .64493 .28466 m .68634 .20529 L s gsave .64493 .07302 -67.1875 -12.325 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .02 w .64493 .39048 Mdot .5 Mabswid .64493 .39048 m .74431 .39048 L s % Start of user PostScript 10. 6. 12.4 6. MAarrowhead1 % End of user PostScript .74431 .39048 m .81056 .39048 L s .85197 .00952 m .93478 .00952 L .93478 .13651 L .85197 .13651 L .85197 .00952 L s gsave .89337 .07302 -73.6563 -11.6875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 23.375 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 19.375000 moveto 464.000000 19.375000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 19.375000 lineto closepath clip newpath 63.000000 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (s) show 69.562500 17.750000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 69.562500 10.125000 moveto (H) show 74.312500 10.125000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 79.062500 10.125000 moveto (L) show 84.312500 15.375000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .76915 .31111 -68.9063 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 69.562500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 74.812500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .85197 .07302 m .76915 .07302 L s % Start of user PostScript 15. 0 13. 0 MAarrowhead1 % End of user PostScript .81056 .20529 m .81056 .12593 L s % Start of user PostScript 14. 2.5 14. 1. MAarrowhead1 % End of user PostScript .81056 .12593 m .81056 .07302 L s .81056 .39048 m .81056 .32698 L s % Start of user PostScript 14. 6. 14. 4.8 MAarrowhead1 % End of user PostScript .81056 .32698 m .81056 .28466 L s .81056 .28466 m .85197 .20529 L s gsave .81056 .07302 -67.1875 -12.325 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .02 w .81056 .39048 Mdot .5 Mabswid .81056 .39048 m .90994 .39048 L s % Start of user PostScript 14. 6. 16.4 6. MAarrowhead1 % End of user PostScript .90994 .39048 m .97619 .39048 L s .97619 .39048 m .97619 .2 L s % Start of user PostScript 18. 6. 18. 2.4 MAarrowhead1 % End of user PostScript .97619 .2 m .97619 .07302 L s .97619 .07302 m .93478 .07302 L s % Start of user PostScript 18. 0 17. 0 MAarrowhead1 % End of user PostScript gsave .06522 .04656 -82.6875 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Output) show 102.375000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .93478 .31111 -75.4688 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 69.562500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 74.812500 13.875000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (=) show 81.375000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 87.937500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .14803 .07302 m .14803 .26349 L s % Start of user PostScript -2. 0 -2. 3.6 MAarrowhead1 % End of user PostScript .14803 .26349 m .14803 .39048 L s .015 w .14803 .07302 Mdot .5 Mabswid .18944 .07302 m .02381 .07302 L s % Start of user PostScript -1. 0 -5. 0 MAarrowhead1 % End of user PostScript % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{303.25, 121.125}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztXG1TEzEQPnp9Q0R8AWk7AxZERVopMr6gP0AdZ/wHfukwzsAHxUG++Osr SUtyd302t7mk0MN0mGvYbPbZffK2bXP3bXhx8uPn8OL0eNj9fD78fXJ6/Kf7 6ez8UhQvRNHCIIqiv91IlEeXxclldPk3OhAXIcHlD+KtI9RbqvRVlNpp2VpC PYqjsX1pKHrsIPsCZGsO9h4FN4ObwU0PbkoTsmarHA6jqm45XK8orquiVJE6 8bhu8tIqUl5lKj8oBwEJ/8W79D+qpjSvwqqoUlRLKVwZyK9Lu5Br8P5t4jDG 4rpHQh/+L3wlRg633eqt4Gby0vMxs/7ExtrMNCYNlHntSms2mLMEyfRIywDV xFXvCAyHa5SputEU4k23uMsEbxhbTG2Ebxg0iheiFnUBcqlO2ZMcVZlUIA+W bEjJeGCgB6WOyISmEW94hBU5wZHriKhMzkLsD4vK7r4RgUtiU1m5Mxs6dWKV wwHFZH1yTcoS/iC3JSaaeU0Ds00zTt/OjbEHROh0h5H2F7lh5nRRX01H5ARy dtE4gWsGRrkrN4lKrqC2qLsevER+SFqWyUHLB0STAdGSt97LQXyoaJM6chPs ULIaFRaRhzVVy0o+wj3VYjJDZNWmKCXWnCmMbBIxRotwEjjCW3CzkGl+j21n BmjxwUW5Vch43TLsJmljaqmYop1cZtGYovUKd+eVC9wJNS8riTNvxVYX//2H 9t7J4HkFqtAeRvRrDIYAN4mQ/9HZDMZCtNHU+8oS8rxiMFAgb0Bz3ooEb/2O sj88rMnQrTJgbvZuzujtM2/byMxZuSmLRdZQNHPShcgNhOW7MxHGgOmfjw7m xj1XXY3dQAsEd9Ggu5ofMsJy797riZVIUrlhznQST3mFsgL3+YuJRlizmbNe w5zVPLHsVPTNGDcE1NaFefSFsIsvgZ5AT6An0BPoCfQEegI9gZ5Az+zo0T9+ cX+B9k2KvQdFqOgoAA3VoUDJcNqUFfSLlcGlfWVioEoHoPTazmxWpgDidGkf 6FlCIYqyZik9rizAB/gAH+ADfIAP8AF+vuBRHrwNZChbddEjcRPHXWAQHx24 QVw/nVtQdEzTGTS+ZtBndkP0yDP881LBv/cM/6JU8O88w++WCv6tZ/iX7vAu W5MBvifeZI1vyvdoUH1KEoG6RMoC9d27vaKgLpEaQNGQOvQcc98d3iV6S3j0 TZRL9AjDEt4lekv4A8/RI5klvEv0lvAu+TvXzXJ9zAjw1wQvb9qwv9eRbGa+ 23JH1aIDaubaDVW7Yhfik4yMAkCHLFFbfacpOtC3o2rRR1b08QYdYtsAuJZh d8R1fAyumuqiaOopCQwi2spathbZw0fltpQN+gg+oJ+8GQQR1zJELTtk7Fp6 0DZoFttARp/Xz+exBWToaKLpuGqXaQMxuukQzzqQofsUY8WzaTQYvlRApC8b Zx2iddk4yBER+jY3tD6QLcjZThImRUsu5OBm6FEALUv9TYM++sHXVn/doN9w HTl60UOhtY21erFBbptr9bKzUsxx32lAbz7c2FPzg17y5zEtumF4fVKC+8FI t7A80nAjUIM0aDj/EeADfIAP8AF+ukrKMnfo6pKuRfuXwSz5qCp50zU6s7mq avtGPW2F+4ispJu/RAXzyX72CjINOxOlSRb4HQSlSz1VOiqkHi38A1viINI= \ \>"], ImageRangeCache->{{{0, 302.25}, {120.125, 0}} -> {-5.65302, -1.38004, \ 0.080417, 0.062935}}], Cell[TextData[{ "\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", "i", ")"}]], "=", RowBox[{"(", RowBox[{ SubsuperscriptBox["s", RowBox[{"n", "-", "1"}], RowBox[{"(", "i", ")"}]], ",", SubsuperscriptBox["s", RowBox[{"n", "-", "2"}], RowBox[{"(", "i", ")"}]], ",", "\[Ellipsis]", ",", SubsuperscriptBox["s", "1", RowBox[{"(", "i", ")"}]], ",", SubsuperscriptBox["s", "0", RowBox[{"(", "i", ")"}]]}], ")"}]}], TraditionalForm]]], " be the state of the shift register at time ", Cell[BoxData[ FormBox[ RowBox[{"i", ",", RowBox[{"i", "\[GreaterEqual]", "0"}]}], TraditionalForm]]], ".\na)\tGive the ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Times]", "n"}], TraditionalForm]]], " matrix ", Cell[BoxData[ FormBox["T", TraditionalForm]]], " satisfying ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", RowBox[{"i", "+", "1"}], ")"}]], "=", SuperscriptBox[ StyleBox[ RowBox[{"T", StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]]}]], RowBox[{"(", "i", ")"}]]}], TraditionalForm]]], "for all ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], ".\nb)\tProve that the characteristic equation of ", Cell[BoxData[ FormBox["T", TraditionalForm]]], " over \[DoubleStruckCapitalR] is given by" }], "Problem", CounterIncrements->"None"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Lambda]", "n"], "=", RowBox[{ RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "1"}]], SuperscriptBox["\[Lambda]", RowBox[{"n", "-", "1"}]]}], "+", RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "2"}]], SuperscriptBox["\[Lambda]", RowBox[{"n", "-", "2"}]]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["c", "1"], "\[Lambda]"}], "+", "1."}]}], TraditionalForm]]]], "DisplayFormula"], Cell["c)\tFrom matrix theory we may conclude that over", "Problem", CounterIncrements->"None"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["T", "n"], "=", RowBox[{ RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "1"}]], SuperscriptBox["T", RowBox[{"n", "-", "1"}]]}], "+", RowBox[{ SubscriptBox["c", RowBox[{"n", "-", "2"}]], SuperscriptBox["T", RowBox[{"n", "-", "2"}]]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["c", "1"], "T"}], "+", "I"}]}], ","}], TraditionalForm]]]], "NumberedEquation"], Cell[TextData[{ "\twhere ", Cell[BoxData[ FormBox["I", TraditionalForm]]], " is the ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[Times]", "n"}], TraditionalForm]]], " identity matrix. \n\tSince all elements in (3.13) are integer, equation \ (3.13) also holds modulo 2.\n\tDerive a recurrence relation between ", Cell[BoxData[ FormBox[ SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", RowBox[{"i", "+", "n"}], ")"}]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", RowBox[{"i", "+", "n", "-", "1"}], ")"}]], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Ellipsis]", " ", ",", SuperscriptBox[ StyleBox["s", FontVariations->{"Underline"->True}], RowBox[{"(", RowBox[{"i", "+", "1"}], ")"}]]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ SuperscriptBox[ StyleBox["s", FontSize->12, FontWeight->"Plain", FontSlant->"Italic", FontVariations->{"StrikeThrough"->False, "Underline"->True}, FontColor->GrayLevel[0]], RowBox[{"(", "i", ")"}]], TraditionalForm]]], ".\nd)\tWhich LFSR of length ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " gives the same output sequence as the above shift register? \n\tWhat does \ the initial state have to be in this LFSR to generate the same output \ sequence?" }], "Problem", CounterIncrements->"None"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", RowBox[{ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], RowBox[{"(", SuperscriptBox["2", "3"], ")"}]}]}], TraditionalForm]]], " be a zero of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ SuperscriptBox["x", "3"], "+", "x", "+", "1"}]}], TraditionalForm]]], ". So, by ", ButtonBox["Theorem B.30", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB F(conj)=0"], "," }], "Problem", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"f", "(", "x", ")"}], "=", RowBox[{ RowBox[{"(", RowBox[{"x", "-", "\[Alpha]"}], ")"}], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "2"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "4"]}], ")"}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ ButtonBox[ SuperscriptBox["f", "*"], BaseStyle->"Hyperlink", ButtonData:>"DefShift Reciprocal"], RowBox[{"(", "x", ")"}]}], "="}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "3"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "5"]}], ")"}], RowBox[{"(", RowBox[{"x", "-", SuperscriptBox["\[Alpha]", "6"]}], ")"}]}], "=", RowBox[{ RowBox[{"(", RowBox[{"1", "-", "\[Alpha]x"}], ")"}], RowBox[{"(", RowBox[{"1", "-", RowBox[{ SuperscriptBox["\[Alpha]", "2"], "x"}]}], ")"}], RowBox[{"(", RowBox[{"1", "-", RowBox[{ SuperscriptBox["\[Alpha]", "4"], "x"}]}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Prove that ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["\[CapitalOmega]", BaseStyle->"Hyperlink", ButtonData:>"DefShift Omega"], RowBox[{"(", "f", ")"}]}], TraditionalForm]]], " consists of all sequences" }], "Problem", CounterIncrements->"Non"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{" ", RowBox[{ SubsuperscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], "\[Infinity]"], RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"a", ".", SuperscriptBox["\[Alpha]", "i"]}], "+", RowBox[{ SuperscriptBox["a", "2"], ".", SuperscriptBox["\[Alpha]", RowBox[{"2", "i"}]]}], "+", RowBox[{ SuperscriptBox["a", "4"], ".", SuperscriptBox["\[Alpha]", RowBox[{"4", "i"}]]}]}], ")"}], SuperscriptBox["x", "i"]}]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Element]", RowBox[{"GF", "(", SuperscriptBox["2", "3"], ")"}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "(Hint: use ", ButtonBox["Corollary 3.5", BaseStyle->"Hyperlink", ButtonData:>"CorShift S=u/f"], " and use the partial fraction expansion over ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", SuperscriptBox["2", "3"], ")"}], TraditionalForm]]], ".)\nNote that the expression above can be written as ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "o"}], "\[Infinity]"], RowBox[{ RowBox[{"Tr", "(", RowBox[{"a", ".", SuperscriptBox["\[Alpha]", "i"]}], ")"}], SuperscriptBox["x", "i"]}]}], TraditionalForm]]], ", where Tr stands for the ", ButtonBox["Trace", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Trace"], " function, as introduced in Problem B.16." }], "Problem", GeneratedCell->True, CounterIncrements->"Non"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tBlock Ciphers" }], "Chapter", CellTags->"Chap Block"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tSome General Principles" }], "Section", CellTags->"SectBlock principles"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tSome Block Cipher Modes" }], "Subsection", CellTags->"SubsBlock Modes"], Cell[CellGroupData[{ Cell["Codebook Mode", "Subsubsection", CellTags->"SubsubsBlock codebook"], Cell[TextData[{ StyleBox["Block ciphers", FontSlant->"Italic"], " are ", ButtonBox["conventional", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], " cryptosystems that typically handle a fixed number of symbols at a time \ (under a given key) and do this encryption/decryption independent of past \ input blocks (see ", ButtonBox["Figure 4.1", BaseStyle->"Hyperlink", ButtonData:>"FigBlock codebook"], "). For the encryption process, the data (plaintext) enters the block cipher \ from the left and leaves it on the right as ciphertext. For the decryption, \ it is exactly the other way around." }], "Text", CellTags->"DefBlock block"], Cell[TextData[{ "In the next section we shall describe a few widely used block ciphers. At \ this moment, the particular layout of such a cipher is not so important. One \ should view it as an electronic device that can convert ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-tuples of bits to other ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-tuples at very high speeds (under a key) in such a way that the reverse \ process is only feasible if one knows the key." }], "Text"], Cell[TextData[{ "Assuming that the plaintext is a long binary file, one breaks it up in \ segments ", Cell[BoxData[ FormBox[ SubscriptBox["M", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], ", each ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " bits long. The result of the encryption of ", Cell[BoxData[ FormBox[ SubscriptBox["M", "i"], TraditionalForm]]], " is denoted by ", Cell[BoxData[ FormBox[ SubscriptBox["C", "i"], TraditionalForm]]], " and we write " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "i"], "=", RowBox[{ SubscriptBox["BC", "k"], "(", SubscriptBox["M", "i"], ")"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"i", "\[GreaterEqual]", "0"}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " is the key. The decryption process will be denoted by ", Cell[BoxData[ FormBox[ SuperscriptBox["BC", "\[LeftArrow]"], TraditionalForm]]], ", so we have ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["M", "i"], "=", RowBox[{ SubsuperscriptBox["BC", "k", "\[LeftArrow]"], "(", SubscriptBox["C", "i"], ")"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Since an ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-tuple of symbols from an alphabet \[ScriptCapitalA] can be viewed as one \ symbol from ", Cell[BoxData[ FormBox[ SuperscriptBox["\[ScriptCapitalA]", "n"], TraditionalForm]]], ", the difference between an ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-tuple from one alphabet or a single symbol from another alphabet is \ theoretically of little importance but may be of great practical value.\n\ Therefore, the key property of a block cipher is the lack of memory in the \ encryption device." }], "Text"], Cell[TextData[{ "It is clear that as long as the key remains the same, the same plaintext \ will be encrypted to the same ciphertext. For this reason, encryption in the \ mode shown in Figure 4.1 is called ", StyleBox["codebook mode", FontSlant->"Italic"], ". It is as if one uses a codebook or dictionary for the encryption. It may \ be clear that encrypting the same message twice under the same key is \ cryptographically insecure, hence, block ciphers are normally not used in \ codebook mode." }], "Text", CellTags->"DefBlock codebook"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.00125313 0.00501253 -0.230536 0.00490503 [ [.5 .13734 -27.125 -17.875 ] [.5 .13734 27.125 17.875 ] [.18421 .18639 -39.6875 -8.5 ] [.18421 .18639 39.6875 8.5 ] [.82581 .18639 -43.875 -8.5 ] [.82581 .18639 43.875 8.5 ] [.62531 .43164 -27.125 -17.875 ] [.62531 .43164 27.125 17.875 ] [.19925 .06377 -27.125 -8.5 ] [.19925 .06377 27.125 8.5 ] [.80075 .06377 -27.125 -8.5 ] [.80075 .06377 27.125 8.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .37469 .01472 m .62531 .01472 L .62531 .25997 L .37469 .25997 L .37469 .01472 L s .02381 .13734 m .37469 .13734 L s .62531 .13734 m .97619 .13734 L s .5 .60332 m .5 .39731 L s % Start of user PostScript 100. 170. 100. 128. MAarrowhead1 % End of user PostScript .5 .39731 m .5 .25997 L s gsave .5 .13734 -88.125 -21.875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 43.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 39.750000 moveto 464.000000 39.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 39.750000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Block) show 63.000000 34.937500 moveto (Cipher) show 113.250000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .18421 .18639 -100.688 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (plaintext) show 138.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .82581 .18639 -104.875 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (ciphertext) show 146.750000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .62531 .43164 -88.125 -21.875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 43.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 39.750000 moveto 464.000000 39.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 39.750000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (key) show 63.000000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (k) show 79.750000 34.937500 moveto (bits) show 113.250000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .19925 .06377 -88.125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 79.750000 16.187500 moveto (bits) show 113.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .80075 .06377 -88.125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 79.750000 16.187500 moveto (bits) show 113.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{279.875, 172.75}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztW0tv1DAQTvPYZUu3i6ClLQV1gRY4IMGNI0iI9tQD4nHjsFSgLVBRlV4R 55a/wn8McZyMve43ib3ZR6rG6m7MeDzzeTxjj71hf3A6/HI0OD08GPT3TgbH w8ODX/3dnycJKVjwvIU1z/P+9T1Rj5Nq9hUnf/G6+BKU8vpQPPZE16FG8AJP SktZvdeA9rVhv0TsW+IhW0JJUaUjCD5uCwShTbWAapGobVqCWJ2K9oeSvZ8+ ohGFuZzrJDwAsHgaluYDfkRbtzTL7doh71ua1EKULezONA04ZZxzMFckvkNB sQ2+WRpJodOD0+dcUMW+m5OP0kLLQTh5VU0wZx62RUozaXlZMvpI1F62lgZU a1HX1BHuWJpidcJ6H0jm50DVMqBtW8J8ZCnvKa/+muXEVYFkqyOD+YyM/4Lz 5pT0BLTuUN+XUhjKFzYA7TGgFaQcExCxSANR230aCiHRmNTBJ79SNTTtBcrl qo4Xx4idLszvugG3AK3nBh95FO9lVwu2WnpmCFbbNkITGtvm5b6Nu9yojrdF URSSWGNFNxHoZBWJTKLeHSfqzN0vKbdAw5ab7EU0QDm0i8wo/3HUpzKc+24d 53YWbIvHZ9HwhmrtGuKsPXsaaRF5mrFzocjxKQ5XeFU9YvrIxo79jsUf/ZhF yH4nQGO4S+D3ZF+0en2Y7bjMFVGUNdD9HqDt1msUqRehg0wZduWIyk1RWpUz ZGj1QgpUThZSBPijPm6cBZCndAgWyigcDKPCy9ztuYnuchYZK+WMnM3R1Z3K 1VlwkjCbZNVpyUCb+Vj5tlpOAw17zmailSNIyiqQZ55bOVdzvWCbRBIdTX9K lqo43rSsNsqP0rR2oZujeXb1M+SraOVA/jOPAxcag7vllsdzB3WfM96qA2C3 yHOdplllYMhItZpU9jjKTqWFTfQJZG8skdLKEa1pw4PmN/VqP1EgN7hJiFao hm6mljLjGvqLN9BpHOmRcfgr4WoGy3ykR8q1/ZPDgrZd9uYgGHVvdORRtZQP BSY6e3VJOdrzi1FVus/wnYeU7azoYh39UIO8GNGQVXYqyFvmYaI7HHQ/UgU6 Wn2r6MiGs0ETsm8JZJt6vJIian/Z0LBfRXb9zZy/gPesaWqamqbL06Ru8VQO o2iur0C95xXJE/CFrHQ+7xW9LcOpaKJUv6Up1mEDKbURyokm835M6cwBi8zs rZPMNuek1MzR5NwnZZFrKH4P5F2ZAvFBXoB+3v80rjDb9zEuKFC/MXapdiyZ zoywy8q5Teu816YNOWdJ6xHPlB8dYo32g2ffBOzfefZsKYxpeYzppj1WZ3RL YfkSqLPHKoJ0ctukJc+CUXUAezghsT6NtKXQRqODyESVjr0coV8gHhnq0E2l T0MIqRZoYFJe+fnmIDn5/J4Yu/K5P/WIw6apabqiTek/HP77irfwH4DREYU= \ \>"], ImageRangeCache->{{{0, 278.875}, {171.75, 0}} -> {-0.101283, 46.9993, \ 0.717894, 0.733627}}], Cell["\<\ Block Cipher in Codebook Mode\ \>", "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigBlock codebook"] }, Closed]], Cell[CellGroupData[{ Cell["Cipher Block Chaining", "Subsubsection", CellTags->"SubsubsBlock cipher block chaining"], Cell[TextData[{ "There are several standard methods to circumvent the problems mentioned \ above. One technique is called ", StyleBox["cipher block chaining", FontSlant->"Italic"], ". We assume again that one is encrypting a long file. Each ciphertext, say ", Cell[BoxData[ FormBox[ SubscriptBox["C", "i"], TraditionalForm]]], " at time ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", is not only transmitted to the ", "receive", "r, but it is also added coordinate-wise to the next block of plaintext ", Cell[BoxData[ FormBox[ SubscriptBox["M", RowBox[{"i", "+", "1"}]], TraditionalForm]]], ". \nTo this end, the encryption algorithm has to make use of some kind of \ memory device, commonly called a buffer. See ", ButtonBox["Figure 4.2", BaseStyle->"Hyperlink", ButtonData:>"FigBlock CBC"], " below. Of course, the buffer has to be initialized before the encryption \ process can be started." }], "Text", CellTags->"DefBlock CBC"], Cell[TextData[{ "Note that by introducing memory to this system it technically has become a ", ButtonBox["stream cipher", BaseStyle->"Hyperlink", ButtonData:>"Chap Shift"], "." }], "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.5 0.0952381 0.250157 0.117721 [ [.5 .32079 -27.125 -17.875 ] [.5 .32079 27.125 17.875 ] [.5 .07358 -38.75 -8.5 ] [.5 .07358 38.75 8.5 ] [.55714 .54446 -14.5625 -8.5 ] [.55714 .54446 14.5625 8.5 ] [.11905 .36788 -15.4375 -8.5 ] [.11905 .36788 15.4375 8.5 ] [.88095 .39731 -43.8125 -17.875 ] [.88095 .39731 43.8125 17.875 ] [.21429 .32079 -6.1875 -8.67 ] [.21429 .32079 6.1875 8.33 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.014 0 moveto -0.02 -0.008 lineto 0 0 lineto -0.02 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .30952 .25016 m .69048 .25016 L .69048 .39142 L .30952 .39142 L .30952 .25016 L s gsave .5 .32079 -88.125 -21.875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 43.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 39.750000 moveto 464.000000 39.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 39.750000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Block) show 63.000000 34.937500 moveto (Cipher) show 113.250000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .2619 .01472 m .7381 .01472 L .7381 .13244 L .2619 .13244 L .2619 .01472 L s gsave .5 .07358 -99.75 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Buffer) show 121.625000 16.187500 moveto (C) show 130.000000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 136.500000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .5 .60332 m .5 .47618 L s % Start of user PostScript 0 3. 0 1.92 MAarrowhead1 % End of user PostScript .5 .47618 m .5 .39142 L s .21429 .07358 m .21429 .2219 L s % Start of user PostScript -3. -1.5 -3. -0.24 MAarrowhead1 % End of user PostScript .21429 .2219 m .21429 .32079 L s .78571 .32079 m .78571 .17246 L s % Start of user PostScript 3. 0.6 3. -0.66 MAarrowhead1 % End of user PostScript .78571 .17246 m .78571 .07358 L s .02381 .32079 m .1381 .32079 L s % Start of user PostScript -5. 0.6 -3.8 0.6 MAarrowhead1 % End of user PostScript .1381 .32079 m .21429 .32079 L s .78571 .32079 m .9 .32079 L s % Start of user PostScript 3. 0.6 4.2 0.6 MAarrowhead1 % End of user PostScript .9 .32079 m .97619 .32079 L s .21429 .32079 m .27143 .32079 L s % Start of user PostScript -3. 0.6 -2.4 0.6 MAarrowhead1 % End of user PostScript .27143 .32079 m .30952 .32079 L s .69048 .32079 m .74762 .32079 L s % Start of user PostScript 2. 0.6 2.6 0.6 MAarrowhead1 % End of user PostScript .74762 .32079 m .78571 .32079 L s .21429 .07358 m .2619 .07358 L s .78571 .07358 m .7381 .07358 L s gsave .55714 .54446 -75.5625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (key) show 88.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .11905 .36788 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (M) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (+) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .88095 .39731 -104.813 -21.875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 43.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 39.750000 moveto 464.000000 39.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 39.750000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 79.750000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (C) show 88.125000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 94.125000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (+) show 100.125000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 106.625000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (=) show 63.000000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (BC) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 79.750000 34.937500 moveto (H) show 88.125000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (M) show 96.500000 37.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 102.500000 37.000000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (+) show 108.500000 37.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 115.000000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (,) show 123.375000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (C) show 131.750000 37.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 138.250000 34.937500 moveto (L) show 146.625000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Math2Mono %%+ font Courier grestore gsave .21429 .32079 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .025 w .78571 .32079 Mdot 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", TextAlignment->Center, TextJustification->0, ImageSize->{284.125, 175.5}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztW0tPFEEQHmb2ASgSYQ2IPFZFRQ2ReFDwoIlROCExPm4QN6iBg9EgF58H E/VkTNT4+hP+xHG7p7d6dviqZ3qZGUbZCfQ21dX16urqqp5lubG98ehJY3tz vVFf2mo829hcf15ffLrVBHk9jtMz7jjOn7oj+n6zqxq/+eNPiEZA0ukviY93 gvydEMDxnICjRHXeAtjtLvr+Ql8VrQRN2k1cA7AJOxJjoi0LSFn0XDnoBfjq ccVfJdErtffKNCp7g6RGefdyHZNtuQ3WEsoD+C5JFRlAsiACFQAbjBNCcp3i NbsiPg6JgYlYffBY2iodArAzJOViSOwIUn9Hi5SCUhVuyZEq1YSeh7S50YHy ejNksH5yazmlKF3pdIPcOmakKKOeSwJFepX2nkfG0vtG2Sb0HCyGUkgMtGYo WkvNprORWcfqgYQSTmlj65guPk9mI+GsaPURIHuL2bBCZ2yXbJfsfiErKwsU qQwTf3bRu+iW6D9EK48QQ3KYHtJ32eqcRz03C2iteSzqL37GAlngdx5IhbLW PkcfEe2GgBztYGIE9jAh3n9Ndka0ErSQDYOzADb/z7MaI7PJiqAqevqGx6PR ndWZvunRvalshAz2CK7O+OrZ/iLCBbTQrUk9GzVHAay3q56Veuz1UBGU0vch zDUOGnNaew9POZ6fXtJXPBIIXQ5HJQ2DY+970AVKatGjHSYlGAYDc9nIMIYM FphqJ/KB/OSaI7kuZsPA8rSfJ0dBDoiIHaEZqihAG2JY+W8YFnJRtGFRLY34 o7l9oq1wWgSne7CbVsTAY+oNhVTwCNArelWCWUkmQRF5JExJUScHqElA8pND xwB0825vqhGidz7ge8lSoFqnHnPZ7B1J3XqtUxdWE+8mREdh8nBCvGAJ4I30 LIBJDeQKoOwQRXWXHOwUoMe+e5EglMpp5pGBAZqGQmjw4scZj6c9AwZs803k jcajPLlTJ7UiOjMiGTqbkaCXR8jkyqiIvZlVzjaOxhlumXtJaP16ogpI+uEK yeUcErkhGzd3eKLJT9GMCr8WSQXZi1WR1kPlbZ+BsSnpR/UL6+0oCUxKQB93 5ThRWbpq0YaAR7nGiVbLV7KhwiwW7+riQaxNC4gY9yUXBk1HrzzRexOUm6hl QOk/e9JksHf0S/ASOUSkOohqHlij+ZzOdAWqbQyjn8hGenOj7BR9DcMQ1IZN boD16yf+51JYGeQZrM/rBCgl+4534sZmkqha07kdihVWJsjB6XIyygnyo5rR o+KPK3DUMLmFDrOyh9Mrx4Hhrbo7ddkqjf8KoDZyNJq1aTHJzUUOENYiYo2k UqNiB11pqAIIHcFJWVmWa2F0+cbnQQD4CHC/5Di0yloMot8ji7Gl1Cw/+z50 at9QMxiIrZAo6BBJmv4aGNzSOhGs5cP2iZr+2uI0z3IZwIbspEYkkIz6rL5g R2y0U0Wux5kaRLtrMeuPYsvVYuysPRj6QCb5xgDeq83Rmqyer4VSI5chFfub o294pFb+44dgr3n0GkB/FUYHp75Pt2U+vUP1dXhlSeGaKYzu6yQkDK5GYc1P g04uQC+lRNYlTSta2nK7EopUrO7xEroG8shQL+xYuqRCiXpeSBiJG/y+tKDc /P20C3TscZ+LsQeLNST/SPn/vZyev+jX24c=\ \>"], ImageRangeCache->{{{0, 283.125}, {174.5, 0}} -> {-5.25005, -2.22838, \ 0.0386527, 0.0312706}}], Cell["Cipher block chaining - Encryption", "NumberedFigure", CellMargins->{{Inherited, 144.313}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0], Cell[TextData[{ "The decryption process reverses the above process. The buffer has to be \ initialized with the same initial value as was used to start the encryption. \ It can be part of the secret key or a just a fixed constant. \nThe notation ", Cell[BoxData[ FormBox[ SuperscriptBox["BC", "\[LeftArrow]"], TraditionalForm]]], " in Figure 4.3 stands for the inverse of the block cipher used for \ encryption." }], "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.5 0.0952381 0.250157 0.117721 [ [.5 .32079 -14.2188 -8.5 ] [.5 .32079 14.2188 8.5 ] [.5 .07358 -38.75 -8.5 ] [.5 .07358 38.75 8.5 ] [.55714 .54446 -14.5625 -8.5 ] [.55714 .54446 14.5625 8.5 ] [.11905 .36788 -15.4375 -8.5 ] [.11905 .36788 15.4375 8.5 ] [.92857 .2737 -15.4375 -8.5 ] [.92857 .2737 15.4375 8.5 ] [.81429 .40908 -41.2813 -17.875 ] [.81429 .40908 41.2813 17.875 ] [.78571 .32079 -6.1875 -8.67 ] [.78571 .32079 6.1875 8.33 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.014 0 moveto -0.02 -0.008 lineto 0 0 lineto -0.02 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .30952 .25016 m .69048 .25016 L .69048 .39142 L .30952 .39142 L .30952 .25016 L s gsave .5 .32079 -75.2188 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (BC) show %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 79.750000 10.812500 moveto (\\254) show 87.437500 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .2619 .01472 m .7381 .01472 L .7381 .13244 L .2619 .13244 L .2619 .01472 L s gsave .5 .07358 -99.75 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Buffer) show 121.625000 16.187500 moveto (C) show 130.000000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 136.500000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .5 .60332 m .5 .47618 L s % Start of user PostScript 0 3. 0 1.92 MAarrowhead1 % End of user PostScript .5 .47618 m .5 .39142 L s .21429 .32079 m .21429 .17246 L s % Start of user PostScript -3. 0.6 -3. -0.66 MAarrowhead1 % End of user PostScript .21429 .17246 m .21429 .07358 L s .78571 .07358 m .78571 .2219 L s % Start of user PostScript 3. -1.5 3. -0.24 MAarrowhead1 % End of user PostScript .78571 .2219 m .78571 .32079 L s .02381 .32079 m .1381 .32079 L s % Start of user PostScript -5. 0.6 -3.8 0.6 MAarrowhead1 % End of user PostScript .1381 .32079 m .21429 .32079 L s .78571 .32079 m .9 .32079 L s % Start of user PostScript 3. 0.6 4.2 0.6 MAarrowhead1 % End of user PostScript .9 .32079 m .97619 .32079 L s .21429 .32079 m .27143 .32079 L s % Start of user PostScript -3. 0.6 -2.4 0.6 MAarrowhead1 % End of user PostScript .27143 .32079 m .30952 .32079 L s .69048 .32079 m .74762 .32079 L s % Start of user PostScript 2. 0.6 2.6 0.6 MAarrowhead1 % End of user PostScript .74762 .32079 m .78571 .32079 L s .21429 .07358 m .2619 .07358 L s .78571 .07358 m .7381 .07358 L s gsave .55714 .54446 -75.5625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (key) show 88.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .11905 .36788 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (C) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (+) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .92857 .2737 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (M) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (+) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .81429 .40908 -102.281 -21.875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 43.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 39.750000 moveto 464.000000 39.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 39.750000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (BC) show %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 79.750000 10.812500 moveto (\\254) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 87.437500 16.187500 moveto (H) show 95.812500 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (C) show 104.187500 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 110.187500 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (+) show 116.187500 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 122.687500 16.187500 moveto (L) show 79.750000 34.937500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (=) show 88.125000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (M) show 96.500000 37.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 102.500000 37.000000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (+) show 108.500000 37.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 115.000000 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.812500 0.000000 rmoveto 115.812500 34.937500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 124.187500 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 2.500000 0.000000 rmoveto 126.687500 34.937500 moveto (C) show 135.062500 37.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 141.562500 34.937500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Math2Mono %%+ font Courier grestore gsave .78571 .32079 -67.1875 -12.67 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .025 w .21429 .32079 Mdot 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", TextAlignment->Center, TextJustification->0, ImageSize->{288, 177.875}, ImageMargins->{{20.3125, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztW1tPE0EUXna7bVEUpFyqIBRMNCpRMRqjgJcXTVB88EUfbYgJxBgM4uUP mKiJ4D/w9gv8hbVzdndmd/nO7EzbLUW7gdnpmbPnNmfOOTPbrtV3Nl68qu9s rtdrD7brrzc219/U7m9tN0HegOMM1BzH+VNzRL/R7IZNo/nXmBONgGT3H4rb Z/HooxjA8ZyAGqE6HwFstY/+f6E/Fy2B5u0erAPYnB2J06L1BcQXPZcGvQA/ vFzxqSB6hWTPl6PUG5FqFNqXa4ZaPwGLhPIAvsvx9QEMESgC2IhGCFea60yn NcNjnVZuGMAu8KqsiNuwGKh1Q4EiN9FIbKTenJT3dkyBFNJRbn6Uk+cwG+Q6 TiFNl5xpxHBWkOTLLSia6d2pXjHZ86SxPIkX2iZ2HesNpYYM52wWzlnzOpeP zCoGI0MhCWvK2CpWi/vZfCS8IloC+bK3mg8rlDv7ZPtk+2R7kSztb1DU0jz4 s4/eR9eg042S2+9uIC3RTVVj4fXrkFiLRSe9V3ik76IlkKZA/iEptYvUewbq o4Ohqmi3BORUCw+mYC8N8dBeYDgfVvPS61FdTUX4kXw4o2MCdXjigtGcBKlK E6g9G9qmoi1uF8U8CWDsyQ86Aei6rMkdPTOpqFjKVaqShKE7smhZusXQwQk2 /W+yVqvNzZEVWuI5scopJfTJNpJlLI2gmGhJjMpdSjkI6bwcVQc91wHehGgp 3oUVJspuY6KlpVYGo+g0LigE7I+WrwFaiGcQaIsJWNRnzFsLBkvi9kQMLGjk QAH/hnyyHDMV4aQMRDBbs7AskTkINCh6ZekBBAu1pOqIosWkdIRBm7lTR8Gp UZSgLxnO2qCl+uNSi3mTBWRrXVQ4Xubc34LuzWD0WUvrAtRErvSui5yR+KWw zAuTihHBMbSfIBD1F8Hj+0IH4nHL0F2e8iRQXAzR0Sk5mkENiRnpUuw+Au1q NBRn4Tw2NPsDSwZqtaPK3rTaN2WKEkLgDkFsyXzxZFrSmwo0lT1jkxJlNBBo AmCOtiHDtPUcoyR9ghcOGU2V8wuGYo5KO6jyEQln6jPqewMqC6FJ0Ch2x1B0 yvDsy2MvFCeChZepq3mhjeOwGKmixq+VISvtK1lJqREyQSKjTO1mrT8DU0wF T0xCdCfKH6aq6PdjiL9yanKusuyl8Eq8m1UlCSf5EnWpRV/Ta1HpnNVN052J cQ9KrNRGeMxkaQE/q8ZYb0lCqdhFtY6KP2jOA0d29gCf3cM89Jj1/+x1MsuT XeOWgz7Bopg8Y8cFvaXUp1BLpouSmNoCHwd4Ba26VqkxBTvNC3dV2VLCIjfW bZDRqaMOX60d09zYQUUQefS9KIRX6V3R0BJT8QjZOUtIdrdtKhJ6x9NBy6CF gTb4OYvG7pBTOYANLehZVL+ZRxXEvsS5gcc9MW4nw10AQzpPAZgmF9wDsFUe /QAS46404DdTwFe67dsp7PWUXl0ZoojqiR9BfOCRxiJHjcHe8+jjAP0djx4e CjTCKOPJni96vh2xaA8YR2+oIBEHl9Kw5l2j1T4SjtqTtEvWlZoWlbR+UomQ VKbu2RK6GvLIUDt2LF2pQkH2vJgwhBv8v7Wg3Pz/1DF05XNfemMdHpoh+mDx Qyln4C8ZRKHI\ \>"], ImageRangeCache->{{{0, 287}, {176.875, 0}} -> {-5.26488, -2.12503, \ 0.0366891, 0.029682}}], Cell["Cipher block chaining - Decryption", "NumberedFigure", CellMargins->{{Inherited, 127.313}, {Inherited, Inherited}}, TextAlignment->Center, TextJustification->0], Cell[TextData[{ StyleBox["Remark:", FontWeight->"Bold"], "\nNote, that when ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["C", "i"], "=", SubscriptBox["C", "j"]}], TraditionalForm]]], ", for some ", Cell[BoxData[ FormBox[ RowBox[{"i", "<", "j"}], TraditionalForm]]], ", in ", ButtonBox["Figure 4.2", BaseStyle->"Hyperlink", ButtonData:>"FigBlock CBC"], ", one has that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["M", "i"], "\[CirclePlus]", SubscriptBox["C", RowBox[{"i", "-", "1"}]]}], "=", RowBox[{ SubscriptBox["M", "j"], "\[CirclePlus]", SubscriptBox["C", RowBox[{"j", "-", "1"}]]}]}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["C", RowBox[{"i", "-", "1"}]], "\[CirclePlus]", SubscriptBox["C", RowBox[{"j", "-", "1"}]]}], "=", RowBox[{ SubscriptBox["M", "i"], "\[CirclePlus]", SubscriptBox["M", "j"]}]}], TraditionalForm]]], ". This means that the modulo sum of the two previous ciphertexts is equal \ to the sum of the ciphertexts ", Cell[BoxData[ FormBox[ SubscriptBox["M", "i"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["M", "j"], TraditionalForm]]], ". In many situations this means that some information about the plaintext \ leaks away. For instance, as we can deduce from ", ButtonBox["Example 5.2", BaseStyle->"Hyperlink", ButtonData:>"ExamShann English"], " , the modulo 26 addition of two English texts (with a ", ButtonBox["Vigen\[EGrave]re Table", BaseStyle->"Hyperlink", ButtonData:>"TableClass Vigenere"], " (Table 2.3) will still have sufficient structure to enable a unique \ reversal of the addition process." }], "Text", CellTags->"RemBlock Ci=Cj"], Cell["\<\ The above observation is reason to go to longer block lengths than the ones \ most commonly in use today (being 64 bits).\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Cipher Feedback Mode", "Subsubsection", CellTags->"SubsubsBlock cipher feedback"], Cell[TextData[{ "Another way to make sure that a block cipher under the same key encrypts \ the same plaintext at different moments into different ciphertexts is called \ the ", StyleBox["cipher feedback mode", FontSlant->"Italic"], ". " }], "Text", CellTags->"DefBlock CFM"], Cell[TextData[{ "This method is depicted in ", ButtonBox["Figure 4.4", BaseStyle->"Hyperlink", ButtonData:>"FigBlock CFM"], " below, but in a more general setting. In many practical situations, for \ instance in many internet protocols, one wants to transmit only a few bits at \ a time, say ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " bits, where ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " is less than the block length of the block cipher. " }], "Text"], Cell[TextData[{ "Instead of padding the ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " bits with ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "r"}], TraditionalForm]]], " zeros in order to get an ", Cell[BoxData[ FormBox["n", TraditionalForm]]], "-tuple that can serve as input for a block cipher, one adds the ", Cell[BoxData[ FormBox["r", TraditionalForm]]], "-tuple coordinatewise modulo 2 to the ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " leftmost output bits of the block cipher. The input of the block cipher is \ given by the contents of a shift register (without feedback) that at each \ clock pulse shifts ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " positions to the left to accommodate the ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " bits of the previous ciphertext." }], "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .45 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.261905 0.0793651 0.0821429 0.0793651 [ [.46032 .12183 -23.5625 -7.4375 ] [.46032 .12183 23.5625 7.4375 ] [.46032 .24087 -45.125 -7.4375 ] [.46032 .24087 45.125 7.4375 ] [.46032 .35992 -52.3125 -7.4375 ] [.46032 .35992 52.3125 7.4375 ] [.46032 .43929 -55.9063 -7.4375 ] [.46032 .43929 55.9063 7.4375 ] [.53968 .18135 -23.5625 -7.4375 ] [.53968 .18135 23.5625 7.4375 ] [.53968 .3004 -23.5625 -7.4375 ] [.53968 .3004 23.5625 7.4375 ] [.81746 .18135 -23.5625 -7.4375 ] [.81746 .18135 23.5625 7.4375 ] [.38095 .0623 -23.5625 -7.4375 ] [.38095 .0623 23.5625 7.4375 ] [.14286 .01071 -23.5625 -7.4375 ] [.14286 .01071 23.5625 7.4375 ] [.51984 .01071 -8.53125 -7.4375 ] [.51984 .01071 8.53125 7.4375 ] [.85714 .01071 -8.53125 -7.4375 ] [.85714 .01071 8.53125 7.4375 ] [.77778 .24087 -8.53125 -7.4375 ] [.77778 .24087 8.53125 7.4375 ] [.10317 .07421 -8.53125 -7.4375 ] [.10317 .07421 8.53125 7.4375 ] [.16667 .28056 -12.7813 -7.4375 ] [.16667 .28056 12.7813 7.4375 ] [.30159 .04246 -6.1875 -8.925 ] [.30159 .04246 6.1875 5.95 ] [ 0 0 0 0 ] [ 1 .45 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.014 0 moveto -0.02 -0.008 lineto 0 0 lineto -0.02 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .2619 .08214 m .65873 .08214 L .65873 .16151 L .2619 .16151 L .2619 .08214 L s gsave .46032 .12183 -84.5625 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Output) show 106.125000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .2619 .20119 m .65873 .20119 L .65873 .28056 L .2619 .28056 L .2619 .20119 L s gsave .46032 .24087 -106.125 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Block) show 106.125000 14.625000 moveto (Cipher) show 149.250000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .2619 .32024 m .65873 .32024 L .65873 .3996 L .2619 .3996 L .2619 .32024 L s gsave .46032 .35992 -113.313 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Shift) show 106.125000 14.625000 moveto (Register) show 163.625000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .46032 .43929 -116.906 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 63.000000 14.625000 moveto (\\230) show 84.562500 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (r) show 91.750000 14.625000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 98.937500 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (bits) show 134.875000 14.625000 moveto (shift) show 170.812500 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .53968 .18135 -84.5625 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 14.625000 moveto (bits) show 106.125000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .53968 .3004 -84.5625 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (n) show 77.375000 14.625000 moveto (bits) show 106.125000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .81746 .18135 -84.5625 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (r) show 77.375000 14.625000 moveto (bits) show 106.125000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .38095 .0623 -84.5625 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (r) show 77.375000 14.625000 moveto (bits) show 106.125000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .14286 .01071 -84.5625 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (r) show 77.375000 14.625000 moveto (bits) show 106.125000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .51984 .01071 -69.5313 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (C) show 70.187500 16.500000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.500000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 76.062500 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .85714 .01071 -69.5313 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (C) show 70.187500 16.500000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.500000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 76.062500 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .77778 .24087 -69.5313 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (C) show 70.187500 16.500000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.500000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 76.062500 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .10317 .07421 -69.5313 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (M) show 70.187500 16.500000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 8.500000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 76.062500 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .16667 .28056 -73.7813 -11.4375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (key) show 84.562500 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .30159 .04246 -67.1875 -12.925 Mabsadd m 1 1 Mabs scale currentpoint translate 0 22.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 18.875000 moveto 464.000000 18.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 18.875000 lineto closepath clip newpath 63.000000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 14.625000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 14.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .38095 .16151 m .38095 .08214 L s .02381 .04246 m .19048 .04246 L s % Start of user PostScript -3. -0.5 -0.9 -0.5 MAarrowhead1 % End of user PostScript .19048 .04246 m .30159 .04246 L s .30159 .04246 m .56349 .04246 L s % Start of user PostScript 0.5 -0.5 3.8 -0.5 MAarrowhead1 % End of user PostScript .56349 .04246 m .7381 .04246 L s .7381 .04246 m .88095 .04246 L s % Start of user PostScript 6. -0.5 7.8 -0.5 MAarrowhead1 % End of user PostScript .88095 .04246 m .97619 .04246 L s .7381 .04246 m .7381 .23294 L s % Start of user PostScript 6. -0.5 6. 1.9 MAarrowhead1 % End of user PostScript .7381 .23294 m .7381 .35992 L s .7381 .35992 m .69048 .35992 L s % Start of user PostScript 6. 3.5 5.4 3.5 MAarrowhead1 % End of user PostScript .69048 .35992 m .65873 .35992 L s .30159 .08214 m .30159 .05833 L s % Start of user PostScript 0.5 0 0.5 -0.3 MAarrowhead1 % End of user PostScript .30159 .05833 m .30159 .04246 L s .06349 .24087 m .18254 .24087 L s % Start of user PostScript -2.5 2. -1. 2. MAarrowhead1 % End of user PostScript .18254 .24087 m .2619 .24087 L s .46032 .32024 m .46032 .29643 L s % Start of user PostScript 2.5 3. 2.5 2.7 MAarrowhead1 % End of user PostScript .46032 .29643 m .46032 .28056 L s .46032 .20119 m .46032 .17738 L s % Start of user PostScript 2.5 1.5 2.5 1.2 MAarrowhead1 % End of user PostScript .46032 .17738 m .46032 .16151 L s .02 w .7381 .04246 Mdot 0 0 m 1 0 L 1 .45 L 0 .45 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{365.25, 164.25}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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\ \>"], ImageRangeCache->{{{94.0625, 458.313}, {226.313, 63.0625}} -> {-7.05195, \ 1.12441, 0.0363954, 0.0363954}}], Cell["\<\ Cipher Feedback Mode\ \>", "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigBlock CFM"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\t", "An Identity Verification Protocol" }], "Subsection", CellTags->"SubsBlock Ident Ver"], Cell[TextData[{ "In this subsection, we want to give an idea how a block cipher can be used \ in an ", StyleBox["identity verification protocol", FontSlant->"Italic"], ". Such a protocol is a discussion between two parties in which one of them \ wants to convince the other that he is authentic. An application is, for \ instance, a smart card of a person, say Alice, who wants to withdraw money \ from her account through a card reader of a bank." }], "Text"], Cell["\<\ While issuing the card to Alice, the bank stores two numbers on it:\ \>", "Text"], Cell[TextData[{ "\t- the identity number ", Cell[BoxData[ FormBox[ SubscriptBox["Id", "A"], TraditionalForm]]], " of Alice,\n\t- the secret key ", Cell[BoxData[ FormBox[ SubscriptBox["k", "A"], TraditionalForm]]], " of Alice." }], "Text"], Cell[TextData[{ "The key ", Cell[BoxData[ FormBox[ SubscriptBox["k", "A"], TraditionalForm]]], " can not be accessed from the outside world; it does not even have to be \ known to Alice. The identity number can be accessed by any card reader (it \ may even be printed or written on the outside). They are related by " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ FormBox[ SubscriptBox["k", "A"], TraditionalForm], "=", RowBox[{ SubscriptBox["BC", "MK"], "(", SubscriptBox["Id", "A"], ")"}]}], TraditionalForm]]], "," }], "NumberedEquation"], Cell["\<\ where BC stands for a block cipher and MK for the bank's master key. MK is \ stored in every card reader of the bank. It would be impractical to store the \ secret keys of all customers in each card reader. The block cipher BC is also implemented on the card. \ \>", "Text"], Cell[TextData[{ "When the card is inserted into the card reader, it will be asked to present \ its identity number (", Cell[BoxData[ FormBox[ SubscriptBox["Id", "A"], TraditionalForm]]], " in our case). A genuine card reader can now compute Alice's secret key ", Cell[BoxData[ FormBox[ SubscriptBox["k", "A"], TraditionalForm]]], " from (4.1).\nThe card reader generates a random string ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " bits and presents it as a ", StyleBox["challenge", FontSlant->"Italic"], " to the card. The card returns ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["BC", SubscriptBox["k", "A"]], "(", "r", ")"}], TraditionalForm]]], " as its ", StyleBox["response", FontSlant->"Italic"], " to the card reader. The card reader simply verifies this calculation. If \ the card's answer to the challenge ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " is correct, the card reader \"knows\" that ", Cell[BoxData[ FormBox[ SubscriptBox["k", "A"], TraditionalForm]]], " is stored on the card and it will conclude that the card is authentic. \ Otherwise, it will not accept the card. " }], "Text", CellTags->"DefBlock challenge"], Cell[TextData[{ "\n", Cell[BoxData[GridBox[{ { StyleBox["Card", FontWeight->"Bold"], " ", StyleBox["Reader", FontWeight->"Bold"]}, {" ", " ", " "}, { RowBox[{ RowBox[{"knows", " ", StyleBox["k", FontSlant->"Italic"]}], StyleBox[",", FontSlant->"Italic"], StyleBox["ID", FontSlant->"Italic"]}], " ", RowBox[{"knows", " ", StyleBox["MK", FontSlant->"Italic"]}]}, {" ", OverscriptBox["\[LongRightArrow]", RowBox[{" ", StyleBox["ID", FontSlant->"Italic"], StyleBox[ RowBox[{ StyleBox[" ", FontSlant->"Italic"], " "}]]}]], " "}, {" ", " ", RowBox[{ RowBox[{"computes", " ", StyleBox["k", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{ SubscriptBox["BC", StyleBox["MK", FontSlant->"Italic"]], RowBox[{"(", "ID", ")"}]}], FontSlant->"Italic"]}]}, {" ", " ", RowBox[{ RowBox[{"generates", " ", "random", " ", StyleBox["r", FontSlant->"Italic"]}], "\n", RowBox[{"as", " ", "challenge", " ", "to", " ", "card"}]}]}, {" ", OverscriptBox["\[LongLeftArrow]", RowBox[{" ", StyleBox["r", FontSlant->"Italic"], StyleBox[ RowBox[{ StyleBox[" ", FontSlant->"Italic"], " "}]]}]], " "}, { RowBox[{ RowBox[{"computes", " ", StyleBox["c", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{ SubscriptBox["BC", StyleBox["k", FontSlant->"Italic"]], RowBox[{"(", "r", ")"}]}], FontSlant->"Italic"]}], " ", " "}, {" ", OverscriptBox["\[LongRightArrow]", RowBox[{" ", StyleBox["c", FontSlant->"Italic"], " "}]], " "}, {" ", " ", RowBox[{ RowBox[{"checks", " ", "if", " ", StyleBox["c", FontSlant->"Italic"]}], StyleBox["=", FontSlant->"Italic"], StyleBox[ RowBox[{ SubscriptBox["BC", StyleBox["k", FontSlant->"Italic"]], RowBox[{"(", "r", ")"}]}], FontSlant->"Italic"]}]} }]]], "\n\nAn identity verification protocol." }], "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigBlock identity ver"], Cell[TextData[{ "The card can use the same protocol to check that the card reader is \ genuine. It sends its challenge to the card reader. The reply by the card \ reader can only be correct if the card reader is able to compute the secret \ key ", Cell[BoxData[ FormBox[ SubscriptBox["k", "A"], TraditionalForm]]], ", i.e. if the card reader knows the bank's master key MK." }], "Text"], Cell["\<\ Normally, a Personal Identification Code (PIN) is used to link the card to \ the card holder.\ \>", "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tDES" }], "Section", CellTags->"SectBlock DES"], Cell[CellGroupData[{ Cell["DES", "Subsubsection", CellTags->"SubsubsDES DES"], Cell[TextData[{ "In 1974 the National Bureau of Standards (NBS) solicited the American \ industry to develop a cryptosystem that could be used as a standard in \ unclassified U.S. Government applications. IBM developed a system called \ LUCIFER. After being modified and simplified, this system became the ", StyleBox["Data Encryption Standard", FontSlant->"Italic"], " (", StyleBox["DES", FontSlant->"Italic"], " for short) in 1977." }], "Text", CellTags->"DefBlock DES"], Cell["\<\ Right away, DES was made available on a fast chip. This made it very suitable \ for use in large communication systems. The complete design of DES has been \ made public at the time of its introduction. This has never been done before, \ although in each textbook one can find the remark that the security of a \ cryptosystem should not depend on the secrecy of the system. \ \>", "Text"], Cell[TextData[{ "We shall not give a complete description of DES. The reader is referred to ", ButtonBox["[Konh81]", BaseStyle->"Hyperlink", ButtonData:>"RefKonh81"], ", ", ButtonBox["[MeyM82]", BaseStyle->"Hyperlink", ButtonData:>"RefMey82"], ", ", ButtonBox["[MeOoV97]", BaseStyle->"Hyperlink", ButtonData:>"RefMeOV97"], ", or ", ButtonBox["[Schn96]", BaseStyle->"Hyperlink", ButtonData:>"RefSchne96"], ".\nDES is a block cipher operating on 64 bits simultaneously (see Figure \ 4.6). \nThe key consists of eight groups of 8 bits. One bit in each of these \ groups is a parity check bit that makes the overall parity in each block odd. \ So, although the keysize appears to be 64, the effective keysize is 56 bits." }], "Text", GeneratedCell->True], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.00125313 0.00501253 -0.230536 0.00490503 [ [.5 .13734 -14.5625 -8.5 ] [.5 .13734 14.5625 8.5 ] [.18421 .18639 -39.6875 -8.5 ] [.18421 .18639 39.6875 8.5 ] [.82581 .18639 -43.875 -8.5 ] [.82581 .18639 43.875 8.5 ] [.57519 .45617 -14.5625 -8.5 ] [.57519 .45617 14.5625 8.5 ] [.47494 .35807 -52.25 -8.5 ] [.47494 .35807 52.25 8.5 ] [.19925 .06377 -31.3125 -8.5 ] [.19925 .06377 31.3125 8.5 ] [.80075 .06377 -31.3125 -8.5 ] [.80075 .06377 31.3125 8.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.03 0 moveto -0.04 -0.01 lineto 0 0 lineto -0.04 0.01 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .37469 .01472 m .62531 .01472 L .62531 .25997 L .37469 .25997 L .37469 .01472 L s .02381 .13734 m .37469 .13734 L s .62531 .13734 m .97619 .13734 L s .5 .60332 m .5 .39731 L s % Start of user PostScript 100. 170. 100. 128. MAarrowhead1 % End of user PostScript .5 .39731 m .5 .25997 L s gsave .5 .13734 -75.5625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (DES) show 88.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .18421 .18639 -100.688 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (plaintext) show 138.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .82581 .18639 -104.875 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (ciphertext) show 146.750000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .57519 .45617 -75.5625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (key) show 88.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .47494 .35807 -113.25 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (64) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 79.750000 16.187500 moveto (H) show 88.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (56) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 104.875000 16.187500 moveto (L) show 130.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (bits) show 163.500000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math2Mono %%+ font Courier grestore gsave .19925 .06377 -92.3125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (64) show 88.125000 16.187500 moveto (bits) show 121.625000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .80075 .06377 -92.3125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (64) show 88.125000 16.187500 moveto (bits) show 121.625000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{266.563, 164.625}, ImageMargins->{{0.625, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 B0+TfGo=\ \>"], ImageRangeCache->{{{94.6875, 360.25}, {264.063, 100.438}} -> {-71.4072, \ 124.342, 0.753542, 0.770056}}], Cell["The Data Encryption Standard", "NumberedFigure", PageBreakAbove->False, TextAlignment->Center, TextJustification->0], Cell[TextData[{ "DES consists of 16 identical rounds. The 64 input bits are divided into two \ halves: the 32 leftmost bits form ", Cell[BoxData[ FormBox[ SubscriptBox["L", "0"], TraditionalForm]]], " and the 32 rightmost bits form ", Cell[BoxData[ FormBox[ SubscriptBox["R", "0"], TraditionalForm]]], ".\nIn each round, a new ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " are defined by" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", "i"], "=", SubscriptBox["R", RowBox[{"i", "-", "1"}]]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "16"}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["R", "i"], "=", RowBox[{ SubscriptBox["L", RowBox[{"i", "-", "1"}]], "\[CirclePlus]", RowBox[{"f", "(", RowBox[{ SubscriptBox["R", RowBox[{"i", "-", "1"}]], ",", SubscriptBox["K", "i"]}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "16"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormBlock DES encr"], Cell[TextData[{ "Here, ", Cell[BoxData[ FormBox[ SubscriptBox["K", "i"], TraditionalForm]]], " stands for a well-defined subsequence of bits from the key ", Cell[BoxData[ FormBox["K", TraditionalForm]]], ". \nFurther, ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " is function of the previous right-half and this subkey ", Cell[BoxData[ FormBox[ SubscriptBox["K", "i"], TraditionalForm]]], ". This function is defined by means of a collection of fixed tables, called \ substitution tables. The outcome is added coordinatewise modulo 2 to ", Cell[BoxData[ FormBox[ SubscriptBox["L", RowBox[{"i", "-", "1"}]], TraditionalForm]]], ". Note that ", Cell[BoxData[ FormBox[ SubscriptBox["L", "i"], TraditionalForm]]], " is simply the previous right-half. (See Figure 4.7 below.). \nThe final \ output of DES is formed from ", Cell[BoxData[ FormBox[ SubscriptBox["L", "16"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["R", "16"], TraditionalForm]]], "." }], "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.5 0.0768049 0.341717 0.0654004 [ [.5 .37442 -6.1875 -8.5 ] [.5 .37442 6.1875 8.5 ] [.78418 .57062 -15.4375 -8.5 ] [.78418 .57062 15.4375 8.5 ] [.21582 .57062 -15.4375 -8.5 ] [.21582 .57062 15.4375 8.5 ] [.78418 .04742 -9.4375 -8.5 ] [.78418 .04742 9.4375 8.5 ] [.21582 .04742 -9.4375 -8.5 ] [.21582 .04742 9.4375 8.5 ] [.63057 .4529 -27.125 -8.5 ] [.63057 .4529 27.125 8.5 ] [.84562 .4856 -10.375 -8.5 ] [.84562 .4856 10.375 8.5 ] [.15438 .4856 -10.375 -8.5 ] [.15438 .4856 10.375 8.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.014 0 moveto -0.02 -0.008 lineto 0 0 lineto -0.02 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .4232 .34172 m .5768 .34172 L .5768 .40712 L .4232 .40712 L .4232 .34172 L s gsave .5 .37442 -67.1875 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (f) show 71.375000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .59217 .53792 m .97619 .53792 L .97619 .60332 L .59217 .60332 L .59217 .53792 L s gsave .78418 .57062 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (R) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .02381 .53792 m .40783 .53792 L .40783 .60332 L .02381 .60332 L .02381 .53792 L s gsave .21582 .57062 -76.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (L) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.375000 18.250000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (-) show 83.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 89.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .59217 .01472 m .97619 .01472 L .97619 .08012 L .59217 .08012 L .59217 .01472 L s gsave .78418 .04742 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (R) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .02381 .01472 m .40783 .01472 L .40783 .08012 L .02381 .08012 L .02381 .01472 L s gsave .21582 .04742 -70.4375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (L) show 71.375000 18.250000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (i) show 77.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .59217 .4856 m .53687 .4856 L s % Start of user PostScript 1.2 2.2 0.48 2.2 MAarrowhead1 % End of user PostScript .53687 .4856 m .5 .4856 L s .5 .4856 m .5 .43851 L s % Start of user PostScript 0 2.2 0 1.48 MAarrowhead1 % End of user PostScript .5 .43851 m .5 .40712 L s .78418 .53792 m .78418 .40058 L s % Start of user PostScript 3.7 3. 3.7 0.9 MAarrowhead1 % End of user PostScript .78418 .40058 m .78418 .30902 L s .21582 .53792 m .21582 .40058 L s % Start of user PostScript -3.7 3. -3.7 0.9 MAarrowhead1 % End of user PostScript .21582 .40058 m .21582 .30902 L s .78418 .37442 m .65975 .37442 L s % Start of user PostScript 3.7 0.5 2.08 0.5 MAarrowhead1 % End of user PostScript .65975 .37442 m .5768 .37442 L s .4232 .37442 m .29877 .37442 L s % Start of user PostScript -1. 0.5 -2.62 0.5 MAarrowhead1 % End of user PostScript .29877 .37442 m .21582 .37442 L s .78418 .30902 m .21582 .11282 L s .21582 .30902 m .78418 .11282 L s gsave .63057 .4529 -88.125 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (subkey) show 113.250000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .84562 .4856 -71.375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (32) show 79.750000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .15438 .4856 -71.375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (32) show 79.750000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .21582 .11282 m .21582 .08012 L s % Start of user PostScript -3.7 -3.5 -3.7 -4. MAarrowhead1 % End of user PostScript .78418 .11282 m .78418 .08012 L s % Start of user PostScript 3.7 -3.5 3.7 -4. MAarrowhead1 % End of user PostScript 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{279.188, 172.375}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztXP+LVFUUvzuzMzu77G5qUq1lLEUiZr8ErblasWVqkRqpubtsratsrMLS trsIgiAshiUYgiEYFmwFQiAEwiIYgiEYgiH91E/9FGH1R0xzz5n5vPdmzzve N+/tl2dvWN+c+Zz7zvmce8+59743b9w1Mj02Oj4yfeTwSPeOyZGJsSOHp7q3 fzxZgfJNxjR9W/mX6zZWLhtTO5Qrf+Xv7MEijctt9m3WmnwHUptPZfKG/dFJ 5msBe9uxXSkzuxRm99hji0V2ODrQz1BcvSdgOx2dup67fN1vs8c2izTHIPKG PRZghZT5+OS2C5hEMxeD+puOPhYxHPokcXXlL3HNYWAkKwmw3pUw4T3pyBXJ XmFhcmVfFJpUjXsX2alD37y7tJQWKNMySinIpW2oC1citK61NFBJ6dptZWYT NCtflwwKZ/0jYP3cfMC+5aziX0iDEVRkOu9Tkd1mC/wNaaBedR8F4leZZjCs vu7DT3WmqL2qpx2gt2IgMJ+Jv0hoCajrmtT6IWK3pb65N3j+cR3CaP4JaYhV wwD+gDTMqkMAfod0iFWjAH6DNMqqMTj/FdIYq46i7S+QjrJqHMDPkMZZNQHg J0gTrJoCMAdpilXHAPwI6RirjgP4AdJxVp0A8D2kE6w6CeAbSCdZNYNAv4I0 w6pTaPslpFOsOg3gC0inWXUGwGeQzrDqLIAZSGdZdS5ImaRzrDof7AOSzrPq QrBTSbrAqovBUSLpIqsuIdCPIF1ildc9B4NdZswsgEFIs6zy+ntfcAyMuQxg N6TLrPIGcGdwUI25AuB1SFdY5WXE1mCWGHMVQA+kq6yaQ6AvQppj1TW03Qjp GquuA1gH6TqrbgDohnSDVTcBrIF0k1W3AKyGdItVtwF0QrrNqjsASpDusOou AO8S7y6r7iHQew9sq3hQeCnRKH2g9JzS38ooKWOrZISSR0r2KTmrZLpSH0pV KbWoVLBS98psocwxysykzGfKLKjMncqMq8zTyuyurAnKSqKsP8qqpax1ygqp rKvKaqys4crKr+wXlF2GsjdZfnuorHkam9MFdp9F3m/gxDrsFQGTrvkzs5nZ 5WSWdkp0YfzUwjiQzD6dKlfrBGxDDPeSveejUXrWHgl6IQYRstIcZsXv/oBV SCYI67eIsjg/o/pxZUtWCi5s61TP2SNtIDbGcO9ZieheytQue2y1yJOpKoX/ j6u19kj3E9csjIN0LRMPtVnvJvZ+R2N7cca8++Bkog/SvEZkaFqwOWmP8l3y BJp/Yo/+G+0HwK76pbXvNRVmoA6jT8rYSHYkcpmJhk3QF5JF+7SbNBFGNFar kbIPW7tsze4XzEorRESzK+rNcoVU71IW6HMeGmhzXH4VqWglOj8PrIBhao3P mkqfSncVSzUHdWabBSyPM+ZpjYCVy6LlnKM3J3uV94jZMMk9XHmtdCScdySX Q/cUQ88oBLBaCFL7jiRD7YobVh0mEc7XLPgDNKZFaNqu9EXEfPbWpsdj5FWk GPMo6FZvsBMOhnKzGNZ/8YcpmFelGJUgYV1CbErYE1w4xvi/oOeYKq9HYpBr tEydsngRe8hpramxjzSnz0ub2kyee1BuS13iGr7E7on4XeJVjX+VLeNx0jKe +JXWsNq4S9XgLc4FnOstziQlwH+D4LldwF7OXMmu1mN02yH1xjer7LU3ccqZ anaU/DNWI2Y7BHub2FWP0Nz12W+pXUcMmu0Jc3mJQ3zV0cSjjtSldh8K2GpH v1vCaUpRrXKkSVM5XX4fdCQneesNJyc94r0yjNx6i0jPz0pEJMubw4kUBWyF gH1qj4UoPSJZ5hlFvAtTEjCpbr3v/iUiUn5JlqsVvBnjLNVPp4B9bo+0DRoO Ixxqryc8eumJUmk6kL4VlWKW7CklLT0d7TpDSZSkfHD1kS6aPcgHqfBcf0Ei ZZpEuD0Rb9U8pGKkki4hbaU5SCLSKZxbnWWW/aMCWfO0N89+wPuwm6Wf/9CT DDTl0UzzmqMr13MV928JmLQZcaUUx176adImPfRHwoTRBZa0prlS78VQ6z8h ju5NCUzaybkuwnHGaaujX6kDEhhP17Dpk7SjiBOn/uNkV28JRCdtHpMO7LGl zdEO9GtfjMBcf+Kse4sYovQoTqTRoblEelwkgf7/IOHeHFhaSlLm9meUlj+l BHJpC2rFlQit1LQ9G4rmKl072Mxsgmblaz1ql8D/B2Wa/gNCr35P\ \>"], ImageRangeCache->{{{94.0625, 372.25}, {704.375, 533}} -> {-10.9476, 24.1656, \ 0.0469541, 0.0551419}}], Cell["A Typical Round of DES", "NumberedFigure", PageBreakAbove->False, TextAlignment->Center, TextJustification->0, CellTags->"FigDES DES round"], Cell[TextData[{ "In Figure 4.7 one can see that the inverse algorithm of DES can be computed \ from the same scheme by simply going from the bottom to the top. Indeed, it \ follows from ", ButtonBox["(4.2)", BaseStyle->"Hyperlink", ButtonData:>"FormBlock DES encr"], " that for all ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "16"}], TraditionalForm]]] }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["R", RowBox[{"i", "-", "1"}]], "=", SubscriptBox["L", "i"]}], TraditionalForm]]], "\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["L", RowBox[{"i", "-", "1"}]], "="}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["R", "i"], "\[CirclePlus]", RowBox[{"f", "(", RowBox[{ SubscriptBox["R", RowBox[{"i", "-", "1"}]], ",", SubscriptBox["K", "i"]}], ")"}]}], "=", RowBox[{ SubscriptBox["R", "i"], "\[CirclePlus]", RowBox[{"f", "(", RowBox[{ SubscriptBox["L", "i"], ",", SubscriptBox["K", "i"]}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["\<\ Many people have criticized the decision to make DES a standard. The two main \ objections were:\ \>", "Text"], Cell["\<\ i) The effective keysize (56 bits) is too small for an organization with \ sufficient resources. An exhaustive keysearch is, at least in principle, \ possible. \ \>", "Text"], Cell[TextData[{ "ii) The design criteria of the tables used in the ", Cell[BoxData[ FormBox["f", TraditionalForm]]], "-function are not known. Statistical tests however show that these tables \ are not completely random. Maybe there is a hidden trapdoor in their \ structure." }], "Text"], Cell["\<\ During the first twenty years after the publication of the DES-algorithm no \ effective way of breaking it was published. However, in 1998, for the first \ time, a DES challenge has been broken by a more or less brute-force attack.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Triple DES", "Subsubsection", CellTags->"SubsubsDES Triple DES"], Cell[TextData[{ "When it became clear that DES could no longer be used to protect sensitive \ data, a modification was introduced, called ", StyleBox["Triple DES", FontSlant->"Italic"], ". It consists of three DES implementations in a row, except that the middle \ one is orientated the other way around. Thus, one has DES, ", Cell[BoxData[ FormBox[ SuperscriptBox["DES", "\[LeftArrow]"], TraditionalForm]]], ", and then again DES. See Figure 4.8 below." }], "Text", CellTags->"DefBlock Triple DES"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .35294 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations -0.0602241 0.00560224 -0.271709 0.00560224 [ [.21989 .09244 -14.5625 -8.5 ] [.21989 .09244 14.5625 8.5 ] [.5 .09244 -18.4063 -8.5 ] [.5 .09244 18.4063 8.5 ] [.78011 .09244 -14.5625 -8.5 ] [.78011 .09244 14.5625 8.5 ] [.30392 .28852 -22.9375 -8.5 ] [.30392 .28852 22.9375 8.5 ] [.58403 .28852 -22.9375 -8.5 ] [.58403 .28852 22.9375 8.5 ] [.86415 .28852 -22.9375 -8.5 ] [.86415 .28852 22.9375 8.5 ] [ 0 0 0 0 ] [ 1 .35294 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .13585 .0084 m .30392 .0084 L .30392 .17647 L .13585 .17647 L .13585 .0084 L s gsave .21989 .09244 -75.5625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (DES) show 88.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .41597 .0084 m .58403 .0084 L .58403 .17647 L .41597 .17647 L .41597 .0084 L s gsave .5 .09244 -79.4063 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (DES) show %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 88.125000 10.812500 moveto (\\254) show 95.812500 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore .69608 .0084 m .86415 .0084 L .86415 .17647 L .69608 .17647 L .69608 .0084 L s gsave .78011 .09244 -75.5625 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (DES) show 88.125000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .21989 .34454 m .21989 .2437 L s % Start of user PostScript 50. 110. 50. 92. MAarrowhead1 % End of user PostScript .21989 .2437 m .21989 .17647 L s .5 .34454 m .5 .2437 L s % Start of user PostScript 100. 110. 100. 92. MAarrowhead1 % End of user PostScript .5 .2437 m .5 .17647 L s .78011 .34454 m .78011 .2437 L s % Start of user PostScript 150. 110. 150. 92. MAarrowhead1 % End of user PostScript .78011 .2437 m .78011 .17647 L s .02381 .09244 m .09104 .09244 L s % Start of user PostScript 15. 65. 27. 65. MAarrowhead1 % End of user PostScript .09104 .09244 m .13585 .09244 L s .30392 .09244 m .37115 .09244 L s % Start of user PostScript 65. 65. 77. 65. MAarrowhead1 % End of user PostScript .37115 .09244 m .41597 .09244 L s .58403 .09244 m .65126 .09244 L s % Start of user PostScript 115. 65. 127. 65. MAarrowhead1 % End of user PostScript .65126 .09244 m .69608 .09244 L s .86415 .09244 m .93137 .09244 L s % Start of user PostScript 165. 65. 177. 65. MAarrowhead1 % End of user PostScript .93137 .09244 m .97619 .09244 L s gsave .30392 .28852 -83.9375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (key) show 96.500000 16.187500 moveto (1) show 104.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .58403 .28852 -83.9375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (key) show 96.500000 16.187500 moveto (2) show 104.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .86415 .28852 -83.9375 -12.5 Mabsadd m 1 1 Mabs scale currentpoint translate 0 25 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 21.000000 moveto 464.000000 21.000000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 21.000000 lineto closepath clip newpath 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (key) show 96.500000 16.187500 moveto (1) show 104.875000 16.187500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore 0 0 m 1 0 L 1 .35294 L 0 .35294 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{316.875, 111.688}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztXNtOFEEQHfa+BlTYxQsJYU1EMQYTDPIoCxp90cQ3o28bguw+EA3yrOLP +FH6L+t0zezcOD1TvXNVagPTRXV1ndNVPT3dM8O+HZ2Pj09H55Oj0eD12ejL eHL0dfDq85mtqi9Y1sJvy7J+DSwlT23RPUztn+kfdVCaZPlAFe9U010gHQaM rLrlIFBz6w3QPc3YbijwAi/wAi/wAi/wAi/wAi/wAi/wAi/wAp8bfE8dO0rT VNI1JTUido7O/txmclgycbrOdJqaaUwUVoGuDnRRPJ2upo41j2ukts/s8Y1C Wa0xWZUfKzeRG6AK6RBhRITbiRrQIeo9oLvJ5IxSXwTnuyk4Vz3O286wGahC O/OgTiBQRC7rTizHMkVDpAimaIjEM61mTB87w+GeKlpKgSZAM+rNkI7c2x+U KERtJZaJWbr5TFA6iV2zCjHxmWw5bRdVsacU6BJvSuM6sO97CMs5IawV2Iel wCinxdOdtBklFl1PQl1YiUUzGskRNDS90BhpF9U3H+2BE9qNWHJZnCwd3RhC Fz0tkywmEMRkAHRZXg/SxeTSfM9d/psSajN9oFmOu/jPixNakXF5lh27oVla y1qQclNcBD9kx92TVimmhqlPs0lFbUlHG1eEVsSGPp4VquUyLT9+MclFd4Ja SnJmFwdr1oA7sNE9q4DTRsip/dtVMtpmcu9dGTGOiQb3xuBuiuGQ0z3NZ0DH zVdOlPZ02SuP0v9541ngBV7gBV7gBV7gBV7gBV7gBV7g08An/YPTBLS/YOpO xIW4EBfiQlyIC3EhLvJxMVYFPRb6CaRJKUZEjdhehCV6s2AcMCLFDyCZGH1S BT0a+h6W6O2wk4ARkbT850eeZUJFI1QRcRrJS81rq69ohSpmctSv1upbqmoX 45iKdsgqYum8rNJSXyHwfg5r/PYCeoS97rU80J8Y913dNKD7mLHdsLLwm8D8 Q8Z2+3r4tnMiT92TpKGkppe1LnBGrxJ1lWo/O38dpRpmzG9T323UsAZ0Daau GdXZ5S1ghzbHRXBZYbZ9XqFYPUxKXzNkPnPVAq6WUqcnHVYP2L0ssF+JoWyE If130YLqxRh2q8BeH83UcCigL4rtXVJMyZrez6TJqJVV8Az89oHfw5z4Jg6x 8CjtABeXJgbnL5YOTXCsyfYKcslmNiguQrnTQbMJWoyUGJ05L4aIGpcG6sIy 0JleNLPmhLK3X8E4mcyQs2Hmvh05dbeq/vKXJLNsGLtHlw/uAnFO9oYx2kkR gG3Meu4eIy5XuztEyVHVvTNNldo1SMTBE6BDOw/92c4ktKXvmL8BpQeRNSWh laZvt+ONcNRP5O+RHv6fvHcpLsSFuBAXXBf0R8IX11oLfwFxqeFH\ \>"], ImageRangeCache->{{{94.0625, 409.938}, {557.063, 446.375}} -> {-43.4318, \ 302.565, 0.569174, 0.569174}}], Cell["Triple DES", "NumberedFigure", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "There are two interesting things to note about this design. First of all, \ the third key is the same as the first key. The effective key search is ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"2", "\[Times]", "56"}], "=", "112"}], TraditionalForm]]], " in this way. This is considered to remain secure for many years to come.\n\ The second observation is that the cipher in the middle is ", Cell[BoxData[ FormBox[ SuperscriptBox["DES", "\[LeftArrow]"], TraditionalForm]]], " instead of DES." }], "Text"], Cell["\<\ These two features make it possible to keep systems in which Triple DES is \ implemented compatible with single DES systems. Indeed, by taking the keys 1 \ and 2 the same, the above system reduces to a single DES scheme.\ \>", "Text"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tIDEA" }], "Section", CellTags->"SectBlock IDEA"], Cell["\<\ There are quite a few alternatives to DES. One reason for looking for them \ may have been the export restrictions by the American government, another, \ the costs and patent rights. Contrary to DES, which uses well chosen tables \ in each round, some of the alternatives make use of several mathematical \ primitives that are algebraically uncorrelated.\ \>", "Text"], Cell[TextData[{ StyleBox["IDEA", FontSlant->"Italic"], " ", ButtonBox["[Lai92]", BaseStyle->"Hyperlink", ButtonData:>"RefLai92"], " is such a system. The name stands for ", StyleBox["International Data Encryption Algorithm. ", FontFamily->"Times New Roman"], "IDEA also handles 64 bits at a time (see the ", ButtonBox["remark", BaseStyle->"Hyperlink", ButtonData:>"RemBlock Ci=Cj"], " in Subsection 4.1.1 about this size), but has a key of 128 bits. It \ consists of 8 identical rounds, which are depicted in ", ButtonBox["Figure 4.9", BaseStyle->"Hyperlink", ButtonData:>"FigBlock Idea"], ". The 64 bits are equally divided over four blocks of 16 bits each. These \ blocks are called ", Cell[BoxData[ FormBox[ SubscriptBox["X", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "4"}], TraditionalForm]]], ", at the input side of a typical round and ", Cell[BoxData[ FormBox[ SubscriptBox["Y", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "4"}], TraditionalForm]]], ", on the output side. The entries ", Cell[BoxData[ FormBox[ SubscriptBox["K", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "6"}], TraditionalForm]]], ", denote substrings of the key. Their composition depends on the particular \ round that has taken place. " }], "Text", GeneratedCell->True, CellTags->"DefBlock IDEA"], Cell["\<\ The mathematical primitives in IDEA operate on these 16 bits. They are the \ following operations.\ \>", "Text"], Cell[TextData[{ "\[FilledSmallCircle]\t", StyleBox["Coordinatewise XOR", FontWeight->"Bold"], " (addition modulo 2). \nIn Figure 4.9, this is depicted by \[CirclePlus]." }], "Text"], Cell[TextData[{ "In ", StyleBox["Mathematica", FontSlant->"Italic"], " the XOR can be performed with the ", ButtonBox["Mod", BaseStyle->"RefGuideLink"], " function (here shown on 4-tuples)." }], "Text"], Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0", ",", "0"}], "}"}], "+", RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}]}], ",", "2"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}]], "Output"], Cell[TextData[{ "\[FilledSmallCircle]\t", StyleBox["Addition modulo ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ SuperscriptBox["2", "16"], TraditionalForm]], FontWeight->"Bold"], ".\nIn Figure 4.9, this is depicted by a square with a plus sign in it ", Cell[BoxData[ FormBox[ RowBox[{ UnderscriptBox["\[EmptySquare]", " "], AdjustmentBox["+", BoxBaselineShift->-0.125, BoxMargins->{{-1, 1}, {0.125, -0.125}}], AdjustmentBox[".", BoxBaselineShift->-0.125, BoxMargins->{{-1, 1}, {0.125, -0.125}}]}], TraditionalForm]]] }], "Text"], Cell[TextData[{ "Interpret the two inputs as the binary representation of two integers. Add \ these integers modulo ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "16"], TraditionalForm]]], " and output the binary representation of the sum." }], "Text"], Cell[TextData[{ "In ", StyleBox["Mathematica", FontSlant->"Italic"], " this can be performed with the ", ButtonBox["FromDigits", BaseStyle->"RefGuideLink"], " and ", ButtonBox["IntegerDigits", BaseStyle->"RefGuideLink"], " functions (here shown on 4-tuples)." }], "Text"], Cell[BoxData[{ RowBox[{"a", "=", RowBox[{"FromDigits", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "1"}], "}"}], ",", "2"}], "]"}]}], "\n", RowBox[{"b", "=", RowBox[{"FromDigits", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0"}], "}"}], ",", "2"}], "]"}]}], "\n", RowBox[{"su", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", "+", "b"}], ",", "16"}], "]"}]}], "\n", RowBox[{"IntegerDigits", "[", RowBox[{"su", ",", "2"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["11"], "Output"], Cell[BoxData["14"], "Output"], Cell[BoxData["9"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "\[FilledSmallCircle]\t", StyleBox["Multiplication modulo ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "16"], "+", "1"}], TraditionalForm]], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], "\nIn Figure 4.9, this is depicted by \[CircleTimes]." }], "Text", CellTags->"DefBlock mult oper"], Cell[TextData[{ "Interpret the two inputs (binary 16-tuples) as the binary representation of \ two integers modulo the prime number ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["2", "16"], "+", "1"}], "=", "65537"}], TraditionalForm]]], ". Make an exception for the all-zero word which will be identified with the \ integer ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "16"], TraditionalForm]]], ". In this way we have a 1-1 correspondence between binary 16-tuples and the \ elements of ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "65537", "*"], TraditionalForm]]], " (see ", ButtonBox["Example B.3", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], ").\nMultiply these two integers modulo ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "16"], "+", "1"}], TraditionalForm]]], ", and output the binary representation of the product (but map ", Cell[BoxData[ FormBox[ RowBox[{"1", OverscriptBox[ OverscriptBox[ RowBox[{"0", "\[Ellipsis]0"}], "\[OverBrace]"], "16"]}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ OverscriptBox[ OverscriptBox[ RowBox[{"0", "\[Ellipsis]0"}], "\[OverBrace]"], "16"], TraditionalForm]]], "). " }], "Text", GeneratedCell->True], Cell[TextData[{ "Since, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "16"], "+", "1"}], TraditionalForm]]], " is prime, the multiplication ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Times]", "b"}], TraditionalForm]]], " (as defined above) is a one-to-one mapping for fixed ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " or ", Cell[BoxData[ FormBox["b", TraditionalForm]]], ". Below we demonstrate this again for 4-tuples. Note that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "4"], "+", "1"}], TraditionalForm]]], " is also a prime number." }], "Text"], Cell[BoxData[{ RowBox[{ RowBox[{"a", "=", RowBox[{"FromDigits", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0", ",", "1", ",", "0"}], "}"}], ",", "2"}], "]"}]}], ";", RowBox[{"b", "=", RowBox[{"FromDigits", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1", ",", "1", ",", "0"}], "}"}], ",", "2"}], "]"}]}], ";", RowBox[{"a", "=", RowBox[{"If", "[", RowBox[{ RowBox[{"a", "==", "0"}], ",", "16", ",", "a"}], "]"}]}], ";", RowBox[{"b", "=", RowBox[{"If", "[", RowBox[{ RowBox[{"b", "==", "0"}], ",", "16", ",", "b"}], "]"}]}], ";", RowBox[{"pr", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{"a", "*", "b"}], ",", "17"}], "]"}]}]}], "\n", RowBox[{ RowBox[{"pr", "=", RowBox[{"If", "[", RowBox[{ RowBox[{"pr", "==", "16"}], ",", "0", ",", "pr"}], "]"}]}], ";", RowBox[{"IntegerDigits", "[", RowBox[{"pr", ",", "2", ",", "4"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["9"], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "The reader is invited to multiply the sequences ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0", ",", "0"}], "}"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1", ",", "0"}], "}"}], TraditionalForm]]], ".\n" }], "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.54329 0.0865801 0.367877 0.0588604 [ [.11039 .60332 -7.55 0 ] [.11039 .60332 11.325 12.75 ] [.28355 .60332 -7.55 0 ] [.28355 .60332 11.325 12.75 ] [.80303 .60332 -7.55 0 ] [.80303 .60332 11.325 12.75 ] [.97619 .60332 -7.55 0 ] [.97619 .60332 11.325 12.75 ] [.11039 .01472 -7.55 -17.85 ] [.11039 .01472 11.325 -5.1 ] [.28355 .01472 -7.55 -17.85 ] [.28355 .01472 11.325 -5.1 ] [.80303 .01472 -7.55 -17.85 ] [.80303 .01472 11.325 -5.1 ] [.97619 .01472 -7.55 -17.85 ] [.97619 .01472 11.325 -5.1 ] [.02381 .54446 -20.7625 -6.375 ] [.02381 .54446 -1.8875 6.375 ] [.19697 .54446 -20.7625 -6.375 ] [.19697 .54446 -1.8875 6.375 ] [.71645 .54446 -20.7625 -6.375 ] [.71645 .54446 -1.8875 6.375 ] [.88961 .54446 -20.7625 -6.375 ] [.88961 .54446 -1.8875 6.375 ] [.37013 .36788 -20.7625 -6.375 ] [.37013 .36788 -1.8875 6.375 ] [.71645 .30902 1.8875 -6.375 ] [.71645 .30902 20.7625 6.375 ] [.11039 .54446 -6.80625 -7.5375 ] [.11039 .54446 5.56875 5.025 ] [.97619 .54446 -6.80625 -7.5375 ] [.97619 .54446 5.56875 5.025 ] [.45671 .36788 -6.80625 -7.5375 ] [.45671 .36788 5.56875 5.025 ] [.62987 .30902 -6.80625 -7.5375 ] [.62987 .30902 5.56875 5.025 ] [.28355 .54446 -6.75 -7.5375 ] [.28355 .54446 6.75 5.025 ] [.80303 .54446 -6.75 -7.5375 ] [.80303 .54446 6.75 5.025 ] [.62987 .36788 -6.75 -7.5375 ] [.62987 .36788 6.75 5.025 ] [.45671 .30902 -6.75 -7.5375 ] [.45671 .30902 6.75 5.025 ] [.45671 .4856 -6.1875 -7.5375 ] [.45671 .4856 6.1875 5.025 ] [.62987 .42674 -6.1875 -7.5375 ] [.62987 .42674 6.1875 5.025 ] [.11039 .25016 -6.1875 -7.5375 ] [.11039 .25016 6.1875 5.025 ] [.80303 .25016 -6.1875 -7.5375 ] [.80303 .25016 6.1875 5.025 ] [.28355 .1913 -6.1875 -7.5375 ] [.28355 .1913 6.1875 5.025 ] [.97619 .1913 -6.1875 -7.5375 ] [.97619 .1913 6.1875 5.025 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.014 0 moveto -0.02 -0.008 lineto 0 0 lineto -0.02 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .02 w .11039 .4856 Mdot .80303 .4856 Mdot .28355 .42674 Mdot .97619 .42674 Mdot .62987 .25016 Mdot .45671 .1913 Mdot .5 Mabswid .02381 .54446 m .06537 .54446 L s % Start of user PostScript -6. 3. -5.52 3. MAarrowhead1 % End of user PostScript .06537 .54446 m .09307 .54446 L s .19697 .54446 m .25411 .54446 L s % Start of user PostScript -4. 3. -3.34 3. MAarrowhead1 % End of user PostScript .25411 .54446 m .29221 .54446 L s .71645 .54446 m .77359 .54446 L s % Start of user PostScript 2. 3. 2.66 3. MAarrowhead1 % End of user PostScript .77359 .54446 m .81169 .54446 L s .88961 .54446 m .93117 .54446 L s % Start of user PostScript 4. 3. 4.48 3. MAarrowhead1 % End of user PostScript .93117 .54446 m .95887 .54446 L s .37013 .36788 m .41169 .36788 L s % Start of user PostScript -2. 0 -1.52 0 MAarrowhead1 % End of user PostScript .41169 .36788 m .43939 .36788 L s .47403 .36788 m .57273 .36788 L s % Start of user PostScript -0.8 0 0.34 0 MAarrowhead1 % End of user PostScript .57273 .36788 m .63853 .36788 L s .71645 .30902 m .67489 .30902 L s % Start of user PostScript 2. -1. 1.52 -1. MAarrowhead1 % End of user PostScript .67489 .30902 m .64719 .30902 L s .61255 .30902 m .51385 .30902 L s % Start of user PostScript 0.8 -1. -0.34 -1. MAarrowhead1 % End of user PostScript .51385 .30902 m .44805 .30902 L s .11039 .60332 m .11039 .57507 L s % Start of user PostScript -5. 4. -5. 3.52 MAarrowhead1 % End of user PostScript .11039 .57507 m .11039 .55623 L s .11039 .53269 m .11039 .50443 L s % Start of user PostScript -5. 2.8 -5. 2.32 MAarrowhead1 % End of user PostScript .11039 .50443 m .11039 .4856 L s .11039 .4856 m .11039 .32668 L s % Start of user PostScript -5. 2. -5. -0.7 MAarrowhead1 % End of user PostScript .11039 .32668 m .11039 .22073 L s .28355 .60332 m .28355 .49737 L s % Start of user PostScript -3. 4. -3. 2.2 MAarrowhead1 % End of user PostScript .28355 .49737 m .28355 .42674 L s .28355 .42674 m .28355 .26781 L s % Start of user PostScript -3. 1. -3. -1.7 MAarrowhead1 % End of user PostScript .28355 .26781 m .28355 .16187 L s .28355 .16187 m .59524 .10889 L s % Start of user PostScript -3. -3.5 0.6 -4.4 MAarrowhead1 % End of user PostScript .59524 .10889 m .80303 .07358 L s .11039 .4856 m .31818 .4856 L s % Start of user PostScript -5. 2. -2.6 2. MAarrowhead1 % End of user PostScript .31818 .4856 m .45671 .4856 L s .45671 .4856 m .45671 .42203 L s % Start of user PostScript -1. 2. -1. 0.92 MAarrowhead1 % End of user PostScript .45671 .42203 m .45671 .37965 L s .45671 .35611 m .45671 .25722 L s % Start of user PostScript -1. -0.2 -1. -1.88 MAarrowhead1 % End of user PostScript .45671 .25722 m .45671 .1913 L s .45671 .1913 m .7684 .1913 L s % Start of user PostScript -1. -3. 2.6 -3. MAarrowhead1 % End of user PostScript .7684 .1913 m .97619 .1913 L s .80303 .4856 m .59524 .4856 L s % Start of user PostScript 3. 2. 0.6 2. MAarrowhead1 % End of user PostScript .59524 .4856 m .45671 .4856 L s .45671 .1913 m .35281 .1913 L s % Start of user PostScript -1. -3. -2.2 -3. MAarrowhead1 % End of user PostScript .35281 .1913 m .28355 .1913 L s .28355 .42674 m .49134 .42674 L s % Start of user PostScript -3. 1. -0.6 1. MAarrowhead1 % End of user PostScript .49134 .42674 m .62987 .42674 L s .62987 .42674 m .62987 .39142 L s % Start of user PostScript 1. 1. 1. 0.4 MAarrowhead1 % End of user PostScript .62987 .39142 m .62987 .36788 L s .62987 .36788 m .62987 .33962 L s % Start of user PostScript 1. 0 1. -0.48 MAarrowhead1 % End of user PostScript .62987 .33962 m .62987 .32079 L s .62987 .29724 m .62987 .26899 L s % Start of user PostScript 1. -1.2 1. -1.68 MAarrowhead1 % End of user PostScript .62987 .26899 m .62987 .25016 L s .62987 .25016 m .31818 .25016 L s % Start of user PostScript 1. -2. -2.6 -2. MAarrowhead1 % End of user PostScript .31818 .25016 m .11039 .25016 L s .80303 .60332 m .80303 .568 L s % Start of user PostScript 3. 4. 3. 3.4 MAarrowhead1 % End of user PostScript .80303 .568 m .80303 .54446 L s .80303 .54446 m .80303 .47383 L s % Start of user PostScript 3. 3. 3. 1.8 MAarrowhead1 % End of user PostScript .80303 .47383 m .80303 .42674 L s .80303 .42674 m .80303 .26781 L s % Start of user PostScript 3. 1. 3. -1.7 MAarrowhead1 % End of user PostScript .80303 .26781 m .80303 .16187 L s .80303 .16187 m .49134 .10889 L s % Start of user PostScript 3. -3.5 -0.6 -4.4 MAarrowhead1 % End of user PostScript .49134 .10889 m .28355 .07358 L s .97619 .42674 m .7684 .42674 L s % Start of user PostScript 5. 1. 2.6 1. MAarrowhead1 % End of user PostScript .7684 .42674 m .62987 .42674 L s .62987 .25016 m .73377 .25016 L s % Start of user PostScript 1. -2. 2.2 -2. MAarrowhead1 % End of user PostScript .73377 .25016 m .80303 .25016 L s .97619 .60332 m .97619 .57507 L s % Start of user PostScript 5. 4. 5. 3.52 MAarrowhead1 % End of user PostScript .97619 .57507 m .97619 .55623 L s .97619 .53269 m .97619 .50443 L s % Start of user PostScript 5. 2.8 5. 2.32 MAarrowhead1 % End of user PostScript .97619 .50443 m .97619 .4856 L s .97619 .4856 m .97619 .34433 L s % Start of user PostScript 5. 2. 5. -0.4 MAarrowhead1 % End of user PostScript .97619 .34433 m .97619 .25016 L s .11039 .22073 m .11039 .01472 L s % Start of user PostScript -5. -2.5 -5. -6. MAarrowhead1 % End of user PostScript .80303 .07358 m .80303 .01472 L s % Start of user PostScript 3. -5. 3. -6. MAarrowhead1 % End of user PostScript .28355 .07358 m .28355 .01472 L s % Start of user PostScript -3. -5. -3. -6. MAarrowhead1 % End of user PostScript .97619 .25016 m .97619 .01472 L s % Start of user PostScript 5. -2. 5. -6. MAarrowhead1 % End of user PostScript gsave .11039 .60332 -68.55 -4 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (X) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .28355 .60332 -68.55 -4 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (X) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .80303 .60332 -68.55 -4 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (X) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (3) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .97619 .60332 -68.55 -4 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (X) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (4) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .11039 .01472 -68.55 -21.85 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Y) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .28355 .01472 -68.55 -21.85 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Y) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (2) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .80303 .01472 -68.55 -21.85 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Y) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (3) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .97619 .01472 -68.55 -21.85 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Y) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (4) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .02381 .54446 -81.7625 -10.375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (K) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (1) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .19697 .54446 -81.7625 -10.375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (K) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (2) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .71645 .54446 -81.7625 -10.375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (K) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (3) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .88961 .54446 -81.7625 -10.375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (K) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (4) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .37013 .36788 -81.7625 -10.375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (K) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (5) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .71645 .30902 -59.1125 -10.375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.75 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.750000 moveto 464.000000 16.750000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.750000 lineto closepath clip newpath 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (K) show 71.375000 15.062500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 9.937500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (6) show 77.875000 13.000000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .11039 .54446 -67.8063 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\304) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .97619 .54446 -67.8063 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\304) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .45671 .36788 -67.8063 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\304) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .62987 .30902 -67.8063 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\304) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .28355 .54446 -67.75 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\203) show 72.500000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .80303 .54446 -67.75 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\203) show 72.500000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .62987 .36788 -67.75 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\203) show 72.500000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .45671 .30902 -67.75 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\203) show 72.500000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 16.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .45671 .4856 -67.1875 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .62987 .42674 -67.1875 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .11039 .25016 -67.1875 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .80303 .25016 -67.1875 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .28355 .1913 -67.1875 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore gsave .97619 .1913 -67.1875 -11.5375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (\\305) show 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Courier grestore 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{321.875, 198.75}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztXeuPXLUVn+zMzuwm5ZFMHpBssptARJLtizYJ0DRNINndhLKBVmopUlVp oahJJQqFtBJQVahqaYXSNkCFIlD6EC0JH6p+6h/Q7yBKhNTsQvlQ/pDt+Nw7 P9/x/Oyx7/Wd3VlmlNw5a5+X7WP72D6+M79w/uzjTyycP/fYwtTc0wtPnT33 2DNTs08+3UqqrqtU1v2v9f/AVEXBy5VK+7Hc+rf8iXqolN7ww+prVJGeBLSk oKqCTgPanKA/Il+SIpD6L4SV0Y40QW59Fh15pwmvpl3MDEn7mKTN2dnOo4gN gnQEuXWS+x5yx0nuPcgdVVA9U2UPEnQm/qgn3r9teCMq5WskNylOrSOt9dnS P/1YlR3pq6ZjtibNqakpt4eao+hIx0huzdFL3rdxs+D7NFOkOtWFumZry6rN JsdgsakiZ4iOZldWnyVPvKlS2c47WmDGkXc9J91kAj1AarJK0u71xPsgMr+J RM2vW222M431BYbHzKsIvx2JmverLxlsqoCOkbRrnnhp6UOn4FD4G6REbNL7 0BNvolS2D6kv6einAH1E0nblRxe5c8j6sDOtmkF/EG01C2iJpO3MoI+ib0rW YmfaqIlujBcjwMxMa+lnESqnnan9mbFlpILOGPxSlBFrz62bqO3v/wjQ6Mg2 UConPHDKtaEh2yHbIdsh2yFbX7aStAiILbUdLMQxkjnjXUDM9XSweAiE/wL0 zTAW3wbhPwF9J4zFd0H4NqDvhbF4FISXAX0/jMVZEL4M6IdhLH4Ewl8BeiqM xXkQPgvop2EsngPhE4B+FsbiBRAuAPpFGIsXQfgtQL8JY3EBhKcB/S6MxSsg PAroD2EsLoFQr4YnAI0j9/Uwtn9Uz3GVIl7vegX9OYzFX9RzTKXIUkl8v7+G sXhTPcVFHUFBbgIkaULwVhjbv6F+xsCsCkjvg10NY/sWCNej9tYTvCthbP+u nnrTUKB/hLG4gsI1Ab2dozWFcBLQm2Es3gDhNKDLYSxeQw3cBehSGIuLkH0v oFfCWLwEwnlAF8JY/BKEjwB6MYzFz0H4OKAXwlg8i0r8MaDnw1g8A9nPA/pJ GAs9D/wa0JNhLH4AwlcBnQtj8Shq4E+AAufoCJ5CBH8lgtcUwXeL4EEOoMs8 ZDtIbGWvTp9WGrl6a87BQs4t2S6bdR9N3Bk24ZwAq4S2a2tuh12NE4Sizc26 xy65uxUkHfw5greZpN1H0hKN+bHDdrvaVlZWxYVZFYqPQXGhYOrajx0iq1sj udtgQ4a60lSbgtRlNU6kOVSXAh5Uj1v7UkhJ29jnQgapvh25ezr7QTXcnAqp HtqBj8OI2FASsYsao5JVISbyZRtehkuwQpkRtwb8FCFzUNJbE/t4m34c460+ 5WFTDpOmD3922tkyZr4CIkypQ1FDUUNRQ1FrUZSsimWymfUkvOikSNnKKbqv /3/CU7KeK6yH+L7sUzWTUCN/94LN5ptA8WWSK9Oy+E97SO6uCPLTorB9iHDX 5Gb1lKSDtpoUP3Y38HZGketVCOapMr/zRliouxB7YE87osjNFkJM8pB6OMyv v8XdDbz4xS3MbCMoWCGMXpSJUopUiBgDgXvIOhlBQlbZnGsP32mkyPqmew7w X5HMIpftiuZa5GRnOuvaxC3Xva4JnLWFmSSdKtBAgUK1IZYkVFfgnFOUu6K9 BGjIsIKOvFPFBVlNQZezmkOAuy107qwTL4IAvZWbR0D3zgDjoq++WJ22QOHJ SGoNu2R2e5KkyV8+8ZclOepF0obiSxAvR+dVddfrhnIUkblyg0q5D11QhKpA esMA1d+fKVEN5jh5pMl1E+1gCXRosIqwjaTdhsLUAW0heBJkIyWtwVjSwaxd +rbIbG2waJcVroUtif6tz14jF41rpDVB0SRFrLWfnUZQK7s75Sx+Ex1wb2q9 lU7F5W/X2cDN4NA+DskWvUrSmGXcWGLV3I+WpCsi9dmlHmOrVP+cTSv7MaPM skFhXSHeAFrWqKwCaiRtFdq77u6357T3TeDQTKrQGPrahiRVsQqHffOSpa1L 7DcbtNI+Fl59xTFmrP1ti8w2X6VyS4naizdzHBpYTgwPpHbFPAQ2HZfk9OmF z2fNRrb0bnbS3UePdJqoxEbm5sqqKXYnrTuS1PByJVQlfTWRraVLWkCsnFDJ KbIREyhU383st1CZTPq4KLTeE+2jDgFXSNnGRPj2ZEl9fUWEuveutEq7Vq2o zQnbFsUXbC1u3XPLHQ7D1mRsRjsAAbL1JfM3M8LcitxChO5DVerlCDuM8XV+ mOOk6zVQ4UZC2LGmHyWFuAOqa4/reBmFMNLkr8CONU70ZysVVk4WmGjO5mhK I42tuJj7WaSOIow7rHqsK17pyXr9tDGtuCy/dvFd66e94MA83kGqECNtg3pO wSKsew2n1MN3vougP9OVlWmrekqb3WRrBOt+wW2gZbuFq6FR2Tq9nmi9nN3T 25TTrG8Hh0Ho563vw8Q0mbnGHtqjFadrfX8IJlrexBRNe74JoItg2UEQb8Hq rPRxBJHolDLP0YsMz4cKqBRBTe1J6YlzhVUakKPHT4/44UJ27Ql1L2nLFGqk yV+fnr60GrpyUOh4rGaPHVieO5Qq9Hoac628dlp0ACzTny1N2ItV3aGcXyFp 7A2PWhdHvemwY2Yc+u2mTKh7zXUYtOy9s1pur2vBYjp3+mAKOx291oDd300o fC89HgSXYsUwlNNvhmUG4KvcXeDSyKucthIzBpqJ54tLhu9lfSyGUo8crhuW UfdCLWGSurUsqx0WxRxhPO0ROOkOci5pPF+9N6OGooaihqKGogZWlPbPL5Yj IMgX/22YDu6IhVC/+yUnt+yx/Qr42A845WbvfJXsT59xysgqon3nXphulSN6 0f7K56xFX5UOw9bc0vytTpqO/UiEy3c+AkpRo9HDvjz6W0/f+YJPLwsfXCxO 8u89GeUZNUVYhGFZbzz+d60w00Fzc6ipj5wCun59IA+h4MxyS2BcZkDU9fME yerKugxiL1DrWgG6Y9sYi674lKBINSvHOL9kwFa9TOSa/bmCyaR1WtDnCNJm 5H6e5F5NTK2V+0WSuxW5jDYVvzvNyh7mWRWxnKEy9lcc+Cw4bZunHg61p9FV tpJcCT+Tc9yrJHcfctn1C805NfCNaBYducWinPajo+jptE5o2ZFq+zpAtvS+ B+mveeq3r4CMkU4Z4wo6QMqb7tTZr271TmOv5Wt2VqjeH80pg920YJdJfKvn kqfc1EVebg9f8TSwl5x3SxZ04Fvz2+2NzGybRf+ZEUGd8xMLlGHN7StNv7Zy Q+RG9tVADK5WVAPWyPb4ua4IHh1d6FvpEVpajh2mFLNqqlW2RBW+fvUtaJ2k iaFMK26vF1V7GnbvwaUrrZK+f15uP2Z8p2wLedTFNnsbWG8KVtHcOSMOrYMX LTQfYnZAPvtFxiK9jmky4tBkAr2PXZEu0vu87mpWirVF1gBYnCUL29LjK4uz 9mh7JqgB05oA+8IDqjVy1BBUeHK0XiUdYZHXeRvIaPcpEDZT+8wSLi+312P2 vK7hp/V9B7iyO8C5e1abc5luSZQ6uTVb4TxQ1duj6EkeXqVRWdI3HvgXsmMG 56PjQbQH33tEVTnIC9VXfL4uz9ejuA63hw34XwJHyx4ie/UBY3SnesrClLku bgrmpuRS1rGEY26PvI2yY27tRcF6w+UCtL5hy1rTroW9O5C44Yn3RmR+A7nF tcJsl2DeEX7uJCozrx9icd8VX4QFzwGva9ubEV5PLM5KKNjsNOU60DMLGPXR bxfs2vhmfHx+pHa4+52krdnd78FiK3984oYfhr1py1tCzzgNKNlnTn5sjFoF 93MXHXmsmzftYlis38eeFZKyZb+1zpZDdxM85mq9Q/DqBO8wwZP+Vc9Ure/v 1TNF7ilA+04IrYwjvvHPli2i5AYofR2yayctm+YbdsBo3/WkZQ3pG4Fh2ShM Sz5vrave2lsjaTzag5Wc0bKSMwvz0bmr2Hws0BElRx1YNUfee724u8I/LHlm THemMGdIFotP/yrB06Hn75PchlEVnbnj6IWpIqZ/oP5bPUEPvEl7+Ux09THZ 2vCmetvAjCPvek66yRUV6zvE+f4m1AeR+aV+ApsWj5G0a554xP2orPs/+qZe vQ==\ \>"], ImageRangeCache->{{{94.0625, 414.938}, {260.813, 63.0625}} -> {-11.0431, \ -3.29504, 0.0406724, 0.0598267}}], Cell[TextData[StyleBox["\nOne Round in the International Data Encryption \ Algorithm (IDEA)", FontFamily->"Times New Roman"]], "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigBlock Idea"], Cell["\<\ As with DES, IDEA can be inverted by simply going through it from the bottom \ to the top.\ \>", "Text"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tFurther Remarks" }], "Section", CellTags->"SectBlock Further"], Cell[TextData[{ StyleBox["RC5", FontSlant->"Italic"], " is a scheme that is a little bit similar to IDEA. Its algebraic primitives \ are again the exclusive or and addition modulo ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "w"], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["w", TraditionalForm]]], " is the word length, but instead of the multiplication modulo ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "w"], "+", "1"}], TraditionalForm]]], ", which only works if ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", "w"], "+", "1"}], TraditionalForm]]], " is prime, RC5 makes use of cyclic shifts. " }], "Text", CellTags->"DefBlock RC5"], Cell[TextData[{ "The word length of RC5 is ", Cell[BoxData[ FormBox[ RowBox[{"2", "w"}], TraditionalForm]]], ", where the user can select ", Cell[BoxData[ FormBox["w", TraditionalForm]]], " from 16, 32, or 64. An additional advantage of RC5 is the freedom to \ choose the number of rounds in the scheme. Depending on the required speed \ and security, the user may opt for many or just a few rounds." }], "Text"], Cell[TextData[{ "In 1993 two attacks on block ciphers were published, that turned out to be \ surprisingly strong. These methods are called ", StyleBox["linear", FontSlant->"Italic"], " and ", StyleBox["differential cryptanalysis", FontSlant->"Italic"], " (see ", ButtonBox["[MatsY93]", BaseStyle->"Hyperlink", ButtonData:>"RefMatY93"], ", resp. ", ButtonBox["[BihS93])", BaseStyle->"Hyperlink", ButtonData:>"RefBihS93"], " and are in fact ", ButtonBox["known plaintext attacks", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Known Pl. Att."], ". Several proposed block ciphers were not strong enough against these \ attacks, however the DES algorithm could withstand it. Later it became clear \ that the inventors of DES were already aware of these attacks. For further \ reading we like to mention ", ButtonBox["[Knud94]", BaseStyle->"Hyperlink", ButtonData:>"RefKnud94"], "." }], "Text", GeneratedCell->True, CellTags->"DefBlock lin and diff crypt"], Cell[TextData[{ "At the time of this writing, a collection of proposals are being studied by \ the (American) National Institute of Standards and Technology (NIST for \ short) for a new industrial standard. The names of these proposals are \ CAST-256, CRYPTON, DFC, DEAL, E2, FROG, HPC, LOKI97, MAGENTA, MARS, RC6, \ RIJNDAAEL, SAFER+, SERPENT and TWOFISH (see the web page 'Advanced Encryption \ Standard' ", ButtonBox["http://csrc.nist.gov/encryption/aes/aes_home.htm", BaseStyle->"Hyperlink", ButtonData:>{ URL["http://csrc.nist.gov/encryption/aes/aes_home.htm"], None}], "). The outcome of this study is not yet clear." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectBlock Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Describe the decryption process for a block cipher used in of ", ButtonBox["cipher feedback", BaseStyle->"Hyperlink", ButtonData:>"DefBlock CFM"], " mode." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Consider a block cipher that is used in ", ButtonBox["cipher block chaining", BaseStyle->"Hyperlink", ButtonData:>"DefBlock CBC"], " mode. Suppose that during transmission, ", Cell[BoxData[ FormBox[ StyleBox[ SubscriptBox["C", "i"], FontWeight->"Bold"], TraditionalForm]]], ", the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th ciphertext block, is corrupted. How many plaintext blocks will be \ affected?\nAnswer the same question for the case of ", ButtonBox["cipher feedback", BaseStyle->"Hyperlink", ButtonData:>"DefBlock CFM"], " mode." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{" ", SuperscriptBox["", "M"]}], TraditionalForm]]], "\nWhat is the next sensible block length of ", ButtonBox["IDEA", BaseStyle->"Hyperlink", ButtonData:>"DefBlock IDEA"], ", if the same scheme and the same primitives are being used, but only the \ length of the registers is increased? (This length is 16 in IDEA.)\nWhat is \ wrong with the intermediate values?" }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tShannon Theory" }], "Chapter", PageBreakAbove->True, CellTags->"Chap Shannon"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tEntropy, Redundancy, and Unicity Distance" }], "Section", CellTags->"SectShann Entropy"], Cell[TextData[{ "In Chapter 2, we have seen that the cryptanalysis of a cryptosystem often \ depends on the structure that is present in most texts. For instance in ", ButtonBox["Table 2.1", BaseStyle->"Hyperlink", ButtonData:>"TableClass Anal Caesar"], " we could find the key 22 (or ", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{"-", "4"}], TraditionalForm], ")"}]]], ", because \"tu quoque Brute\" was the only possible plaintext that made \ sense." }], "Text"], Cell["\<\ This structure in the plaintext remains present in the ciphertext (although \ in hidden form). If the extra information arising from this structure exceeds \ our uncertainty about the key, one may be able to determine the plaintext \ from the ciphertext!\ \>", "Text"], Cell[TextData[{ "We shall first need to quantify the concept of information. Let ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " be a random variable defined on a set ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalX]", "=", RowBox[{"{", RowBox[{ SubscriptBox["x", "1"], ",", SubscriptBox["x", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["x", "n"]}], "}"}]}], TraditionalForm]]], " by the probabilities" }], "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["Pr", "\[ScriptCapitalX]"], "(", RowBox[{"X", "=", SubscriptBox["x", "i"]}], ")"}], "=", SubscriptBox["p", "i"]}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], SubscriptBox["p", "i"]}], "=", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "i"], "\[GreaterEqual]", "0"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ".\nWe shall show that " }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"J", "(", SubscriptBox["p", "i"], ")"}], "=", RowBox[{ RowBox[{"-", SubscriptBox["log", "2"]}], SubscriptBox["p", "i"]}]}], TraditionalForm]]]], "NumberedEquation", CellTags->"FormShann information"], Cell[TextData[{ "is a good measure for the amount of ", StyleBox["information", FontSlant->"Italic"], " given by the occurrence of the event ", Cell[BoxData[ FormBox[ SubscriptBox["x", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ". The base 2 in (5.1) can be replaced by other choices, but reflects our \ intuitive notions about information, as we shall see. With 2 as choice for \ the base in the logarithm the unit of information is a called a ", StyleBox["bit", FontSlant->"Italic"], "." }], "Text", CellTags->"DefShann information"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalX]", "=", RowBox[{"{", "x", "}"}]}], TraditionalForm]]], " above (so ", Cell[BoxData[ RowBox[{ FormBox[ RowBox[{"n", "=", "1"}], TraditionalForm], ")"}]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "=", "1"}], TraditionalForm]]], ". Now the occurrence of an event ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " that occurs with probability 1 (like the sun will rise again tomorrow) \ gives no information whatsoever. This corresponds nicely with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"J", "(", "1", ")"}], "=", "0"}], TraditionalForm]]], " in ", ButtonBox["(5.1)", BaseStyle->"Hyperlink", ButtonData:>"FormShann information"], ". " }], "Text"], Cell[TextData[{ "Now consider an event that occurs with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "2"}], TraditionalForm]]], ", like the specific sex of a newborn baby. So, now ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalX]", "=", RowBox[{"{", RowBox[{"b", ",", "g"}], "}"}]}], TraditionalForm]]], ". Assuming that both sexes have the same probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "2"}], TraditionalForm]]], " of occurring, such an outcome gives precisely one bit of information. For \ instance, a 1 can denote a boy and a 0 can denote a girl. This one bit of \ information is again in agreement with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"J", "(", RowBox[{"1", "/", "2"}], ")"}], " ", "=", " ", "1"}], TraditionalForm]]], " in ", ButtonBox["(5.1)", BaseStyle->"Hyperlink", ButtonData:>"FormShann information"], ". " }], "Text"], Cell[TextData[{ "If an event occurs with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "4"}], TraditionalForm]]], ", then its occurrence gives two bits of information. This is clear in the \ case that there are four possible outcomes, each with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "4"}], TraditionalForm]]], ". Each outcome can be represented by a different sequence of two bits. \nOn \ the other hand, the amount of information that an event gives, when it has a \ probability of 1/4 to occur, should be independent of the probabilities of \ the other possible outcomes. Thus, the value ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"J", " ", RowBox[{"(", RowBox[{"1", "/", "4"}], ")"}]}], " ", "=", " ", "2"}], TraditionalForm]]], " (see ", ButtonBox["(5.1)", BaseStyle->"Hyperlink", ButtonData:>"FormShann information"], ") agrees again with our intuition. Continuing in this way one gets" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"J", "(", RowBox[{"1", "/", SuperscriptBox["2", "k"]}], ")"}], "=", "k"}], TraditionalForm]]], ", \t", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "0"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShann infor 1/2^k"], Cell[TextData[{ "The ", StyleBox["expected value", FontSlant->"Italic"], " of stochastic variable ", Cell[BoxData[ FormBox[ RowBox[{"J", "(", RowBox[{ SubscriptBox["Pr", "\[ScriptCapitalX]"], "(", "X", ")"}], ")"}], TraditionalForm]]], ", defined over ", Cell[BoxData[ FormBox["\[ScriptCapitalX]", TraditionalForm]]], ", is called the ", StyleBox["entropy", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " and will be denoted by either ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"H", "(", "X", ")"}], FontSlant->"Italic"], TraditionalForm]]], " or by ", Cell[BoxData[ FormBox[ StyleBox[ RowBox[{"H", RowBox[{"(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}]}], FontSlant->"Italic"], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["p", FontVariations->{"Underline"->True}], "=", RowBox[{"(", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "n"]}], ")"}]}], TraditionalForm]]], ". Hence, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", "X", ")"}], "=", RowBox[{ RowBox[{"Exp", "(", RowBox[{"J", "(", RowBox[{ SubscriptBox["Pr", "\[ScriptCapitalX]"], "(", "X", ")"}], ")"}], ")"}], "="}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], RowBox[{"J", "(", SubscriptBox["p", "i"], ")"}]}]}], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], SubscriptBox["log", "2"], SubscriptBox["p", "i"]}]}]}], TraditionalForm]]], ":" }], "Text", CellTags->"DefShann entropy"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "=", RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], SubscriptBox["log", "2"], SubscriptBox["p", "i"]}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShann entropy"], Cell[TextData[{ "When ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "2"}], TraditionalForm]]], ", one often writes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "=", "p"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "2"], "=", RowBox[{"1", "-", "p"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"h", "(", "p", ")"}], TraditionalForm]]], " instead of ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], TraditionalForm]]], ":" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ RowBox[{"h", "(", "p", ")"}], FontSlant->"Italic"], "=", RowBox[{ RowBox[{ RowBox[{"-", RowBox[{"p", ".", SubscriptBox["log", "2"]}]}], "p"}], "-", RowBox[{ RowBox[{"(", RowBox[{"1", "-", "p"}], ")"}], ".", RowBox[{ SubscriptBox["log", "2"], "(", RowBox[{"1", "-", "p"}], ")"}]}]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "p", "\[LessEqual]", "1"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShann entropy n=2"], Cell[TextData[{ "Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"x", ".", SubscriptBox["log", "2"]}], "x"}], TraditionalForm]]], " tends to 0 for ", Cell[BoxData[ FormBox[ RowBox[{"x", "\[RightArrow]", "0"}], TraditionalForm]]], ", there are no real problems with the definition and the continuity of the \ entropy function ", Cell[BoxData[ FormBox[ RowBox[{"H", RowBox[{"(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}]}], TraditionalForm]]], " when some of the probabilities are 0 (or 1).\nThe function ", Cell[BoxData[ FormBox[ RowBox[{"h", "(", "p", ")"}], TraditionalForm]]], " is depicted below (with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["Plot", BaseStyle->"RefGuideLink"], ")." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=."}], ";", RowBox[{ RowBox[{"Entropy", "[", "p_", "]"}], "=", RowBox[{ RowBox[{ RowBox[{"-", "p"}], "*", RowBox[{"Log", "[", RowBox[{"2", ",", "p"}], "]"}]}], "-", RowBox[{ RowBox[{"(", RowBox[{"1", "-", "p"}], ")"}], RowBox[{"Log", "[", RowBox[{"2", ",", RowBox[{"1", "-", "p"}]}], "]"}]}]}]}], ";"}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"Plot", "[", RowBox[{ RowBox[{"Entropy", "[", "x", "]"}], ",", RowBox[{"{", RowBox[{"x", ",", "0", ",", "1"}], "}"}]}], "]"}]], "Input"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.952381 0.0147151 0.588604 [ [.21429 .00222 -9 -9 ] [.21429 .00222 9 0 ] [.40476 .00222 -9 -9 ] [.40476 .00222 9 0 ] [.59524 .00222 -9 -9 ] [.59524 .00222 9 0 ] [.78571 .00222 -9 -9 ] [.78571 .00222 9 0 ] [.97619 .00222 -3 -9 ] [.97619 .00222 3 0 ] [.01131 .13244 -18 -4.5 ] [.01131 .13244 0 4.5 ] [.01131 .25016 -18 -4.5 ] [.01131 .25016 0 4.5 ] [.01131 .36788 -18 -4.5 ] [.01131 .36788 0 4.5 ] [.01131 .4856 -18 -4.5 ] [.01131 .4856 0 4.5 ] [.01131 .60332 -6 -4.5 ] [.01131 .60332 0 4.5 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath 0 g .25 Mabswid .21429 .01472 m .21429 .02097 L s [(0.2)] .21429 .00222 0 1 Mshowa .40476 .01472 m .40476 .02097 L s [(0.4)] .40476 .00222 0 1 Mshowa .59524 .01472 m .59524 .02097 L s [(0.6)] .59524 .00222 0 1 Mshowa .78571 .01472 m .78571 .02097 L s [(0.8)] .78571 .00222 0 1 Mshowa .97619 .01472 m .97619 .02097 L s [(1)] .97619 .00222 0 1 Mshowa .125 Mabswid .07143 .01472 m .07143 .01847 L s .11905 .01472 m .11905 .01847 L s .16667 .01472 m .16667 .01847 L s .2619 .01472 m .2619 .01847 L s .30952 .01472 m .30952 .01847 L s .35714 .01472 m .35714 .01847 L s .45238 .01472 m .45238 .01847 L s .5 .01472 m .5 .01847 L s .54762 .01472 m .54762 .01847 L s .64286 .01472 m .64286 .01847 L s .69048 .01472 m .69048 .01847 L s .7381 .01472 m .7381 .01847 L s .83333 .01472 m .83333 .01847 L s .88095 .01472 m .88095 .01847 L s .92857 .01472 m .92857 .01847 L s .25 Mabswid 0 .01472 m 1 .01472 L s .02381 .13244 m .03006 .13244 L s [(0.2)] .01131 .13244 1 0 Mshowa .02381 .25016 m .03006 .25016 L s [(0.4)] .01131 .25016 1 0 Mshowa .02381 .36788 m .03006 .36788 L s [(0.6)] .01131 .36788 1 0 Mshowa .02381 .4856 m .03006 .4856 L s [(0.8)] .01131 .4856 1 0 Mshowa .02381 .60332 m .03006 .60332 L s [(1)] .01131 .60332 1 0 Mshowa .125 Mabswid .02381 .04415 m .02756 .04415 L s .02381 .07358 m .02756 .07358 L s .02381 .10301 m .02756 .10301 L s .02381 .16187 m .02756 .16187 L s .02381 .1913 m .02756 .1913 L s .02381 .22073 m .02756 .22073 L s .02381 .27959 m .02756 .27959 L s .02381 .30902 m .02756 .30902 L s .02381 .33845 m .02756 .33845 L s .02381 .39731 m .02756 .39731 L s .02381 .42674 m .02756 .42674 L s .02381 .45617 m .02756 .45617 L s .02381 .51503 m .02756 .51503 L s .02381 .54446 m .02756 .54446 L s .02381 .57389 m .02756 .57389 L s .25 Mabswid .02381 0 m .02381 .61803 L s 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath .5 Mabswid .02381 .01472 m .04262 .09713 L .06244 .15886 L .10458 .26128 L .14264 .33428 L .18314 .39819 L .22214 .44917 L .26358 .49387 L .30351 .52882 L .34193 .55563 L .36137 .56681 L .38279 .57733 L .40334 .5857 L .42214 .59192 L .44155 .59691 L .45226 .59904 L .46243 .60067 L .47202 .60185 L .47738 .60236 L .48224 .60273 L .48679 .60299 L .48935 .60311 L .49171 .60319 L .49377 .60325 L .49495 .60327 L .49604 .60329 L .4972 .6033 L .49825 .60331 L .49947 .60332 L .50063 .60332 L .50176 .60331 L .50299 .6033 L .50415 .60329 L .50521 .60327 L .50768 .60321 L .51028 .60312 L .51518 .60289 L .52053 .60253 L .53008 .60162 L .53895 .60047 L .54948 .59873 L .55941 .59669 L .578 .59188 L .59801 .5852 L .61647 .57766 L .65587 .55698 L .69376 .53094 L .7341 .49611 L .77292 .45499 L .8142 .40197 L Mistroke .85396 .34014 L .8922 .26804 L .91356 .22067 L .9329 .17173 L .95174 .11609 L .96234 .07922 L .97208 .03832 L .97619 .01472 L Mfstroke % End of Graphics MathPictureEnd \ \>"], "Graphics", ImageSize->{280.625, 173.375}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztmmlsFVUUgOe94RXaAgXK0gKF1w2hlKUIVChLi4Wyo2g0bkgtBJrQoIUY DTHGqDHGGCPRaDQEjXGJWwwhaHDf9zXGXSPEuC9R4/qndu7AnYXvzLzpvCH9 YQOvJ9+c852ZO3eWN9M17Tu3bu5q39nZ0Z5t626/cGtnx47ssu3dvchMGUaq zDCMh7KGFff0hkc+enr/9ZRbH4bRbP1KW3iAjkwrGmBFNbA0Y0WmFVVJtaZU 60R1VpTRzDAWq1+qq4oUNIxBKjA9uIZTiyE1G2Q9BldFyp4K/YI3phAqqgN6 qvGp7FebUAQV0XoGZSuvMCKFeu7UR15rYVWCOrn8AWtNezRvu8A5Not0VKuj Yh1Ve/NMYGndSkUFdgP3icAdj4J1Up+p/CwvsX4dmU7qhwpoptFwH4+8/3vo SUm7agawmTnm5Vrrbq/m8L+5JP0DSZlEknzni79D0s1cknzOvyC9IEb6Meei PyNX/AEVA/t9hdqhaUj6Fdggd6uMZ9HRkf79uJb9BmWFPA2s/7Sdv/QLxc/A ivKrcO46fUk/RettJqP4EVhxogoaix/iK74HNthWpL37wfcNg2QRGxw9ZbqW WD/0zSGTI/sucje6iqrtUIh6fAtsSGAPuirTlMhPN+F+lXZOAbBv5IbOjHDu TWmdSfs1sKHyXO0fioHAvgJW4lKkpTkcVpiH3nhN8rLDwIYlqqAj7FB8xZfA hieqoMP4C2Aj/LOBHnCEFeJp3cs+j6/4DFhpoorBwD6Nr/gE2EhZMQTYx/EV HwEb5Z8NJZD0YUghnrK87ANgoxNV0Ia8D2xMoophwN4DVmYr6K7GeTJKV+WI DYSrMh06dGNM3d4FVh7YzXkK6TzXHQ6Wd/pmzu3ughq+DWxsYEN6qEfdRgB7 S+7mzAPneVyu2jeBjZNnaCmwN+IrXgc2XlaMBPZaiEKNCsleBVYh9yb2SnzF y8AmyIrRwF6Kr3gR2ERZMQbYC/EVzwPLyooyYM+FKNRsKIekZ4FVyr1J8Ux8 xdPAqmTFWGBPxVc8CaxaVowD9kR8xePAamTFeGAHQxRqNkyApMeA1cq9K4A9 CmySrKC1OBBNMRHYfmAnJKrIAtsHbLKtEJ/QqGz6Zl4J7BFgU+wG8e8Bkm+o PFWgfBhYXXgbcezy00N83oQHvJc9CGyqfyo4rxJJWwPsAVlLk5QU9wOrlxW1 wO4DNk1WTAJ2b3zFPcCmuxRqiCdD0t0hhXgEe9ldwGbIiinA7gQ2M5riDmAN sqIO2N5oCnqTvgfYLFlBf1lwO7AT/btyGiTdBmy23JsUtwKbIyumA7slmoJe x94MbG40xU3AGmUFvQDeDewkWdEA7MZoilnAbgA2zz8bZkPS9cDmy71JcR2w JlkxB9i1wBbIirnArgG2UFY0Arsa2KJoiquALbYVdDvje0iDc8DLrpQbxL+d mQfsCmDNfW6oPPNBeTmwlsA2zh9e0dg1AbsM2JJ8jd0CYLuAneyfDcEvmxYC uxRYqzxPF+kGl8DSpXJhM7AdWrZcLmwBdhGwAMUSYNuBrXAp1Gq1QlIXsJVy 71Yt2wZLV8mFy4Bt0bK1cmEbsM3AAhTLdZ9NsHSdXLgS2Platl4uXAXsPGBu hXKu0dG5kH6a3HEtsDO17Ay5cJ0vybs0oPBUiSnZWXLhep10CiwNKDxdF672 DROm0/a06cINcqEzbkt1tNG/p87WUYuOLpCd51ifCjXpaJOcvkE7G3W0RU7f qJ0NOuqU0zu0s16nb5PT1eGmzvS1Ot0+4djvwpzXDb7CTl1YoaNuu5De/5Ci Szco1dHFIQpT9ym1ol3ROqrPVN9rhurBpYuWO5PG2r3cSP0HkX5AEA==\ \>"], ImageRangeCache->{{{0, 279.625}, {172.375, 0}} -> {-0.0852483, -0.079085, \ 0.00397269, 0.00642795}}], Cell[TextData[{ "The entropy function ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], TraditionalForm]]], " can be evaluated as follows." }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"MultiEntropy", "[", "p_List", "]"}], ":=", RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"Length", "[", "p", "]"}]], RowBox[{ RowBox[{"p", "[", RowBox[{"[", "i", "]"}], "]"}], "*", RowBox[{"Log", "[", RowBox[{"2", ",", RowBox[{"p", "[", RowBox[{"[", "i", "]"}], "]"}]}], "]"}]}]}]}]}]], "Input", CellTags->"InputShann MultiEntropy"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", RowBox[{"{", RowBox[{ RowBox[{"1", "/", "4"}], ",", RowBox[{"1", "/", "4"}], ",", RowBox[{"1", "/", "4"}], ",", RowBox[{"1", "/", "4"}]}], "}"}]}], ";", RowBox[{"MultiEntropy", "[", "p", "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData["2"], "Output"], Cell[TextData[{ "One can give the following interpretations to the entropy ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", "X", ")"}], TraditionalForm]]], " of a random variable ", Cell[BoxData[ FormBox["X", TraditionalForm]]], ":" }], "Text"], Cell[TextData[{ "- the expected amount of information that a realization of ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " gives,\n- our uncertainty about ", Cell[BoxData[ FormBox["X", TraditionalForm]]], ",\n- the expected number of bits needed to describe an outcome of ", Cell[BoxData[ FormBox["X", TraditionalForm]]], "." }], "DisplayFormula", CellTags->"InterShann entropy"], Cell[TextData[{ "With these interpretations in mind one expects the entropy function ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", "X", ")"}], TraditionalForm]]], " to have the following properties:" }], "Text"], Cell[TextData[{ "P1:\t ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "n"]}], ")"}], "=", RowBox[{"H", "(", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "n"], ",", "0"}], ")"}]}], TraditionalForm]]] }], "DisplayFormula", CellTags->"PropShann P1"], Cell[TextData[{ "P2:\t ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "n"]}], ")"}], "=", RowBox[{"H", "(", RowBox[{ SubscriptBox["p", RowBox[{"\[Sigma]", "(", "1", ")"}]], ",", SubscriptBox["p", RowBox[{"\[Sigma]", "(", "2", ")"}]], ",", "\[Ellipsis]", ",", SubscriptBox["p", RowBox[{"\[Sigma]", "(", "n", ")"}]]}], ")"}]}], TraditionalForm]], CellTags->"PropShann P2"], ",\n\tfor any permutation \[Sigma] of the index set ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"{", RowBox[{"1", ",", "2", ",", "\[Ellipsis]", ",", "n"}], "}"}], "."}], TraditionalForm]]] }], "DisplayFormula", CellTags->"PropShann P2"], Cell[TextData[{ "P3:\t ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", RowBox[{"H", "(", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "n"]}], ")"}], "\[LessEqual]", RowBox[{"H", "(", RowBox[{ RowBox[{"1", "/", "n"}], ",", RowBox[{"1", "/", "n"}], ",", "\[Ellipsis]", ",", RowBox[{"1", "/", "n"}]}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula", CellTags->"PropShann P3"], Cell[TextData[{ "P4:\t ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", "n"]}], ")"}], "="}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{ SubscriptBox["p", "1"], ",", SubscriptBox["p", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["p", RowBox[{"n", "-", "2"}]], ",", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}]}], ")"}], "+", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}], ")"}], RowBox[{"H", "(", RowBox[{ FractionBox[ SubscriptBox["p", RowBox[{"n", "-", "1"}]], RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}]], ",", FractionBox[ SubscriptBox["p", "n"], RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}]]}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", CellTags->"PropShann P5"], Cell[TextData[{ "The interpretations of these properties are straightforward. \nP1 says that \ adding another event to \[ScriptCapitalX] but one with probability 0 of \ occurring does not affect the uncertainty about ", Cell[BoxData[ FormBox["X", TraditionalForm]]], "." }], "Text"], Cell["\<\ P2 states that renumbering the different events in \[ScriptCapitalX] leaves \ the entropy the same.\ \>", "Text"], Cell[TextData[{ "P3 says that the uncertainty about ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " is maximal if all events have the same probability of occurring." }], "Text"], Cell[TextData[{ "Finally, P4 states that the expected number of bits necessary to describe \ an outcome from \[ScriptCapitalX] is equal to the number of bits necessary \ when combining events ", Cell[BoxData[ FormBox[ SubscriptBox["x", RowBox[{"n", "-", "1"}]], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubscriptBox["x", "n"], TraditionalForm]]], " into a single event, say ", Cell[BoxData[ FormBox[ SubscriptBox[ OverscriptBox["x", "^"], RowBox[{"n", "-", "1"}]], TraditionalForm]]], ", plus the number bits to necessary to distinguish between events ", Cell[BoxData[ FormBox[ SubscriptBox["x", RowBox[{"n", "-", "1"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["x", "n"], TraditionalForm]]], " conditional to the fact that event ", Cell[BoxData[ FormBox[ SubscriptBox[ OverscriptBox["x", "^"], RowBox[{"n", "-", "1"}]], TraditionalForm]]], " did occur.\nFor instance, if ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "4"}], TraditionalForm]]], ", then ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{ FractionBox["1", "4"], ",", FractionBox["1", "4"], ",", FractionBox["1", "4"], ",", FractionBox["1", "4"]}], ")"}], "=", "2"}], TraditionalForm]]], " and also " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"H", "(", RowBox[{ FractionBox["1", "4"], ",", FractionBox["1", "4"], ",", FractionBox["1", "2"]}], ")"}], "+", RowBox[{ FractionBox["1", "2"], ".", RowBox[{"H", "(", RowBox[{ FractionBox["1", "2"], ",", FractionBox["1", "2"]}], ")"}]}]}], "=", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ FractionBox["1", "4"], ".2"}], "+", RowBox[{ FractionBox["1", "4"], ".2"}], "+", RowBox[{ FractionBox["1", "2"], ".1"}]}], ")"}], "+", RowBox[{ FractionBox["1", "2"], ".1"}]}], "=", "2"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Although we shall not prove it here, it can be shown ", ButtonBox["[Khin57]", BaseStyle->"Hyperlink", ButtonData:>"RefKhin57"], " that ", ButtonBox["(5.1)", BaseStyle->"Hyperlink", ButtonData:>"FormShann information"], " is the only continuous function satisfying ", ButtonBox["(5.2)", BaseStyle->"Hyperlink", ButtonData:>"FormShann infor 1/2^k"], " yielding an entropy function ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], RowBox[{"J", "(", SubscriptBox["p", "i"], ")"}]}]}], TraditionalForm]]], " satisfying the above mentioned properties P1-P4. " }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Consider the flipping of a coin. Let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "(", "head", ")"}], " ", "=", " ", "p"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "(", "tail", ")"}], "=", RowBox[{"1", "-", "p"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "p", "\[LessEqual]", "1"}], TraditionalForm]]], ". The entropy is given by ", ButtonBox["(5.4)", BaseStyle->"Hyperlink", ButtonData:>"FormShann entropy n=2"], ".\nThat ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"h", "(", RowBox[{"1", "/", "2"}], ")"}], " ", "=", " ", "1"}], TraditionalForm]]], " is of course confirmed by the fact that one needs one bit to represent the \ outcome of the tossing of a fair coin. For instance, 0 \[LeftRightArrow] \ heads and 1\[LeftRightArrow] tails. " }], "Example", CellTags->"ExamShann unfair coin"], Cell[TextData[{ "Since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"h", "(", RowBox[{"1", "/", "4"}], ")"}], "\[TildeTilde]", " ", "0.8113"}], TraditionalForm]]], " one expects that on the average only 0.8113 bits are needed to represent \ the outcome of the tossing of an unfair coin with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "(", "head", ")"}], " ", "=", " ", RowBox[{"1", "/", "4"}]}], TraditionalForm]]], ". This statement is true in the sense that one can approach the number \ 0.8113 arbitrarily close. In the ", ButtonBox["Chapter 6", BaseStyle->"Hyperlink", ButtonData:>"Chap Huff"], " we shall show how this is done. The trick will be to represent the outcome \ of many tossings together by one single string of bits. For instance with two \ tossings one can represent the outcomes as follows:" }], "Text", FontSlant->"Italic"], Cell[TextData[{ "\n", Cell[BoxData[GridBox[{ { RowBox[{"two", " ", "tossings"}], "probablity", "representation"}, {" ", " ", " "}, {"hh", RowBox[{"1", "/", "16"}], "111"}, {"ht", RowBox[{"3", "/", "16"}], "110"}, {"th", RowBox[{"3", "/", "16"}], "10"}, {"tt", RowBox[{"9", "/", "16"}], "0"} }]]], "\n" }], "Text", TextAlignment->Center, TextJustification->0, FontSlant->"Italic"], Cell["The expected length of this representation is", "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ FractionBox["1", "16"], ".3"}], "+", RowBox[{ FractionBox["3", "16"], ".3"}], "+", RowBox[{ FractionBox["3", "16"], ".2"}], "+", RowBox[{ FractionBox["9", "16"], ".1"}]}], "=", FractionBox["27", "16"]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "But each representation describes two outcomes, so this scheme needs ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"27", "/", "32"}], "\[TildeTilde]", " ", "0.843"}], TraditionalForm]]], " bits per tossing. Taking three, four, \[Ellipsis] tossings at a time leads \ to increasingly better approximations of ", Cell[BoxData[ FormBox[ RowBox[{"h", "(", RowBox[{"1", "/", "4"}], ")"}], TraditionalForm]]], ". " }], "Text", FontSlant->"Italic"], Cell[TextData[{ "There is however a problem to address, namely that the receiver of a long \ string of zeros and ones should be able to determine the outcomes of the \ tossings in a unique way. One can easily verify that any sequence made up \ from the subsequences 111, 110, 10 and 0 can only be broken up into these \ subsequences in just one way . We shall address this problem extensively in ", ButtonBox["Chapter 6", BaseStyle->"Hyperlink", ButtonData:>"Chap Huff"], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" (Part 1)", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "The 26 letters in the English alphabet can be represented with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["log", "2"], "26"}], " ", "\[TildeTilde]", " ", "4.70"}], TraditionalForm]]], " bits per letter, by coding sufficiently long strings of letters into \ binary strings. Indeed, for ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " letters one needs ", Cell[BoxData[ FormBox[ RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], SuperscriptBox["26", "k"]}], "\[RightCeiling]"}], TraditionalForm]]], " bits and thus one needs ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], SuperscriptBox["26", "k"]}], "\[RightCeiling]"}], "/", "k"}], TraditionalForm]]], " bits per letter, which converges to ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], "26"}], TraditionalForm]]], "." }], "Example", CellTags->"ExamShann English"], Cell[TextData[{ "On the other hand, the entropy of 1-grams can easily be computed with the \ probabilities given in ", ButtonBox["Table 1.1", BaseStyle->"Hyperlink", ButtonData:>"TableIntr Prob English"], ". One obtains 4.15 bits per letter. \nAlso for bi-grams and tri-grams \ these computations have been made (see ", ButtonBox["[MeyM82]", BaseStyle->"Hyperlink", ButtonData:>"RefMey82"], ", App.F. One gets the following values:" }], "Text", GeneratedCell->True, FontSlant->"Italic"], Cell["\<\ H(1-grams)\t\t\[TildeTilde] 4.15 bits/letter, H(2-grams)/2\t\t\[TildeTilde] 3.62 bits/letter, H(3-grams)/3\t\t\[TildeTilde] 3.22 bits/letter.\ \>", "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "According to some tests the asymptotic value for ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[RightArrow]", "\[Infinity]"}], TraditionalForm]]], " is less than 1.5 bits/letter!" }], "Text", FontSlant->"Italic"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"n", "\[GreaterEqual]", "1"}], TraditionalForm]]], ", denote the plaintext generated by a ", ButtonBox["plaintext source", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Plaint Source"], " \[GothicCapitalS] over the alphabet ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "2"], TraditionalForm]]], ".\nThen the ", StyleBox["redundancy", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ SubscriptBox["D", "n"], TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}], TraditionalForm]]], " is defined by\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ StyleBox[ SubscriptBox["D", "n"], FontSlant->"Italic"], "=", RowBox[{"n", "-", RowBox[{"H", "(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}]}]}], TraditionalForm]]], ".\n\t\n", "The quantity ", Cell[BoxData[ FormBox[ RowBox[{"\[Delta]", "=", RowBox[{ SubscriptBox["D", "n"], "/", "n"}]}], TraditionalForm]]], " stands for the average redundancy per letter." }], "Definition", CellTags->"DefShann redundancy"], Cell[TextData[{ "If the alphabet size is ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " and each symbol is represented by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], "q"}], TraditionalForm]]], " bits, the redundancy is given by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["D", "n"], "=", RowBox[{ RowBox[{ RowBox[{"n", ".", SubscriptBox["log", "2"]}], "q"}], "-", RowBox[{"H", "(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}]}]}], TraditionalForm]]], ". If a different representation of the alphabet symbols is used, say with \ an expected representation length of ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " bits per symbol, we have ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["D", "n"], "=", RowBox[{ RowBox[{"n", ".", "l"}], "-", RowBox[{"H", "(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}]}]}], TraditionalForm]]], "." }], "Text"], Cell["\<\ The redundancy measures to which extent the length of the plaintext exceeds \ the length that is strictly necessary to carry the information of the text \ (all measured in bits). \ \>", "Text"], Cell[TextData[{ "Let us now turn our attention to a ", ButtonBox["cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], " \[GothicCapitalE] consisting of cryptographic transformation ", Cell[BoxData[ FormBox[ SubscriptBox["E", "k"], TraditionalForm]]], " indexed by keys ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " from a key space ", Cell[BoxData[ FormBox["\[ScriptCapitalK]", TraditionalForm]]], ". Assume that the unknown plaintext is a regular English text. In the \ context of this chapter we assume that the cryptanalist has unlimited \ computing power. So, given a ciphertext a cryptanalist can try out all keys \ to check for possible plaintexts. As soon as the ciphertext is just a few \ letters long, some keys can be ruled out because they lead to impossible or \ improbable letter combinations in the plaintext. The longer the ciphertext, \ the more keys can be ruled out. They violate the structure or interpretation \ of English texts. More formally, they violate the redundancy in the \ plaintext. Sooner or later, only the key that was used for the encryption \ remains as only candidate." }], "Text"], Cell[TextData[{ "Let us return to the general setting. Let ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " be the length of the plaintext (in bits). There are ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "n"], TraditionalForm]]], " possible binary sequences, but only ", Cell[BoxData[ FormBox[ SuperscriptBox["2", RowBox[{"H", "(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}]], TraditionalForm]]], " represent meaningful messages. The probability that a decryption with the \ wrong key hits a legitimate message is ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", RowBox[{"H", "(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}]], "/", SuperscriptBox["2", "n"]}], TraditionalForm]]], ". If all keys are tried out and all are equally likely, one expects to find \ ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalK]", "|", RowBox[{ SuperscriptBox["2", RowBox[{"H", "(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}]], "/", SuperscriptBox["2", "n"]}]}], TraditionalForm]]], " meaningful plaintexts. Let ", Cell[BoxData[ FormBox["K", TraditionalForm]]], " denote the uniform distribution over the key space \[ScriptCapitalK] . \ Then ", Cell[BoxData[ FormBox[ RowBox[{"|", "\[ScriptCapitalK]", "|", RowBox[{"=", SuperscriptBox["2", RowBox[{"H", "(", "K", ")"}]]}]}], TraditionalForm]]], "and one can write that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", RowBox[{"H", "(", "K", ")"}]], RowBox[{ SuperscriptBox["2", RowBox[{"H", "(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}]], "/", SuperscriptBox["2", "n"]}]}], TraditionalForm]]], " meaningful messages are expected. If this number is less than 1, very \ likely it will be just the key used for the encryption that will survive this \ analysis. The above happens if " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"H", "(", "K", ")"}], "+", RowBox[{"H", "(", RowBox[{ SubscriptBox["X", "0"], ",", SubscriptBox["X", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["X", RowBox[{"n", "-", "1"}]]}], ")"}], "-", "n"}], "\[LessEqual]", "0"}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ " i.e. if the ", ButtonBox["redundancy", BaseStyle->"Hyperlink", ButtonData:>"DefShann redundancy"], " satisfies" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["D", "n"], "\[GreaterEqual]", RowBox[{"H", "(", "K", ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox["K", TraditionalForm]]], " does not have a uniform distribution, we can still use the interpretation \ that ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", "K", ")"}], TraditionalForm]]], " denotes the ", ButtonBox["uncertainty", BaseStyle->"Hyperlink", ButtonData:>"InterShann entropy"], " about the key to repeat the above reasoning." }], "Text"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Consider a ciphertext-only attack on a ", ButtonBox["cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], " \[GothicCapitalE] with ", ButtonBox["key-space", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], " \[ScriptCapitalK] and ", ButtonBox["plaintext source", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Plaint Source"], " \[GothicCapitalS]. Then the ", StyleBox["unicity distance", FontSlant->"Italic"], " of this cryptosystem is defined by\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"min", RowBox[{"{", RowBox[{ RowBox[{"n", "\[Element]", SuperscriptBox["\[DoubleStruckCapitalN]", "+"]}], "|", RowBox[{ SubscriptBox["D", "n"], "\[GreaterEqual]", RowBox[{"H", "(", "K", ")"}]}]}], "}"}]}], TraditionalForm]]], ",\n\t\t\nwhere ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", "K", ")"}], TraditionalForm]]], " is the ", ButtonBox["entropy", BaseStyle->"Hyperlink", ButtonData:>"DefShann entropy"], " of the key and ", Cell[BoxData[ FormBox[ SubscriptBox["D", "n"], TraditionalForm]]], " the ", ButtonBox["redundancy", BaseStyle->"Hyperlink", ButtonData:>"DefShann redundancy"], " in the plaintext." }], "Definition", CellTags->"DefShann unicity dist"], Cell["\<\ As soon as the redundancy in the plaintext exceeds the uncertainty about the \ key, the cryptanalist with sufficient resources may be able to determine that \ plaintext from the ciphertext. Thus, the unicity distance indicates the user \ of a cryptosystem when to change the key in order to keep the system \ sufficiently secure.\ \>", "Text"], Cell[TextData[{ StyleBox["Example 5.2 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nWe continue with ", ButtonBox["Example 5.2", BaseStyle->"Hyperlink", ButtonData:>"ExamShann English"], ". Assume that a ", ButtonBox["simple substitution", BaseStyle->"Hyperlink", ButtonData:>"DefClass SimpleSubst"], " has been applied to an English text (see Subsection 2.1.2). Assuming that \ all 26! possible substitutions are equally likely, one has" }], "Text", FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", "K", ")"}], " ", "=", RowBox[{ RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"26", "!"}]], RowBox[{ FractionBox["1", RowBox[{"26", "!"}]], " ", SubscriptBox["log", "2"], FractionBox["1", RowBox[{"26", "!"}]]}]}]}], "=", RowBox[{ RowBox[{ SubscriptBox["log", "2"], " ", RowBox[{"26", "!"}]}], " ", "\[TildeTilde]", " ", "88.382"}]}]}], TraditionalForm]]], " bits." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "If one approximates the redundancy ", Cell[BoxData[ FormBox[ SubscriptBox["D", "n"], TraditionalForm]]], " in a text of ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " letters by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"4.70", " ", "-", "1.50"}], ")"}], "n"}], " ", "=", " ", RowBox[{"3.20", "n"}]}], TraditionalForm]]], " bits, one obtains a unicity distance of ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"88.4", "/", "3.2"}], "\[TildeTilde]", "28"}], TraditionalForm]]], " characters.\nAccording to Friedman ", ButtonBox["[Frie73]", BaseStyle->"Hyperlink", ButtonData:>"RefFrie73"], ": ''practically every example of 25 or more characters representing the \ mono-alphabetic substitution of a \"sensible\" message in English can be \ readily solved.'' These two numbers are in remarkable agreement." }], "Text", GeneratedCell->True, FontSlant->"Italic"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tMutual Information and Unconditionally Secure Systems" }], "Section", CellTags->"SectShann Mutual"], Cell["\<\ Quite often random variables contain information about each other. In \ cryptosystems, the plaintext and the ciphertext are related through the key. \ In this section we shall give a formal definition (in the information \ theoretic sense of the word) of an unconditionally secure cryptosystem \ \>", "Text"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " be two random variables, defined on \[ScriptCapitalX] resp. \ \[ScriptCapitalY]. The ", StyleBox["joint distribution", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Pr", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{ RowBox[{"X", "=", "x"}], ",", RowBox[{"Y", "=", "y"}]}], ")"}], TraditionalForm]]], " of ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " is often shortened to just" }], "Text", CellTags->"DefShann joint dis"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", " ", "y"}], ")"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Similarly, the ", StyleBox["conditional probability", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Pr", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"X", "=", RowBox[{ RowBox[{"x", "|", "Y"}], "=", "y"}]}], ")"}], TraditionalForm]]], " that ", Cell[BoxData[ FormBox[ RowBox[{"X", " ", "=", " ", "x"}], TraditionalForm]]], ", given that ", Cell[BoxData[ FormBox[ RowBox[{"Y", " ", "=", " ", "y"}], TraditionalForm]]], ", is denoted by" }], "Text", CellTags->"DefShann cond prob"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["It satisfies the relation", "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}], ".", RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}]}]}], TraditionalForm]]]], "NumberedEquation", CellTags->"FormShann p(x|y)"], Cell[TextData[{ "The ", StyleBox["uncertainty", FontSlant->"Italic"], " about ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " given ", Cell[BoxData[ FormBox[ RowBox[{"Y", "=", "y"}], TraditionalForm]]], " is defined analogous to the ", ButtonBox["entropy", BaseStyle->"Hyperlink", ButtonData:>"DefShann entropy"], " function by" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{ RowBox[{"X", "|", "Y"}], " ", "=", " ", "y"}], ")"}], " ", "=", RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShann H(X|y)"], Cell[TextData[{ "It can be interpreted as the expected amount of information that a \ realization of ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " gives, when the occurrence of ", Cell[BoxData[ FormBox[ RowBox[{"Y", "=", "y"}], TraditionalForm]]], " is already known.\nThe ", StyleBox["equivocation", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}], TraditionalForm]]], " or ", StyleBox["conditional entropy", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " given ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " is the expected value of ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", RowBox[{ RowBox[{"X", "|", "Y"}], " ", "=", " ", "y"}], ")"}], TraditionalForm]]], " over all ", Cell[BoxData[ FormBox["y", TraditionalForm]]], ". In formula," }], "Text", CellTags->"DefShann cond entropy"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}], ".", RowBox[{"H", "(", RowBox[{ RowBox[{"X", "|", "Y"}], "=", "y"}], ")"}]}]}]}], TraditionalForm]]], " \n\n", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["=", ButtonBox[ RowBox[{"(", "5.6", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShann H(X|y)"]], RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}], ".", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]}]}]}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["=", ButtonBox[ RowBox[{"(", "5.5", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShann p(x|y)"]], RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}], ".", RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]}]}]}]}]}], TraditionalForm]]], " \n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]}]}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShann H(X|Y)"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", RowBox[{"X", ",", "Y"}], ")"}], TraditionalForm]]], " be defined analogously to the ", ButtonBox["entropy", BaseStyle->"Hyperlink", ButtonData:>"DefShann entropy"], " function ", Cell[BoxData[ FormBox["H", TraditionalForm]]], " for one variable." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t\t", FontWeight->"Bold"], StyleBox["Chain Rule", FontSlant->"Italic"], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"X", ",", "Y"}], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"H", "(", "X", ")"}], "+", RowBox[{"H", "(", RowBox[{"Y", "|", "X"}], ")"}]}], "=", RowBox[{ RowBox[{"H", "(", "Y", ")"}], "+", RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}]}]}]}], TraditionalForm]]] }], "Theorem", CellTags->"TheoShann chain rule"], Cell[TextData[{ "\n", StyleBox["Proof", FontWeight->"Bold"], ": We use ", ButtonBox["(5.5)", BaseStyle->"Hyperlink", ButtonData:>"FormShann p(x|y)"], " and ", ButtonBox["(5.7)", BaseStyle->"Hyperlink", ButtonData:>"FormShann H(X|Y)"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"X", ",", "Y"}], ")"}], "="}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}]}]}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}]}]}]}]}], "-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]}]}]}]}]}], TraditionalForm]]], "\n\t\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"=", RowBox[{ RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}]}]}]}], "+", RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}]}]}], "=", RowBox[{ RowBox[{"H", "(", "Y", ")"}], "+", RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["The second equality follows by a symmetry argument.", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "In words, the above theorem states that the uncertainty about a joint \ realization of ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " equals the uncertainty about ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " plus the uncertainty about ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " given ", Cell[BoxData[ FormBox["X", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Corollary ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " are independent random variables. Then\n\n\ti)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"X", ",", "Y"}], ")"}], "=", RowBox[{ RowBox[{"H", "(", "X", ")"}], "+", RowBox[{"H", "(", "Y", ")"}]}]}], TraditionalForm]]], ",\n\tii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}], "=", RowBox[{"H", "(", "X", ")"}]}], TraditionalForm]]], ",\n\tiii)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"Y", "|", "X"}], ")"}], "=", RowBox[{"H", "(", "Y", ")"}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": To prove i) we repeat the proof of Theorem 5.1 with ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}], ".", RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}]}]}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"X", ",", "Y"}], ")"}], "=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}]}]}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", "x", ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}]}]}]}]}], "-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}]}]}]}]}]}], TraditionalForm]]], "\n\t\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}]}]}]}], "-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}]}]}]}]}], TraditionalForm]]], " \n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"H(X)", "+", RowBox[{"H", "(", "Y", ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\<\ Statements ii) and iii) follow directly from i) and the chain rule.\ \>", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "The amount of ", ButtonBox["information", BaseStyle->"Hyperlink", ButtonData:>"FormShann information"], " (see (5.1) that a realization ", Cell[BoxData[ FormBox[ RowBox[{"Y", "=", "y"}], TraditionalForm]]], " gives about a possible realization ", Cell[BoxData[ FormBox[ RowBox[{"X", "=", "x"}], TraditionalForm]]], " can be quantified as the amount of information that the occurrence of ", Cell[BoxData[ FormBox[ RowBox[{"X", " ", "=", " ", "x"}], TraditionalForm]]], " gives minus the amount of information that ", Cell[BoxData[ FormBox[ RowBox[{"X", " ", "=", " ", "x"}], TraditionalForm]]], " will give when ", Cell[BoxData[ FormBox[ RowBox[{"Y", " ", "=", " ", "y"}], TraditionalForm]]], " is already know. We denote this by ", Cell[BoxData[ FormBox[ RowBox[{" ", FormBox[ RowBox[{ SubscriptBox["I", RowBox[{"\[ScriptCapitalX]", ";", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], TraditionalForm]}], TraditionalForm]]], ". It follows that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ";", "y"}], ")"}], "=", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"-", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}]}], ")"}], "-", RowBox[{"(", RowBox[{ RowBox[{"-", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]}], ")"}]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ RowBox[{ RowBox[{ RowBox[{"-", SubscriptBox["log", "2"]}], FractionBox[ RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]], OverscriptBox["=", ButtonBox[ RowBox[{"(", "5.5", ")"}], BaseStyle->"Hyperlink", ButtonData:>"FormShann p(x|y)"]]}], "-", RowBox[{ SubscriptBox["log", "2"], FractionBox[ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}], ".", RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}]]}]}], "=", RowBox[{ SubscriptBox["I", RowBox[{"\[ScriptCapitalY]", ";", "\[ScriptCapitalX]"}]], "(", RowBox[{"y", ";", "x"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Note the symmetry in ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["I", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ";", "y"}], ")"}], "=", RowBox[{ SubscriptBox["I", RowBox[{"\[ScriptCapitalY]", ";", "\[ScriptCapitalX]"}]], "(", RowBox[{"y", ";", "x"}], ")"}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "The ", StyleBox["mutual information", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox[ RowBox[{ StyleBox["I", FontSlant->"Italic"], "(", RowBox[{"X", ";", " ", "Y"}], ")"}], TraditionalForm]]], " of ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " is defined as the expected value of ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["I", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ";", "y"}], ")"}], TraditionalForm]]], ", i.e." }], "Text", CellTags->"DefShann mutual inf"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"I", "(", RowBox[{"x", ";", "y"}], ")"}], "=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", RowBox[{ SubscriptBox["I", RowBox[{"\[ScriptCapitalX]", ";", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ";", "y"}], ")"}]}]}]}]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], "."}]}]}]}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], FractionBox[ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}], ".", RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "y", ")"}]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}]]}], TraditionalForm]]], "\n\t\n\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], "."}]}]}]}]}], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], FractionBox[ RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"=", RowBox[{"I(Y;", "X"}]}], ")"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShann I(x;y)"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"I", "(", RowBox[{"X", ";", "Y"}], ")"}], " ", "=", " ", RowBox[{ RowBox[{ RowBox[{"H", "(", "X", ")"}], " ", "+", " ", RowBox[{"H", "(", "Y", ")"}], " ", "-", " ", RowBox[{"H", "(", RowBox[{"X", ",", "Y"}], ")"}]}], " ", "=", " ", RowBox[{ RowBox[{ RowBox[{"H", "(", "X", ")"}], " ", "-", " ", RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}]}], " ", "=", " ", RowBox[{ RowBox[{"H", "(", "Y", ")"}], " ", "-", " ", RowBox[{ RowBox[{"H", "(", RowBox[{"Y", "|", "X"}], ")"}], "."}]}]}]}]}], TraditionalForm]]] }], "Theorem", CellTags->"TheoShann I(X;Y)"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": From ", ButtonBox["(5.8)", BaseStyle->"Hyperlink", ButtonData:>"FormShann I(x;y)"], " it follows that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"I", "(", RowBox[{"X", ";", "Y"}], ")"}], "="}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], FractionBox[ RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]]}]}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}]}]}]}]}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"+", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ SubscriptBox["\[Sum]", RowBox[{"y", "\[Element]", "\[ScriptCapitalY]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", ",", "y"}], ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", "|", "\[ScriptCapitalY]"}]], "(", RowBox[{"x", "|", "y"}], ")"}]}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{"-", RowBox[{ SubscriptBox["\[Sum]", RowBox[{"x", "\[Element]", "\[ScriptCapitalX]"}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}], ".", SubscriptBox["log", "2"]}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "x", ")"}]}]}]}]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"-", RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}]}], "=", RowBox[{ RowBox[{"H", "(", "X", ")"}], "-", RowBox[{"H", "(", RowBox[{"X", "|", "Y"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "The other statements follow from ", ButtonBox["Theorem 5.1", BaseStyle->"Hyperlink", ButtonData:>"TheoShann chain rule"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"I", "(", RowBox[{"X", ";", "Y"}], ")"}], TraditionalForm]]], " can be interpreted as the expected amount of information that ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], " gives about ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " (or ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " about ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], ")." }], "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "The ", StyleBox["binary symmetric channel", FontSlant->"Italic"], " can be described as follows. A source sends ", Cell[BoxData[ FormBox[ RowBox[{"X", "=", "0"}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{"X", " ", "=", " ", "1"}], TraditionalForm]]], ", each with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "2"}], TraditionalForm]]], ". The receiver gets ", Cell[BoxData[ FormBox[ RowBox[{"Y", " ", "=", " ", "X"}], TraditionalForm]]], " with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", " ", "-", " ", "p"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"Y", "=", RowBox[{"1", "-", "X"}]}], TraditionalForm]]], " with probability ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". It follows that ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalX]", "=", RowBox[{"\[ScriptCapitalY]", "=", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}]}], TraditionalForm]]], " and that" }], "Example", CellTags->"DefShann BSC"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "0", ")"}], "=", RowBox[{ RowBox[{ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalY]", "|", "\[ScriptCapitalX]"}]], "(", RowBox[{"0", "|", "0"}], ")"}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "0", ")"}]}], "+", RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalY]", "|", "\[ScriptCapitalX]"}]], "(", RowBox[{"0", "|", "1"}], ")"}], RowBox[{ SubscriptBox["p", "\[ScriptCapitalX]"], "(", "1", ")"}]}]}], "=", RowBox[{ RowBox[{ RowBox[{ RowBox[{"(", RowBox[{"1", "-", "p"}], ")"}], ".", FractionBox["1", "2"]}], "+", RowBox[{"p", ".", FractionBox["1", "2"]}]}], "=", FractionBox["1", "2"]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "Similarly, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", "\[ScriptCapitalY]"], "(", "1", ")"}], "=", RowBox[{"1", "/", "2"}]}], TraditionalForm]]], ". Also ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"0", ",", "0"}], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"1", ",", "1"}], ")"}], "=", RowBox[{ RowBox[{"(", RowBox[{"1", "-", "p"}], ")"}], "/", "2"}]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"0", ",", "1"}], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["p", RowBox[{"\[ScriptCapitalX]", ",", "\[ScriptCapitalY]"}]], "(", RowBox[{"1", ",", "0"}], ")"}], "=", RowBox[{"p", "/", "2"}]}]}], TraditionalForm]]], ". So, for the binary symmetric channel we have by ", ButtonBox["(5.8)", BaseStyle->"Hyperlink", ButtonData:>"FormShann I(x;y)"] }], "Text", TextAlignment->Left, TextJustification->0, FontSlant->"Italic"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"I", "(", RowBox[{"X", ";", "Y"}], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"-", "2"}], RowBox[{"{", RowBox[{ RowBox[{ FractionBox[ RowBox[{"1", "-", "p"}], "2"], SubscriptBox["log", "2"], FractionBox[ RowBox[{"1", "/", "2"}], RowBox[{"1", "-", "p"}]]}], "+", RowBox[{ FractionBox["p", "2"], SubscriptBox["log", "2"], FractionBox[ RowBox[{"1", "/", "2"}], "p"]}]}], "}"}]}], "="}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"=", RowBox[{"1", "+", RowBox[{ RowBox[{"p", ".", SubscriptBox["log", "2"]}], "p"}], "+", RowBox[{ RowBox[{"(", RowBox[{"1", "-", "p"}], ")"}], ".", RowBox[{ SubscriptBox["log", "2"], "(", RowBox[{"1", "-", "p"}], ")"}]}]}]}], "=", RowBox[{"1", "-", RowBox[{"H", "(", "p", ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "\nWe conclude that the receiver gets ", Cell[BoxData[ FormBox[ RowBox[{"1", " ", "-", " ", RowBox[{"H", "(", "p", ")"}]}], TraditionalForm]]], " bits of information about ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " per received symbol ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], ". How to approach this quantity ", Cell[BoxData[ FormBox[ RowBox[{"1", " ", "-", " ", RowBox[{"H", "(", "p", ")"}]}], TraditionalForm]]], " is the fundamental problem in algebraic coding theory ", ButtonBox["[MacWS77]", BaseStyle->"Hyperlink", ButtonData:>"RefMacW77"], ", Section 1.6.\nFor ", Cell[BoxData[ FormBox[ RowBox[{"p", " ", "=", " ", RowBox[{"1", "/", "2"}]}], TraditionalForm]]], " the receiver gets no information (since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"1", "/", "2"}], ")"}], "=", "1"}], TraditionalForm]]], ") about the transmitted symbols, as is to be expected." }], "Text", GeneratedCell->True, FontSlant->"Italic"], Cell[TextData[{ "Let us now return to the conventional ", ButtonBox["cryptosystem", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Crypto Syst"], " as explained in Chapter 1. Assume that a probability distribution ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["Pr", "\[ScriptCapitalK]"], "(", RowBox[{"K", "=", "k"}], ")"}], TraditionalForm]]], " is defined on the keyspace \[ScriptCapitalK] and let the sequence of \ random variables" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], "=", RowBox[{"(", RowBox[{ SubscriptBox["M", "0"], ",", SubscriptBox["M", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["M", RowBox[{"u", "-", "1"}]]}], ")"}]}], TraditionalForm]]]], "DisplayFormula"], Cell["denote the plaintext, and let", "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["C", RowBox[{"(", "v", ")"}]], "=", RowBox[{"(", RowBox[{ SubscriptBox["C", "0"], ",", SubscriptBox["C", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["C", RowBox[{"v", "-", "1"}]]}], ")"}]}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "denote the ciphertext. So, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["C", RowBox[{"(", "v", ")"}]], "=", RowBox[{ SubscriptBox["E", "k"], "(", SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ")"}]}], TraditionalForm]]], ". In most applications ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " will be equal to ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ SubscriptBox["E", "k"], TraditionalForm]]], " is a one-to-one mapping, the plaintext is uniquely determined by the key \ and the ciphertext, therefore, one has" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{ RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], "|", "K"}], ",", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}], " ", "=", " ", "0"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormShann H(M|KC)"], Cell[TextData[{ "Of course the user of the cryptosystem is interested to know how much \ information ", Cell[BoxData[ FormBox[ SuperscriptBox["C", RowBox[{"(", "v", ")"}]], TraditionalForm]]], " leaks about ", Cell[BoxData[ FormBox[ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"I", "(", RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ";", " ", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}], " ", "\[GreaterEqual]", RowBox[{ RowBox[{"H", "(", SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ")"}], " ", "-", " ", RowBox[{"H", "(", "K", ")"}]}]}], TraditionalForm]]] }], "Theorem"], Cell["\<\ In words: the uncertainty about the key together with the information that \ the ciphertext gives about the plaintext is greater than or equal to the \ uncertainty about the plaintext. Again, this reflects our intuition.\ \>", "Text"], Cell[TextData[{ StyleBox["Proof of Theorem 5.4", FontWeight->"Bold"], ":\n By ", ButtonBox["(5.9)", BaseStyle->"Hyperlink", ButtonData:>"FormShann H(M|KC)"], " and the ", ButtonBox["chain rule", BaseStyle->"Hyperlink", ButtonData:>"TheoShann chain rule"], " (Thm. 5.1, which also applies to conditional entropies) one has that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{"K", "|", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"H", "(", RowBox[{"K", "|", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}], "+", RowBox[{"H", "(", RowBox[{ RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], "|", "K"}], ",", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}]}], "=", RowBox[{"H", "(", RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ",", RowBox[{"K", "|", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}]}], ")"}]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ RowBox[{"=", RowBox[{ SuperscriptBox["H(M", RowBox[{"(", "u", ")"}]], "|", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}]}], ")"}], "+", RowBox[{"H", "(", RowBox[{ RowBox[{"K", "|", SuperscriptBox["M", RowBox[{"(", "u", ")"}]]}], ",", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}]}], "\[GreaterEqual]", RowBox[{"H", "(", RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], "|", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\<\ In words: given the ciphertext the uncertainty about the key is at least as \ great as the uncertainty about the plaintext. This reflects the property that \ knowing the ciphertext, one can reconstruct the plaintext from the key, but \ not necessarily the other way around. It follows that\ \>", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], "|", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}], " ", "\[LessEqual]", RowBox[{"H", "(", RowBox[{"K", "|", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], " ", ")"}], "\[LessEqual]", RowBox[{"H", "(", "K", ")"}]}], TraditionalForm]]]], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "and by ", ButtonBox["Theorem 5.3", BaseStyle->"Hyperlink", ButtonData:>"TheoShann I(X;Y)"], " that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"I", "(", RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ";", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}], "=", RowBox[{ RowBox[{ RowBox[{"H", "(", SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ")"}], "-", RowBox[{"H", "(", RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], "|", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}]}], "\[GreaterEqual]", RowBox[{ RowBox[{"H", "(", SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ")"}], "-", RowBox[{"H", "(", "K", ")"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "A cryptosystem is called ", StyleBox["unconditionally secure", FontSlant->"Italic"], " or is said to have ", StyleBox["perfect secrecy", FontSlant->"Italic"], " if \n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"I", "(", RowBox[{ SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ";", " ", SuperscriptBox["C", RowBox[{"(", "v", ")"}]]}], ")"}], " ", "=", " ", "0"}], TraditionalForm]]], "." }], "Definition", CellTags->"DefShann uncond secure"], Cell[TextData[{ StyleBox["Corollary ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nA necessary condition for a cryptosystem to be unconditionally secure is \ given by\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ")"}], " ", "\[LessEqual]", " ", RowBox[{"H", "(", "K", ")"}]}], TraditionalForm]]], "." }], "Theorem"], Cell["\<\ In cryptosystem where all keys and all plaintexts are equally likely, \ Corollary 5.5 states that you need to have at least as many keys as \ plaintexts. \ \>", "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" \n", FontWeight->"Bold"], "Suppose that we have ", Cell[BoxData[ FormBox[ SuperscriptBox["2", "k"], TraditionalForm]]], " keys, all with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", SuperscriptBox["2", "k"]}], TraditionalForm]]], ". Then" }], "Example"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", "K", ")"}], "=", RowBox[{ RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], SuperscriptBox["2", "k"]], RowBox[{ RowBox[{ FractionBox["1", SuperscriptBox["2", "k"]], ".", SubscriptBox["log", "2"]}], FractionBox["1", SuperscriptBox["2", "k"]]}]}]}], "=", "k"}]}], TraditionalForm]]], " bits." }], "DisplayFormula", FontSlant->"Italic"], Cell[TextData[{ "If the messages are the outcome of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " tossings with a fair coin, one has in a similar way that ", Cell[BoxData[ FormBox[ RowBox[{"H", "(", SuperscriptBox["M", RowBox[{"(", "u", ")"}]], ")"}], TraditionalForm]]], ", so, for perfect secrecy one needs ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "n"}], TraditionalForm]]], ".\nThis can be realized the encryption ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{"(", "u", ")"}]], "=", RowBox[{ SuperscriptBox["m", RowBox[{"(", "u", ")"}]], "\[CirclePlus]", SuperscriptBox["k", RowBox[{"(", "u", ")"}]]}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox[ SuperscriptBox["k", RowBox[{"(", "u", ")"}]], TraditionalForm]]], " stands for the first ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " bits of the key ", Cell[BoxData[ FormBox["k", TraditionalForm]]], " and where \[CirclePlus] stands for a coordinatewise modulo 2 addition. \ With this encryption, with each ciphertext ", Cell[BoxData[ FormBox[ SuperscriptBox["c", RowBox[{"(", "u", ")"}]], TraditionalForm]]], " each possible plaintext is still equally likely." }], "Text", FontSlant->"Italic"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", PageBreakAbove->Automatic, CellTags->"SectShann Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nShow that function ", Cell[BoxData[ FormBox[ RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ RowBox[{ SubscriptBox["p", "i"], ".", SubscriptBox["log", "2"]}], SubscriptBox["p", "i"]}]}]}], TraditionalForm]]], " satisfies properties ", ButtonBox["P1", BaseStyle->"Hyperlink", ButtonData:>"PropShann P1"], "-", ButtonBox["P4", BaseStyle->"Hyperlink", ButtonData:>"PropShann P5"], " in Section 5.1." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[LessEqual]", RowBox[{"1", "/", "2"}]}], TraditionalForm]]], ". " }], "Problem"], Cell["a) Prove that", "Problem", CounterIncrements->"Non"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FractionBox["1", RowBox[{"n", "+", "1"}]], FractionBox[ SuperscriptBox["n", "n"], RowBox[{ SuperscriptBox["k", "k"], SuperscriptBox[ RowBox[{"(", RowBox[{"n", "-", "k"}], ")"}], RowBox[{"n", "-", "k"}]]}]]}], "\[LessEqual]", RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"k"} }], "\[NegativeThinSpace]", ")"}], "\[LessEqual]", FractionBox[ SuperscriptBox["n", "n"], RowBox[{ SuperscriptBox["k", "k"], RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{"n", "-", "k"}], ")"}], RowBox[{"n", "-", "k"}]], "."}]}]]}], TextForm]], "DisplayFormula"], Cell["b) Show that these inequalities imply that ", "Problem", CounterIncrements->"Non"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["lim", RowBox[{"x", "\[RightArrow]", "\[Infinity]"}]], RowBox[{ FractionBox["1", "n"], "log", " ", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "0"}], RowBox[{"\[LeftFloor]", "\[Alpha]n", "\[RightFloor]"}]], RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"i"} }], "\[NegativeThinSpace]", ")"}]}]}]}], "=", RowBox[{"h", "(", "\[Alpha]", ")"}]}], TraditionalForm]]], "," }], "DisplayFormula"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ RowBox[{"h", "(", "x", ")"}], TraditionalForm]]], " is the ", ButtonBox["entropy", BaseStyle->"Hyperlink", ButtonData:>"FormShann entropy n=2"], " function defined in (5.4)." }], "Problem", CounterIncrements->"Non"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nAssume that the English language has an information rate of 1.5 bits per \ letter. What is the ", ButtonBox["unicity distance", BaseStyle->"Hyperlink", ButtonData:>"DefShann unicity dist"], " of the ", ButtonBox["Caesar", BaseStyle->"Hyperlink", ButtonData:>"DefClass Caesar Cipher"], " cipher, when applied to an English text? \nAnswer the same question for \ the ", ButtonBox["Vigen", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], ButtonBox["\[EGrave]", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], ButtonBox["re", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vigenere"], " cryptosystem with key length ", Cell[BoxData[ FormBox["r", TraditionalForm]]], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nConsider a memoryless message source that generates an output letter ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " that is uniformly distributed over the alphabet ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", " ", "1", ",", " ", "2"}], "}"}], TraditionalForm]]], ".\nAfter transmission over a channel the symbol ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], ", that is received, will be equal to ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " with probability ", Cell[BoxData[ FormBox[ RowBox[{"1", "-", "p"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "p", "\[LessEqual]", "1"}], TraditionalForm]]], ", and it will be equal to any of the other two letters in the alphabet with \ probability ", Cell[BoxData[ FormBox[ RowBox[{"p", "/", "2"}], TraditionalForm]]], ".\nCompute the ", ButtonBox["mutual information", BaseStyle->"Hyperlink", ButtonData:>"DefShann mutual inf"], " ", Cell[BoxData[ FormBox[ RowBox[{"I", "(", RowBox[{"X", ",", "Y"}], ")"}], TraditionalForm]]], " between ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["Y", TraditionalForm]]], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Let \[GothicCapitalS] be a ", ButtonBox["plaintext source", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Plaint Source"], " that generates independent, identical distributed letters ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"a", ",", "b", ",", "c", ",", "d"}], "}"}], TraditionalForm]]], ". The probability distribution is given by ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "(", RowBox[{"X", "=", "a"}], ")"}], "=", RowBox[{"1", "/", "2"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "(", RowBox[{"X", "=", "b"}], ")"}], "=", RowBox[{"1", "/", "4"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"Pr", "(", RowBox[{"X", "=", "c"}], ")"}], " ", "=", " ", RowBox[{ RowBox[{"Pr", " ", RowBox[{"(", RowBox[{"x", "=", "d"}], ")"}]}], " ", "=", " ", RowBox[{"1", "/", "8"}]}]}], TraditionalForm]]], ".\nConsider the two coding schemes:" }], "Problem", PageBreakBelow->Automatic], Cell[TextData[{ Cell[BoxData[GridBox[{ {"a", "\[LongRightArrow]", "00"}, {"b", "\[LongRightArrow]", "01"}, {"c", "\[LongRightArrow]", "10"}, {"d", "\[LongRightArrow]", "11"}, {" ", RowBox[{"scheme", " ", "A"}], " "} }]]], " \t\t", Cell[BoxData[GridBox[{ {"a", "\[LongRightArrow]", "0"}, {"b", "\[LongRightArrow]", "10"}, {"c", "\[LongRightArrow]", "110"}, {"d", "\[LongRightArrow]", "111"}, {" ", RowBox[{"scheme", " ", "B"}], " "} }]]] }], "Text", TextAlignment->Center, TextJustification->0], Cell[TextData[{ "The output sequence of the plaintext ", Cell[BoxData[ FormBox["X", TraditionalForm]]], " is first converted into a ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], "-sequence by means of one of the above coding schemes and subsequently \ encrypted with the ", ButtonBox["DES", BaseStyle->"Hyperlink", ButtonData:>"DefBlock DES"], " algorithm.\nWhat is the ", ButtonBox["unicity distance", BaseStyle->"Hyperlink", ButtonData:>"DefShann unicity dist"], " for both coding schemes?" }], "Problem", PageBreakBelow->Automatic, CounterIncrements->"Non"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Prove that the ", ButtonBox["one-time pad", BaseStyle->"Hyperlink", ButtonData:>"DefClass Vernam"], " is an unconditionally secure cryptosystem." }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tData Compression Techniques" }], "Chapter", CellTags->"Chap Huff"], Cell[TextData[{ "It is clear from Chapter 5 (see Definitions ", ButtonBox["5.1", BaseStyle->"Hyperlink", ButtonData:>"DefShann redundancy"], " and ", ButtonBox["5.2", BaseStyle->"Hyperlink", ButtonData:>"DefShann unicity dist"], ") that the security of a cryptosystem can be significantly increased by \ reducing the redundancy in the plaintext. In ", ButtonBox["Example 5.1", BaseStyle->"Hyperlink", ButtonData:>"ExamShann unfair coin"], " such a reduction has been demonstrated.\nIn this chapter we shall describe \ two general methods to reduce the redundancy. The process of removing \ redundancy from plaintexts is called ", StyleBox["data compression", FontSlant->"Italic"], " or ", StyleBox["source coding", FontSlant->"Italic"], ". " }], "Text", CellTags->"DefHuff data compress"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tBasic Concepts of Source Coding for Stationary Sources" }], "Section", CellTags->"SectHuff basics"], Cell[TextData[{ "Let a ", ButtonBox["plaintext source", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Plaint Source"], " \[GothicCapitalS] output independently chosen symbols from the alphabet ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["m", "1"], ",", SubscriptBox["m", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["m", "n"]}], "}"}], TraditionalForm]]], " with respective probabilities ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], ",", RowBox[{ SubscriptBox["p", "2"], "\[Ellipsis]"}], ",", SubscriptBox["p", "n"]}], TraditionalForm]]], ". Symbol ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], " will be encoded into a binary string ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ".\nThe set ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "n"]}], "}"}], TraditionalForm]]], " is called a ", StyleBox["code", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " for source \[GothicCapitalS]. The idea of data compression is to use such \ a code that the expected value of the length of the encoded plaintext is \ minimal. Since the symbols generated by the plaintext source are independent \ of each other, it suffices to minimize the expected length of an encoded \ symbol" }], "Text", CellTags->"DefHuff code"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"L", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], SubscriptBox["l", "i"]}]}]}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "The minimization has to take place over all possible codes ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " for source \[GothicCapitalS]. There is however an additional constraint. \ A receiver (decoder) has to be able to retrieve the individual messages from \ the concatenation of the successive codewords. Not every code has this \ property. Indeed let ", Cell[BoxData[ FormBox[ RowBox[{"C", "=", RowBox[{"{", RowBox[{"0", ",", "01", ",", "10"}], "}"}]}], TraditionalForm]]], ". The sequence 010 can be made in two ways: 0 followed by 10 and 01 \ followed by 0. This ambiguity has to be avoided." }], "Text"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "A code C is called ", StyleBox["uniquely decodable", FontSlant->"Italic"], " (shortened to ", StyleBox["U.D.", FontSlant->"Italic"], ") if every concatenation of codewords from ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " can only in one way be split up into individual codewords." }], "Definition", CellTags->"DefHuffman U.D."], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" \n", FontWeight->"Bold"], "Let ", Cell[BoxData[ FormBox[ RowBox[{"n", " ", "=", " ", "4"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"C", "=", RowBox[{"{", RowBox[{"0", ",", "01", ",", "011", ",", "111"}], "}"}]}], TraditionalForm]]], " (this is the code of ", ButtonBox["Example 5.1", BaseStyle->"Hyperlink", ButtonData:>"ExamShann unfair coin"], " in reversed order). This code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " is U.D., as we shall now demonstrate. \nConsider a concatenation of \ codewords. If the left most bit is a 1, the left most codeword is 111. If on \ the other hand the left most bit is a 0, the concatenation either looks like \ ", Cell[BoxData[ FormBox[ RowBox[{"0", OverscriptBox[ OverscriptBox[ RowBox[{"11", "\[Ellipsis]1"}], "\[OverBrace]"], "k"]}], TraditionalForm]]], ", for some ", Cell[BoxData[ FormBox[ RowBox[{"k", "\[GreaterEqual]", "0"}], TraditionalForm]]], ", or it starts with the subsequence 0", Cell[BoxData[ FormBox[ OverscriptBox[ OverscriptBox[ RowBox[{"11", "\[Ellipsis]1"}], "\[OverBrace]"], "k"], TraditionalForm]]], "0 for some positive integer ", Cell[BoxData[ FormBox["k", TraditionalForm]]], ". \nDepending on whether ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", " ", "=", " ", RowBox[{"3", "l"}]}], ",", " ", RowBox[{ RowBox[{"3", "l"}], " ", "+", " ", "1"}]}], TraditionalForm]]], ", or ", Cell[BoxData[ FormBox[ RowBox[{"k", " ", "=", " ", RowBox[{ RowBox[{"3", "l"}], " ", "+", " ", "2"}]}], TraditionalForm]]], ", the left most codeword is 0, 01 resp. 011. One can now remove this \ codeword and apply the same decoding rule to the remaining, shorter \ concatenation of codewords." }], "Example", CellTags->"ExamHuff unfair coin"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t\t", FontWeight->"Bold"], StyleBox["McMillan Inequality ", FontSlant->"Italic"], ButtonBox["[McMi56]", BaseStyle->"Hyperlink", ButtonData:>"RefMcMi56"], "\nA necessary and sufficient condition for the existence of a uniquely \ decodable code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " of cardinality ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " with codewords of length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", is" }], "Theorem", GeneratedCell->True, CellTags->"TheoHuff McMillan"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "i"]]]}], "\[LessEqual]", "1."}], TraditionalForm]], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormHuff McMillan"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": We shall only prove that the inequality above is a necessary condition \ for the existence of a U.D. code with codeword ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ". That it also is a sufficient condition will be proved later in this \ chapter. \nLet ", Cell[BoxData[ FormBox[ RowBox[{"L", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "i"]]]}]}], TraditionalForm]]], " and let us assume (without loss of generality) that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "1"], "\[LessEqual]", SubscriptBox["l", "2"], "\[LessEqual]", "\[Ellipsis]", "\[LessEqual]", SubscriptBox["l", "n"]}], TraditionalForm]]], ". Then" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["L", "N"], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "i"]]]}], ")"}], "N"], "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", RowBox[{"N", ".", SubscriptBox["l", "1"]}]}], RowBox[{"N", ".", SubscriptBox["l", "n"]}]], FractionBox[ SubscriptBox["A", "j"], SuperscriptBox["2", "j"]]}]}]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "where ", Cell[BoxData[ FormBox[ SubscriptBox["A", "j"], TraditionalForm]]], " is the number of ways to write ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " as ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", SubscriptBox["i", "1"]], "+", SubscriptBox["l", SubscriptBox["i", "2"]], "+", "\[Ellipsis]", "+", SubscriptBox["l", SubscriptBox["i", "N"]]}], TraditionalForm]]], ", or, alternatively, ", Cell[BoxData[ FormBox[ SubscriptBox["A", "j"], TraditionalForm]]], " is the number of ways to make a concatenation of ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " codewords of total length ", Cell[BoxData[ FormBox["j", TraditionalForm]]], ".\nBecause ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " is U.D., no two different choices of ", Cell[BoxData[ FormBox["N", TraditionalForm]]], "-tuples of codewords will give rise (when concatenated) to the same string \ of length ", Cell[BoxData[ FormBox["j", TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["A", "j"], "\[LessEqual]", SuperscriptBox["2", "j"]}], TraditionalForm]]], ". \nSubstitution of this inequality in ", ButtonBox["(6.2)", BaseStyle->"Hyperlink", ButtonData:>"FormHuff McMillan"], " implies that for all ", Cell[BoxData[ FormBox[ RowBox[{"N", "\[GreaterEqual]", "1"}], TraditionalForm]]] }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SuperscriptBox["L", "N"], "\[LessEqual]", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", RowBox[{"N", ".", SubscriptBox["l", "1"]}]}], RowBox[{"N", ".", SubscriptBox["l", "n"]}]], "1"}]}], "=", RowBox[{ RowBox[{"N", "(", RowBox[{ SubscriptBox["l", "n"], "-", SubscriptBox["l", "1"]}], ")"}], "+", "1"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Since the left-hand side grows exponentially in ", Cell[BoxData[ FormBox["N", TraditionalForm]]], ", while the right hand side is a linear function of ", Cell[BoxData[ FormBox["N", TraditionalForm]]], ", we conclude that ", Cell[BoxData[ FormBox[ RowBox[{"L", "\[LessEqual]", "1"}], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "As can be seen in ", ButtonBox["Example 6.1", BaseStyle->"Hyperlink", ButtonData:>"ExamHuff unfair coin"], ", one may have to look for a much longer prefix of the received sequence \ than the length of the longest codeword to be able to decode it. This is not \ very practical." }], "Text"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "A code C is called a ", StyleBox["prefix code", FontSlant->"Italic"], " or ", StyleBox["instantaneous", FontSlant->"Italic"], " if no codeword is a prefix of another codeword." }], "Definition", CellTags->"DefHuff prefix code"], Cell[TextData[{ "The code in ", ButtonBox["Example 6.1", BaseStyle->"Hyperlink", ButtonData:>"ExamHuff unfair coin"], " is not a prefix code, since the codeword 0 is a prefix of the codeword 01. \ The code in ", ButtonBox["Example 5.1", BaseStyle->"Hyperlink", ButtonData:>"ExamShann unfair coin"], " clearly is prefix code. For the decoding of a prefix code one simply looks \ for a prefix of the received sequence that is a codeword. Because the code is \ a prefix code this codeword is unique. Remove it and proceed in the same way. \ \nNote that when a prefix code is used, one only needs to examine at most ", Cell[BoxData[ FormBox[ SubscriptBox["l", "n"], TraditionalForm]]], " bits of the received sequence to determine the first codeword in the \ received sequence.\nThe above observation proves the next theorem." }], "Text"], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\n", "A prefix code is uniquely decodable." }], "Theorem", CellTags->"LemHuff prefix=>UD"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox[" \t\t", FontWeight->"Bold"], StyleBox["Kraft Inequality", FontSlant->"Italic"], " ", ButtonBox["[Kraf49]", BaseStyle->"Hyperlink", ButtonData:>"RefKraf49"], "\nA necessary and sufficient condition for the existence of a prefix code \ with codeword lengths ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", is" }], "Theorem", GeneratedCell->True, CellTags->"TheoHuff Kraft"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "i"]]]}], "\[LessEqual]", RowBox[{"1", "\t", "."}]}], TraditionalForm]], "NumberedEquation", CellMargins->{{Inherited, 35.375}, {Inherited, Inherited}}, FontColor->GrayLevel[0], Background->RGBColor[0.839994, 1, 0.2], CellTags->"FormHuff Kraft"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": A prefix code is U.D. by ", ButtonBox["Lemma 6.2", BaseStyle->"Hyperlink", ButtonData:>"LemHuff prefix=>UD"], ". So, it follows from the ", ButtonBox["McMillan", BaseStyle->"Hyperlink", ButtonData:>"FormHuff McMillan"], " inequality (Thm. 6.1) that (6.3) is a necessary condition for a code to be \ a prefix code. \nWe shall now prove that (6.3) implies the existence of a \ prefix code with codewords ", Cell[BoxData[ FormBox[ FormBox[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm], TraditionalForm], TraditionalForm]]], " of lengths ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", and a fortiori of a U.D. code with these lengths." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "Without loss of generality ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "1"], "\[LessEqual]", SubscriptBox["l", "2"], "\[LessEqual]", "\[Ellipsis]", "\[LessEqual]", SubscriptBox["l", "n"]}], TraditionalForm]]], ". Because of this ordering and since ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"n", "-", "1"}]], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "i"]]]}], "<", "1"}], TraditionalForm]]], " we can define vectors ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], "=", RowBox[{"(", RowBox[{ SubscriptBox["c", RowBox[{"i", ",", "1"}]], ",", SubscriptBox["c", RowBox[{"i", ",", "2"}]], ",", "\[Ellipsis]", ",", SubscriptBox["c", RowBox[{"i", ",", SubscriptBox["l", "i"]}]]}], ")"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", by the binary expansion of ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"i", "-", "1"}]], RowBox[{"1", "/", SuperscriptBox["2", SubscriptBox["l", "j"]]}]}], TraditionalForm]]], ":" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"i", "-", "1"}]], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "j"]]]}], "=", RowBox[{ FractionBox[ SubscriptBox["c", RowBox[{"i", ",", "1"}]], "2"], "+", FractionBox[ SubscriptBox["c", RowBox[{"i", ",", "2"}]], SuperscriptBox["2", "2"]], "+", "\[Ellipsis]", "+", FractionBox[ SubscriptBox["c", RowBox[{"i", ",", SubscriptBox["l", "i"]}]], SuperscriptBox["2", SubscriptBox["l", "i"]]]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "For instance, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], "=", RowBox[{"(", RowBox[{"0", ",", "0", ",", "\[Ellipsis]", ",", "0"}], ")"}]}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "1"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], "=", RowBox[{"(", RowBox[{ "0", ",", "\[Ellipsis]", ",", "0", ",", "1", ",", "0", ",", "\[Ellipsis]", ",", "0"}], ")"}]}], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "2"], TraditionalForm]]], " with a one on coordinate ", Cell[BoxData[ FormBox[ SubscriptBox["l", "1"], TraditionalForm]]], " etc. By definition, ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " has length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "It remains to show that no ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "u"], TraditionalForm]]], " can be the prefix of a codeword ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "v"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[NotEqual]", "v"}], TraditionalForm]]], ". Suppose the contrary. Clearly ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "u"], "\[NotEqual]", SubscriptBox["l", "v"]}], TraditionalForm]]], ", otherwise the two words would be identical. So, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "u"], "<", SubscriptBox["l", "v"]}], TraditionalForm]]], " and thus ", Cell[BoxData[ FormBox[ RowBox[{"u", "<", "v"}], TraditionalForm]]], ". It also follows that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"v", "-", "1"}]], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "j"]]]}], "-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"u", "-", "1"}]], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "j"]]]}]}], OverscriptBox["=", RowBox[{"def", "."}]], RowBox[{ RowBox[{ RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], "l"], "v"], FractionBox[ SubscriptBox["c", RowBox[{"v", ",", "j"}]], SuperscriptBox["2", SubscriptBox["l", "j"]]]}], "-", RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], "l"], "u"], FractionBox[ SubscriptBox["c", RowBox[{"u", ",", "j"}]], SuperscriptBox["2", SubscriptBox["l", "j"]]]}]}], OverscriptBox["=", "prefix"]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", RowBox[{ SubscriptBox["l", "u"], "+", "1"}]}], "l"], "v"], FractionBox[ SubscriptBox["c", RowBox[{"v", ",", "j"}]], SuperscriptBox["2", SubscriptBox["l", "j"]]]}], "\[LessEqual]", RowBox[{ SubscriptBox[ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", RowBox[{ SubscriptBox["l", "u"], "+", "1"}]}], "l"], "v"], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "j"]]]}], "<", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", RowBox[{ SubscriptBox["l", "u"], "+", "1"}]}], "\[Infinity]"], FractionBox["1", SuperscriptBox["2", "j"]]}]}], "=", FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "u"]]]}], TraditionalForm]]], "," }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["while on the other hand", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"v", "-", "1"}]], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "j"]]]}], "-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"u", "-", "1"}]], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "j"]]]}]}], "=", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "u"}], RowBox[{"v", "-", "1"}]], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "j"]]]}], "\[GreaterEqual]", FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "u"]]]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["These two inequalities contradict each other.", "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Consider", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "1"], "=", "1"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "2"], "=", "2"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "3"], "=", "3"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "4"], "=", RowBox[{ SubscriptBox["l", "5"], "=", "4"}]}], TraditionalForm]]], ". \nSince ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FractionBox["1", SuperscriptBox["2", "1"]], "+", FractionBox["1", SuperscriptBox["2", "2"]], "+", FractionBox["1", SuperscriptBox["2", "3"]], "+", FractionBox["1", SuperscriptBox["", SuperscriptBox["2", "4"]]], "+", FractionBox["1", SuperscriptBox["2", "4"]]}], "=", "1"}], TraditionalForm]]], ", the Kraft inequality is satisfied.\nThe proof above gives the following \ codewords (we have used the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Length", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Do", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Table", BaseStyle->"RefGuideLink"], ", ", ButtonBox["IntegerDigits", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Print", BaseStyle->"RefGuideLink"], "):" }], "Example"], Cell[BoxData[ RowBox[{ RowBox[{"l", "=", RowBox[{"{", RowBox[{"1", ",", "2", ",", "3", ",", "4", ",", "4"}], "}"}]}], ";", RowBox[{"L", "=", RowBox[{"Length", "[", "l", "]"}]}], ";", RowBox[{"c", "=."}], ";", RowBox[{ RowBox[{"c", "[", "1", "]"}], "=", RowBox[{"Table", "[", RowBox[{"0", ",", RowBox[{"{", RowBox[{"l", "[", RowBox[{"[", "1", "]"}], "]"}], "}"}]}], "]"}]}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"c", "[", "i", "]"}], "=", RowBox[{"IntegerDigits", "[", RowBox[{ RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"j", "=", "1"}], RowBox[{"i", "-", "1"}]], FractionBox["1", SuperscriptBox["2", RowBox[{"l", "[", RowBox[{"[", "j", "]"}], "]"}]]]}], ")"}], SuperscriptBox["2", RowBox[{"l", "[", RowBox[{"[", "i", "]"}], "]"}]]}], ",", "2"}], "]"}]}], ",", RowBox[{"{", RowBox[{"i", ",", "2", ",", "L"}], "}"}]}], "]"}], ";", RowBox[{"Do", "[", RowBox[{ RowBox[{"Print", "[", RowBox[{"c", "[", "i", "]"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", "L"}], "}"}]}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", "0", "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "0"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "0"}], "}"}]], "Print"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "1", ",", "1", ",", "1"}], "}"}]], "Print"], Cell["This code is a prefix code, as one can easily verify.", "Text", FontSlant->"Italic"], Cell[TextData[{ "It is quite remarkable that the ", ButtonBox["McMillan", BaseStyle->"Hyperlink", ButtonData:>"FormHuff McMillan"], " and the ", ButtonBox["Kraft", BaseStyle->"Hyperlink", ButtonData:>"FormHuff Kraft"], " conditions ((6.2) and (6.3) are the same. It follows that the smallest \ average value of the length of a U.D. code is equal to the smallest average \ value of the length of a prefix code!\nThe next two theorems give bounds on \ the average value of the length of a prefix code (or a U.D. code)." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nConsider a plaintext source \[GothicCapitalS] that outputs messages ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], " with probability ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ". \nLet ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " be a U.D. code which maps message ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], " into codeword ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ".\nThen the expected value ", Cell[BoxData[ FormBox[ RowBox[{"L", "=", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], SubscriptBox["l", "i"]}]}]}], TraditionalForm]]], " of the length of an encoding satisfies\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{"L", "\[GreaterEqual]", RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": It follows from the well-known inequality ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"ln", " ", "x"}], "\[LessEqual]", RowBox[{"1", "-", "x"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"x", ">", "0"}], TraditionalForm]]], ", and from ", ButtonBox["(6.2)", BaseStyle->"Hyperlink", ButtonData:>"FormHuff McMillan"], " that" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "-", "L"}], "=", RowBox[{ RowBox[{ RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ RowBox[{ SubscriptBox["p", "i"], ".", SubscriptBox["log", "2"]}], SubscriptBox["p", "i"]}]}]}], "-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], SubscriptBox["l", "i"]}]}]}], "=", RowBox[{ RowBox[{ FractionBox["1", RowBox[{"ln", " ", "2"}]], RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ RowBox[{ SubscriptBox["p", "i"], ".", "ln"}], FractionBox["1", RowBox[{ SubscriptBox["p", "i"], SuperscriptBox[".2", SubscriptBox["l", "i"]]}]]}]}]}], "\[LessEqual]"}]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ FractionBox["1", RowBox[{"ln", " ", "2"}]], RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], "(", RowBox[{ FractionBox["1", RowBox[{ SubscriptBox["p", "i"], SuperscriptBox[".2", SubscriptBox["l", "i"]]}]], "-", "1"}], ")"}]}]}], "=", RowBox[{ RowBox[{ FractionBox["1", RowBox[{"ln", " ", "2"}]], RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "i"]]]}], ")"}], "-", "1"}], ")"}]}], "\[LessEqual]", "0"}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nConsider a plaintext \[GothicCapitalS] that outputs messages ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], " with probability ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ". \nThen a prefix code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " exists for this source with an expected word length ", Cell[BoxData[ FormBox["L", TraditionalForm]]], ", satisfying\n\n\t\t ", Cell[BoxData[ FormBox[ RowBox[{"L", "<", RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "+", "1"}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": Define ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], " by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "i"], "=", RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], RowBox[{"1", "/", SubscriptBox["p", "i"]}]}], "\[RightCeiling]"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["2", SubscriptBox["l", "i"]], "\[GreaterEqual]", RowBox[{"1", "/", SubscriptBox["p", "i"]}]}], TraditionalForm]]], " and thus" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{"1", "/", SuperscriptBox["2", SubscriptBox["l", "i"]]}]}], "\[LessEqual]", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], SubscriptBox["p", "i"]}]}], "=", "1"}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "For these values of ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", construct the code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " as described in the proof of ", ButtonBox["Theorem 6.3", BaseStyle->"Hyperlink", ButtonData:>"TheoHuff Kraft"], ". It is a prefix code and the expected value ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " of its length satisfies" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"L", "=", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], ".", SubscriptBox["l", "i"]}]}], "=", RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], ".", RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], RowBox[{"1", "/", SubscriptBox["p", "i"]}]}], "\[RightCeiling]"}]}]}], "<", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], ".", RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["log", "2"], RowBox[{"1", "/", SubscriptBox["p", "i"]}]}], "+", "1"}], ")"}]}]}]}], "=", RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "+", "1"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Corollary ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nThe minimal expected length of all prefix (or U.D.) codes for a plaintext \ source \[GothicCapitalS] with probability distribution ", Cell[BoxData[ FormBox[ StyleBox["p", FontVariations->{"Underline"->True}], TraditionalForm]]], " has a value ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " satisfying\n\n\t\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "\[LessEqual]", "L", "<", RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "+", "1"}]}], TraditionalForm]]], "." }], "Theorem"], Cell[TextData[{ "We shall now apply the above corollary to ", Cell[BoxData[ FormBox["N", TraditionalForm]]], "-tuples of source symbols. Since the entropy of ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " independent symbols equals ", Cell[BoxData[ FormBox["N", TraditionalForm]]], " times the entropy of one symbol, one gets an expected length ", Cell[BoxData[ FormBox[ SuperscriptBox["L", RowBox[{"(", "N", ")"}]], TraditionalForm]]], " for an ", Cell[BoxData[ FormBox["N", TraditionalForm]]], "-gram that satisfies" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"N", ".", RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}]}], "\[LessEqual]", SuperscriptBox["L", RowBox[{"(", "N", ")"}]], "<", RowBox[{ RowBox[{"N", ".", RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}]}], "+", "1"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["It follows that", "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "\[LessEqual]", FractionBox[ SuperscriptBox["L", RowBox[{"(", "N", ")"}]], "N"], "<", RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "+", FractionBox["1", "N"]}]}], TraditionalForm]]], "." }], "NumberedEquation"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["lim", RowBox[{"N", "\[RightArrow]", "\[Infinity]"}]], FractionBox[ SuperscriptBox["L", RowBox[{"(", "N", ")"}]], "N"]}], "=", RowBox[{"H", "(", "p", ")"}]}], TraditionalForm]]], ". This confirms the last of the three ", ButtonBox["interpretation", BaseStyle->"Hyperlink", ButtonData:>"InterShann entropy"], " of the entropy function ", Cell[BoxData[ FormBox["H", TraditionalForm]]], ", that were given at the beginning of Chapter 5." }], "Text"], Cell[TextData[{ "We shall now derive some properties that a prefix code with minimal \ expected ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " will satisfy." }], "Text"], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nConsider the source \[GothicCapitalS] which outputs independent symbols ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", with probabilities ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "\[GreaterEqual]", SubscriptBox["p", "2"], "\[GreaterEqual]", "\[Ellipsis]", "\[GreaterEqual]", SubscriptBox["p", "n"]}], TraditionalForm]]], ".\nAmong all U.D. codes for this source, let ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " be one which minimizes the expected value ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " of the length of an encoding. Let this code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " have codewords ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " of length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ". \nThen, after a suitable reindexing of codewords associated with the \ messages of the same probability, \n\nP1)\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "1"], "\[LessEqual]", SubscriptBox["l", "2"], "\[LessEqual]", "\[Ellipsis]", "\[LessEqual]", SubscriptBox["l", "n"]}], TraditionalForm]]], ".\nP2)\t", Cell[BoxData[ FormBox["C", TraditionalForm]]], " can be assumed to be a prefix code.\nP3)\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "i"]]]}], "=", "1"}], TraditionalForm]]], ".\nP4)\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", RowBox[{"n", "-", "1"}]], "=", SubscriptBox["l", "n"]}], TraditionalForm]]], ".\nP5)\tTwo of the codewords of length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "n"], TraditionalForm]]], " differ only in their last coordinate." }], "Theorem", CellTags->"TheoHuff P1-P5"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ":\n", StyleBox["P1)", FontWeight->"Bold"], "\tSuppose that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "u"], ">", SubscriptBox["p", "v"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "u"], ">", SubscriptBox["l", "v"]}], TraditionalForm]]], ". Make a new code ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " by interchanging ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "u"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "v"], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " is also an U.D. code. The expected length ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "*"], TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " satisfies" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["L", "*"], "=", RowBox[{ RowBox[{"L", "+", RowBox[{ SubscriptBox["p", "u"], "(", RowBox[{ SubscriptBox["l", "v"], "-", SubscriptBox["l", "u"]}], ")"}], "+", RowBox[{ SubscriptBox["p", "v"], "(", RowBox[{ SubscriptBox["l", "u"], "-", SubscriptBox["l", "v"]}], ")"}]}], "=", RowBox[{ RowBox[{"L", "+", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["p", "u"], "-", SubscriptBox["p", "v"]}], ")"}], RowBox[{"(", RowBox[{ SubscriptBox["l", "v"], "-", SubscriptBox["l", "u"]}], ")"}]}]}], "<", "L"}]}]}], TraditionalForm]]], "." }], "DisplayFormula", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "This contradicts our assumption on the minimality of ", Cell[BoxData[ FormBox["L", TraditionalForm]]], ".\nIf ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "u"], "=", SubscriptBox["p", "v"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"u", "<", "v"}], TraditionalForm]]], ", one can obtain ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "u"], "\[LessEqual]", SubscriptBox["l", "v"]}], TraditionalForm]]], " by a simple renumbering of the indices." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["P2)", FontWeight->"Bold"], "\tIf a U.D. code exists with expected length ", Cell[BoxData[ FormBox["L", TraditionalForm]]], ", then a prefix code with the same expected length ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " also exists because the necessary and sufficient conditions in Theorems ", ButtonBox["6.1", BaseStyle->"Hyperlink", ButtonData:>"TheoHuff McMillan"], " and ", ButtonBox["6.2", BaseStyle->"Hyperlink", ButtonData:>"TheoHuff Kraft"], ". are the same." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["P3)", FontWeight->"Bold"], "\tIf ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], FractionBox["1", SuperscriptBox["2", SubscriptBox["l", "i"]]]}], "<", "1"}], TraditionalForm]]], " one can decrease ", Cell[BoxData[ FormBox[ SubscriptBox["l", "n"], TraditionalForm]]], " by 1 and still satisfy the Kraft inequality ", ButtonBox["(6.3)", BaseStyle->"Hyperlink", ButtonData:>"FormHuff Kraft"], ". By ", ButtonBox["Theorem 6.2", BaseStyle->"Hyperlink", ButtonData:>"TheoHuff Kraft"], " a prefix code with smaller expected length would exist. This contradicts \ our assumption on ", Cell[BoxData[ FormBox["C", TraditionalForm]]], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["P4)", FontWeight->"Bold"], "\tIf ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "n"], ">", SubscriptBox["l", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], " then P1 implies that ", Cell[BoxData[ FormBox[ SubscriptBox["l", "n"], TraditionalForm]]], " is strictly greater than any of the other codeword lengths. It follows \ that the left hand side in P3) will be a rational number with denominator ", Cell[BoxData[ FormBox[ SuperscriptBox["2", SubscriptBox["l", "n"]], TraditionalForm]]], ". For this reason it can not be equal to 1." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["P5)", FontWeight->"Bold"], "\tDelete the last coordinate of ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "n"], TraditionalForm]]], " and call the resulting vector ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "n", "*"], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " be the code ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}]], ",", FormBox[ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "n", "*"], TraditionalForm]}], "}"}], TraditionalForm]]], ". It follows from P3) that ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " does not satisfy the Kraft inequality ", ButtonBox["(6.3)", BaseStyle->"Hyperlink", ButtonData:>"FormHuff Kraft"], ". So ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " is not a prefix code, while ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " was. This is only possible if ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "n", "*"], TraditionalForm]]], " is a proper prefix of some codeword ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "1"}]}], TraditionalForm]]], ". This means that this ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " must have length ", Cell[BoxData[ FormBox[ SubscriptBox["l", "n"], TraditionalForm]]], " too and also that ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "n", "*"], TraditionalForm]]], " differ in just their last coordinate. " }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\<\ Property P5 gives a clue how to construct a U.D. code with minimal expected \ codeword length. The method will be described in the next section. \ \>", "Text"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tHuffman Codes" }], "Section", CellTags->"SectHuff Huffman"], Cell[TextData[{ "The ", StyleBox["Huffman algorithm", FontSlant->"Italic"], " ", ButtonBox["[Huff52]", BaseStyle->"Hyperlink", ButtonData:>"RefHuff52"], " constructs for every stationary plaintext source a prefix code that has an \ average codeword length that is minimal among all U.D. codes for this source. \ The algorithm has a recursive character. \nIf the plaintext source has only \ two possible output symbols, both with a non-zero probability of occurring, \ the best one can do is to assign the symbols 0 and 1 to them. Clearly, ", Cell[BoxData[ FormBox[ RowBox[{"L", "=", RowBox[{"1", "<", RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "+", "1"}]}]}], TraditionalForm]]], " in this case. " }], "Text", GeneratedCell->True, CellTags->"AlgHuff Huffman"], Cell["\<\ Each recursion step consists of two parts: a reduction process and a \ splitting process. \ \>", "Text"], Cell[TextData[{ "The ", StyleBox["reduction process", FontVariations->{"Underline"->True}], ".\nLet \[GothicCapitalS] be a plaintext source which outputs independent \ symbols ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", with probabilities ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "\[GreaterEqual]", SubscriptBox["p", "2"], "\[GreaterEqual]", "\[Ellipsis]", "\[GreaterEqual]", SubscriptBox["p", "n"]}], TraditionalForm]]], ". Replace the two symbols ", Cell[BoxData[ FormBox[ SubscriptBox["m", RowBox[{"n", "-", "1"}]], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "n"], TraditionalForm]]], " by one new symbol ", Cell[BoxData[ FormBox[ SubsuperscriptBox["m", RowBox[{"n", "-", "1"}], "*"], TraditionalForm]]], " with probability ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["p", RowBox[{"n", "-", "1"}], "*"], "=", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}]}], TraditionalForm]]], ". In this way, a new source ", Cell[BoxData[ FormBox[ SuperscriptBox["\[GothicCapitalS]", "*"], TraditionalForm]]], " is obtained with one output symbol less than \[GothicCapitalS]. " }], "Text", CellTags->"DefHuff reduction"], Cell[TextData[{ "The ", StyleBox["splitting process", FontVariations->{"Underline"->True}], ".\nLet ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["C", "*"], "=", RowBox[{"{", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], ",", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], ",", "\[Ellipsis]", ",", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "2"}]], ",", FormBox[ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}], "*"], TraditionalForm]}], "}"}]}], TraditionalForm]]], " be a prefix code of minimal expected length ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "*"], TraditionalForm]]], " for the output symbols ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ SubscriptBox["m", "1"], ",", SubscriptBox["m", "2"], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"n", "-", "2"}]], ",", SubsuperscriptBox["m", RowBox[{"n", "-", "1"}], "*"]}], "}"}], TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ SuperscriptBox["\[GothicCapitalS]", "*"], TraditionalForm]]], " (to find this code in the recursion process, one may want to reindex these \ symbols in order of non-increasing probabilities).\nThe code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " is given by " }], "Text", CellTags->"DefHuff Splitting"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], "=", SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i", "*"]}], TraditionalForm]]], "\t\t\tfor ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "2"}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}]], "=", RowBox[{"(", RowBox[{ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}], "*"], ",", "0"}], ")"}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "n"], "=", RowBox[{"(", RowBox[{ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}], "*"], ",", "1"}], ")"}]}], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "In words, when the symbol ", Cell[BoxData[ FormBox[ SubsuperscriptBox["m", RowBox[{"n", "-", "1"}], "*"], TraditionalForm]]], " is split up in the two symbols ", Cell[BoxData[ FormBox[ SubscriptBox["m", RowBox[{"n", "-", "1"}]], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "n"], TraditionalForm]]], ", the codeword ", Cell[BoxData[ FormBox[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}], "*"], TraditionalForm], TraditionalForm]]], " will be extended with a 0 resp. 1 (or the other way around) to distinguish \ them." }], "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Let", StyleBox[" ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"n", "=", "6"}], TraditionalForm]]], " and let the plaintext source \[GothicCapitalS] output independent symbols \ described by the table:" }], "Example", CellTags->"ExamHuff coding"], Cell[BoxData[GridBox[{ { SubscriptBox["m", "1"], SubscriptBox["m", "2"], SubscriptBox["m", "3"], SubscriptBox["m", "4"], SubscriptBox["m", "5"], SubscriptBox["m", "6"]}, {"0.3", "0.2", "0.2", "0.1", "0.1", "0.1"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell[TextData[{ "To keep track of the reduction process, we use the notation ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ SubscriptBox["m", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["m", "n"]}], ")"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ SubsuperscriptBox["m", RowBox[{"n", "-", "1"}], "*"], TraditionalForm]]], ". After applying one reduction and a reordering of the probabilities in \ non-increasing order we get" }], "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { SubscriptBox["m", "1"], SubscriptBox["m", "2"], SubscriptBox["m", "3"], RowBox[{"(", RowBox[{ SubscriptBox["m", "5"], "+", SubscriptBox["m", "6"]}], ")"}], SubscriptBox["m", "4"]}, {"0.3", "0.2", "0.2", "0.2", "0.1"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell["Repeating this process, one gets", "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { SubscriptBox["m", "1"], RowBox[{"(", RowBox[{ SubscriptBox["m", "4"], "+", RowBox[{"(", RowBox[{ SubscriptBox["m", "5"], "+", SubscriptBox["m", "6"]}], ")"}]}], ")"}], SubscriptBox["m", "2"], SubscriptBox["m", "3"]}, {"0.3", "0.3", "0.2", "0.2"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell["and ", "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { RowBox[{"(", RowBox[{ SubscriptBox["m", "2"], "+", SubscriptBox["m", "3"]}], ")"}], SubscriptBox["m", "1"], RowBox[{"(", RowBox[{ SubscriptBox["m", "4"], "+", RowBox[{"(", RowBox[{ SubscriptBox["m", "5"], "+", SubscriptBox["m", "6"]}], ")"}]}], ")"}]}, {"0.4", "0.3", "0.3"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell["and finally", "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { RowBox[{"(", RowBox[{ SubscriptBox["m", "1"], "+", RowBox[{"(", RowBox[{ SubscriptBox["m", "4"], "+", RowBox[{"(", RowBox[{ SubscriptBox["m", "5"], "+", SubscriptBox["m", "6"]}], ")"}]}], ")"}]}], ")"}], RowBox[{"(", RowBox[{ SubscriptBox["m", "2"], "+", SubscriptBox["m", "3"]}], ")"}]}, {"0.6", "0.4"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell[TextData[{ "For the splitting process we traverse the above process in opposite \ direction. We start with the code ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], " and at each splitting of a message into two messages, we append a zero \ resp. a one.\nNote, how ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], " is replaced by ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " at each step. We get" }], "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], "+", RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "4"], "+", RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "5"], "+", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "6"]}], ")"}]}], ")"}]}], ")"}], RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], "+", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "3"]}], ")"}]}, { RowBox[{"(", "0", ")"}], RowBox[{"(", "1", ")"}]} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell["and", "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], "+", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "3"]}], ")"}], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "4"], "+", RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "5"], "+", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "6"]}], ")"}]}], ")"}]}, { RowBox[{"(", "1", ")"}], RowBox[{"(", RowBox[{"0", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"0", ",", "1"}], ")"}]} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell["and", "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "4"], "+", RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "5"], "+", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "6"]}], ")"}]}], ")"}], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "3"]}, { RowBox[{"(", RowBox[{"0", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"0", ",", "1"}], ")"}], RowBox[{"(", RowBox[{"1", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"1", ",", "1"}], ")"}]} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell["and", "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "3"], RowBox[{"(", RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "5"], "+", SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "6"]}], ")"}], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "4"]}, { RowBox[{"(", RowBox[{"0", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"1", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"1", ",", "1"}], ")"}], RowBox[{"(", RowBox[{"0", ",", "1", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"0", ",", "1", ",", "1"}], ")"}]} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell["and as code for the source \[GothicCapitalS]:", "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "1"], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "2"], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "3"], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "4"], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "5"], SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "6"]}, { RowBox[{"(", RowBox[{"0", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"1", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"1", ",", "1"}], ")"}], RowBox[{"(", RowBox[{"0", ",", "1", ",", "1"}], ")"}], RowBox[{"(", RowBox[{"0", ",", "1", ",", "0", ",", "0"}], ")"}], RowBox[{"(", RowBox[{"0", ",", "1", ",", "0", ",", "1"}], ")"}]} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell[TextData[{ "We see that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "1"], "=", RowBox[{ SubscriptBox["l", "2"], "=", RowBox[{ SubscriptBox["l", "3"], "=", "2"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "4"], "=", "3"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "5"], "=", RowBox[{ SubscriptBox["l", "6"], "=", "4"}]}], TraditionalForm]]], ". One can easily check that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "6"], RowBox[{"1", "/", SuperscriptBox["2", SubscriptBox["l", "i"]]}]}], "=", "1"}], TraditionalForm]]], " and that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}], "\[LessEqual]", "L", "<", RowBox[{"H", "(", StyleBox["p", FontVariations->{"Underline"->True}], ")"}]}], TraditionalForm]]], ". We use the ", ButtonBox["MultiEntropy", BaseStyle->"Hyperlink", ButtonData:>"InputShann MultiEntropy"], " function defined in Section 5.1 and further the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["Length", BaseStyle->"RefGuideLink"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"MultiEntropy", "[", "p_List", "]"}], ":=", RowBox[{"-", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"Length", "[", "p", "]"}]], RowBox[{ RowBox[{"p", "[", RowBox[{"[", "i", "]"}], "]"}], "*", RowBox[{"Log", "[", RowBox[{"2", ",", RowBox[{"p", "[", RowBox[{"[", "i", "]"}], "]"}]}], "]"}]}]}]}]}]], "Input", CellTags->"InputShann MultiEntropy"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", RowBox[{"{", RowBox[{ "0.3", ",", "0.2", ",", "0.2", ",", "0.1", ",", "0.1", ",", "0.1"}], "}"}]}], ";"}], "\n", RowBox[{"MultiEntropy", "[", "p", "]"}], "\n", RowBox[{ RowBox[{"l", "=", RowBox[{"{", RowBox[{"2", ",", "2", ",", "2", ",", "3", ",", "4", ",", "4"}], "}"}]}], ";", RowBox[{"len", "=", RowBox[{"Length", "[", "l", "]"}]}], ";"}], "\n", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "len"], FractionBox["1", SuperscriptBox["2", RowBox[{"l", "[", RowBox[{"[", "i", "]"}], "]"}]]]}], "==", "1"}], "\n", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "len"], RowBox[{ RowBox[{"p", "[", RowBox[{"[", "i", "]"}], "]"}], "*", RowBox[{"l", "[", RowBox[{"[", "i", "]"}], "]"}]}]}]}], "Input", GeneratedCell->True], Cell[BoxData["2.4464393446710155`"], "Output"], Cell[BoxData["True"], "Output"], Cell[BoxData["2.5`"], "Output"], Cell[TextData[{ "To demonstrate this Huffman code, we apply it to a text made up by the \ first 6 letters of the alphabet. We first simulate the source with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Which", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Random", BaseStyle->"RefGuideLink"], " and ", ButtonBox["Do", BaseStyle->"RefGuideLink"], " (note that <> joins two strings)." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"SeedRandom", "[", "12321", "]"}], ";", RowBox[{ RowBox[{"randomchar", "[", "x_", "]"}], ":=", RowBox[{"Which", "[", RowBox[{ RowBox[{"x", "<", "0.3`"}], ",", "\<\"a\"\>", ",", RowBox[{"x", "<", "0.5`"}], ",", "\<\"b\"\>", ",", RowBox[{"x", "<", "0.7`"}], ",", "\<\"c\"\>", ",", RowBox[{"x", "<", "0.8`"}], ",", "\<\"d\"\>", ",", RowBox[{"x", "<", "0.9`"}], ",", "\<\"e\"\>", ",", RowBox[{"x", "<", "1"}], ",", "\<\"f\"\>"}], "]"}]}], ";"}], "\n", RowBox[{ RowBox[{"sourcetext", "=", "\<\"\"\>"}], ";", RowBox[{"n", "=", "10"}], ";"}], "\n", RowBox[{ RowBox[{"Do", "[", RowBox[{ RowBox[{"sourcetext", "=", RowBox[{"sourcetext", "<>", RowBox[{"randomchar", "[", RowBox[{"RandomReal", "[", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], "]"}], "]"}]}]}], ",", RowBox[{"{", RowBox[{"j", ",", "1", ",", "n"}], "}"}]}], "]"}], ";"}], "\n", "sourcetext"}], "Input", GeneratedCell->True], Cell[BoxData["\<\"eedcbccaec\"\>"], "Output"], Cell[TextData[{ "To encode we use the Huffman coding determined above and the function ", ButtonBox["StringReplace", BaseStyle->"RefGuideLink"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"code", "=", RowBox[{"StringReplace", "[", RowBox[{"sourcetext", ",", RowBox[{"{", RowBox[{ RowBox[{"\"\\"", "\[Rule]", "\"\<00\>\""}], ",", RowBox[{"\"\\"", "\[Rule]", "\"\<10\>\""}], ",", RowBox[{"\"\\"", "\[Rule]", "\"\<11\>\""}], ",", RowBox[{"\"\\"", "\[Rule]", "\"\<011\>\""}], ",", RowBox[{"\"\\"", "\[Rule]", "\"\<0100\>\""}], ",", RowBox[{"\"\\"", "\[Rule]", "\"\<0101\>\""}]}], "}"}]}], "]"}]}]], "Input"], Cell[BoxData["\<\"010001000111110111100010011\"\>"], "Output"], Cell[TextData[{ "To compare the length of this particular coding with the entropy we use the \ function ", ButtonBox["MultiEntropy", BaseStyle->"Hyperlink", ButtonData:>"InputShann MultiEntropy"], " defined above and the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["StringLength", BaseStyle->"RefGuideLink"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{ RowBox[{"StringLength", "[", "code", "]"}], "/", "n"}], "-", RowBox[{"MultiEntropy", "[", "p", "]"}]}]], "Input"], Cell[BoxData["0.25356065532898464`"], "Output"], Cell[TextData[{ "In ", StyleBox["Mathematica,", FontSlant->"Italic"], " the decoding can be implemented with the function StringReplace, because \ this function works from left to right, as follows." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{"st", "=", RowBox[{"StringReplace", "[", RowBox[{"code", ",", RowBox[{"{", RowBox[{ RowBox[{"\"\<0101\>\"", "->", "\"\\""}], ",", RowBox[{"\"\<0100\>\"", "->", "\"\\""}], ",", RowBox[{"\"\<011\>\"", "->", "\"\\""}], ",", RowBox[{"\"\<11\>\"", "->", "\"\\""}], ",", RowBox[{"\"\<10\>\"", "->", "\"\\""}], ",", "\t\t", RowBox[{"\"\<00\>\"", "->", "\"\\""}]}], "}"}]}], "]"}]}], "\n", RowBox[{"sourcetext", "==", "st"}]}], "Input", GeneratedCell->True], Cell[BoxData["\<\"eedcbccaec\"\>"], "Output"], Cell[BoxData["True"], "Output"], Cell["\<\ In fact, the following figure gives a better way to describe the decoding \ process. Read the received string bitwise from left to right. Depending on \ the input symbol follow the tree from its root to the right: a 1 lets you go \ up and a 0 down. As soon as a leaf (end point) of the tree has been reached, \ write down the corresponding alphabet symbol and start again at the root with \ the next. For instance, the first two symbols in \"00010000010000101000010011\" are \ \"00\" and lead to symbol \"a\". The next four symbols are \"0100\" and lead \ to \"e\", etc.\ \>", "Text"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .61803 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.238095 0.309017 0.196201 [ [.02381 .30902 -39.9375 -6.28125 ] [.02381 .30902 0 6.28125 ] [.14286 .21092 -10 -13.8188 ] [.14286 .21092 0 -1.25625 ] [.14286 .40712 -10 1.25625 ] [.14286 .40712 0 13.8188 ] [.38095 .06377 -10 -13.8188 ] [.38095 .06377 0 -1.25625 ] [.38095 .16187 -10 1.25625 ] [.38095 .16187 0 13.8188 ] [.5 .01472 0 -6.28125 ] [.5 .01472 20.75 6.28125 ] [.61905 .18639 -10 -13.8188 ] [.61905 .18639 0 -1.25625 ] [.61905 .23544 -10 1.25625 ] [.61905 .23544 0 13.8188 ] [.85714 .1496 -10 -13.8188 ] [.85714 .1496 0 -1.25625 ] [.85714 .17413 -10 1.25625 ] [.85714 .17413 0 13.8188 ] [.97619 .13734 0 -6.28125 ] [.97619 .13734 20.75 6.28125 ] [.97619 .18639 0 -6.6875 ] [.97619 .18639 20.75 6.6875 ] [.7381 .25997 0 -6.6875 ] [.7381 .25997 20.75 6.6875 ] [.38095 .45617 -10 -13.8188 ] [.38095 .45617 0 -1.25625 ] [.38095 .55427 -10 1.25625 ] [.38095 .55427 0 13.8188 ] [.5 .40712 0 -6.6875 ] [.5 .40712 20.75 6.6875 ] [.5 .60332 0 -6.28125 ] [.5 .60332 20.75 6.28125 ] [ 0 0 0 0 ] [ 1 .61803 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.02 0 moveto -0.03 -0.008 lineto 0 0 lineto -0.03 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g gsave .02381 .30902 -100.938 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (root) show 98.937500 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 12.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .015 w .02381 .30902 Mdot .003 w .02381 .30902 m .21429 .15206 L s % Start of user PostScript 0 0 0.8 -0.8 MAarrowhead1 % End of user PostScript .21429 .15206 m .2619 .11282 L s .02381 .30902 m .21429 .46598 L s % Start of user PostScript 0 0 0.8 0.8 MAarrowhead1 % End of user PostScript .21429 .46598 m .2619 .50522 L s gsave .14286 .21092 -71 -17.8188 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .14286 .40712 -71 -2.74375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .015 w .2619 .11282 Mdot .003 w .2619 .11282 m .45238 .03434 L s % Start of user PostScript 1. -1. 1.8 -1.4 MAarrowhead1 % End of user PostScript .45238 .03434 m .5 .01472 L s .2619 .11282 m .45238 .1913 L s % Start of user PostScript 1. -1. 1.8 -0.6 MAarrowhead1 % End of user PostScript .45238 .1913 m .5 .21092 L s gsave .38095 .06377 -71 -17.8188 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .38095 .16187 -71 -2.74375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .015 w .5 .01472 Mdot gsave .5 .01472 -61 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (a) show 79.750000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .5 .21092 Mdot .003 w .5 .21092 m .69048 .17168 L s % Start of user PostScript 2. -0.5 2.8 -0.7 MAarrowhead1 % End of user PostScript .69048 .17168 m .7381 .16187 L s .5 .21092 m .69048 .25016 L s % Start of user PostScript 2. -0.5 2.8 -0.3 MAarrowhead1 % End of user PostScript .69048 .25016 m .7381 .25997 L s gsave .61905 .18639 -71 -17.8188 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .61905 .23544 -71 -2.74375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .015 w .7381 .16187 Mdot .003 w .7381 .16187 m .92857 .14225 L s % Start of user PostScript 3. -0.75 3.8 -0.85 MAarrowhead1 % End of user PostScript .92857 .14225 m .97619 .13734 L s .7381 .16187 m .92857 .18149 L s % Start of user PostScript 3. -0.75 3.8 -0.65 MAarrowhead1 % End of user PostScript .92857 .18149 m .97619 .18639 L s gsave .85714 .1496 -71 -17.8188 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .85714 .17413 -71 -2.74375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .015 w .97619 .13734 Mdot gsave .97619 .13734 -61 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (e) show 79.750000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .97619 .18639 Mdot gsave .97619 .18639 -61 -10.6875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.375 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.375000 moveto 464.000000 17.375000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.375000 lineto closepath clip newpath 63.000000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 71.375000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (f) show 79.750000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .7381 .25997 Mdot gsave .7381 .25997 -61 -10.6875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.375 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.375000 moveto 464.000000 17.375000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.375000 lineto closepath clip newpath 63.000000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 71.375000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (d) show 79.750000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .2619 .50522 Mdot .003 w .2619 .50522 m .45238 .42674 L s % Start of user PostScript 1. 1. 1.8 0.6 MAarrowhead1 % End of user PostScript .45238 .42674 m .5 .40712 L s .2619 .50522 m .45238 .5837 L s % Start of user PostScript 1. 1. 1.8 1.4 MAarrowhead1 % End of user PostScript .45238 .5837 m .5 .60332 L s gsave .38095 .45617 -71 -17.8188 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (0) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .38095 .55427 -71 -2.74375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (1) show 69.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .015 w .5 .40712 Mdot gsave .5 .40712 -61 -10.6875 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.375 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.375000 moveto 464.000000 17.375000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.375000 lineto closepath clip newpath 63.000000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 71.375000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (b) show 79.750000 13.625000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .5 .60332 Mdot gsave .5 .60332 -61 -10.2813 Mabsadd m 1 1 Mabs scale currentpoint translate 0 20.5625 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 16.562500 moveto 464.000000 16.562500 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 16.562500 lineto closepath clip newpath 63.000000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 71.375000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 79.750000 12.812500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 14.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore 0 0 m 1 0 L 1 .61803 L 0 .61803 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", CellMargins->{{Inherited, 147.625}, {Inherited, Inherited}}, PageBreakBelow->False, ImageSize->{317.75, 196.125}, ImageMargins->{{13.625, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ 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 Rzo=\ \>"], ImageRangeCache->{{{107.688, 424.438}, {666.563, 471.438}} -> {-2.30612, \ 7.08753, 0.0156213, 0.0189569}}], Cell["Decoding Tree for Huffman Code", "NumberedFigure", CellMargins->{{Inherited, 114.625}, {Inherited, Inherited}}, PageBreakAbove->False, TextAlignment->Center, TextJustification->0], Cell[TextData[{ StyleBox["Lemma ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet \[GothicCapitalS] be a plaintext source with independent output \ symbols ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", with probabilities ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "\[GreaterEqual]", SubscriptBox["p", "2"], "\[GreaterEqual]", "\[Ellipsis]", "\[GreaterEqual]", SubscriptBox["p", "n"]}], TraditionalForm]]], ". Let ", Cell[BoxData[ FormBox[ SuperscriptBox["\[GothicCapitalS]", "*"], TraditionalForm]]], " be the ", ButtonBox["reduced", BaseStyle->"Hyperlink", ButtonData:>"DefHuff reduction"], " plaintext source with independent output symbols ", Cell[BoxData[ FormBox[ SubsuperscriptBox["m", "i", "*"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "1"}]}], TraditionalForm]]], ", with probabilities ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["p", "i", "*"], "=", SubscriptBox["p", "i"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "2"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["p", RowBox[{"n", "-", "1"}], "*"], "=", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}]}], TraditionalForm]]], ". \nAssume that ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " is a prefix code for source ", Cell[BoxData[ FormBox[ SuperscriptBox["\[GothicCapitalS]", "*"], TraditionalForm]]], " that minimizes the expected value of the length of any prefix encoding for \ ", Cell[BoxData[ FormBox[ SuperscriptBox["\[GothicCapitalS]", "*"], TraditionalForm]]], ". Let the words in ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " be denoted by ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i", "*"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "1"}]}], TraditionalForm]]], ". Define code ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " for \[GothicCapitalS] by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], "=", SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i", "*"]}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "2"}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}]], "=", RowBox[{"(", RowBox[{ SubscriptBox[ RowBox[{"(", SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}], "*"], ")"}], "1"], ",", "\[Ellipsis]", ",", SubscriptBox[ RowBox[{"(", SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}], "*"], ")"}], RowBox[{"n", "-", "1"}]], ",", "0"}], ")"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "n"], "=", RowBox[{"(", RowBox[{ SubscriptBox[ RowBox[{"(", SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}], "*"], ")"}], "1"], ",", "\[Ellipsis]", ",", SubscriptBox[ RowBox[{"(", SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], RowBox[{"n", "-", "1"}], "*"], ")"}], RowBox[{"n", "-", "1"}]], ",", "1"}], ")"}]}], TraditionalForm]]], ".\nThen ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " is a prefix code for source ", Cell[BoxData[ FormBox["\[GothicCapitalS]", TraditionalForm]]], " that minimizes the expected value of the length of any prefix encoding for \ \[GothicCapitalS]." }], "Theorem", CellTags->"LemHuff Huffman"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": That ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " is a prefix code is straightforward. Let ", Cell[BoxData[ FormBox[ SubscriptBox["l", "i"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubsuperscriptBox["l", "i", "*"], TraditionalForm]]], " denote the length of ", Cell[BoxData[ FormBox[ SubscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i"], TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ StyleBox["c", FontVariations->{"Underline"->True}], "i", "*"], TraditionalForm]]], ". These numbers are related by ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", "i"], "=", SubsuperscriptBox["l", "i", "*"]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "2"}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["l", RowBox[{"n", "-", "1"}]], "=", RowBox[{ SubscriptBox["l", "n"], "=", RowBox[{ SubsuperscriptBox["l", RowBox[{"n", "-", "1"}], "*"], "+", "1"}]}]}], TraditionalForm]]], ". The expected lengths ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "*"], TraditionalForm]]], " of ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " resp. ", Cell[BoxData[ FormBox[ SuperscriptBox["C", "*"], TraditionalForm]]], " are related by:" }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"L", "=", RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "n"], RowBox[{ SubscriptBox["p", "i"], SubscriptBox["l", "i"]}]}], "=", RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"n", "-", "2"}]], RowBox[{ SubscriptBox["p", "i"], SubscriptBox["l", "i"]}]}], "+", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], SubscriptBox["l", RowBox[{"n", "-", "1"}]]}], "+", RowBox[{ SubscriptBox["p", "n"], SubscriptBox["l", "n"]}]}], "=", RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"n", "-", "2"}]], RowBox[{ SubsuperscriptBox["p", "i", "*"], SubsuperscriptBox["l", "i", "*"]}]}], "+", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "(", RowBox[{ SubsuperscriptBox["l", RowBox[{"n", "-", "1"}], "*"], "+", "1"}], ")"}], "+", RowBox[{ SubscriptBox["p", "n"], "(", RowBox[{ SubsuperscriptBox["l", RowBox[{"n", "-", "1"}], "*"], "+", "1"}], ")"}]}], "="}]}]}]}], TraditionalForm]]], "\n\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"n", "-", "2"}]], RowBox[{ SubsuperscriptBox["p", "i", "*"], SubsuperscriptBox["l", "i", "*"]}]}], "+", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}], ")"}], SubsuperscriptBox["l", RowBox[{"n", "-", "1"}], "*"]}], "+", RowBox[{"(", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}], ")"}]}], "=", RowBox[{ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], RowBox[{"n", "-", "2"}]], RowBox[{ SubsuperscriptBox["p", "i", "*"], SubsuperscriptBox["l", "i", "*"]}]}], "+", RowBox[{ SubsuperscriptBox["p", RowBox[{"n", "-", "1"}], "*"], SubsuperscriptBox["l", RowBox[{"n", "-", "1"}], "*"]}], "+", RowBox[{"(", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}], ")"}]}], "=", RowBox[{ SuperscriptBox["L", "*"], "+", RowBox[{"(", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}], ")"}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula", CellMargins->{{25.375, Inherited}, {Inherited, Inherited}}, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ "From ", ButtonBox["Theorem 6.7", BaseStyle->"Hyperlink", ButtonData:>"TheoHuff P1-P5"], " and a reasoning like the above, we know that any prefix code ", Cell[BoxData[ FormBox[ OverscriptBox["C", "^"], TraditionalForm]]], " for source ", Cell[BoxData[ FormBox["\[GothicCapitalS]", TraditionalForm]]], " that minimizes the expected value of the length of an encoding for \ \[GothicCapitalS] can be ", ButtonBox["reduced", BaseStyle->"Hyperlink", ButtonData:>"DefHuff reduction"], " to a code for source ", Cell[BoxData[ FormBox[ SuperscriptBox["\[GothicCapitalS]", "*"], TraditionalForm]]], " that has an expected encoding length equal to ", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["L", "^"], "-", RowBox[{"(", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}], ")"}]}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ SuperscriptBox["L", "*"], TraditionalForm]]], " was minimal for ", Cell[BoxData[ FormBox[ SuperscriptBox["\[GothicCapitalS]", "*"], TraditionalForm]]], ", we have ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{ OverscriptBox["L", "^"], "-", RowBox[{"(", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}], ")"}]}], "\[GreaterEqual]", SuperscriptBox["L", "*"]}], "=", RowBox[{"L", "-", RowBox[{"(", RowBox[{ SubscriptBox["p", RowBox[{"n", "-", "1"}]], "+", SubscriptBox["p", "n"]}], ")"}]}]}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["L", "^"], "\[GreaterEqual]", "L"}], TraditionalForm]]], ". Since ", Cell[BoxData[ FormBox[ OverscriptBox["L", "^"], TraditionalForm]]], " was minimal for \[GothicCapitalS], we conclude that ", Cell[BoxData[ FormBox[ RowBox[{ OverscriptBox["L", "^"], "=", "L"}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " realizes the minimal expected length for an encoding of \[GothicCapitalS]." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]], Cell[TextData[{ StyleBox["Theorem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], "\nLet \[GothicCapitalS] be a plaintext source \[GothicCapitalS] with \ independent output symbols ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "n"}], TraditionalForm]]], ", with probabilities ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "\[GreaterEqual]", SubscriptBox["p", "2"], "\[GreaterEqual]", "\[Ellipsis]", "\[GreaterEqual]", SubscriptBox["p", "n"]}], TraditionalForm]]], ". \nThen the ", ButtonBox["Huffman code", BaseStyle->"Hyperlink", ButtonData:>"AlgHuff Huffman"], " for this source will have an expected encoding length ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " that is minimal among all U.D. codes for this source." }], "Theorem"], Cell[TextData[{ StyleBox["Proof", FontWeight->"Bold"], ": For ", Cell[BoxData[ FormBox[ RowBox[{"n", "=", "2"}], TraditionalForm]]], " the statement is obvious because the Huffman code will be equal to ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"(", "0", ")"}], ",", RowBox[{"(", "1", ")"}]}], "}"}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox[ RowBox[{"L", "=", "1"}], TraditionalForm]]], ". The induction argument is a direct consequence of ", ButtonBox["Lemma 6.8", BaseStyle->"Hyperlink", ButtonData:>"LemHuff Huffman"], "." }], "Text", FontColor->RGBColor[0.500008, 0, 0.500008]], Cell["\[Square]", "Text", TextAlignment->Right, TextJustification->0, FontColor->RGBColor[0.500008, 0, 0.500008]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tUniversal Data Compression - The Lempel-Ziv Algorithms" }], "Section", CellTags->"SectHuff Lempel-Ziv"], Cell[TextData[{ "If one wants to compress data from a source with unknown statistics, the \ Huffman algorithm can not be applied. For such a situation, one needs \ so-called ", StyleBox["universal data compression", FontSlant->"Italic"], " techniques. Examples are the Lempel-Ziv algorithms (there are two of them) \ and a technique called arithmetic coding (see ", ButtonBox["[ZivL77]", BaseStyle->"Hyperlink", ButtonData:>"RefZivL77"], ", ", ButtonBox["[ZivL78]", BaseStyle->"Hyperlink", ButtonData:>"RefZivL78"], ", resp. ", ButtonBox["[RisL79]", BaseStyle->"Hyperlink", ButtonData:>"RefRisL79"], "). " }], "Text", GeneratedCell->True, CellTags->"DefHuff univ data comp"], Cell[TextData[{ "In [ZivL77], the authors introduce a window of a fixed length that slides \ over the sequence of source symbols, say from left to right. The ", StyleBox["sliding window", FontSlant->"Italic"], " consists of two parts: a larger part on the left, called the ", StyleBox["search buffer", FontSlant->"Italic"], ", and a smaller part on the right, called the ", StyleBox["look-ahead buffer", FontSlant->"Italic"], ". The source symbols in the search buffer have already been encoded. The \ encoder encodes as many new source symbols in the look-ahead buffer as \ possible by looking in the search buffer for the largest match of already \ encoded symbols. Suppose that the first ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " unencoded source symbols match with the ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " symbols in the search buffer that start at position ", Cell[BoxData[ FormBox["i", TraditionalForm]]], ", but that these ", Cell[BoxData[ FormBox["j", TraditionalForm]]], " symbols followed by the next source symbol, say ", Cell[BoxData[ FormBox["a", TraditionalForm]]], ", could not be matched. Then the encoder outputs the triple ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"i", ",", "j", ",", "a"}], ")"}], TraditionalForm]]], " and the sliding window will move ", Cell[BoxData[ FormBox[ RowBox[{"j", "+", "1"}], TraditionalForm]]], " characters to the right." }], "Text", CellTags->"DefHuff sliding"], Cell["\<\ For example, suppose that the search buffer has length 10 and the look-ahead \ buffer has length 5. Let the sliding window be given by \ \>", "Text"], Cell[BoxData[GridBox[{ {GridBox[{ {" "}, {GridBox[{ {"..", "b", "b", "c"} }]} }, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.5599999999999999]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.48]}, Offset[0.2]}, "RowsIndexed" -> {}}], UnderscriptBox[ UnderscriptBox[GridBox[{ {GridBox[{ {"1", "2", "3", "4", "5", "6", "7", "8", "9", "10"} }, GridBoxDividers->{ "Columns" -> {{False}}, "ColumnsIndexed" -> {}, "Rows" -> {{False}}, "RowsIndexed" -> {}}]}, {GridBox[{ {"a", "b", StyleBox["a", FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["c", FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["b", FontColor->RGBColor[0.500008, 0.500008, 0]], "c", "a", "a", "c", "a"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]} }], "\[UnderBrace]"], RowBox[{"search", " ", "buffer"}]], UnderscriptBox[ UnderscriptBox[GridBox[{ {GridBox[{ {"1", "2", "3", "4", "5"} }, GridBoxDividers->{ "Columns" -> {{False}}, "ColumnsIndexed" -> {}, "Rows" -> {{False}}, "RowsIndexed" -> {}}]}, {GridBox[{ { StyleBox["a", FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["c", FontColor->RGBColor[0.500008, 0.500008, 0]], StyleBox["b", FontColor->RGBColor[0.500008, 0.500008, 0]], "a", "c"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]} }], "\[UnderBrace]"], RowBox[{"look", " ", "ahead", " ", "buffer"}]], GridBox[{ {" "}, {GridBox[{ {"b", "a", RowBox[{"..", " "}]} }]} }, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.5599999999999999]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.48]}, Offset[0.2]}, "RowsIndexed" -> {}}]} }, GridBoxSpacings->{"Columns" -> { Offset[0.27999999999999997`], { Offset[0.06999999999999999]}, Offset[0.27999999999999997`]}, "ColumnsIndexed" -> {}, "Rows" -> { Offset[0.2], { Offset[0.4]}, Offset[0.2]}, "RowsIndexed" -> {}}]], "Text"], Cell[TextData[{ "The largest match that can be found, are the first three letters in the \ look-ahead buffer with the three letters starting at position 3 in the search \ buffer. The encoder will send the triple ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"2", ",", "3", ",", "a"}], ")"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " is the first symbol that could not be matched. The sliding window will \ move four positions to the right. At the beginning, when the search buffer is \ empty, the first encoding will start with ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "0", ",", "x"}], ")"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["x", TraditionalForm]]], " is the first symbol of the source. " }], "Text"], Cell[TextData[{ "We shall now discuss a particular variant of the ", StyleBox["Lempel-Ziv", FontSlant->"Italic"], " codes. We follow ", ButtonBox["[Well99]", BaseStyle->"Hyperlink", ButtonData:>"RefWell99"], ", where also an analysis of the performance can be found. The basic idea is \ that both sides (sender and receiver) make a dictionary that represents in a \ smart way substrings that have been transmitted before. If the new string of \ characters that is to be compressed is already in the dictionary, one encode \ this string by the index of the corresponding entry in the dictionary. In \ general, this index will be a lot shorter than the string. If the new string \ is not in the dictionary, more work has to be done." }], "Text", GeneratedCell->True], Cell["\<\ The dictionary that sender and receiver are making simultaneously will be (a \ lot) larger than the alphabet \[ScriptCapitalA] of the source \ \[GothicCapitalS]. However, this dictionary will be stored in a very \ efficient way by means of a so-called linked list. The reader has to realize that the use of the Lempel-Ziv algorithm involves \ some overhead. However, for files of moderate length (say, one page of text) \ it already makes sense to use them.\ \>", "Text"], Cell[CellGroupData[{ Cell["Initialization", "Subsubsection", CellTags->"SubsubsHuff Ziv init"], Cell[TextData[{ "As already remarked before, the ", StyleBox["dictionary", FontSlant->"Italic"], " will be stored by means of a ", StyleBox["linked list", FontSlant->"Italic"], ". Each entry in the list has its own ", StyleBox["address", FontSlant->"Italic"], " ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ". The corresponding entry consists of an ordered pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", "a"}], ")"}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " should be interpreted as a pointer to another entry in the dictionary (so ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " is again an address) and where ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " is a letter in the alphabet \[ScriptCapitalA]. Let ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " denote the size of ", Cell[BoxData[ FormBox["\[ScriptCapitalA]", TraditionalForm]]], "." }], "Text", CellTags->"DefHuff dictionary"], Cell[TextData[{ "To initialize the algorithm we start with a dictionary consisting of the \ following ", Cell[BoxData[ FormBox[ RowBox[{"A", "+", "1"}], TraditionalForm]]], " entries:" }], "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"address", "pointer", "letter"}, {" ", " ", " "}, {"0", "0", RowBox[{"\[EmptySet]", " "}]}, {"1", "0", SubscriptBox["a", "1"]}, {"2", "0", SubscriptBox["a", "2"]}, {"\[VerticalEllipsis]", "\[VerticalEllipsis]", "\[VerticalEllipsis]"}, {"A", "0", SubscriptBox["a", "A"]} }]]], "\n" }], "Text", TextAlignment->Center, TextJustification->0], Cell["\<\ Note that all these entries point to the list element with address 0. The \ symbol \[EmptySet] is not an element of \[ScriptCapitalA]. It is an \ additional symbol, serving as a punctuation mark.\ \>", "Text"], Cell[TextData[{ "To be ready for the encoding, we set the pointer value ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " to 0 and the address pointer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " to ", Cell[BoxData[ FormBox[ RowBox[{"A", "+", "1"}], TraditionalForm]]], " (", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is the address of the next empty location in the linked list) . " }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Encoding", "Subsubsection", CellTags->"SubsubsHuff Ziv enco"], Cell[TextData[{ StyleBox["Algorithm ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Theorem"], FontWeight->"Bold"], StyleBox["\t\tEncoding for Lempel-Ziv", FontWeight->"Bold"], "\n", StyleBox["do \tbegin", FontWeight->"Bold"], " read the next source symbol ", Cell[BoxData[ FormBox["a", TraditionalForm]]], "\n\t", StyleBox["if ", FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", "a"}], ")"}], TraditionalForm]]], " is already an entry in the dictionary ", StyleBox["then", FontWeight->"Bold"], " give ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " the value of the address of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", "a"}], ")"}], TraditionalForm]]], " \n\t", StyleBox["else\tbegin", FontWeight->"Bold"], "\n\t\t1) transmit ", Cell[BoxData[ FormBox["v", TraditionalForm]]], ",\n\t\t2) make a new dictionary entry ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", "a"}], ")"}], TraditionalForm]]], " with address ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ",\n\t\t3) ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", RowBox[{"u", "+", "1"}]}], TraditionalForm]]], " (raise pointer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " by 1),\n\t\t4) give ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " the value of the address of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "a"}], ")"}], TraditionalForm]]], "\n", StyleBox["\t\tend\nuntil", FontWeight->"Bold"], " \t source stops." }], "Theorem", CellTags->"AlgHuff encoding Lempel Ziv"], Cell[TextData[{ "The interpretation of the above is the following. If ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", "a"}], ")"}], TraditionalForm]]], " is already an entry in the dictionary then the encoder is processing a \ string of symbols that has occurred at least once before. By assigning to ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " the value of the address of ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", "a"}], ")"}], TraditionalForm]]], ", one will be able later on to reconstruct this list.\nIf ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", "a"}], ")"}], TraditionalForm]]], " is not an entry in the dictionary, the encoder is faced with a new string \ that has not been processed before. It will transmit ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " to let the receiver know the address of the last source symbol in the \ preceding string. Further, the encoder makes a new dictionary entry ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", "a"}], ")"}], TraditionalForm]]], " with address ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ". The symbol ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " will serve as root of a new string. Pointer ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " is given the value of the address of entry ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "a"}], ")"}], TraditionalForm]]], ". The 0 in this entry points at dictionary entry ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"0", ",", "\[EmptySet]"}], ")"}], TraditionalForm]]], " which indicates the beginning of a new string. " }], "Text"], Cell["\<\ Note that the output symbols of the coding process are dictionary indices, \ more precisely, addresses of the linked list. Their length grows \ logarithmically in the length of the dictionary. Note also, that each new \ source symbol will increasingly often not give rise to a new output symbol, \ because the current string will already have been encoded before.\ \>", "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" (Part 1)", FontWeight->"Bold", FontSlant->"Plain"], StyleBox["\n", FontWeight->"Bold"], "Consider a binary string ", Cell[BoxData[ FormBox[ SubsuperscriptBox[ RowBox[{"{", SubscriptBox["s", "i"], "}"}], RowBox[{"i", "=", "1"}], "n"], TraditionalForm]]], " that we want to compress. So, ", Cell[BoxData[ FormBox[ RowBox[{"\[ScriptCapitalA]", "=", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"A", "=", "2"}], TraditionalForm]]], ".\nWe initialize the coding process by putting" }], "Example", CellTags->"ExamHuff L-Z coding"], Cell[BoxData[{ RowBox[{"Dict", "=", RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], "}"}]}], "\n", RowBox[{ RowBox[{"u", "=", "3"}], ";", RowBox[{"v", "=", "0"}], ";", RowBox[{"output", "=", RowBox[{"{", "}"}]}], ";"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], "}"}]], "Output"], Cell[TextData[{ "Note that we have used the negative number ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], " instead of the null symbol \[EmptySet].\nTo demonstrate the coding \ process, we output for each new source symbol ", Cell[BoxData[ FormBox[ SubscriptBox["s", "i"], TraditionalForm]]], " the new dictionary (represented as linked list), the new values of ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " and the complete output sequence. \nWe use the Mathematica function ", ButtonBox["Position", BaseStyle->"RefGuideLink"], " that finds the place of an element in a list. Because our list contains \ lists as elements we add [[1]] twice. Note that we subtract 1 from the \ address, because our numbering starts with 0 instead of 1." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"Pos", "[", RowBox[{"s_List", ",", "el_List"}], "]"}], ":=", RowBox[{ RowBox[{ RowBox[{ RowBox[{"Position", "[", RowBox[{"s", ",", "el"}], "]"}], "[", RowBox[{"[", "1", "]"}], "]"}], "[", RowBox[{"[", "1", "]"}], "]"}], "-", "1"}]}]], "Input"], Cell["For instance", "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"l", "=", RowBox[{"{", RowBox[{ RowBox[{"{", "3", "}"}], ",", RowBox[{"{", "5", "}"}], ",", RowBox[{"{", "7", "}"}], ",", RowBox[{"{", "2", "}"}], ",", RowBox[{"{", "1", "}"}]}], "}"}]}], ";"}], "\n", RowBox[{ RowBox[{"el", "=", RowBox[{"{", "7", "}"}]}], ";"}], "\n", RowBox[{"pos", "[", RowBox[{"l", ",", "el"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["2"], "Output"], Cell[TextData[{ "Now we are ready for the coding process. We use the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Do", BaseStyle->"RefGuideLink"], ", ", ButtonBox["If", BaseStyle->"RefGuideLink"], ", ", ButtonBox["MemberQ", BaseStyle->"RefGuideLink"], ", ", ButtonBox["Append", BaseStyle->"RefGuideLink"], ", and ", ButtonBox["Print", BaseStyle->"RefGuideLink"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"s", "=", RowBox[{"{", RowBox[{ "1", ",", "1", ",", "0", ",", "0", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1", ",", "0", ",", "0", ",", "1"}], "}"}]}], ";"}], "\n", RowBox[{"Do", "[", RowBox[{ RowBox[{ RowBox[{"If", "[", RowBox[{ RowBox[{"MemberQ", "[", RowBox[{"Dict", ",", RowBox[{"{", RowBox[{"v", ",", RowBox[{"s", "[", RowBox[{"[", "i", "]"}], "]"}]}], "}"}]}], "]"}], ",", "\t\t\t\t\t\t", RowBox[{"v", "=", RowBox[{"Pos", "[", RowBox[{"Dict", ",", RowBox[{"{", RowBox[{"v", ",", RowBox[{"s", "[", RowBox[{"[", "i", "]"}], "]"}]}], "}"}]}], "]"}]}], ",", RowBox[{ RowBox[{"output", "=", RowBox[{"Append", "[", RowBox[{"output", ",", "v"}], "]"}]}], ";", RowBox[{"Dict", "=", RowBox[{"Append", "[", RowBox[{"Dict", ",", " ", RowBox[{"{", RowBox[{"v", ",", RowBox[{"s", "[", RowBox[{"[", "i", "]"}], "]"}]}], "}"}]}], "]"}]}], ";", RowBox[{"v", "=", RowBox[{"Pos", "[", RowBox[{"Dict", ",", RowBox[{"{", RowBox[{"0", ",", RowBox[{"s", "[", RowBox[{"[", "i", "]"}], "]"}]}], "}"}]}], "]"}]}]}]}], "]"}], ";", RowBox[{"Print", "[", RowBox[{ "Dict", ",", "\"\<, v=\>\"", ",", "v", ",", "\"\<, total output is \>\"", ",", " ", "output"}], "]"}]}], ",", RowBox[{"{", RowBox[{"i", ",", "1", ",", RowBox[{"Length", "[", "s", "]"}]}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}}, ", v=", 2, ", total output is ", {}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", "2", "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}}, ", v=", 2, ", total output is ", {2}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}}, ", v=", 1, ", total output is ", {2, 2}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}}, ", v=", 1, ", total output is ", {2, 2, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "5", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}}, ", v=", 5, ", total output is ", {2, 2, 1}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1", ",", "5"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}, {5, 1}}, ", v=", 2, ", total output is ", {2, 2, 1, 5}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "4", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1", ",", "5"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}, {5, 1}}, ", v=", 4, ", total output is ", {2, 2, 1, 5}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "1"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "2", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1", ",", "5", ",", "4"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}, {5, 1}, {4, 1}}, ", v=", 2, ", total output is ", {2, 2, 1, 5, 4}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "1"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "3", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1", ",", "5", ",", "4"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}, {5, 1}, {4, 1}}, ", v=", 3, ", total output is ", {2, 2, 1, 5, 4}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "0"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "1", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1", ",", "5", ",", "4", ",", "3"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}, {5, 1}, {4, 1}, {3, 0}}, ", v=", 1, ", total output is ", {2, 2, 1, 5, 4, 3}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "0"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "5", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1", ",", "5", ",", "4", ",", "3"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}, {5, 1}, {4, 1}, {3, 0}}, ", v=", 5, ", total output is ", {2, 2, 1, 5, 4, 3}], Editable->False]], "Print"], Cell[BoxData[ InterpretationBox[ RowBox[{ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", RowBox[{"-", "1"}]}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "0"}], "}"}]}], "}"}], "\[InvisibleSpace]", "\<\", v=\"\>", "\[InvisibleSpace]", "6", "\[InvisibleSpace]", "\<\", total output is \"\>", "\[InvisibleSpace]", RowBox[{"{", RowBox[{"2", ",", "2", ",", "1", ",", "5", ",", "4", ",", "3"}], "}"}]}], SequenceForm[{{0, -1}, {0, 0}, {0, 1}, {2, 1}, {2, 0}, {1, 0}, {5, 1}, {4, 1}, {3, 0}}, ", v=", 6, ", total output is ", {2, 2, 1, 5, 4, 3}], Editable->False]], "Print"] }, Open ]], Cell[CellGroupData[{ Cell[BoxData["Decoding"], "Subsubsection", CellTags->"SubsubsHuff Ziv deco"], Cell[TextData[{ "For a proper decoding, the receiver must be able to reconstruct the same \ dictionary as was made by the transmitter. He can only act whenever a new \ output symbol arrives. Let ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " be this new symbol.\nBy the ", ButtonBox["encoding algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgHuff encoding Lempel Ziv"], " (Alg. 6.10) the arrival of ", Cell[BoxData[ FormBox["v", TraditionalForm]]], " implies that a new element (say the ", Cell[BoxData[ FormBox["u", TraditionalForm]]], "-th) has to be added to the dictionary. The pointer of this new entry is \ given by ", Cell[BoxData[ FormBox["v", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "The source symbol for this entry is not known since it is the root symbol \ of the next string (which has not been encoded yet by the transmitter). So, \ only the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"v", ",", RowBox[{"?", ")"}]}]}], TraditionalForm]]], " can be added to the dictionary.\nThe receiver is however able to fill in \ the missing symbol in the previous dictionary entry (at address ", Cell[BoxData[ FormBox[ RowBox[{"u", "-", "1"}], TraditionalForm]]], "). \nFurther, the receiver can decode the complete source symbol string \ associated with the received symbol. " }], "Text"], Cell[TextData[{ "We shall demonstrate the above process for the received sequence of ", ButtonBox["Example 6.4", BaseStyle->"Hyperlink", ButtonData:>"ExamHuff L-Z coding"], ". " }], "Text"], Cell[TextData[{ StyleBox["Example 6.4 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nThe receiver initializes just as the receiver did. So, ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "3"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", "0"}], TraditionalForm]]], ", and the dictionary is given by ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], "}"}], TraditionalForm]]], ".\nHe receives the following list of symbols: ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"2", ",", "2", ",", "1", ",", "5", ",", "4", ",", "3"}], "}"}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "The first received symbol is ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", "2"}], TraditionalForm]]], ". \nSo, the new dictionary entry will be ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"2", ",", RowBox[{"?", "}"}]}]}], TraditionalForm]]], " and will have address ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "3"}], TraditionalForm]]], ". The question mark can not be filled in yet. \nPointer 2 in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"2", ",", RowBox[{"?", "}"}]}]}], TraditionalForm]]], " points at the entry with address 2 in the dictionary, which is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], ". This entry tells us that the last symbol of the previous string was a 1 \ and that for the preceding part we need to go to the dictionary entry with \ address 0. This entry is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], TraditionalForm]]], ", so we are done.\nThe new dictionary is given by ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", RowBox[{"?", "}}"}]}]}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "The second received symbol is ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", "2"}], TraditionalForm]]], ". \nTo fill in the question mark in the current dictionary, we look at the \ entry in the dictionary with address ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", "2"}], TraditionalForm]]], ". This entry is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], ". Its source symbol gives the value of the question mark. Therefore, we get \ the following dictionary ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}]}], "}"}], TraditionalForm]]], ".\nAlso, a new dictionary entry has to be added, namely ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"v", ",", RowBox[{"?", "}={2,?}"}]}]}], TraditionalForm]]], " at address ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "4"}], TraditionalForm]]], ". \nPointer 2 in this new entry ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"2", ",", RowBox[{"?", "}"}]}]}], TraditionalForm]]], " points at the entry with address 2 in the dictionary, which is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], TraditionalForm]]], ". This entry tells us that the last symbol of the previous string was a 1 \ and that for the preceding part we need to go to the dictionary entry with \ address 0. This entry is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], TraditionalForm]]], ", so we are done. The decoded string is just \"1\".\nThe new dictionary is \ given by ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", RowBox[{"?", "}}"}]}]}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "The third received symbol is ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", "1"}], TraditionalForm]]], ". \nTo fill in the question mark in the current dictionary, we look at the \ entry in the dictionary with address ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", "1"}], TraditionalForm]]], ". This entry is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], TraditionalForm]]], ". Its source symbol gives the value of the question mark. So, we get the \ following dictionary ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}]}], "}"}], TraditionalForm]]], ".\nAlso, a new dictionary entry has to be added, namely ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"v", ",", RowBox[{"?", "}={1,?}"}]}]}], TraditionalForm]]], " at address ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "5"}], TraditionalForm]]], ". \nPointer 2 in this new entry ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"?", "}"}]}]}], TraditionalForm]]], " points at the entry with address 1 in the dictionary, which is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], TraditionalForm]]], ". This entry tells us that the last symbol of the previous string was a 0 \ and that for the preceding part we need to go to the dictionary entry with \ address 0. This entry is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], TraditionalForm]]], ", so we are done. The decoded string is just \"1\".\nThe new dictionary is \ given by ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", RowBox[{"?", "}}"}]}]}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "The fourth received symbol is ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", "5"}], TraditionalForm]]], ". \nTo fill in the question mark in the current dictionary, we look at the \ entry in the dictionary with address ", Cell[BoxData[ FormBox[ RowBox[{"v", "=", "5"}], TraditionalForm]]], ". This entry is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", RowBox[{"?", "}"}]}]}], TraditionalForm]]], ". The pointer 1 in this entry refers to another entry in the dictionary, \ namely with address 1, so to entry ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], TraditionalForm]]], ". Pointer 0 in this entry means that we are at the root of a string. The \ source symbol of entry ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], TraditionalForm]]], " tells us that ", Cell[BoxData[ FormBox[ RowBox[{"?", "=0"}], TraditionalForm]]], ". So, we get the following dictionary ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}]}], "}"}], TraditionalForm]]], ".\nAlso, a new dictionary entry has to be added, namely ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"v", ",", RowBox[{"?", "}={5,?}"}]}]}], TraditionalForm]]], " at address ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "6"}], TraditionalForm]]], ". \nPointer 5 in this new entry ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"5", ",", RowBox[{"?", "}"}]}]}], TraditionalForm]]], " points at the entry with address 5 in the dictionary, which is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], TraditionalForm]]], ". This entry tells us that the last symbol of the previous string was a 0 \ and that for the preceding part we need to go to the dictionary entry with \ address 1. This entry is ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], TraditionalForm]]], ", so the preceding source symbol is 0 and we are pointed to ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], TraditionalForm]]], ". This means that we are done and that the decoded string is just \"00\". \n\ The new dictionary is given by ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "\[EmptySet]"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"2", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", RowBox[{"?", "}}"}]}]}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell["The reader is invited to continue this process.", "Text", FontSlant->"Italic"] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectHuff Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nDecode the string 01100111111111100011, which has been made with the code \ in ", ButtonBox["Example 6.1", BaseStyle->"Hyperlink", ButtonData:>"ExamHuff unfair coin"], "." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Apply the ", ButtonBox["Huffman algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgHuff Huffman"], " to the ", ButtonBox["plaintext source", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Plaint Source"], " \[GothicCapitalS] that generates the symbols ", Cell[BoxData[ FormBox[ RowBox[{ "a", ",", " ", "b", ",", " ", "c", ",", " ", "d", ",", " ", "e", ",", " ", "f", ",", " ", "g"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " independently with probabilities 1/2, resp. 1/4, 1/8, 1/16 1/32, 1/64, \ 1/128 and 1/128. \nWhat is the expected number of bits needed for the \ encoding of one letter? Compare this with the entropy of the source." }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], Cell[BoxData[ FormBox[ RowBox[{" ", SuperscriptBox["", "M"]}], TraditionalForm]]], "\nDuplicate ", ButtonBox["Example 6.3", BaseStyle->"Hyperlink", ButtonData:>"ExamHuff coding"], " for the ", ButtonBox["plaintext source", BaseStyle->"Hyperlink", ButtonData:>"DefIntro Plaint Source"], " \[GothicCapitalS] that generates the symbols ", Cell[BoxData[ FormBox[ RowBox[{ "a", ",", " ", "b", ",", " ", "c", ",", " ", "d", ",", " ", "e", ",", " ", "f", ",", " ", "g"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " independently with probabilities ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "3"}], TraditionalForm]]], ", resp. ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"1", "/", "4"}], ",", " ", RowBox[{"1", "/", "6"}], ",", " ", RowBox[{"1", "/", "12"}], ",", " ", RowBox[{"1", "/", "15"}], ",", " ", RowBox[{"1", "/", "20"}], ",", " ", RowBox[{"1", "/", "30"}], ","}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{"1", "/", "60"}], TraditionalForm]]], ". " }], "Problem"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "Apply the Welch variant of the ", ButtonBox["Lempel-Ziv", BaseStyle->"Hyperlink", ButtonData:>"AlgHuff encoding Lempel Ziv"], " encoding procedure to the binary sequence 0000000000000000. \nDemonstrate \ the first 5 steps of the decoding process." }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tPublic-Key Cryptography" }], "Chapter", CellTags->"Chap Public"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Theoretical Model " }], "Section", CellTags->"SectPubl model"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tMotivation and Set-up" }], "Subsection", CellTags->"SubsPubl Motivation"], Cell["\<\ In modern day communication systems, conventional cryptosystems turned out to \ have two essential disadvantages.\ \>", "Text"], Cell[TextData[{ StyleBox["i)", FontWeight->"Bold"], " ", StyleBox["The problem of key management and distribution", FontVariations->{"Underline"->True}], ". \nA communication system with ", Cell[BoxData[ FormBox["n", TraditionalForm]]], " users, who all use a conventional cryptosystem to communicate with each \ other, implies the need of ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"2"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], " keys and ", Cell[BoxData[ FormBox[ RowBox[{"(", "\[NegativeThinSpace]", GridBox[{ {"n"}, {"2"} }], "\[NegativeThinSpace]", ")"}], TraditionalForm]]], " secure channels.\nWhenever a user wants to change his keys or a new user \ wants to participate in the system ", Cell[BoxData[ FormBox[ RowBox[{"n", "-", "1"}], TraditionalForm]]], " (resp. ", Cell[BoxData[ FormBox["n", TraditionalForm]]], ") new keys have to be generated and distributed over as many secure \ channels." }], "Text"], Cell[TextData[{ StyleBox["ii)", FontWeight->"Bold"], " ", StyleBox["The authentication problem", FontVariations->{"Underline"->True}], ". \nIn computer controlled communication systems the electronic equivalent \ of a signature is needed. Conventional cryptosystems do no provide this \ feature in a natural way, especially when there is a conflict between sender \ and receiver, it is impossible to decide who is right. Any message made by \ one of them could also have been made by the other." }], "Text"], Cell["\<\ These disadvantages prompted researchers to look for a different kind of \ cryptosystem.\ \>", "Text"], Cell[TextData[{ "In ", ButtonBox["[DifH76]", BaseStyle->"Hyperlink", ButtonData:>"RefDifH76"], ", W. Diffie and M.E. Hellman published their pioneering work on ", StyleBox["public-key cryptosystems", FontSlant->"Italic"], ". See ", ButtonBox["Figure 7.1", BaseStyle->"Hyperlink", ButtonData:>"FigPubl Public"], ", where their system is depicted." }], "Text", GeneratedCell->True, CellTags->"DefPubl Public Key"], Cell[GraphicsData["PostScript", "\<\ %! %%Creator: Mathematica %%AspectRatio: .22727 MathPictureStart /Mabs { Mgmatrix idtransform Mtmatrix dtransform } bind def /Mabsadd { Mabs 3 -1 roll add 3 1 roll add exch } bind def %% Graphics %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 10 scalefont setfont % Scaling calculations 0.0238095 0.04329 0.178571 0.04329 [ [.08874 .20022 -11.8438 -6.9375 ] [.08874 .20022 11.8438 6.9375 ] [.32684 .20022 -34.8125 -6.9375 ] [.32684 .20022 34.8125 6.9375 ] [.62987 .20022 -34.8125 -6.9375 ] [.62987 .20022 34.8125 6.9375 ] [.91126 .20022 -11.8438 -6.9375 ] [.91126 .20022 11.8438 6.9375 ] [.32684 .02706 -34.8125 -6.9375 ] [.32684 .02706 34.8125 6.9375 ] [.60823 .02706 -11.8438 -6.9375 ] [.60823 .02706 11.8438 6.9375 ] [.19697 .22186 -5.3125 -6.9375 ] [.19697 .22186 5.3125 6.9375 ] [.47835 .22186 -24.3438 -6.9375 ] [.47835 .22186 24.3438 6.9375 ] [.78139 .22186 -24.3438 -6.9375 ] [.78139 .22186 24.3438 6.9375 ] [.34848 .09199 -7.90625 -6.9375 ] [.34848 .09199 7.90625 6.9375 ] [ 0 0 0 0 ] [ 1 .22727 0 0 ] ] MathScale % Start of Graphics 1 setlinecap 1 setlinejoin newpath % Start of user PostScript /mathtops { gsave MBeginOrig moveto MEndOrig currentpoint grestore } bind def /MAtocoords { mathtops 4 2 roll mathtops 4 copy pop pop 3 -1 roll sub /arry exch def exch sub /arrx exch def arrx dup mul arry dup mul add sqrt /arrl exch def translate } bind def /MAarrowhead1 { gsave MAtocoords arrl 0. eq { 0 0 Mdot } { [ arrx arrl div arry arrl div -1 arry mul arrl div arrx arrl div 0 0 ] concat -0.014 0 moveto -0.02 -0.008 lineto 0 0 lineto -0.02 0.008 lineto fill } ifelse grestore } def % End of user PostScript 0 g .5 Mabswid .02381 .17857 m .15368 .17857 L .15368 .22186 L .02381 .22186 L .02381 .17857 L s gsave .08874 .20022 -72.8438 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Ann) show 82.687500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .24026 .17857 m .41342 .17857 L .41342 .22186 L .24026 .22186 L .24026 .17857 L s gsave .32684 .20022 -95.8125 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Encryption) show 128.625000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .54329 .17857 m .71645 .17857 L .71645 .22186 L .54329 .22186 L .54329 .17857 L s gsave .62987 .20022 -95.8125 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Decryption) show 128.625000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .84632 .17857 m .97619 .17857 L .97619 .22186 L .84632 .22186 L .84632 .17857 L s gsave .91126 .20022 -72.8438 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Bob) show 82.687500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .24026 .00541 m .41342 .00541 L .41342 .0487 L .24026 .0487 L .24026 .00541 L s gsave .32684 .02706 -95.8125 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Key) show 89.250000 13.875000 moveto (Source) show 128.625000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .54329 .00541 m .67316 .00541 L .67316 .0487 L .54329 .0487 L .54329 .00541 L s gsave .60823 .02706 -72.8438 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (Eve) show 82.687500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .19697 .22186 -66.3125 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.062500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (m) show 69.625000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore gsave .47835 .22186 -85.3438 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (P) show 69.562500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (B) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 74.812500 13.875000 moveto (H) show 81.437500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (m) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 88.000000 13.875000 moveto (L) show 94.562500 13.875000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (=) show 101.125000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show 107.687500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Math2Mono %%+ font Courier grestore gsave .78139 .22186 -85.3438 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (S) show 69.562500 13.875000 moveto 0.000000 0.000000 rmoveto 69.562500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 1.000000 0.000000 0.000000 setrgbcolor (B) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 74.812500 13.875000 moveto (H) show 81.375000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (c) show %%IncludeResource: font Math2Mono %%IncludeFont: Math2Mono /Math2Mono findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 87.937500 13.875000 moveto (L) show 94.500000 13.875000 moveto %%IncludeResource: font Math1Mono %%IncludeFont: Math1Mono /Math1Mono findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (=) show 101.125000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (m) show 107.687500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Math1Mono %%+ font Math2Mono %%+ font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Math1Mono %%+ Math2Mono %%+ Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Math1Mono %%+ font Math2Mono %%+ font Courier grestore gsave .34848 .09199 -68.9063 -10.9375 Mabsadd m 1 1 Mabs scale currentpoint translate 0 21.875 translate 1 -1 scale gsave 0.000000 0.000000 0.000000 setrgbcolor 1.000000 setlinewidth gsave newpath 61.000000 17.875000 moveto 464.000000 17.875000 lineto 464.000000 4.000000 lineto 61.000000 4.000000 lineto 61.000000 17.875000 lineto closepath clip newpath 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 63.000000 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (P) show 69.562500 15.562500 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 7.812500 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor (B) show 74.812500 13.875000 moveto %%IncludeResource: font Courier %%IncludeFont: Courier /Courier findfont 11.000000 scalefont [1 0 0 -1 0 0 ] makefont setfont 0.000000 0.000000 0.000000 setrgbcolor 0.000000 0.000000 rmoveto 1.000000 setlinewidth grestore grestore %%DocumentNeededResources: font Courier %%DocumentSuppliedResources: %%DocumentNeededFonts: Courier %%DocumentSuppliedFonts: %%DocumentFonts: font Courier grestore .15368 .20022 m .20563 .20022 L s % Start of user PostScript 3. 0.5 4.2 0.5 MAarrowhead1 % End of user PostScript .20563 .20022 m .24026 .20022 L s .41342 .20022 m .49134 .20022 L s % Start of user PostScript 9. 0.5 10.8 0.5 MAarrowhead1 % End of user PostScript .49134 .20022 m .54329 .20022 L s .71645 .20022 m .79437 .20022 L s % Start of user PostScript 16. 0.5 17.8 0.5 MAarrowhead1 % End of user PostScript .79437 .20022 m .84632 .20022 L s .32684 .0487 m .32684 .12662 L s % Start of user PostScript 7. -3. 7. -1.2 MAarrowhead1 % End of user PostScript .32684 .12662 m .32684 .17857 L s .5 .11364 m .5 .16558 L s % Start of user PostScript 11. -1.5 11. -0.3 MAarrowhead1 % End of user PostScript .5 .16558 m .5 .20022 L s .5 .11364 m .5 .0661 L s % Start of user PostScript 11. -1.5 11. -2.598 MAarrowhead1 % End of user PostScript .5 .0661 m .5 .03442 L s .5 .03442 m .54329 .03442 L s .54329 .02013 m .41342 .02013 L s 0 0 m 1 0 L 1 .22727 L 0 .22727 L closepath clip newpath % End of Graphics MathPictureEnd \ \>"], "Graphics", CellMargins->{{30, Inherited}, {Inherited, Inherited}}, ImageSize->{445.875, 101.125}, ImageMargins->{{0, 0}, {0, 0}}, ImageRegion->{{0, 1}, {0, 1}}, ImageCache->GraphicsData["CompressedBitmap", "\<\ eJztW91OFDEUHmaZXVDkRxBBI6yoXBoj/mD0QqOAMfFKvdILVySBC6MiTyLy OBp9D/VVxu2ZmXbafqfTmZ2FNdkGZ7qnZ85fT9vT0/q8c7C786FzsLfdaW/t dz7t7m1/aW9+3O+CGiNBMPI9CIKddiDqcbeaPuLuX/xDPAQE1z+L1zOBflvU 1kXtKNcUNIKEFn0UbALYGoDdArDDIVkn2SnxJBD6sAYGMwB2UzzvCsidcsTo VyiqoayNitooQB7TWxuyRt+mn2RFQ6VaQ9ZCT8tMi2ckvyU2kaSCDKGpGmlN mXBEKhjV2rqlZVATZdxBJixs0yULFW+zC2wYsj6CIaPNYP1MNpw4s9WsGgKu WucZrM+4pGTAmHPE2Soq42qmMxUJE3l5oGUPNWYquNW4pOCyh4uCGkZVZShl z55krTi88djLhFE1Y7oK7Bkg4aF9GXK1VMusqKmuYdihmie6xFZtZ6tZDAk2 B63YLddAw2XxnBWQWTxilosEA4uSreg8srZ4X+VkQkszu8SUFBKFD75Ma4hU hqxcrCgUvsIRy4fHR56S/R6i9x19QzxpgP89DqQn4klz1Z8ekVoS6R79VhNg WhzfjhkwUdap1tTwcu2aCR0hBhngQbk+QMsnit/uVyBrrMCVJLPWlof/ExWr swjw6KQG4VesBvKBxzyVQ+Ae5HoOzvRN5INE0m3xSN+kPxUhkUxPe0Qa+El0 iF4TeuLxfpNwvxaWDencRUi1rIgDZf8TQ6d9BiXTaGPhjiWNpOt8joTHXm/F UzLfuLiXnObcUPSh6EPRfUW/JJ4EUimedg/qLAF6y8en4gSAoVQwEgnFiwgP yWJufzjzINMivkuefC/0bsZJ2U+Bnv0bZWFWTmua6wrCTxJ6OKme5r3zRZJS xziqhtLkxnGP8j6Vtlf0kKYUUCxIKiiDOoV1UDKhs6E6JbZsvijbFjl5I51D KGEoxepwkUT5qll2R158VWnGbN/8s+PsAUoOprq+vMDo4KpYxiZsi9PIjFHd 9yxtMFW2Bsm6crk++JC/G0/rY60mhnQEyJ7kmp7qx71f3azTaFbq3hZsy96L 0hoLVaizh52DZQPLxUOpO312nvO+ARgAyGDqGNAyBdOAgpsJOb5QyKXWMpOl 1/F57Hvi6yKMwrRC20MbiLIgNUJhWNU+rengu49mUM7Ohh/kaSokKm1ezsVK Ojd7ss02oMjId1OBfIRlpC4U5VCsu0coWsURbGwFj+jQH31WcZtR6KeNE1Qz MjnQe0EiXGQdqEghc25KS8mIGk3cywCGtuzMoEZXGtAajLbNDMlVgIqWNvbS m+sGkMeAKhrt1JUoM7EC9Mk85zrAR1PNGqZBgBsAf9LTMGpnNi51OFdO+V7y Uur2Iwp90NYXXaJxUI7xBhpxQ5SPMUVnuqEoKM70dVcXjziDMYZHSzLiUVeO jKJ433ykMfupC6z28GhJLGQINiHCciV/Sif2GJvOfdu3JaVCrTWYM7kCqia6 /BvlxZCq/EZb906fDbmNj+dBtPajgct2jehSna7m5dk7MuTL/okyVigf1gu5 UFFXUsLFzGRZnUUHYU3p73bajU3nObugeLC3JPdx6ffNQtMhug6T5Q/33jiQ 34J+YXj25n5Yt1eJ/bs/Tjmw0Czjur/tkvRFUnutOl6/m+k0CL67ZFBAfqDm xJfZsMq1nub0c891iHmq3i+sBVrfEOwdEDJUvVTs452E40+pBFIRzUHvxZNY pYplIiDOaI1IRGf/41Ew8g+0iUm9\ \>"], ImageRangeCache->{{{0, 444.875}, {100.125, 0}} -> {-1.23336, -4.12502, \ 0.0549969, 0.0549969}}], Cell["A public-key cryptosystem for encryption.", "NumberedFigure", TextAlignment->Center, TextJustification->0, CellTags->"FigPubl Public"], Cell[TextData[{ "Every user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " of the cryptosystem makes a pair of matching algorithms ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], " (or gets them from a trustworthy authority). These algorithms operate on \ elements of later to be defined sets.\nAlgorithm ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " has to be made ", StyleBox["public", FontVariations->{"Underline"->True}], " by ", Cell[BoxData[ FormBox["U", TraditionalForm]]], ", while algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], " has to be kept ", StyleBox["secret", FontVariations->{"Underline"->True}], " by ", Cell[BoxData[ FormBox["U", TraditionalForm]]], ". Depending on the application, these algorithms must satisfy some of \ following properties:" }], "Text"], Cell[TextData[{ StyleBox["PK1", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], " are efficient algorithms, i.e. they do not need much computing time or \ memory space." }], "DisplayFormula", CellTags->"PropPubl PK1"], Cell[TextData[{ StyleBox["PK2", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["S", "U"], "(", RowBox[{ SubscriptBox["P", "U"], "(", "m", ")"}], ")"}], "=", "m"}], TraditionalForm]]], ", for every user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " and for each possible message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "DisplayFormula", CellTags->"PropPubl PK2"], Cell[TextData[{ StyleBox["PK3", FontWeight->"Bold"], ":\tIt is infeasible to find an algorithm ", Cell[BoxData[ FormBox[ SubsuperscriptBox["S", "U", "*"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " that satisfies ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox["S", "U", "*"], "(", RowBox[{ SubscriptBox["P", "U"], "(", "m", ")"}], ")"}], "=", "m"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "DisplayFormula", CellTags->"PropPubl PK3"], Cell[TextData[{ StyleBox["PK4", FontWeight->"Bold"], "\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["P", "U"], "(", RowBox[{ SubscriptBox["S", "U"], "(", "m", ")"}], ")"}], "=", "m"}], TraditionalForm]]], ", for every user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " and for each possible message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "DisplayFormula", CellTags->"PropPubl PK4"], Cell[TextData[{ StyleBox["PK5", FontWeight->"Bold"], ":\tIt is infeasible to find an algorithm ", Cell[BoxData[ FormBox[ SubsuperscriptBox["S", "U", "*"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " that satisfies ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubsuperscriptBox["P", "U", "*"], "(", RowBox[{ SubscriptBox["S", "U"], "(", "m", ")"}], ")"}], "=", "m"}], TraditionalForm]]], " for all ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "." }], "DisplayFormula", CellTags->"PropPubl PK5"], Cell["\<\ Properties PK3 and PK5 are not precisely formulated. Their precise meaning \ depends too much on the application and may vary in time.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tConfidentiality" }], "Subsection", CellTags->"SubsPubl Confidentiality"], Cell["We assume that properties PK1, PK2, and PK3 hold.", "Text"], Cell[TextData[{ "If ", "Alice", " wants to send an encrypted message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " to Bob, she first looks up the public (encryption) algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]], " of Bob. She encrypts ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " by applying algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]], " to ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". So, she sends to Bob:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{ SubscriptBox["P", "B"], "(", "m", ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Bob recovers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from the received ciphertext ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " by applying his (secret) algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["S", "B"], TraditionalForm]]], " to ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ". Indeed," }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["S", "B"], "(", "c", ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["S", "B"], "(", RowBox[{ SubscriptBox["P", "B"], "(", "m", ")"}], ")"}], OverscriptBox["=", ButtonBox["PK2", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK2"]], "m"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "To make the system practical to use, property ", ButtonBox["PK1", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK1"], " must hold. It is for the security of the system that property ", ButtonBox["PK3", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK3"], " has to be required. \nPK3 makes it possible to publish the (encryption) \ algorithms ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " without endangering the privacy of the transmitted messages." }], "Text"], Cell["We summarize the encryption scheme in the following table.", "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"Public", RowBox[{ SubscriptBox["P", "U"], " ", "of", " ", "all", " ", "users", " ", "U"}]}, { StyleBox["Secret", CellFrame->{{0, 0}, {0.5, 0}}], StyleBox[ RowBox[{ RowBox[{ SubscriptBox["S", "U"], "to", " ", "all", " ", "users"}], ",", " ", RowBox[{"except", " ", "U"}]}], CellFrame->{{0, 0}, {0.5, 0}}]}, {" ", " "}, {"Properties", RowBox[{"PK1", ",", " ", "PK2", ",", " ", "PK3"}]}, {" ", " "}, { RowBox[{"Encryption", " ", "of", " ", "m", " ", "by", " ", "Ann"}], RowBox[{ RowBox[{ SubscriptBox["P", "B"], RowBox[{"(", "m", ")"}]}], "=", "c"}]}, { RowBox[{"Decryption", " ", "of", " ", "c", " ", "by", " ", "Bob"}], RowBox[{ RowBox[{ SubscriptBox["S", "B"], RowBox[{"(", "c", ")"}]}], "=", "m"}]} }]]], " " }], "DisplayFormula"], Cell["A public-key cryptosystem used for privacy.", "NumberedTable", CellTags->"TablePubl Secrecy"], Cell[TextData[{ "If a user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " wants to change his personal key, he simply generates a new set of \ matching algorithms ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], " satisfying PK1, PK2 and PK3 and makes ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " public. The same has to be done when a new user wants to participate in \ the communication system. " }], "Text"], Cell[TextData[{ "In ", ButtonBox["[DifH76]", BaseStyle->"Hyperlink", ButtonData:>"RefDifH76"], ", the authors suggest to use trapdoor, one-way function for the encryption. \ A ", StyleBox["one-way function", FontSlant->"Italic"], " is a function ", Cell[BoxData[ FormBox[ RowBox[{"f", ":", RowBox[{"A", "\[RightArrow]", "B"}]}], TraditionalForm]]], " with the following properties:" }], "Text", GeneratedCell->True, CellTags->"DefPubl one-way"], Cell[TextData[{ "F1)\t", Cell[BoxData[ FormBox[ RowBox[{"f", "(", "a", ")"}], TraditionalForm]]], " is easy to evaluate for any ", Cell[BoxData[ FormBox[ RowBox[{"a", "\[Element]", "A"}], TraditionalForm]]], ",\nF2)\tit is computationally infeasible to compute ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", "\[LeftArrow]"], "(", "b", ")"}], TraditionalForm]]], " for almost all ", Cell[BoxData[ FormBox[ RowBox[{"b", "\[Element]", "B"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "A ", StyleBox["trapdoor", FontSlant->"Italic"], ", one-way function is a one-way function ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " satisfying the further property that" }], "Text", CellTags->"DefPubl trapdoor"], Cell[TextData[{ "F3) \t", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["f", "\[LeftArrow]"], "(", "b", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"b", "\[Element]", "B"}], TraditionalForm]]], ", is easy to compute given certain additional information. " }], "DisplayFormula"], Cell[TextData[{ "Property F1 makes such a function practical to use, while property F2 makes \ ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " safe to use for encryption purposes. Property F3 makes decryption by the \ receiver possible." }], "Text"], Cell[TextData[{ "In daily life a telephone book can be used as a one-way function; given a \ name one can easily find the corresponding telephone number but not the other \ way around. Looking up a telephone number of a person amounts to finding the \ name of that person. This takes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], "L"}], TraditionalForm]]], " operations, if ", Cell[BoxData[ FormBox["L", TraditionalForm]]], " is the number of names in the telephone guide. Finding the name if the \ telephone number is given means going through the whole book, name after \ name. The complexity is ", Cell[BoxData[ FormBox["L", TraditionalForm]]], ". Property F2 is based on the exponential relation between ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["log", "2"], "L"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox["L", TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "One-way functions ", Cell[BoxData[ FormBox["f", TraditionalForm]]], " are also used to check the authenticity of a person that wants to get \ access to something. Each user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " has his own PIN code ", Cell[BoxData[ FormBox[ SubscriptBox["x", "U"], TraditionalForm]]], ", but in a central computer only the name of ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " is stored together with the value ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["y", "U"], "=", RowBox[{"f", "(", SubscriptBox["x", "U"], ")"}]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "When ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " wants to get access he needs to give his name and ", Cell[BoxData[ FormBox[ SubscriptBox["x", "U"], TraditionalForm]]], ". The value ", Cell[BoxData[ FormBox[ RowBox[{"f", "(", SubscriptBox["x", "U"], ")"}], TraditionalForm]]], " will be evaluated and sent to the computer. If this values matches ", Cell[BoxData[ FormBox[ SubscriptBox["y", "U"], TraditionalForm]]], ", user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " can get access, otherwise not. The advantage of this system is that the \ PIN codes ", Cell[BoxData[ FormBox[ SubscriptBox["x", "U"], TraditionalForm]]], " do not need to be stored in the computer. So, anybody who can read out the \ memory of the computer can still not determine the PIN codes. " }], "Text"], Cell[TextData[{ "In Chapters ", ButtonBox["8", BaseStyle->"Hyperlink", ButtonData:>"Chap Discr"], ", ", ButtonBox["9", BaseStyle->"Hyperlink", ButtonData:>"Chap RSA"], ", and ", ButtonBox["12", BaseStyle->"Hyperlink", ButtonData:>"Chap Knapsack"], " we shall discuss various proposals for trapdoor one-way functions that can \ be used to turn into a public-key cryptosystem. In the next chapter we shall \ meet a one-way function, which does not have a trapdoor." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tDigital Signature" }], "Subsection", CellTags->"SubsPubl Signature"], Cell["We assume that properties PK1, PK4, and PK5 hold.", "Text"], Cell[TextData[{ "If ", "Alice", " wants to sign a message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " that she wants to send to Bob, she applies her own (secret) algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["S", "A"], TraditionalForm]]], " to ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", so she sends " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{ SubscriptBox["S", "A"], "(", "m", ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Bob recovers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " by applying the publicly known algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["P", "A"], TraditionalForm]]], " to ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ". Indeed, " }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", "c", ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", RowBox[{ SubscriptBox["S", "A"], "(", "m", ")"}], ")"}], OverscriptBox["=", ButtonBox["PK4", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK4"]], "m"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "The value ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " can be used by Bob as signature for ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", because, by ", ButtonBox["PK5", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK5"], ", ", "Alice", " is the only person who can compute ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " from ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", i.e. only she can make a ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " from a given message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", "c", ")"}], "=", "m"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "The converse however is possible: everybody is able to find a pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"m", ",", "c"}], ")"}], TraditionalForm]]], " such that ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " carries ", Cell[BoxData[ FormBox["m", TraditionalForm]]], "'s signature, i.e. such that ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", "c", ")"}], "=", "m"}], TraditionalForm]]], ": simply take any ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " and compute ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ SubscriptBox["P", "A"], "(", "c", ")"}]}], TraditionalForm]]], ".\nSo, Alice has to make sure that a randomly selected ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " has a negligible probability of leading to a useful message ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", "c", ")"}], "=", "m"}], TraditionalForm]]], ". This can quite easily be achieved by assuming some structure in each \ message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", e.g. start with the time and date." }], "Text", CellTags->"DiscPubl Discussion Signature"], Cell["\<\ We summarize this signature system explained above in the following table.\ \>", "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"Public", RowBox[{ SubscriptBox["P", "U"], " ", "of", " ", "all", " ", "users", " ", "U"}]}, {"Secret", RowBox[{ RowBox[{ SubscriptBox["S", "U"], "to", " ", "all", " ", "users"}], ",", " ", RowBox[{"except", " ", "U"}]}]}, {" ", " "}, {"Properties", RowBox[{"PK1", ",", " ", "PK4", ",", " ", "PK5"}]}, {" ", " "}, { RowBox[{"Signing", " ", "of", " ", "m", " ", "by", " ", "Ann"}], RowBox[{ RowBox[{ SubscriptBox["S", "A"], RowBox[{"(", "m", ")"}]}], "=", "c"}]}, { RowBox[{"Verification", " ", "of", " ", "c", " ", "by", " ", "Bob"}], RowBox[{ RowBox[{ SubscriptBox["P", "A"], RowBox[{"(", "c", ")"}]}], "=", "m"}]} }]]], " " }], "DisplayFormula"], Cell["\<\ A public-key cryptosystem used for signing a message.\ \>", "NumberedTable", CellTags->"TablePubl Signature"], Cell[TextData[{ "Note that anybody else can also verify ", "Alice", "'s signature by computing ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "A"], "(", "c", ")"}], TraditionalForm]]], ", so there is no secrecy." }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tConfidentiality and Digital Signature" }], "Subsection", CellTags->"SubsPubl Secr+Sign"], Cell["We assume that properties PK1, PK2, PK3, PK4, and PK5 hold.", "Text"], Cell[TextData[{ "If Alice wants to send message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " in encrypted form with her own signature to Bob, she combines the \ techniques of Subsections 7.1.2 and 7.1.3. Thus, she uses her own secret \ algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["S", "A"], TraditionalForm]]], " and the public algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]], " of Bob to send" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{ SubscriptBox["P", "B"], "(", RowBox[{ SubscriptBox["S", "A"], "(", "m", ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Bob recovers ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " by applying ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "A"], SubscriptBox["S", "B"]}], TraditionalForm]]], " to ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ". Indeed," }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", RowBox[{ SubscriptBox["S", "B"], "(", "c", ")"}], ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", RowBox[{ SubscriptBox["S", "B"], "(", RowBox[{ SubscriptBox["P", "B"], "(", RowBox[{ SubscriptBox["S", "A"], "(", "m", ")"}], ")"}], ")"}], ")"}], OverscriptBox["=", ButtonBox["PK2", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK2"]], RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", RowBox[{ SubscriptBox["S", "A"], "(", "m", ")"}], ")"}], OverscriptBox["=", ButtonBox["PK4", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK4"]], "m"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Although everybody can look up the public ", Cell[BoxData[ FormBox[ SubscriptBox["P", "B"], TraditionalForm]]], ", it is only Bob who can recover ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ", because only Bob knows ", Cell[BoxData[ FormBox[ SubscriptBox["S", "B"], TraditionalForm]]], ".\nBob keeps the pair ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", "B"], "(", "c", ")"}], TraditionalForm]]], ", which is ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", "B"], "(", RowBox[{ SubscriptBox["P", "B"], "(", RowBox[{ SubscriptBox["S", "A"], "(", "m", ")"}], ")"}], ")"}], TraditionalForm]]], ", i.e. ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["S", "A"], "(", "m", ")"}], TraditionalForm]]], ", as ", "Alice", "'s signature on ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", just like in Subsection 7.1.3." }], "Text"], Cell["We summarize this in the following table.", "Text"], Cell[TextData[{ Cell[BoxData[GridBox[{ {"Public", RowBox[{ SubscriptBox["P", "U"], " ", "of", " ", "all", " ", "users", " ", "U"}]}, {"Secret", RowBox[{ RowBox[{ SubscriptBox["S", "U"], "to", " ", "all", " ", "users"}], ",", " ", RowBox[{"except", " ", "U"}]}]}, {" ", " "}, {"Properties", RowBox[{"PK1", ",", "PK2", ",", "PK3", ",", "PK4", ",", "PK5"}]}, {" ", " "}, { RowBox[{"Ann", " ", "sends"}], RowBox[{ RowBox[{ SubscriptBox["P", "B"], RowBox[{"(", RowBox[{ SubscriptBox["S", "A"], RowBox[{"(", "m", ")"}]}], ")"}]}], "=", "c"}]}, {GridBox[{ { RowBox[{"Bob", " ", "computes"}]}, { RowBox[{"Bob", " ", "saves"}]} }], GridBox[{ { RowBox[{ RowBox[{ SubscriptBox["P", "A"], RowBox[{"(", RowBox[{ SubscriptBox["S", "B"], RowBox[{"(", "c", ")"}]}], ")"}]}], "=", "m"}]}, { RowBox[{ RowBox[{ SubscriptBox["S", "B"], RowBox[{"(", "c", ")"}]}], "=", RowBox[{ SubscriptBox["S", "A"], RowBox[{"(", "m", ")"}]}]}]} }]} }]]], " " }], "DisplayFormula"], Cell["\<\ A public-key cryptosystem used for encryption and signing.\ \>", "NumberedTable"] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tProblems" }], "Section", CellTags->"SectPubl Problems"], Cell[TextData[{ StyleBox["Problem ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Problem"], FontWeight->"Bold"], "\nIn a communication network every user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " has its own public encryption algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["P", "U"], TraditionalForm]]], " and secret decryption algorithm ", Cell[BoxData[ FormBox[ SubscriptBox["S", "U"], TraditionalForm]]], ". A message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from user ", Cell[BoxData[ FormBox["A", TraditionalForm]]], " (for Alice) to user ", Cell[BoxData[ FormBox["B", TraditionalForm]]], " (for Bob) will always be sent in the format ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"c", ",", "A"}], ")"}], TraditionalForm]]], ", with ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", RowBox[{ SubscriptBox["P", "B"], "(", "m", ")"}]}], TraditionalForm]]], ". \nThe name of the sender in this message tells Bob from whom the message \ originates.\nBob will retrieve ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"c", ",", "A"}], ")"}], TraditionalForm]]], ", by computing ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["S", "B"], "(", "c", ")"}], "=", RowBox[{ RowBox[{ SubscriptBox["S", "B"], "(", RowBox[{ SubscriptBox["P", "B"], "(", "m", ")"}], ")"}], "=", "m"}]}], TraditionalForm]]], " (see ", ButtonBox["PK2", BaseStyle->"Hyperlink", ButtonData:>"PropPubl PK2"], "), but Bob will also automatically send ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", "m", ")"}], ",", "B"}], ")"}], TraditionalForm]]], " back to Alice (note that ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", "m", ")"}], ",", "B"}], ")"}], TraditionalForm]]], " has the same format as ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["P", "B"], "(", "m", ")"}], ",", "A"}], ")"}], TraditionalForm]]], "). In this way, Alice knows that her message has been properly received by \ Bob." }], "Problem"], Cell[TextData[{ "a) Show how a third user ", Cell[BoxData[ FormBox["E", TraditionalForm]]], " (for Eve) of the network can retrieve message ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " that was sent by Alice to Bob. You may assume that Eve can intercept all \ messages that are communicated over the network, and that ", Cell[BoxData[ FormBox["C", TraditionalForm]]], " can also transmit her own texts, as long as they have the right format." }], "Problem"], Cell[TextData[{ "b) Show that communication over this network is still not safe if the \ protocol is such that Alice sends ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "B"], "(", RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["P", "B"], "(", "m", ")"}], ",", "A"}], ")"}], ")"}], TraditionalForm]]], " to Bob and that Bob automatically sends ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["P", "A"], "(", RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["P", "A"], "(", "m", ")"}], ",", "B"}], ")"}], ")"}], TraditionalForm]]], " back to Alice." }], "Problem", PageBreakBelow->True] }, Closed]] }, Closed]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], "\tDiscrete Logarithm Based Systems" }], "Chapter", CellTags->"Chap Discr"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tThe Discrete Logarithm System" }], "Section", CellTags->"SectDiscr Diffie Hellman"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Discrete Logarithm Problem" }], "Subsection", CellTags->"SubSDiscr Log Problem"], Cell[TextData[{ "In ", ButtonBox["[DifH76]", BaseStyle->"Hyperlink", ButtonData:>"RefDifH76"], ", Diffie and Hellman propose a public-key distribution system which is \ based on the apparent difficulty of computing logarithms over the ", ButtonBox["finite field", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], " ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " prime, which is also often denoted by ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], ". The reader, who is not familiar with the theory of finite fields is \ referred to ", ButtonBox["Appendix B", BaseStyle->"Hyperlink", ButtonData:>"ChapGaloisTh"], ". \nLet \[Alpha] be a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " (or generator) of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], ". So, each nonzero element ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "p", ")"}], TraditionalForm]]], " can be written as" }], "Text", GeneratedCell->True], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{"c", "=", SuperscriptBox["\[Alpha]", "m"]}], TraditionalForm]]]], "NumberedEquation", CellTags->"FormDiscr c=a^m"], Cell[TextData[{ "where ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is unique modulo ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nIn GF(7) the element ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", "3"}], TraditionalForm]]], " is a primitive element, as can be checked from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["3", "2"], "\[Congruent]", RowBox[{"2", " ", RowBox[{"(", RowBox[{"mod", " ", "7"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["3", "3"], "\[Congruent]", RowBox[{"6", " ", RowBox[{"(", RowBox[{"mod", " ", "7"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["3", "4"], "\[Congruent]", RowBox[{"4", " ", RowBox[{"(", RowBox[{"mod", " ", "7"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["3", "5"], "\[Congruent]", RowBox[{"5", " ", RowBox[{"(", RowBox[{"mod", " ", "7"}], ")"}]}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["3", "6"], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "7"}], ")"}]}]}], TraditionalForm]]], ".\nThis can be done at once with" }], "Example"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{"Mod", "[", RowBox[{ RowBox[{"3", "^", RowBox[{"{", RowBox[{"1", ",", "2", ",", "3", ",", "4", ",", "5", ",", "6"}], "}"}]}], ",", "7"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{"3", ",", "2", ",", "6", ",", "4", ",", "5", ",", "1"}], "}"}]], "Output"] }, Closed]], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nIn ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", "197", ")"}], ","}], TraditionalForm]]], " the element ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", "2"}], TraditionalForm]]], " is primitive. Such an element can be found with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["PowerList", BaseStyle->"RefGuideLink"], " (for which the package ", ButtonBox["Algebra`FiniteFields", BaseStyle->"AddOnsLink"], " first has to be initialized). This function finds a primitive element in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalF]", "p"], TraditionalForm]]], " and generates all its powers (starting with the 0-th). The second element \ in this list is the primitive element itself." }], "Example", CellTags->"ExamDiscr 2 primitive"], Cell[BoxData[ RowBox[{"<<", "\<\"FiniteFields`\"\>"}]], "Input"], Cell[BoxData[ RowBox[{ RowBox[{"p", "=", "197"}], ";", " ", RowBox[{ RowBox[{"PowerList", "[", RowBox[{"GF", "[", RowBox[{"p", ",", "1"}], "]"}], "]"}], "[", RowBox[{"[", "2", "]"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", "2", "}"}]], "Output"], Cell[TextData[{ "To check that 2 is a primitive element modulo 197 is a lot easier. The \ multiplicative group ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "197", "*"], TraditionalForm]]], " has order 196, so each element has an order dividing 196 (see ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ").\nWith the function ", ButtonBox["FactorInteger", BaseStyle->"RefGuideLink"], " one can find the different prime factors of 196." }], "Text", GeneratedCell->True, FontSlant->"Italic"], Cell[BoxData[ RowBox[{"FactorInteger", "[", "196", "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"7", ",", "2"}], "}"}]}], "}"}]], "Output"], Cell["It now follows from", "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"2", ",", RowBox[{"196", "/", "7"}], ",", "197"}], "]"}], "==", "1"}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"2", ",", RowBox[{"196", "/", "2"}], ",", "197"}], "]"}], "==", "1"}]}], "Input"], Cell[BoxData["False"], "Output"], Cell[BoxData["False"], "Output"], Cell[TextData[{ "that the order of 2 modulo 197 does not divide ", Cell[BoxData[ FormBox[ RowBox[{"196", "/", "2"}], TraditionalForm]]], " or ", Cell[BoxData[ FormBox[ RowBox[{"196", "/", "7"}], TraditionalForm]]], ", so the order must be 196." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is given, ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " can be computed from (8.1) with ", Cell[BoxData[ FormBox[ RowBox[{"2.", RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], "p"}], "\[RightCeiling]"}]}], TraditionalForm]]], " multiplications (see ", ButtonBox["[Knut81]", BaseStyle->"Hyperlink", ButtonData:>{ FrontEnd`FileName[{"G:", "HENK"}, "Galois.nb", CharacterEncoding -> "WindowsANSI"], "RefKnut81"}], ", pp. 441-466). One can realize this by creating the table ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", ",", SuperscriptBox["\[Alpha]", "2"], ",", SuperscriptBox["\[Alpha]", SuperscriptBox["2", "2"]], ",", SuperscriptBox["\[Alpha]", SuperscriptBox["2", "3"]], ",", "\[Ellipsis]", ",", SuperscriptBox["\[Alpha]", SuperscriptBox["2", RowBox[{ RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], "p"}], "\[RightCeiling]"}], "-", "1"}]]]}], TraditionalForm]]], " (each is the square of the previous one) and multiplying elements from \ this table, whose exponents add up to ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ". To this end the binary representation of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " can be used." }], "Text", CellTags->"FormDiscr 2 log q"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nTake m=171. Its binary expansion is 10101011, as follows from the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["IntegerDigits", BaseStyle->"RefGuideLink"], "." }], "Example", CellTags->"ExamDiscr Exp 171"], Cell[BoxData[ RowBox[{"IntegerDigits", "[", RowBox[{"171", ",", "2"}], "]"}]], "Input"], Cell[BoxData[ RowBox[{"{", RowBox[{ "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "0", ",", "1", ",", "1"}], "}"}]], "Output"], Cell[TextData[{ "So, now one has ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ FormBox[ RowBox[{ FormBox[ RowBox[{ FormBox[ SuperscriptBox["\[Alpha]", "171"], TraditionalForm], "=", SuperscriptBox["\[Alpha]", "128"]}], TraditionalForm], ".", SuperscriptBox["\[Alpha]", "32"], "."}], TraditionalForm], SuperscriptBox["\[Alpha]", "8"]}], TraditionalForm], ".", SuperscriptBox["\[Alpha]", "2"], ".", "\[Alpha]"}], TraditionalForm]]], ".\nThis calculation can also be done on the fly. The leftmost 1 in the \ binary representation of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " stands for \[Alpha]. Each subsequent symbol (from the left) in the binary \ representation implies a squaring of the previous result, but if this symbol \ is a 1 also an additional multiplication by \[Alpha] has to be performed." }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{ RowBox[{"Clear", "[", "a", "]"}], ";", RowBox[{ SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox[ RowBox[{"(", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox[ RowBox[{"(", "a", ")"}], "2"], ")"}], "2"], "a"}], ")"}], "2"], ")"}], "2"], "a"}], ")"}], "2"], ")"}], "2"], "a"}], ")"}], "2"], "a"}]}]], "Input", GeneratedCell->True], Cell[BoxData[ SuperscriptBox["a", "171"]], "Output"], Cell["\<\ If one has to perform the same modular exponentiation many times, for \ instance on a smart card implementation, there are ways to do this with fewer \ multiplications.\ \>", "Text"], Cell[TextData[{ StyleBox["Definition ", FontWeight->"Bold"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold"], StyleBox[".", FontWeight->"Bold"], StyleBox[ CounterBox["Definition"], FontWeight->"Bold"], StyleBox["\n", FontWeight->"Bold"], "An ", StyleBox["addition chain", FontSlant->"Italic"], " for an integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " is a sequence of integers ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "1"], "=", "1"}], TraditionalForm]]], Cell[BoxData[ FormBox[ SubscriptBox[ RowBox[{"<", "a"}], "2"], TraditionalForm]]], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"<", "\[Ellipsis]", "<", SubscriptBox["a", RowBox[{"l", "-", "1"}]], "<", SubscriptBox["a", "l"]}], "=", "m"}], TraditionalForm]]], ", with the property that each ", Cell[BoxData[ FormBox[ SubscriptBox["a", "k"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"2", "\[LessEqual]", "k", "\[LessEqual]", "l"}], TraditionalForm]]], ", is the sum of two (not necessarily different) preceding ", Cell[BoxData[ FormBox[ SubscriptBox["a", "i"], TraditionalForm]]], "'s. \nThe index ", Cell[BoxData[ FormBox["l", TraditionalForm]]], " is called the ", StyleBox["length", FontSlant->"Italic"], " of the chain." }], "Definition", CellTags->"DefDiscr addition chain"], Cell[TextData[{ "The way that addition chains are used for (modular) exponentiation, is \ clear. If ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["a", "k"], "=", RowBox[{ SubscriptBox["a", "i"], "+", SubscriptBox["a", "j"]}]}], TraditionalForm]]], ", then ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", "k"]], "=", RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["a", "i"]], ".", SuperscriptBox["\[Alpha]", SubscriptBox["a", "j"]]}]}], TraditionalForm]]], ". Hence, ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "m"], "=", SuperscriptBox["\[Alpha]", SubscriptBox["a", "l"]]}], TraditionalForm]]], " can now be computed recursively.\nIt is, in general, not obvious how the \ shortest addition chain of an integer ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " can be found. See ", ButtonBox["[Knut81]", BaseStyle->"Hyperlink", ButtonData:>{ FrontEnd`FileName[{"G:", "HENK"}, "Galois.nb", CharacterEncoding -> "WindowsANSI"], "RefKnut81"}], ", Section 4.6.3 and ", ButtonBox["[Bos92]", BaseStyle->"Hyperlink", ButtonData:>"RefBos92"], ", Chapter 4." }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nAn addition chain for ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", "15"}], TraditionalForm]]], " is the sequence 1,2,3,6,12,15.\nNote that the calculation of ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "15"], TraditionalForm]]], " involves 5 multiplications with this addition chain and 6 multiplications \ with the binary method explained before." }], "Example"], Cell[TextData[{ "In ", StyleBox["Mathematica", FontSlant->"Italic"], " the ", ButtonBox["PowerMod", BaseStyle->"RefGuideLink"], " function is a fast way to compute modular exponentiations. " }], "Text"], Cell[BoxData[ RowBox[{ RowBox[{"a", "=", "2"}], ";", RowBox[{"m", "=", "171111111"}], ";", RowBox[{"p", "=", "197888888"}], ";", RowBox[{"PowerMod", "[", RowBox[{"a", ",", "m", ",", "p"}], "]"}]}]], "Input", GeneratedCell->True], Cell[BoxData["55895160"], "Output"], Cell[TextData[{ "The opposite problem of finding ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " satisfying ", ButtonBox["(8.1)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], " from ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ", is not so easy. It is called the ", StyleBox["discrete logarithm problem", FontSlant->"Italic"], ", because in ", Cell[BoxData[ FormBox[ SubscriptBox["\[DoubleStruckCapitalZ]", "p"], TraditionalForm]]], " the exponent ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " can be written like ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ SubscriptBox["log", "\[Alpha]"], "c"}]}], TraditionalForm]]], "." }], "Text", CellTags->"DefDiscr dis log prob"], Cell[TextData[{ "In ", ButtonBox["[Knut73]", BaseStyle->"Hyperlink", ButtonData:>"RefKnut73"], ", pp.9, 575-576, one can find an algorithm that solves the logarithm \ problem. It involves roughly ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], SqrtBox["p"]}], TraditionalForm]]], " operations and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], SqrtBox["p"]}], TraditionalForm]]], " bits of memory space (where ", Cell[BoxData[ FormBox[ SubscriptBox["c", "1"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["c", "2"], TraditionalForm]]], " are some constants). In ", ButtonBox["Theorem 8.1", BaseStyle->"Hyperlink", ButtonData:>"AlgDiscr Baby Giant"], " a more precise analysis of this algorithm will be given. Writing ", Cell[BoxData[ FormBox[ RowBox[{"t", "=", RowBox[{ SubscriptBox["log", "2"], "p"}]}], TraditionalForm]]], " (and forgetting about the constants), one gets the following exponential \ relation between exponentiation and taking logarithms." }], "Text", GeneratedCell->True, CellTags->"FormDiscr Knuth q^1/2"], Cell[TextData[{ "\n", Cell[BoxData[GridBox[{ {"exponentiation", "t"}, { RowBox[{"taking", " ", "logarithms"}], SuperscriptBox["2", RowBox[{"t", "/", "2"}]]} }]]], "\n\nThe computational discrepancy between \nexponentiation and taking \ logarithms" }], "NumberedTable", CellTags->"TableDiscr discrep"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Diffie-Hellman Key Exchange System" }], "Subsection", CellTags->"SubsDiscr Dif-Hel Key Exch"], Cell[TextData[{ "We shall now describe how the discrepancy in computing time between \ exponentiation and taking logarithms, as depicted in ", ButtonBox["Table 8.1", BaseStyle->"Hyperlink", ButtonData:>"TableDiscr discrep"], ", can be used to execute a ", StyleBox["key exchange protocol", FontSlant->"Italic"], " of a \"public-key cryptography\"-type. Such a protocol is a method for two \ parties who do not share a common secret key to agree on a common key in a \ secure manner. " }], "Text", CellTags->"DefDiscr key exch"], Cell[TextData[{ StyleBox["Setting up the system", FontVariations->{"Underline"->True}], ":" }], "Text"], Cell[TextData[{ "1) All participants share as system parameters a prime number ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " (generator) ", Cell[BoxData[ FormBox["\[Alpha]", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{ ButtonBox["GF", BaseStyle->"Hyperlink", ButtonData:>"DefAppB GF"], RowBox[{"(", "p", ")"}]}], TraditionalForm]]], ".\n2) Each participant ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " chooses an integer ", Cell[BoxData[ FormBox[ SubscriptBox["m", "P"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "<", SubscriptBox["m", "p"], "\[LessEqual]", RowBox[{"p", "-", "2"}]}], TraditionalForm]]], ", at random, computes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "P"], "=", SuperscriptBox["\[Alpha]", SubscriptBox["m", "P"]]}], TraditionalForm]]], " and puts ", Cell[BoxData[ FormBox[ SubscriptBox["c", "P"], TraditionalForm]]], " in the public key book. Participant ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " keeps ", Cell[BoxData[ FormBox[ SubscriptBox["m", "P"], TraditionalForm]]], " secret. " }], "Text", GeneratedCell->True], Cell[TextData[{ StyleBox["Using the system", FontVariations->{"Underline"->True}], ":" }], "Text"], Cell[TextData[{ "Let us now assume that ", "Alice", " (", Cell[BoxData[ FormBox["A", TraditionalForm]]], " for short) and Bob (", Cell[BoxData[ FormBox["B", TraditionalForm]]], ") want to communicate with each other using a conventional cryptosystem, \ but that they have no secure channel to exchange a key. With the public key \ book, they can agree on the common secret key" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["k", RowBox[{"A", ",", "B"}]], "=", SuperscriptBox["\[Alpha]", RowBox[{ SubscriptBox["m", "A"], SubscriptBox["m", "B"]}]]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Alice can compute ", Cell[BoxData[ FormBox[ SubscriptBox["k", RowBox[{"A", ",", "B"}]], TraditionalForm]]], " by raising the publicly known ", Cell[BoxData[ FormBox[ SubscriptBox["c", "B"], TraditionalForm]]], " of Bob to the power ", Cell[BoxData[ FormBox[ SubscriptBox["m", "A"], TraditionalForm]]], ", which only she knows herself. Indeed," }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "B"], ")"}], SubscriptBox["m", "A"]], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", SubscriptBox["m", "B"]], ")"}], SubscriptBox["m", "A"]], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ SubscriptBox["m", "A"], SubscriptBox["m", "B"]}]], "=", SubscriptBox["k", RowBox[{"A", ",", "B"}]]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Similarly, Bob finds ", Cell[BoxData[ FormBox[ SubscriptBox["k", RowBox[{"A", ",", "B"}]], TraditionalForm]]], " by computing ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "A"], ")"}], SubscriptBox["m", "B"]], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "If somebody else (Eve) is able to compute ", Cell[BoxData[ FormBox[ SubscriptBox["m", "A"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ SubscriptBox["c", "A"], TraditionalForm]]], " (or ", Cell[BoxData[ FormBox[ SubscriptBox["m", "B"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ SubscriptBox["c", "B"], TraditionalForm]]], "), she can compute the key ", Cell[BoxData[ FormBox[ SubscriptBox["k", RowBox[{"A", ",", "B"}]], TraditionalForm]]], " just like ", "Alice", " or Bob did. By taking ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " sufficiently large, the computation time of solving this logarithm problem \ will be prohibitively large. Diffie and Hellman suggest to take ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " about 100 bits long. A different way of finding ", Cell[BoxData[ FormBox[ SubscriptBox["k", RowBox[{"A", ",", "B"}]], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ SubscriptBox["c", "A"], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["c", "B"], TraditionalForm]]], " does not seem to exist." }], "Text"], Cell[TextData[{ "There is no obvious reason to restrict the size of the finite field to a \ prime number. So, from now on the size of the field can be any prime power ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", SuperscriptBox["p", "e"]}], TraditionalForm]]], " (see ", ButtonBox["Theorem B.16", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field Iff Irred"], " or ", ButtonBox["Theorem B.20", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Field For p^m"], ")." }], "Text", GeneratedCell->True], Cell[TextData[{ "In ", ButtonBox["[Lune87]", BaseStyle->"Hyperlink", ButtonData:>"RefLune87"], ", Chapter XIII, efficient algorithms to find primitive elements in finite \ fields are described. See also ", ButtonBox["Problem B.6", BaseStyle->"Hyperlink", ButtonData:>"ProbAppB order axb"], " and ", ButtonBox["Problem B.10", BaseStyle->"Hyperlink", ButtonData:>"ProbAppB Gauss"], ".\nWe summarize the key distribution system in Table 8.2." }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[GridBox[{ { RowBox[{" ", RowBox[{"system", " ", "\n", "parameters"}]}], RowBox[{" ", RowBox[{ RowBox[{"field", " ", "size", " ", StyleBox["q", FontSlant->"Italic"]}], "\n", RowBox[{"primitive", " ", "element", " ", "\[Alpha]"}], " "}]}]}, {" ", " "}, { StyleBox[ RowBox[{" ", RowBox[{"secret", " ", "key", " ", "of", " ", StyleBox["P", FontSlant->"Italic"]}]}], CellFrame->{{0, 0}, {0, 2}}], StyleBox[ SubscriptBox["m", "P"], FontSlant->"Italic"]}, { RowBox[{"public", " ", "key", " ", "of", " ", StyleBox["P", FontSlant->"Italic"]}], StyleBox[ RowBox[{ SubscriptBox["c", "P"], "=", SuperscriptBox["\[Alpha]", SubscriptBox["m", "P"]]}], FontSlant->"Italic"]}, {" ", " "}, { RowBox[{" ", RowBox[{"common", " ", "key", " ", "of", " ", StyleBox["A", FontSlant->"Italic"], " ", "and", " ", StyleBox["B", FontSlant->"Italic"]}]}], StyleBox[ RowBox[{ SubscriptBox["k", RowBox[{"A", ",", "B"}]], "=", SuperscriptBox["\[Alpha]", RowBox[{ SubscriptBox["m", "A"], SubscriptBox["m", "B"]}]]}], FontSlant->"Italic"]}, { RowBox[{"Ann", " ", "computes"}], StyleBox[ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "B"], ")"}], SubscriptBox["m", "A"]], FontSlant->"Italic"]}, { RowBox[{"Bob", " ", "computes"}], StyleBox[ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "A"], ")"}], SubscriptBox["m", "B"]], FontSlant->"Italic"]} }]]], "\n\nThe Diffie-Hellman Key Exchange System" }], "NumberedTable", CellTags->"DefDiscr Diffie Hellman"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[" (Part 1)", FontWeight->"Bold", FontSlant->"Plain"], "\nLet ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "197", " "}], TraditionalForm]]], "and ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", "2"}], TraditionalForm]]], ".\nAlice chooses as a random secret exponent ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "A"], "=", "56"}], TraditionalForm]]], " and Bob as a random secret exponent ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "B"], "=", "111"}], TraditionalForm]]], ". They compute their public key with the ", ButtonBox["PowerMod", BaseStyle->"RefGuideLink"], " function." }], "Example", CellTags->"ExamDiscr Key Exch"], Cell[BoxData[{ RowBox[{"cA", "=", RowBox[{"PowerMod", "[", RowBox[{"2", ",", "56", ",", "197"}], "]"}]}], "\n", RowBox[{"cB", "=", RowBox[{"PowerMod", "[", RowBox[{"2", ",", "111", ",", "197"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["178"], "Output"], Cell[BoxData["82"], "Output"], Cell[TextData[{ "Alice", " can compute the common key with Bob by raising the publicly known ", Cell[BoxData[ FormBox[ SubscriptBox["c", "B"], TraditionalForm]]], " to the power ", Cell[BoxData[ FormBox[ SubscriptBox["m", "A"], TraditionalForm]]], ", which she only knows. She gets:" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"82", ",", "56", ",", "197"}], "]"}]], "Input"], Cell[BoxData["114"], "Output"], Cell[TextData[{ " Bob gets the same common key by raising ", Cell[BoxData[ FormBox[ SubscriptBox["c", "A"], TraditionalForm]]], " to the power ", Cell[BoxData[ FormBox[ SubscriptBox["m", "B"], TraditionalForm]]], ". Indeed, he gets:" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"178", ",", "111", ",", "197"}], "]"}]], "Input"], Cell[BoxData["114"], "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tOther Discrete Logarithm Based Systems" }], "Section", CellTags->"SectDiscr Other Log Systems"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tElGamal's Public-Key Cryptosystems" }], "Subsection", CellTags->"SubsDiscr ElGamal"], Cell[TextData[{ "In ", ButtonBox["[ElGa88]", BaseStyle->"Hyperlink", ButtonData:>"RefElGa85"], ", two public-key systems are described that are based on the ", ButtonBox["discrete logarithm problem", BaseStyle->"Hyperlink", ButtonData:>"TableDiscr discrep"], ". One can be used for encryption purposes, the other as a signature scheme.\ \nIn both systems the transmitted text is longer than the plaintext. " }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell["Setting It Up", "Subsubsection", CellTags->"SubsubsDisc ElGamal setting it up"], Cell[TextData[{ "As system parameters, all participants share a prime number ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " and a ", ButtonBox["generator", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " (primitive element) \[Alpha] of the ", ButtonBox["multiplicative group", BaseStyle->"Hyperlink", ButtonData:>"ExamAppB MultiGroup"], " ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "p", "*"], TraditionalForm]]], ". The generalization to finite fields is straightforward and will be \ omitted." }], "Text", GeneratedCell->True], Cell[TextData[{ "A variation that one sees quite often is to consider ", Cell[BoxData[ FormBox[ SubsuperscriptBox["\[DoubleStruckCapitalZ]", "q", "*"], TraditionalForm]]], " with ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " prime and an element ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "\[Element]", SubsuperscriptBox["\[DoubleStruckCapitalZ]", "q", "*"]}], TraditionalForm]]], " of large prime order, say ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ", instead of taking a primitive element. Note that by ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ", ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " must divide ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1."}], TraditionalForm]]], " " }], "Text", GeneratedCell->True], Cell[TextData[{ "Each participant ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " chooses an integer ", Cell[BoxData[ FormBox[ SubscriptBox["m", "P"], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", SubscriptBox["m", "p"], "\[LessEqual]", RowBox[{"p", "-", "1"}]}], TraditionalForm]]], ", at random, computes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "P"], "=", RowBox[{ SuperscriptBox["\[Alpha]", SubscriptBox["m", "P"]], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], " and makes ", Cell[BoxData[ FormBox[ SubscriptBox["c", "P"], TraditionalForm]]], " public. Participant ", Cell[BoxData[ FormBox["P", TraditionalForm]]], " keeps ", Cell[BoxData[ FormBox[ SubscriptBox["m", "P"], TraditionalForm]]], " secret. " }], "Text"], Cell["\<\ As a variation, each participant can also choose his own finite field and \ primitive element \[Alpha], instead of having them as system parameters, but \ there seems to be little reason to do so.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["ElGamal's Secrecy System", "Subsubsection", CellTags->"SubsubsDiscr ElGamal secrecy"], Cell[TextData[StyleBox["Encryption of a message for Bob.", FontVariations->{"Underline"->True}]], "Text"], Cell[TextData[{ "Suppose that Alice wants to send a private message ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " to Bob. The message is represented by an integer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", RowBox[{"p", "-", "1"}]}], "}"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Alice selects a random integer ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " and computes ", Cell[BoxData[ FormBox[ RowBox[{"R", "=", SuperscriptBox["\[Alpha]", "r"]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "Next, ", "Alice", " computes ", Cell[BoxData[ FormBox[ RowBox[{"S", "=", RowBox[{"u", ".", SuperscriptBox[ SubscriptBox["c", "B"], "r"]}]}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Alice", " sends to Bob, the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", "S"}], ")"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[StyleBox["Decryption by Bob.", FontVariations->{"Underline"->True}]], "Text"], Cell[TextData[{ "Bob receives the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", "S"}], ")"}], TraditionalForm]]], " and can quite easily retrieve the message ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " with his own secret ", Cell[BoxData[ FormBox[ SubscriptBox["m", "B"], TraditionalForm]]], " with the following calculation:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "/", SuperscriptBox["R", SubscriptBox["m", "B"]]}], "=", RowBox[{ RowBox[{ RowBox[{"u", ".", SuperscriptBox[ SubscriptBox["c", "B"], "r"]}], "/", SuperscriptBox["\[Alpha]", RowBox[{"r", ".", SubscriptBox["m", "B"]}]]}], "=", RowBox[{ RowBox[{ RowBox[{"u", ".", SuperscriptBox["\[Alpha]", RowBox[{"r", ".", SubscriptBox["m", "B"]}]]}], "/", SuperscriptBox["\[Alpha]", RowBox[{"r", ".", SubscriptBox["m", "B"]}]]}], "=", "u"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ StyleBox["Example 8.5 (Part 2)", FontWeight->"Bold", FontSlant->"Plain"], "\nWe continue with ", ButtonBox["Example 8.5", BaseStyle->"Hyperlink", ButtonData:>"ExamDiscr Key Exch"], ". We have ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "197", " "}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", "2"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "B"], "=", "82"}], TraditionalForm]]], " as public parameters.\nThe number ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "B"], "=", "111"}], TraditionalForm]]], " is only known to Bob." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "Suppose that Alice wants to encrypt message u=123 for Bob.\nLet ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", "191"}], TraditionalForm]]], " be the random integer chosen by Alice (it is coprime with ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], ").\n", "Alice", " sends the pair (", Cell[BoxData[ FormBox[ RowBox[{"R", ",", "S"}], TraditionalForm]]], ") computed by" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "197"}], ";", RowBox[{"a", "=", "2"}], ";", RowBox[{"cB", "=", "82"}], ";", RowBox[{"r", "=", RowBox[{"RandomInteger", "[", RowBox[{"{", RowBox[{"0", ",", RowBox[{"p", "-", "2"}]}], "}"}], "]"}]}]}], "\n", RowBox[{ RowBox[{"u", "=", "123"}], ";", RowBox[{"R", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", "r", ",", "197"}], "]"}]}]}], "\n", RowBox[{"S", "=", RowBox[{"Mod", "[", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"cB", ",", "r", ",", "197"}], "]"}], " ", "u"}], ",", "p"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["191"], "Output"], Cell[BoxData["117"], "Output"], Cell[BoxData["175"], "Output"], Cell[TextData[{ "To decrypt, Bob computes ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", "/", SuperscriptBox["R", SubscriptBox["m", "B"]]}], " ", "mod", " ", "p"}], TraditionalForm]]], " with his own secret ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "B"], "=", "111"}], TraditionalForm]]], " by means of the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["Mod", BaseStyle->"RefGuideLink"], " and ", ButtonBox["PowerMod", BaseStyle->"RefGuideLink"], ". Note that ", Cell[BoxData[ FormBox[ RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{"-", "1"}], ",", "p"}], "]"}], TraditionalForm]]], " computes the multiplicative inverse of ", Cell[BoxData[ FormBox["a", TraditionalForm]]], " modulo ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " (see ", ButtonBox["Subsection A.3.3", BaseStyle->"Hyperlink", ButtonData:>"SubsAppA lin congr"], ")." }], "Text", GeneratedCell->True, FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"mB", "=", "111"}], ";"}], "\n", RowBox[{"Mod", "[", RowBox[{ RowBox[{"S", "*", RowBox[{"PowerMod", "[", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"R", ",", "mB", ",", "p"}], "]"}], ",", RowBox[{"-", "1"}], ",", "p"}], "]"}]}], ",", "p"}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData["123"], "Output"], Cell[TextData[{ "An eavesdropper can not determine ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " from ", Cell[BoxData[ FormBox["R", TraditionalForm]]], ", since we assume that taking logarithms is intractable. For that reason, \ this eavesdropper is not able to divide out ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "B"], ")"}], "r"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " (to obtain the secret ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ")." }], "Text"] }, Open ]], Cell[CellGroupData[{ Cell["ElGamal's Signature Scheme", "Subsubsection", CellTags->"SubsubsDiscr ElGamal signature"], Cell[TextData[StyleBox["Signing of a message by Alice.", FontVariations->{"Underline"->True}]], "Text"], Cell[TextData[{ "Suppose that Alice wants to send a signed message ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " to Bob. The message is again represented by an integer ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", RowBox[{"p", "-", "2"}]}], "}"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Alice selects a random integer ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " that is relatively prime to ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], " and computes ", Cell[BoxData[ FormBox[ RowBox[{"R", "=", SuperscriptBox["\[Alpha]", "r"]}], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "Next, ", "Alice", " uses her secret exponent ", Cell[BoxData[ FormBox[ SubscriptBox["m", "A"], TraditionalForm]]], " to compute ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " satisfying" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{ RowBox[{ SubscriptBox["m", "A"], "R"}], "+", RowBox[{ RowBox[{"r", ".", "S"}], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "p"}], "-", "1"}], ")"}]}]}]}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormDiscr ElGamal"], Cell[TextData[{ "Alice", " can use the extended version of ", ButtonBox["Euclid's Algorithm", BaseStyle->"Hyperlink", ButtonData:>"AlgAppA ExtEuclidAlg"], " to find ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " efficiently." }], "Text", GeneratedCell->True], Cell[TextData[{ "Alice sends to Bob the triple ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"u", ",", "R", ",", "S"}], ")"}], TraditionalForm]]], ", where the pair ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", "S"}], ")"}], TraditionalForm]]], " serves as signature on the message ", Cell[BoxData[ FormBox["u", TraditionalForm]]], "." }], "Text"], Cell[TextData[StyleBox["Verification of the signature by Bob.", FontVariations->{"Underline"->True}]], "Text"], Cell[TextData[{ "Bob receives the signature ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"R", ",", "S"}], ")"}], TraditionalForm]]], " together with the message ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ". \nBob checks this signature by verifying that" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "u"], "\[Congruent]", RowBox[{ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "A"], ")"}], "R"], SuperscriptBox["R", "S"], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell["This relation has to hold because by (8.2)", "Text"], Cell[TextData[{ " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "u"], "\[Congruent]", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ SubscriptBox["m", "A"], "R"}]], ".", SuperscriptBox["\[Alpha]", RowBox[{"r", ".", "S"}]]}], "\[Congruent]", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", SubscriptBox["m", "A"]], ")"}], "R"], ".", SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", "r"], ")"}], "S"]}], "\[Congruent]"}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "A"], ")"}], "R"], ".", SuperscriptBox["R", "S"]}], TraditionalForm]]], " ", Cell[BoxData[ FormBox[ RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ StyleBox["Example 8.5 (Part 3)", FontWeight->"Bold", FontSlant->"Plain"], "\nContinuing with ", ButtonBox["Example 8.5", BaseStyle->"Hyperlink", ButtonData:>"ExamDiscr Key Exch"], ", where we have ", Cell[BoxData[ FormBox[ RowBox[{"p", "=", "197", " "}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", "2"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "A"], "=", "178"}], TraditionalForm]]], " as public parameters.\nThe number ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "A"], "=", "56"}], TraditionalForm]]], " is only known to Alice." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "Suppose that Alice wants to sign message u=123 for Bob.\nLet ", Cell[BoxData[ FormBox[ RowBox[{"r", "=", "97"}], TraditionalForm]]], " be the random integer chosen by Alice (it is coprime with ", Cell[BoxData[ FormBox[ RowBox[{"p", "-", "1"}], TraditionalForm]]], ").\n", "Alice", " computes " }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"p", "=", "197"}], ";", RowBox[{"a", "=", "2"}], ";", RowBox[{"mA", "=", "56"}], ";", RowBox[{"r", "=", "97"}], ";", RowBox[{"u", "=", "123"}], ";", RowBox[{"S", "=."}], ";", RowBox[{"R", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", "r", ",", "197"}], "]"}]}]}], "\n", RowBox[{"S", "/.", RowBox[{ RowBox[{"Solve", "[", RowBox[{ RowBox[{"{", RowBox[{ RowBox[{ RowBox[{"r", " ", "S"}], "==", RowBox[{"u", "-", RowBox[{"mA", " ", "*", "R"}]}]}], ",", RowBox[{"Modulus", "==", RowBox[{"p", "-", "1"}]}]}], "}"}], ",", "S"}], "]"}], "[", RowBox[{"[", "1", "]"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["97"], "Output"], Cell[BoxData["98"], "Output"], Cell[BoxData["171"], "Output"], Cell[TextData[{ "to find the signature ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"(", RowBox[{"R", ",", "S"}], ")"}], "=", RowBox[{"(", RowBox[{"98", ",", "171"}], ")"}]}], TraditionalForm]]], " that she adds to her message ", Cell[BoxData[ FormBox["u", TraditionalForm]]], ".\nBob checks this signature by verifying ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", "u"], "\[Congruent]", RowBox[{ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "A"], ")"}], "R"], SuperscriptBox["R", "S"], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ":" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"cA", "=", "178"}], ";", RowBox[{"R", "=", "98"}], ";", RowBox[{"S", "=", "171"}], ";"}], "\n", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"a", ",", "u", ",", "p"}], "]"}], "==", RowBox[{"Mod", "[", " ", RowBox[{ RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"cA", ",", "R", ",", "p"}], "]"}], "*", RowBox[{"PowerMod", "[", RowBox[{"R", ",", "S", ",", "p"}], "]"}]}], ",", "p"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["True"], "Output"] }, Open ]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tFurther Variations" }], "Subsection", CellTags->"SubsDiscr Variations on ElGamal"], Cell[TextData[{ "In the ElGamal scheme, the signature on a message ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " consists of two parts: ", Cell[BoxData[ FormBox["R", TraditionalForm]]], ", being ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", "r"], TraditionalForm]]], " with ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " random, and ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", being a solution of ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{ RowBox[{ SubscriptBox["m", "A"], "R"}], "+", RowBox[{ RowBox[{"r", ".", "S"}], " ", RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "p"}], "-", "1"}], ")"}]}]}]}], TraditionalForm]]], " (see ", ButtonBox["(8.2)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr ElGamal"], "). Of course one can vary this so-called ", StyleBox["signature equation", FontSlant->"Italic"], "." }], "Text", TextAlignment->Left, TextJustification->0, CellTags->"DefDiscr sign eq."], Cell[TextData[{ "The next three variations do exactly this. The reader that wants to know \ more about them than is presented below is referred to ", ButtonBox["[MeOoV96]", BaseStyle->"Hyperlink", ButtonData:>"RefMeOV97"], " and ", ButtonBox["[Schne96]", BaseStyle->"Hyperlink", ButtonData:>"RefSchne96"], "." }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell["Digital Signature Standard", "Subsubsection", CellTags->"SubsubsDisc DSS"], Cell[TextData[{ "In the ", StyleBox["Digital Signature Standard", FontSlant->"Italic"], " (see ", ButtonBox["[FIPS94]", BaseStyle->"Hyperlink", ButtonData:>"RefFips94"], ") the signature equation is given by:" }], "Text", GeneratedCell->True, CellTags->"DefDiscr DSS"], Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"r", ".", "S"}], "\[Congruent]", RowBox[{"u", "+", RowBox[{ RowBox[{ SubscriptBox["m", "A"], " ", ".", "R"}], " ", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "p"}], "-", "1"}], ")"}], "."}]}]}]}], TextForm]], "DisplayFormula"], Cell[TextData[{ "The system is designed by the National Security Agency (NSA) and adopted as \ standard by the National Institute of Standards and Technology (NIST).\nDSS \ adds two sequences of 160 bits each to the end of a document as guarantee of \ its authenticity and integrity. To this end, it first compresses the document \ to a sequence of 160 bits by means of a cryptographically secure ", ButtonBox["hash function", BaseStyle->"Hyperlink", ButtonData:>"SectAuth Hash"], " (see Section 13.2), called the ", StyleBox["Secure Hash Algorithm", FontSlant->"Italic"], " (see ", ButtonBox["[MeOoV96]", BaseStyle->"Hyperlink", ButtonData:>"RefMeOV97"], ", $9.53 and ", ButtonBox["[Schne96]", BaseStyle->"Hyperlink", ButtonData:>"RefSchne96"], ")." }], "Text", GeneratedCell->True, CellTags->"DefDiscr SHA"], Cell["\<\ To set up the system the following joint parameters are chosen:\ \>", "Text"], Cell[TextData[{ "i)\tA prime number ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " whose binary representation has a word length that is divisible by \t\t64 \ and lies between 512 and 1024.\nii)\tA prime factor ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " of ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " that is 160 bits long.\niii)\tA value ", Cell[BoxData[ FormBox[ RowBox[{"g", "=", RowBox[{"(", RowBox[{ SuperscriptBox["h", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], " ", "mod", " ", "q"}], ")"}]}], TraditionalForm]]], ", where ", Cell[BoxData[ FormBox["h", TraditionalForm]]], " is less than ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], ", such that ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " is greater than 1." }], "Text", CellMargins->{{Inherited, 0.3125}, {Inherited, Inherited}}], Cell[TextData[{ "Since ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["g", "p"], "\[Congruent]", SuperscriptBox["h", RowBox[{"q", "-", "1"}]], "\[Congruent]", RowBox[{"1", " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], " by ", ButtonBox["Fermat's Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fermat"], " (A.15), it follows that the ", ButtonBox["multiplicative order", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Cyclic Group"], " of ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " divides ", Cell[BoxData[ FormBox["p", TraditionalForm]]], ". On the other ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " is prime, therefore, ", Cell[BoxData[ FormBox["g", TraditionalForm]]], " has multiplicative order ", Cell[BoxData[ FormBox["p", TraditionalForm]]], " itself (see also ", ButtonBox["Theorem B.5", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Order Subgroup"], ")." }], "Text", GeneratedCell->True], Cell[TextData[{ "Each user ", Cell[BoxData[ FormBox["U", TraditionalForm]]], " chooses a secret exponent ", Cell[BoxData[ FormBox[ SubscriptBox["m", "U"], TraditionalForm]]], ", computes ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "U"], "\[Congruent]", RowBox[{ SuperscriptBox["g", SubscriptBox["m", "U"]], " ", RowBox[{"(", RowBox[{"mod", " ", "q"}], ")"}]}]}], TraditionalForm]]], " and makes ", Cell[BoxData[ FormBox[ SubscriptBox["c", "U"], TraditionalForm]]], " public." }], "Text"], Cell[TextData[{ "When Alice wants to sign a file ", Cell[BoxData[ FormBox["M", TraditionalForm]]], ", she first computes its 160 digits long hash value ", Cell[BoxData[ FormBox[ RowBox[{"h", "(", "M", ")"}], TraditionalForm]]], " with the Secure Hash Algorithm. \nNext, she chooses a random number ", Cell[BoxData[ FormBox[ RowBox[{"r", "<", "p"}], TraditionalForm]]], " and adds as signature to ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " the numbers ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", both of length 160, defined by:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"R", "=", RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{ SuperscriptBox["g", "r"], " ", "mod", " ", "q"}], ")"}], " ", "mod", " ", "p"}], ")"}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"S", ".", "r"}], "=", RowBox[{"(", RowBox[{ RowBox[{"h", "(", "M", ")"}], "+", RowBox[{ SubscriptBox["m", "A"], "R", " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "A receiver can check the authenticity and integrity of the received message \ ", Cell[BoxData[ FormBox["M", TraditionalForm]]], " by evaluating:" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"w", "\[Congruent]", RowBox[{ SuperscriptBox["S", RowBox[{"-", "1"}]], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"x", "\[Congruent]", RowBox[{ RowBox[{ RowBox[{"h", "(", "M", ")"}], ".", "w"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"y", "\[Congruent]", RowBox[{ RowBox[{"R", ".", "w"}], " ", RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}]}]}], TraditionalForm]]], ",\n", Cell[BoxData[ FormBox[ RowBox[{"U", "=", RowBox[{"(", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ SuperscriptBox["g", "x"], ".", SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "A"], ")"}], "y"]}], " ", "mod", " ", "q"}], ")"}], " ", "mod", " ", "p"}], ")"}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox[ RowBox[{"R", "=", "U"}], TraditionalForm]]], " the document will be accepted as genuine and coming from Alice. By a \ simple substitution one can verify that the relation ", Cell[BoxData[ FormBox[ RowBox[{"u", "=", "U"}], TraditionalForm]]], " indeed should hold. " }], "Text"], Cell[TextData[{ "The function of the random number ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " above is to hide the secret key of Alice.\n" }], "Text"] }, Closed]], Cell[CellGroupData[{ Cell["Schnorr's Signature Scheme", "Subsubsection", CellTags->"SubsubsDisc Schnorr"], Cell[TextData[{ "In ", StyleBox["Schnorr", FontSlant->"Italic"], "'s signature scheme ", ButtonBox["[Schno90]", BaseStyle->"Hyperlink", ButtonData:>"RefSchno90"], " the ", ButtonBox["signature equation", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr ElGamal"], " (see (8.2) is given by:" }], "Text", GeneratedCell->True, CellTags->"DefDiscr Schnorr"], Cell[BoxData[ FormBox[ RowBox[{"S", "\[Congruent]", RowBox[{ RowBox[{ SubscriptBox["m", "A"], "R"}], "+", RowBox[{"r", " ", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "p"}], "-", "1"}], ")"}], "."}]}]}]}], TextForm]], "DisplayFormula"] }, Closed]], Cell[CellGroupData[{ Cell["The Nyberg-Rueppel Signature Scheme", "Subsubsection", CellTags->"SubsubsDisc Nyberg"], Cell[TextData[{ "The ", StyleBox["Nyberg-Rueppel", FontSlant->"Italic"], " signature scheme ", ButtonBox["[NybR93]", BaseStyle->"Hyperlink", ButtonData:>"RefNybR93"], " is slightly different from the others. Here, ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " is defined by " }], "Text", GeneratedCell->True, CellTags->"DefDiscr Nyberg-R"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"R", "=", RowBox[{"u", ".", SuperscriptBox["\[Alpha]", "r"]}]}], TraditionalForm]]], " with ", Cell[BoxData[ FormBox["r", TraditionalForm]]], " random." }], "DisplayFormula"], Cell[TextData[{ "The ", ButtonBox["signature equation", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr ElGamal"], " (see (8.2) is given by:" }], "Text"], Cell[BoxData[ FormBox[ RowBox[{"S", "\[Congruent]", RowBox[{ RowBox[{ SubscriptBox["m", "A"], "R"}], "-", RowBox[{"r", " ", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{"mod", " ", "p"}], "-", "1"}], ")"}], "."}]}]}]}], TextForm]], "DisplayFormula"], Cell[TextData[{ "In the Nyberg-Rueppel scheme, the message ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " can be retrieved directly from ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["S", TraditionalForm]]], ", since" }], "Text"], Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{"R", ".", SuperscriptBox["\[Alpha]", RowBox[{"-", "r"}]]}], "\[Congruent]", " ", RowBox[{"R", ".", SuperscriptBox["\[Alpha]", RowBox[{"S", "-", RowBox[{ SubscriptBox["m", "A"], "R"}]}]]}], "\[Congruent]", RowBox[{ RowBox[{"R", ".", SuperscriptBox["\[Alpha]", "S"]}], "/", SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", SubscriptBox["m", "A"]], ")"}], "R"]}], "\[Congruent]", RowBox[{ RowBox[{ RowBox[{"R", ".", SuperscriptBox["\[Alpha]", "S"]}], "/", SuperscriptBox[ SubscriptBox["c", "A"], "R"]}], " ", RowBox[{ RowBox[{"(", RowBox[{"mod", " ", "p"}], ")"}], "."}]}]}], TextForm]], "DisplayFormula"], Cell[TextData[{ "If ", Cell[BoxData[ FormBox["u", TraditionalForm]]], " is not the hash value of a much longer other file, this feature is an \ advantage, because only ", Cell[BoxData[ FormBox["R", TraditionalForm]]], " and ", Cell[BoxData[ FormBox["S", TraditionalForm]]], " have to be sent." }], "Text"] }, Closed]] }, Closed]] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], "\tHow to Take Discrete Logarithms" }], "Section", CellTags->"SectDiscr How to take logs"], Cell[TextData[{ "When one has to take a logarithm in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", the most obvious way to reduce the workload is to factor ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " in prime power factors, compute the logarithm for each of these factors, \ and then combine the results with the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19). In Subsection 8.3.1, this method will be demonstrated for a \ particular technique." }], "Text", GeneratedCell->True], Cell[TextData[{ "As we have said before, discrete logarithm based systems are often set up \ in a multiplicative subgroup of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ". This generalization does not affect the methods that will be discussed in \ this section." }], "Text"], Cell[CellGroupData[{ Cell[TextData[{ CounterBox["Chapter"], ".", CounterBox["Section"], ".", CounterBox["Subsection"], "\tThe Pohlig-Hellman Algorithm" }], "Subsection", CellTags->"AlgDiscr Pohlig Hellman"], Cell[TextData[{ "In ", ButtonBox["[PohH78]", BaseStyle->"Hyperlink", ButtonData:>"RefPohH78"], ", Pohlig and Hellman demonstrate that discrete logarithms can be taken much \ faster than in ", Cell[BoxData[ FormBox[ SqrtBox["q"], TraditionalForm]]], " operations, if ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " has only small prime divisors. We shall first demonstrate this method for \ two special cases." }], "Text", GeneratedCell->True], Cell[CellGroupData[{ Cell[TextData[{ "Special Case: ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", SuperscriptBox["2", "n"]}], TraditionalForm]]] }], "Subsubsection", CellTags->"CaseDiscr q-1 is 2power"], Cell[TextData[{ "Examples of prime numbers that are a power of 2 plus one are given by ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "17"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "257"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", RowBox[{ SuperscriptBox["2", "16"], "+", "1"}]}], TraditionalForm]]], "." }], "Text"], Cell[CellGroupData[{ Cell[BoxData[ RowBox[{ RowBox[{"n", "=", "16"}], ";", RowBox[{"PrimeQ", "[", RowBox[{ SuperscriptBox["2", "n"], "+", "1"}], "]"}]}]], "Input"], Cell[BoxData["True"], "Output"] }, Closed]], Cell[TextData[{ "So, let \[Alpha] be a primitive element in a finite field ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ". The problem is to find ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"0", "\[LessEqual]", "m", "\[LessEqual]", RowBox[{"q", "-", "2"}]}], TraditionalForm]]], ", satisfying ", ButtonBox["(8.1)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], " for given value of ", Cell[BoxData[ FormBox["c", TraditionalForm]]], ". \nLet ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "0"], ",", SubscriptBox["m", "1"], ",", "\[Ellipsis]", ",", SubscriptBox["m", RowBox[{"n", "-", "1"}]]}], TraditionalForm]]], " be the binary representation of the unknown ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ", i.e." }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ SubscriptBox["m", "0"], "+", RowBox[{ SubscriptBox["m", "1"], "2"}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["m", RowBox[{"n", "-", "1"}]], SuperscriptBox["2", RowBox[{"n", "-", "1"}]]}]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["m", "i"], "\[Element]", RowBox[{"{", RowBox[{"0", ",", "1"}], "}"}]}], ",", " ", RowBox[{"0", "\[LessEqual]", "i", "\[LessEqual]", RowBox[{"n", "-", "1"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Of course, it suffices to compute the unknown ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], "'s. Since \[Alpha] is a ", ButtonBox["primitive element", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], " of ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], " we know (see also ", ButtonBox["Theorem B.21", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Cyclic Struc"], ") that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"q", "-", "1"}]], "=", "1"}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["a", "i"], "\[NotEqual]", "1"}], TraditionalForm]]], " for ", Cell[BoxData[ FormBox[ RowBox[{"0", "<", "i", "<", RowBox[{"q", "-", "1"}]}], TraditionalForm]]], ".\nIt also follows that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "=", RowBox[{"-", "1"}]}], TraditionalForm]]], ", because the square of ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]]], " is 1, while ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "\[NotEqual]", "1"}], TraditionalForm]]], ". (We also use here that by ", ButtonBox["Theorem B.15", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB n Zeros"], " the quadratic equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["x", "2"], "=", "1"}], TraditionalForm]]], " has ", Cell[BoxData[ FormBox[ RowBox[{"\[PlusMinus]", "1"}], TraditionalForm]]], " as only roots.) Hence" }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", "m"], ")"}], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"m", "(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "=", SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{ SubscriptBox["m", "0"], "+", RowBox[{ SubscriptBox["m", "1"], "2"}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["m", RowBox[{"n", "-", "1"}]], SuperscriptBox["2", RowBox[{"n", "-", "1"}]]}]}], ")"}], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]}]]}]}]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ OverscriptBox["=", RowBox[{"\[Alpha]", " ", RowBox[{"prim", "."}]}]], SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{ SubscriptBox["m", "0"], "(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]]}], "=", RowBox[{"{", GridBox[{ { RowBox[{ RowBox[{"+", "1"}], ","}]}, { RowBox[{ RowBox[{"-", "1"}], ","}]} }]}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["m", "0"]}], "=", "0"}], ","}]}, { RowBox[{ RowBox[{"if", " ", SubscriptBox["m", "0"]}], "=", "1."}]} }], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "Therefore, the evaluation of ", Cell[BoxData[ FormBox[ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], TraditionalForm]]], " in ", Cell[BoxData[ FormBox[ RowBox[{"GF", "(", "q", ")"}], TraditionalForm]]], ", which takes at most ", Cell[BoxData[ FormBox[ RowBox[{"2.", RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], "q"}], "\[RightCeiling]"}]}], TraditionalForm]]], " multiplications, as we have seen in ", ButtonBox["Subsection 8.1.1", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr 2 log q"], "), yields ", Cell[BoxData[ FormBox[ SubscriptBox["m", "0"], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "Compute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", RowBox[{"c", ".", SuperscriptBox["\[Alpha]", RowBox[{"-", SubscriptBox["m", "0"]}]]}]}], TraditionalForm]]], ". Now ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], "can be determined in the same way as above from" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SubsuperscriptBox["c", "1", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "4"}]], "=", SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{ RowBox[{ SubscriptBox["m", "1"], "2"}], "+", RowBox[{ SubscriptBox["m", "2"], SuperscriptBox["2", "2"]}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["m", RowBox[{"n", "-", "1"}]], SuperscriptBox["2", RowBox[{"n", "-", "1"}]]}]}], ")"}], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "4"}]}]]}], TraditionalForm]]], "\n\n\t", Cell[BoxData[ FormBox[ RowBox[{"=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{ SubscriptBox["m", "1"], "(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], "=", RowBox[{"{", GridBox[{ { RowBox[{"1", ","}]}, { RowBox[{ RowBox[{"-", "1"}], ","}]} }]}]}]}], TraditionalForm]]], "\t\t", Cell[BoxData[ FormBox[GridBox[{ { RowBox[{ RowBox[{ RowBox[{"if", " ", SubscriptBox["m", "1"]}], "=", "0"}], ","}]}, { RowBox[{ RowBox[{"if", " ", SubscriptBox["m", "1"]}], "=", "1."}]} }], TraditionalForm]]] }], "DisplayFormula"], Cell[TextData[{ "Compute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "=", RowBox[{ RowBox[{ SubscriptBox["c", "1"], ".", SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"-", "2"}], SubscriptBox["m", "1"]}]]}], "=", RowBox[{"c", ".", SuperscriptBox["\[Alpha]", RowBox[{"-", RowBox[{"(", RowBox[{ SubscriptBox["m", "0"], "+", RowBox[{ SubscriptBox["m", "1"], "2"}]}], ")"}]}]]}]}]}], TraditionalForm]]], " and determine ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " from ", Cell[BoxData[ FormBox[ SuperscriptBox[ RowBox[{"(", SubscriptBox["c", "2"], ")"}], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "8"}]], TraditionalForm]]], ". Repeat this process until also ", Cell[BoxData[ FormBox[ SubscriptBox["m", RowBox[{"n", "-", "1"}]], TraditionalForm]]], "(and thus ", Cell[BoxData[ FormBox["m", TraditionalForm]]], ") has been determined." }], "Text"], Cell[TextData[{ "The above algorithm finds ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from ", Cell[BoxData[ FormBox["c", TraditionalForm]]], " in at most" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ RowBox[{"n", ".", RowBox[{"(", RowBox[{ RowBox[{"2.", RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], "q"}], "\[RightCeiling]"}]}], "+", "2"}], ")"}]}], "\[TildeTilde]", RowBox[{"2.", SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["log", "2"], "q"}], ")"}], "2"]}], "\[TildeTilde]", RowBox[{"2", SuperscriptBox["n", "2"]}]}], ","}], TraditionalForm]]]], "DisplayFormula"], Cell[TextData[{ "operations, where the term +2 comes from the evaluation of the ", Cell[BoxData[ FormBox[ SubscriptBox["c", "i"], TraditionalForm]]], "'s (in the ", Cell[BoxData[ FormBox["i", TraditionalForm]]], "-th step ", Cell[BoxData[ FormBox[ SuperscriptBox["\[Alpha]", RowBox[{"-", SuperscriptBox["2", RowBox[{"i", "-", "1"}]]}]], TraditionalForm]]], " has to be squared and the outcome may or may not have to be multiplied to ", Cell[BoxData[ FormBox[ SubscriptBox["c", RowBox[{"i", "-", "1"}]], TraditionalForm]]], ")." }], "Text"], Cell[TextData[{ "Comparing with ", ButtonBox["Table 8.1", BaseStyle->"Hyperlink", ButtonData:>"TableDiscr discrep"], ", we observe that in the current case (i.e. ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", RowBox[{ SuperscriptBox["2", "n"], "+", "1"}]}], TraditionalForm]]], "), the discrepancy between the computational complexity of using the \ Diffie-Hellman scheme (one exponentiation involving ", Cell[BoxData[ FormBox[ RowBox[{"2", "n"}], TraditionalForm]]], " multiplications) and breaking it (", Cell[BoxData[ FormBox[ RowBox[{"\[TildeTilde]", RowBox[{"2", SuperscriptBox["n", "2"]}]}], TraditionalForm]]], " multiplications) is quadratic, which is not significant enough to make the \ system secure." }], "Text"], Cell[TextData[{ StyleBox["Remark", FontWeight->"Bold"], ":\nNote that when ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", RowBox[{"s", SuperscriptBox[".2", "t"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox["s", TraditionalForm]]], " odd, the ", Cell[BoxData[ FormBox["t", TraditionalForm]]], " least significant bits of ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " can be found in exactly the same way." }], "Text", CellTags->"RemDiscr Pohlig"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"], "\nConsider the equation ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["3", "m"], "\[Congruent]", RowBox[{"7", " ", "mod", " ", "17."}]}], TraditionalForm]]], " So, ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "17"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"\[Alpha]", "=", "3"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "7"}], TraditionalForm]]], ". Note that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"-", "1"}]], "=", "6"}], TraditionalForm]]], ".\nWriting ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ SubscriptBox["m", "0"], "+", RowBox[{"2", SubscriptBox["m", "1"]}], "+", RowBox[{"4", SubscriptBox["m", "2"]}], "+", RowBox[{"8", SubscriptBox["m", "3"]}]}]}], TraditionalForm]]], ", we find ", Cell[BoxData[ FormBox[ SubscriptBox["m", "0"], TraditionalForm]]], " by evaluating ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}]], " ", "mod", " ", "q"}], TraditionalForm]]], "." }], "Example"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"7", ",", "8", ",", "17"}], "]"}]], "Input"], Cell[BoxData["16"], "Output"], Cell[TextData[{ "Since this is ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], " we know that ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "0"], "=", "1"}], TraditionalForm]]], ". Compute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "\[Congruent]", RowBox[{"c", "/", "3"}], "\[Congruent]", RowBox[{"6.", "c"}], "\[Congruent]", RowBox[{"8", " ", "mod", " ", "17"}]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], " can be found from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ SubscriptBox["c", "1"], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "4"}]], " ", "mod", " ", "q"}], TraditionalForm]]] }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"8", ",", "4", ",", "17"}], "]"}]], "Input"], Cell[BoxData["16"], "Output"], Cell[TextData[{ "Again this is ", Cell[BoxData[ FormBox[ RowBox[{"-", "1"}], TraditionalForm]]], ", so ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "1"], "=", "1"}], TraditionalForm]]], ". Compute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "2"], "\[Congruent]", RowBox[{ SubscriptBox["c", "1"], "/", SuperscriptBox["3", "2"]}], "\[Congruent]", RowBox[{ SuperscriptBox["6", "2"], ".", SubscriptBox["c", "1"]}], "\[Congruent]", RowBox[{"16", " ", "mod", " ", "17"}]}], TraditionalForm]]], ". Then ", Cell[BoxData[ FormBox[ SubscriptBox["m", "2"], TraditionalForm]]], " can be found from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ SubscriptBox["c", "2"], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "8"}]], " ", "mod", " ", "q"}], TraditionalForm]]] }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"16", ",", "2", ",", "17"}], "]"}]], "Input"], Cell[BoxData["1"], "Output"], Cell[TextData[{ "Since the outcome is 1, we have ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "2"], "=", "0"}], TraditionalForm]]], ". So, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "3"], "=", SubscriptBox["c", "2"]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ SubscriptBox["m", "3"], TraditionalForm]]], " can be found from ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ SubscriptBox["c", "3"], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "16"}]], " ", "mod", " ", "q"}], TraditionalForm]]] }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"16", ",", "1", ",", "17"}], "]"}]], "Input"], Cell[BoxData["16"], "Output"], Cell[TextData[{ "We now also have ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["m", "3"], "=", "1"}], TraditionalForm]]], " and thus ", Cell[BoxData[ FormBox[ RowBox[{"m", "=", RowBox[{ RowBox[{ SuperscriptBox["1.2", "0"], "+", SuperscriptBox["1.2", "1"], "+", SuperscriptBox["0.2", "2"], "+", SuperscriptBox["1.2", "3"]}], "=", "11"}]}], TraditionalForm]]], ". We can check this with:" }], "Text", FontSlant->"Italic"], Cell[BoxData[ RowBox[{"PowerMod", "[", RowBox[{"3", ",", "11", ",", "17"}], "]"}]], "Input"] }, Open ]], Cell[CellGroupData[{ Cell[TextData[{ "General Case: ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " has only small prime factors" }], "Subsubsection", CellTags->"CaseDiscr small powers"], Cell[TextData[{ "Let ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", RowBox[{ UnderoverscriptBox["\[Product]", RowBox[{"i", "=", "1"}], "k"], SuperscriptBox[ SubscriptBox["p", "i"], SubscriptBox["n", "i"]]}]}], TraditionalForm]]], ", where the ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], "'s are different primes and the exponents ", Cell[BoxData[ FormBox[ SubscriptBox["n", "i"], TraditionalForm]]], " are strictly positive (see the ", ButtonBox["Fundamental Theorem in Number Theory", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Fundamental"], ", Thm. A.6). We assume that all ", Cell[BoxData[ FormBox[ SubscriptBox["p", "i"], TraditionalForm]]], "'s are small. Later we shall say precisely what we mean by that." }], "Text", GeneratedCell->True], Cell[TextData[{ "Instead of solving ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " from (8.1) directly, we shall determine" }], "Text"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"(", "i", ")"}]], "\[Congruent]", RowBox[{"m", " ", RowBox[{"(", RowBox[{"mod", " ", SuperscriptBox[ SubscriptBox["p", "i"], SubscriptBox["n", "i"]]}], ")"}]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "k"}], TraditionalForm]]], "." }], "NumberedEquation", CellTags->"FormDiscr m^(i)"], Cell[TextData[{ "With the ", ButtonBox["Chinese Remainder Theorem", BaseStyle->"Hyperlink", ButtonData:>"TheoAppA Chinese RT"], " (Thm. A.19) one can compute ", Cell[BoxData[ FormBox["m", TraditionalForm]]], " efficiently from these ", Cell[BoxData[ FormBox[ SuperscriptBox["m", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "'s.\nTo determine ", Cell[BoxData[ FormBox[ SuperscriptBox["m", RowBox[{"(", "1", ")"}]], TraditionalForm]]], " (the others ", Cell[BoxData[ FormBox[ SuperscriptBox["m", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "'s can be found in the same way) we write it in its ", Cell[BoxData[ FormBox[ SubscriptBox["p", "1"], TraditionalForm]]], "-ary representation. For the sake of convenience we drop all the sub- and \ superscripts referring to the ", Cell[BoxData[ FormBox[ RowBox[{"i", "=", "1"}], TraditionalForm]]], " case. " }], "Text", GeneratedCell->True], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"(", "1", ")"}]], "=", RowBox[{ SubscriptBox["m", "0"], "+", RowBox[{ SubscriptBox["m", "1"], "p"}], "+", "\[Ellipsis]", "+", RowBox[{ SubscriptBox["m", RowBox[{"n", "-", "1"}]], SuperscriptBox["p", RowBox[{"n", "-", "1"}]]}]}]}], TraditionalForm]]], ",\t", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ SubscriptBox["m", "l"], "\[Element]", RowBox[{"{", RowBox[{"0", ",", "1", ",", "\[Ellipsis]", ",", RowBox[{"p", "-", "1"}]}], "}"}]}], ",", " ", RowBox[{"0", "\[LessEqual]", "l", "\[LessEqual]", RowBox[{"n", "-", "1"}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "Similarly to the ", ButtonBox["Special Case", BaseStyle->"Hyperlink", ButtonData:>"CaseDiscr q-1 is 2power"], " (", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"k", "=", "1"}], ",", " ", RowBox[{"p", "=", "2"}]}], TraditionalForm]]], "), we will find the coefficients ", Cell[BoxData[ FormBox[ SubscriptBox["m", "i"], TraditionalForm]]], " by single exponentiations.\nCoefficient ", Cell[BoxData[ FormBox[ SubscriptBox["m", "0"], TraditionalForm]]], " can be found by evaluating ", Cell[BoxData[ FormBox[ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], TraditionalForm]]], ". From ", ButtonBox["Theorem B.21", BaseStyle->"Hyperlink", ButtonData:>"TheoAppB Cyclic Struc"], " it follows that ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], ")"}], "p"], "=", "1"}], TraditionalForm]]], ", which implies that ", Cell[BoxData[ FormBox[ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], TraditionalForm]]], " is a ", ButtonBox["p-th root of unity", BaseStyle->"Hyperlink", ButtonData:>"DefAppB Prim El"], ". " }], "Text", GeneratedCell->True], Cell[TextData[{ "Define the primitive ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-th root of unity \[Omega] by ", Cell[BoxData[ FormBox[ RowBox[{"\[Omega]", "=", SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]]}], TraditionalForm]]], " and make a ", StyleBox["table", FontSlant->"Italic"], " of ", Cell[BoxData[ FormBox[ RowBox[{"1", ",", "\[Omega]", ",", SuperscriptBox["\[Omega]", "2"], ",", "\[Ellipsis]", ",", SuperscriptBox["\[Omega]", RowBox[{"p", "-", "1"}]]}], TraditionalForm]]], ". Then, because ", Cell[BoxData[ FormBox[ RowBox[{"m", "\[Congruent]", RowBox[{ SuperscriptBox["m", RowBox[{"(", "1", ")"}]], " ", "mod", " ", SuperscriptBox["p", "n"]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"(", "1", ")"}]], "\[Congruent]"}], TraditionalForm], SubscriptBox["m", "0"], " ", "mod", " ", "p"}], TraditionalForm]]], ", we have" }], "Text", CellTags->"DefDiscr Table PH"], Cell[TextData[{ Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], "=", RowBox[{ SuperscriptBox[ RowBox[{"(", SuperscriptBox["\[Alpha]", "m"], ")"}], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{"m", "(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{ SuperscriptBox["m", RowBox[{"(", "1", ")"}]], "(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], "=", RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{ RowBox[{ SubscriptBox["m", "0"], "(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], "=", SuperscriptBox["\[Omega]", SubscriptBox["m", "0"]]}]}]}]}]}], TraditionalForm]]], "." }], "DisplayFormula"], Cell[TextData[{ "So, a simple table lookup of ", Cell[BoxData[ FormBox[ SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "p"}]], TraditionalForm]]], " will yield ", Cell[BoxData[ FormBox[ SubscriptBox["m", "0"], TraditionalForm]]], ". " }], "Text"], Cell[TextData[{ "To determine ", Cell[BoxData[ FormBox[ SubscriptBox["m", "1"], TraditionalForm]]], ", we first compute ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["c", "1"], "=", RowBox[{"c", ".", SuperscriptBox["\[Alpha]", RowBox[{"-", SubscriptBox["m", "0"]}]]}]}], TraditionalForm]]], " and then evaluate ", Cell[BoxData[ FormBox[ SuperscriptBox[ SubscriptBox["c", "1"], RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", SuperscriptBox["p", "2"]}]], TraditionalForm]]], ", etc., until ", Cell[BoxData[ FormBox[ SuperscriptBox["m", RowBox[{"(", "1", ")"}]], TraditionalForm]]], " has been determined. Similar calculations have to be made to determine the \ other ", Cell[BoxData[ FormBox[ SuperscriptBox["m", RowBox[{"(", "i", ")"}]], TraditionalForm]]], "'s. " }], "Text"], Cell[TextData[{ "For this algorithm, we have to make tables of the powers of the primitive ", Cell[BoxData[ FormBox["p", TraditionalForm]]], "-th roots of unity for all the prime factors of ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], ".\nThe values of these factors have to be small enough to be able to store \ them." }], "Text"], Cell[TextData[{ "Each time that we want to take a logarithm the algorithm will have to take ", Cell[BoxData[ FormBox[ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["n", "i"]}], TraditionalForm]]], " exponentiations, therefore, the algorithm involves" }], "Text"], Cell[TextData[Cell[BoxData[ FormBox[ RowBox[{ RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "k"], RowBox[{"2.", RowBox[{ RowBox[{"\[LeftCeiling]", RowBox[{ SubscriptBox["log", "2"], "q"}], "\[RightCeiling]"}], ".", SubscriptBox["n", "i"]}]}]}], "\[TildeTilde]", RowBox[{"2.", SubscriptBox["log", "2"], RowBox[{"q", ".", RowBox[{"(", RowBox[{ UnderoverscriptBox["\[Sum]", RowBox[{"i", "=", "1"}], "k"], SubscriptBox["n", "i"]}], ")"}]}]}], "\[LessEqual]", RowBox[{"2", SuperscriptBox[ RowBox[{"(", RowBox[{ SubscriptBox["log", "2"], "q"}], ")"}], "2"]}]}], TraditionalForm]]]], "DisplayFormula"], Cell["\<\ operations, if we forget about the lower order terms. Again we have a \ quadratic relation between using the Diffie-Hellman key-exchange system and \ breaking it.\ \>", "Text"] }, Closed]], Cell[CellGroupData[{ Cell["An Example of the Pohlig-Hellman Algorithm", "Subsubsection", CellTags->"CaseDiscr Exam P-H"], Cell[TextData[{ StyleBox["Example ", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Chapter"], FontWeight->"Bold", FontSlant->"Plain"], StyleBox[".", FontWeight->"Bold", FontSlant->"Plain"], StyleBox[ CounterBox["Example"], FontWeight->"Bold", FontSlant->"Plain"] }], "Example"], Cell[TextData[{ "Consider Equation ", ButtonBox["(8.1)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], " with ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "8101"}], TraditionalForm]]], ", primitive element \[Alpha]=6." }], "Text", FontSlant->"Italic"], Cell[TextData[{ "Note that ", Cell[BoxData[ FormBox["q", TraditionalForm]]], " is a prime number, so ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"GF", "(", "q", ")"}], "=", SubscriptBox["\[DoubleStruckCapitalZ]", "8101"]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ StyleBox["Preliminary Calculations", FontVariations->{"Underline"->True}], ". " }], "Text"], Cell[TextData[{ "First of all we factor ", Cell[BoxData[ FormBox[ RowBox[{"q", "-", "1"}], TraditionalForm]]], " and compute the multiplicative inverse of 6 modulo 8101 with the ", StyleBox["Mathematica", FontSlant->"Italic"], " functions ", ButtonBox["FactorInteger", BaseStyle->"RefGuideLink"], " and ", ButtonBox["PowerMod", BaseStyle->"RefGuideLink"], "." }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"q", "=", "8101"}], ";", RowBox[{"a", "=", "6"}], ";", RowBox[{"FactorInteger", "[", RowBox[{"q", "-", "1"}], "]"}]}], "\n", RowBox[{"x", " ", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{"-", "1"}], ",", "q"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{ RowBox[{"{", RowBox[{"2", ",", "2"}], "}"}], ",", RowBox[{"{", RowBox[{"3", ",", "4"}], "}"}], ",", RowBox[{"{", RowBox[{"5", ",", "2"}], "}"}]}], "}"}]], "Output"], Cell[BoxData["6751"], "Output"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ RowBox[{"q", "-", "1"}], "=", RowBox[{ SuperscriptBox["2", "2"], SuperscriptBox[".3", "4"], SuperscriptBox[".5", "2"]}]}], TraditionalForm]]], " and ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["\[Alpha]", RowBox[{"-", "1"}]], "=", "6751"}], TraditionalForm]]], ".\nNext we use the PowerMod function again to calculate the primitive 2-nd, \ 3-rd and 5-th roots of unity: ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Omega]", "1"], "=", RowBox[{ SuperscriptBox["6", RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", "2"}]], "=", SuperscriptBox["6", "4050"]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Omega]", "2"], "=", RowBox[{ SuperscriptBox["6", RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", "3"}]], "=", SuperscriptBox["6", "5883"]}]}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Omega]", "3"], "=", RowBox[{ SuperscriptBox["6", RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", "5"}]], "=", SuperscriptBox["6", "1620"]}]}], TraditionalForm]]], ":" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"q", "=", "8101"}], ";", RowBox[{"a", "=", "6"}], ";", RowBox[{"Om1", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}], ",", "q"}], "]"}]}]}], "\n", RowBox[{"Om2", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "3"}], ",", "q"}], "]"}]}], "\n", RowBox[{"Om3", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "5"}], ",", "q"}], "]"}]}]}], "Input", GeneratedCell->True], Cell[BoxData["8100"], "Output"], Cell[BoxData["5883"], "Output"], Cell[BoxData["3547"], "Output"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Omega]", "1"], "=", "8100"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Omega]", "2"], "=", "5883"}], TraditionalForm]]], ", and ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["\[Omega]", "3"], "=", "3547"}], TraditionalForm]]], ". With the ", ButtonBox["Table", BaseStyle->"RefGuideLink"], " function we make the following three tables:" }], "Text", FontSlant->"Italic"], Cell[BoxData[{ RowBox[{ RowBox[{"q", "=", "8101"}], ";", RowBox[{"a", "=", "6"}], ";", RowBox[{"Om1", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "2"}], ",", "q"}], "]"}]}], ";", RowBox[{"Om2", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "3"}], ",", "q"}], "]"}]}], ";", RowBox[{"Om3", "=", RowBox[{"PowerMod", "[", RowBox[{"a", ",", RowBox[{ RowBox[{"(", RowBox[{"q", "-", "1"}], ")"}], "/", "5"}], ",", "q"}], "]"}]}], ";", RowBox[{"Table", "[", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"Om1", ",", "i", ",", "q"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "1"}], "}"}]}], "]"}]}], "\n", RowBox[{"Table", "[", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"Om2", ",", "i", ",", "q"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "2"}], "}"}]}], "]"}], "\n", RowBox[{"Table", "[", RowBox[{ RowBox[{"PowerMod", "[", RowBox[{"Om3", ",", "i", ",", "q"}], "]"}], ",", RowBox[{"{", RowBox[{"i", ",", "0", ",", "4"}], "}"}]}], "]"}]}], "Input", GeneratedCell->True], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "8100"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "5883", ",", "2217"}], "}"}]], "Output"], Cell[BoxData[ RowBox[{"{", RowBox[{"1", ",", "3547", ",", "356", ",", "7077", ",", "5221"}], "}"}]], "Output"], Cell["Hence, we have tables", "Text", FontSlant->"Italic"], Cell[BoxData[GridBox[{ { StyleBox[ RowBox[{ SubscriptBox["p", "1"], "=", "2"}], FontWeight->"Bold"], "i", "0", "1"}, {" ", SuperscriptBox[ RowBox[{"(", SubscriptBox["\[Omega]", "1"], ")"}], "i"], "1", "8100"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell[BoxData[GridBox[{ { StyleBox[ RowBox[{ SubscriptBox["p", "2"], "=", "3"}], FontWeight->"Bold"], "i", "0", "1", "2"}, {" ", SuperscriptBox[ RowBox[{"(", SubscriptBox["\[Omega]", "2"], ")"}], "i"], "1", "5883", "2217"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell[BoxData[GridBox[{ { StyleBox[ RowBox[{ SubscriptBox["p", "3"], "=", "5"}], FontWeight->"Bold"], "i", "0", "1", "2", "3", "4"}, {" ", SuperscriptBox[ RowBox[{"(", SubscriptBox["\[Omega]", "3"], ")"}], "i"], "1", "3547", "356", "7077", "5221"} }, GridBoxDividers->{ "Columns" -> {{True}}, "ColumnsIndexed" -> {}, "Rows" -> {{True}}, "RowsIndexed" -> {}}]], "DisplayFormula"], Cell["\<\ The preliminary work for the Chinese Remainder Theorem consists of solving \ the following three systems of linear congruence relations:\ \>", "Text", FontSlant->"Italic"], Cell[TextData[Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->Infinity], GridBox[{ { RowBox[{"u", "\[Congruent]", "1"}], RowBox[{"(", RowBox[{"mod", " ", "4"}], ")"}]}, { RowBox[{"u", "\[Congruent]", "0"}], RowBox[{"(", RowBox[{"mod", " ", "81"}], ")"}]}, { RowBox[{"u", "\[Congruent]", "0"}], RowBox[{"(", RowBox[{"mod", " ", "25"}], ")"}]} }]}]], TextJustification->1]], "DisplayFormula"], Cell[TextData[Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->Infinity], GridBox[{ { RowBox[{"v", "\[Congruent]", "0"}], RowBox[{"(", RowBox[{"mod", " ", "4"}], ")"}]}, { RowBox[{"v", "\[Congruent]", "1"}], RowBox[{"(", RowBox[{"mod", " ", "81"}], ")"}]}, { RowBox[{"v", "\[Congruent]", "0"}], RowBox[{"(", RowBox[{"mod", " ", "25"}], ")"}]} }]}]], TextJustification->1]], "DisplayFormula"], Cell[TextData[Cell[BoxData[ RowBox[{ StyleBox["{", SpanMaxSize->Infinity], GridBox[{ { RowBox[{"w", "\[Congruent]", "0"}], RowBox[{"(", RowBox[{"mod", " ", "4"}], ")"}]}, { RowBox[{"w", "\[Congruent]", "0"}], RowBox[{"(", RowBox[{"mod", " ", "81"}], ")"}]}, { RowBox[{"w", "\[Congruent]", "1"}], RowBox[{"(", RowBox[{"mod", " ", "25"}], ")"}]} }]}]], TextJustification->1]], "DisplayFormula"], Cell[TextData[{ "These three systems can be solved with the ", StyleBox["Mathematica", FontSlant->"Italic"], " function ", ButtonBox["ChineseRemainderTheorem", BaseStyle->"RefGuideLink"], " for which we first have to load the package ", ButtonBox["NumberTheory`NumberTheoryFunctions`", BaseStyle->"AddOnsLink"] }], "Text", FontSlant->"Italic"], Cell["<True], Cell[BoxData[{ RowBox[{"u", "=", RowBox[{"ChineseRemainderTheorem", "[", RowBox[{ RowBox[{"{", RowBox[{"1", ",", "0", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "81", ",", "25"}], "}"}]}], "]"}]}], "\n", RowBox[{"v", "=", RowBox[{"ChineseRemainderTheorem", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "1", ",", "0"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "81", ",", "25"}], "}"}]}], "]"}]}], "\n", RowBox[{"w", "=", RowBox[{"ChineseRemainderTheorem", "[", RowBox[{ RowBox[{"{", RowBox[{"0", ",", "0", ",", "1"}], "}"}], ",", RowBox[{"{", RowBox[{"4", ",", "81", ",", "25"}], "}"}]}], "]"}]}]}], "Input"], Cell[BoxData["2025"], "Output"], Cell[BoxData["6400"], "Output"], Cell[BoxData["7776"], "Output"], Cell[TextData[{ "So, ", Cell[BoxData[ FormBox[ RowBox[{"u", "\[Congruent]", RowBox[{"2025", " ", RowBox[{"(", RowBox[{"mod", " ", "8100"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"v", "\[Congruent]", RowBox[{"6400", " ", RowBox[{"(", RowBox[{"mod", " ", "8100"}], ")"}]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"w", "\[Congruent]", RowBox[{"7776", " ", RowBox[{"(", RowBox[{"mod", " ", "8100"}], ")"}]}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell["This concludes the preliminary work.", "Text", FontSlant->"Italic"], Cell[TextData[{ StyleBox["Solving Equation ", FontVariations->{"Underline"->True}], StyleBox[ButtonBox["(8.1)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr c=a^m"], FontVariations->{"Underline"->True}], StyleBox[" for:", FontVariations->{"Underline"->True}], " ", Cell[BoxData[ FormBox[ RowBox[{"c", "=", "7531"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"q", "=", "8101"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[{ "We first determine ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"(", "i", ")"}]], "=", RowBox[{"m", " ", "mod", " ", SuperscriptBox[ SubscriptBox["p", "i"], SubscriptBox["n", "i"]]}]}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{"1", "\[LessEqual]", "i", "\[LessEqual]", "3"}], TraditionalForm]]], ", as defined in ", ButtonBox["(8.2)", BaseStyle->"Hyperlink", ButtonData:>"FormDiscr m^(i)"], ", with the method explained above. Of course, the tables that we just made \ have to be consulted at each step." }], "Text", FontSlant->"Italic"], Cell[TextData[{ StyleBox["First prime factor", FontSlant->"Italic"], ": \t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "1"], "=", "2"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "1"], "=", "2"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[Cell[BoxData[GridBox[{ { RowBox[{ RowBox[{"c", "="}], " "}], " ", RowBox[{ RowBox[{"=", "7531"}], ","}], SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", "2"}]], RowBox[{ RowBox[{"=", "8100"}], ","}], RowBox[{ RowBox[{ SubscriptBox["m", "0"], "=", "1"}], ","}]}, { RowBox[{ SubscriptBox["c", "1"], "="}], RowBox[{"c", ".", SuperscriptBox["\[Alpha]", RowBox[{"-", "1"}]]}], RowBox[{ RowBox[{"=", "8006"}], ","}], SuperscriptBox[ SubscriptBox["c", "1"], RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", SuperscriptBox["2", "2"]}]], RowBox[{ RowBox[{"=", "1"}], " ", ","}], RowBox[{ SubscriptBox["m", "1"], "=", "0."}]} }]]]], "DisplayFormula"], Cell[TextData[{ "Hence ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"(", "1", ")"}]], "=", RowBox[{ RowBox[{"1", "+", SuperscriptBox["0.2", "1"]}], "=", "1"}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ StyleBox["Second prime factor", FontSlant->"Italic"], ":\t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "2"], "=", "3"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "2"], "=", "4"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[Cell[BoxData[GridBox[{ { RowBox[{"c", "="}], " ", RowBox[{ RowBox[{"=", "7531"}], ","}], SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", "3"}]], RowBox[{ RowBox[{"=", "2217"}], ","}], RowBox[{ RowBox[{ SubscriptBox["m", "0"], "=", "2"}], ","}]}, { RowBox[{ SubscriptBox["c", "1"], "="}], RowBox[{"c", ".", SuperscriptBox["\[Alpha]", RowBox[{"-", "2"}]]}], RowBox[{ RowBox[{"=", "6735"}], ","}], SuperscriptBox[ SubscriptBox["c", "1"], RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", SuperscriptBox["3", "2"]}]], RowBox[{ RowBox[{"=", "1"}], " ", ","}], RowBox[{ RowBox[{ SubscriptBox["m", "1"], "=", "0"}], ","}]}, { RowBox[{ SubscriptBox["c", "2"], "="}], SubscriptBox["c", RowBox[{"1", " "}]], RowBox[{ RowBox[{"=", "6735"}], ","}], SuperscriptBox[ SubscriptBox["c", "2"], RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", SuperscriptBox["3", "3"]}]], RowBox[{ RowBox[{"=", "2217"}], ","}], RowBox[{ RowBox[{ SubscriptBox["m", "2"], "=", "2"}], ","}]}, { RowBox[{ SubscriptBox["c", "3"], "="}], RowBox[{ SubscriptBox["c", "2"], ".", SuperscriptBox["\[Alpha]", RowBox[{"-", SuperscriptBox["2.3", "2"]}]]}], RowBox[{ RowBox[{"=", "6992"}], ","}], SuperscriptBox[ SubscriptBox["c", "3"], RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", SuperscriptBox["3", "4"]}]], RowBox[{ RowBox[{"=", "5883"}], ","}], RowBox[{ SubscriptBox["m", "3"], "=", "1."}]} }]]]], "DisplayFormula"], Cell[TextData[{ "Hence ", Cell[BoxData[ FormBox[ RowBox[{ SuperscriptBox["m", RowBox[{"(", "2", ")"}]], "=", RowBox[{ RowBox[{"2", "+", SuperscriptBox["0.3", "1"], "+", SuperscriptBox["2.3", "2"], "+", SuperscriptBox["1.3", "3"]}], "=", "47"}]}], TraditionalForm]]], "." }], "Text", FontSlant->"Italic"], Cell[TextData[{ StyleBox["Third prime factor", FontSlant->"Italic"], ": \t\t", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["p", "3"], "=", "5"}], TraditionalForm]]], ", ", Cell[BoxData[ FormBox[ RowBox[{ SubscriptBox["n", "3"], "=", "2"}], TraditionalForm]]], "." }], "Text"], Cell[TextData[Cell[BoxData[GridBox[{ { RowBox[{ RowBox[{"c", "="}], " "}], " ", RowBox[{ RowBox[{"=", "7531"}], ","}], SuperscriptBox["c", RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", "5"}]], RowBox[{ RowBox[{"=", "5221"}], ","}], RowBox[{ RowBox[{ SubscriptBox["m", "0"], "=", "4"}], ","}]}, { RowBox[{ SubscriptBox["c", "1"], "="}], RowBox[{"c", ".", SuperscriptBox["\[Alpha]", RowBox[{"-", "4"}]]}], RowBox[{ RowBox[{"=", "7613"}], ","}], SuperscriptBox[ SubscriptBox["c", "1"], RowBox[{ RowBox[{"(", RowBox[{"8101", "-", "1"}], ")"}], "/", SuperscriptBox["5", "2"]}]], RowBox[{ RowBox[{"=", "356"}], " ", ","}], RowBox[{ SubscriptBox["m", "1"], "=", "2."}]} }]]]], "DisplayFormula"], Cell[TextData[{ "Hence ", Cell[BoxData[ FormBox[ Row